From ca3f749196c835ec6e4266bfdd42fdd84901f18c Mon Sep 17 00:00:00 2001 From: Peter Droste Date: Sat, 15 Oct 2022 13:02:03 +0200 Subject: [PATCH] Release version 6.4.0 Bugfix Issue #89 Bugfix Issue #86 Bugfix Issue #85 Bugfix Issue #84 Bugfix Issue #83 Bugfix Issue #79 Bugfix Issue #78 Bugfix Issue #77 Bugfix Issue #75 --- README.md | 30 +- antfiles/generator.xml | 4 +- autotestlib/general.h | 16 + autotestlib/injectedcode.cpp | 8 + autotestlib/injectedcode.h | 8 +- autotestlib/propertyandmethodcalltest.cpp | 189 +- autotestlib/propertyandmethodcalltest.h | 58 +- autotestlib/typesystem-autotestlib.xml | 2 +- build_autotests.xml | 123 +- generator/abstractmetabuilder.cpp | 951 ++- generator/abstractmetabuilder.h | 8 +- generator/abstractmetalang.cpp | 177 +- generator/abstractmetalang.h | 39 +- generator/cppgenerator.cpp | 186 +- generator/cppheadergenerator.cpp | 8 +- generator/cppimplgenerator.cpp | 992 +-- generator/cppimplgenerator.h | 2 +- generator/docindex/docindexreader.cpp | 63 +- generator/docindex/docnamespace.cpp | 9 + generator/docindex/docnamespace.h | 1 + generator/generator.cpp | 4 +- generator/generatorset.h | 2 +- generator/generatorsetjava.cpp | 5 +- generator/generatorsetjava.h | 2 +- generator/javagenerator.cpp | 208 +- generator/metainfogenerator.cpp | 195 +- generator/parser/binder.cpp | 11 +- generator/parser/codemodel.cpp | 11 +- generator/parser/codemodel.h | 14 +- generator/parser/compiler_utils.cpp | 1 + generator/parser/lexer.cpp | 1 + generator/parser/parser.cpp | 1 + generator/parser/rpp/pp-qt-configuration | 1 + generator/parser/type_compiler.cpp | 10 +- generator/parser/type_compiler.h | 2 + generator/preprocesshandler.cpp | 8 +- generator/targets/build_all.xml | 1 + generator/targets/build_test.xml | 2 + generator/targets/generator_predefinitions.h | 4 - generator/targets/qtjambi_masterinclude.h | 26 + generator/typesystem/handler.cpp | 1929 ++--- generator/typesystem/handler.h | 9 +- .../java/typesystem_concurrent-java.java | 5731 ++++++++++++--- .../typesystem/java/typesystem_core-java.java | 4041 ++++++++--- .../typesystem/java/typesystem_gui-java.java | 154 +- .../java/typesystem_httpserver-java.java | 1582 +++-- .../java/typesystem_opengl-java.java | 8 - .../typesystem/java/typesystem_qml-java.java | 206 +- .../java/typesystem_qt3dcore-java.java | 26 +- .../java/typesystem_remoteobjects-java.java | 110 +- .../typesystem/java/typesystem_test-java.java | 729 +- .../java/typesystem_webenginequick-java.java | 4 +- generator/typesystem/modification.h | 72 +- generator/typesystem/typedatabase.cpp | 13 +- generator/typesystem/typedatabase.h | 5 + generator/typesystem/typeentry.cpp | 61 +- generator/typesystem/typeentry.h | 185 +- generator/typesystem/typesystem.cpp | 14 +- generator/typesystem/typesystem.h | 4 + .../xml/typesystem_activex-common.xml | 15 + .../xml/typesystem_bluetooth-common.xml | 2 + .../xml/typesystem_concurrent-common.xml | 30 +- .../xml/typesystem_concurrent-java.xml | 23 + .../typesystem/xml/typesystem_core-common.xml | 623 +- .../typesystem/xml/typesystem_core-java.xml | 1048 ++- .../typesystem_datavisualization-common.xml | 2 + .../typesystem/xml/typesystem_dbus-common.xml | 7 + .../xml/typesystem_designer-common.xml | 3 + .../typesystem/xml/typesystem_gui-common.xml | 69 +- .../typesystem/xml/typesystem_gui-java.xml | 79 +- .../typesystem/xml/typesystem_help-common.xml | 1 + .../xml/typesystem_httpserver-common.xml | 11 +- .../xml/typesystem_httpserver-java.xml | 31 + .../xml/typesystem_multimedia-common.xml | 6 + .../xml/typesystem_multimedia-java.xml | 5 +- .../typesystem_multimediawidgets-common.xml | 1 + .../xml/typesystem_network-common.xml | 11 +- .../typesystem/xml/typesystem_nfc-common.xml | 5 +- .../xml/typesystem_opengl-common.xml | 22 +- .../typesystem/xml/typesystem_opengl-java.xml | 5 - .../xml/typesystem_pdfwidgets-common.xml | 2 +- .../typesystem/xml/typesystem_qml-common.xml | 383 +- .../typesystem/xml/typesystem_qml-java.xml | 29 +- .../xml/typesystem_qt3dcore-common.xml | 13 +- .../xml/typesystem_qt3dcore-java.xml | 5 +- .../xml/typesystem_qt3drenderer-common.xml | 8 +- .../xml/typesystem_quick-common.xml | 55 +- .../typesystem/xml/typesystem_quick-java.xml | 130 +- .../xml/typesystem_quick3d-common.xml | 2 + .../xml/typesystem_quickcontrols2-common.xml | 1 + .../xml/typesystem_quicktest-common.xml | 39 + .../xml/typesystem_remoteobjects-common.xml | 94 +- .../xml/typesystem_remoteobjects-java.xml | 5 +- .../xml/typesystem_serialbus-common.xml | 17 +- .../xml/typesystem_serialbus-java.xml | 13 +- .../xml/typesystem_serialport-common.xml | 2 +- .../xml/typesystem_spatialaudio-common.xml | 64 + .../xml/typesystem_spatialaudio-java.xml | 52 + .../typesystem/xml/typesystem_test-common.xml | 36 +- .../typesystem/xml/typesystem_test-java.xml | 73 +- .../xml/typesystem_virtkey-common.xml | 1 + .../xml/typesystem_webenginecore-common.xml | 18 +- .../xml/typesystem_webenginecore-java.xml | 2 +- .../xml/typesystem_webenginewidgets-java.xml | 2 +- .../xml/typesystem_widgets-common.xml | 106 +- generator/wrapper.cpp | 6 +- releases.properties | 6 +- src/cpp/qtjambi/qtjambi_application.h | 8 +- src/cpp/qtjambi/qtjambi_containeraccess.cpp | 6 +- src/cpp/qtjambi/qtjambi_core.cpp | 342 +- src/cpp/qtjambi/qtjambi_core.h | 14 +- src/cpp/qtjambi/qtjambi_functions.cpp | 887 +-- src/cpp/qtjambi/qtjambi_jobjectwrapper.cpp | 1 - src/cpp/qtjambi/qtjambi_jobjectwrapper.h | 8 + src/cpp/qtjambi/qtjambi_qml.h | 2 + src/cpp/qtjambi/qtjambi_registry.cpp | 1510 +++- src/cpp/qtjambi/qtjambi_registry_p.h | 54 + src/cpp/qtjambi/qtjambi_repository.cpp | 18 +- src/cpp/qtjambi/qtjambi_repository.h | 62 +- src/cpp/qtjambi/qtjambi_repository_p.h | 66 +- src/cpp/qtjambi/qtjambilink.cpp | 37 +- src/cpp/qtjambi/qtjambilink_p.h | 8 +- src/cpp/qtjambi/qtjambimetaobject.cpp | 322 +- src/cpp/qtjambi/qtjambimetaobject_p.h | 5 +- src/cpp/qtjambi/qtjambishell.cpp | 2 +- src/cpp/qtjambi/qtjambisignals.cpp | 327 +- src/cpp/qtjambi/qtjambitypemanager.cpp | 322 +- .../qtjambi_concurrent_repository.cpp | 9 +- .../qtjambi_concurrent_repository.h | 8 +- .../qtjambi_concurrent/qtjambiconcurrent.cpp | 6260 ++++++++--------- src/cpp/qtjambi_core/QHash_shell.cpp | 22 - src/cpp/qtjambi_core/qtjambi_core.pro | 3 +- .../qtjambi_core/qtjambi_core_repository.cpp | 10 - .../qtjambi_core/qtjambi_core_repository.h | 22 +- src/cpp/qtjambi_core/qtjambi_core_util.cpp | 541 +- src/cpp/qtjambi_core/qtjambi_core_variant.cpp | 285 - .../qtjambi_datavis3d_hashes.h | 2 + src/cpp/qtjambi_gui/qtjambi_gui_util.cpp | 123 +- .../qtjambi_httpserver/qtjambi_httpserver.cpp | 24 + src/cpp/qtjambi_modules.pri | 1 + .../qtjambi_opengl/qtjambi_opengl_util.cpp | 74 +- src/cpp/qtjambi_qml/qmlcreatorfunction.cpp | 11 +- src/cpp/qtjambi_qml/qmlcreatorfunction.h | 3 +- src/cpp/qtjambi_qml/qmlregistry.cpp | 2654 ++++--- src/cpp/qtjambi_qml/qtjambi_qml.h | 47 + src/cpp/qtjambi_qml/qtjambi_qml.pro | 1 + src/cpp/qtjambi_quick/QSGMetalTexture.mm | 11 + .../{qtjambi_qquick.cpp => qtjambi_quick.cpp} | 41 + src/cpp/qtjambi_quick/qtjambi_quick.pro | 8 +- src/cpp/qtjambi_quick/qtjambi_quick_hashes.h | 2 + .../qtjambi_remoteobjects.cpp | 265 +- .../qtjambi_remoteobjects.h | 9 + .../qtjambi_remoteojects_repository.cpp | 3 + .../qtjambi_remoteojects_repository.h | 3 + .../qtjambi_serialbus/qtjambi_serialbus.cpp | 15 + .../qtjambi_spatialaudio.pro | 11 + src/cpp/qtjambi_test/qtjambi_test.cpp | 8 + src/cpp/qtjambi_test/qtjambi_test_util.h | 6 + .../io/qt/tools/ant/ForeachVersionTask.java | 2 + .../io/qt/tools/ant/InitializeBuildTask.java | 1 + .../qt/tools/ant/ModifyTestResultsTask.java | 9 +- .../qt/autotests/ApplicationInitializer.java | 18 +- .../autotest/io/qt/autotests/QtDBusPong.java | 3 +- .../io/qt/autotests/QtRemoteObjectsPong.java | 43 +- .../io/qt/autotests/TestConcurrent.java | 77 +- .../io/qt/autotests/TestConcurrentQt6.java | 38 + .../io/qt/autotests/TestConnections.java | 4 +- .../io/qt/autotests/TestContainers.java | 2 +- .../io/qt/autotests/TestDBusConnect.java | 21 +- .../qt/autotests/TestInitializationCore.java | 8 + .../qt/autotests/TestInitializationGui.java | 11 + .../TestInitializationHttpServer.java | 40 + .../TestInitializationMultimediaWidgets.java | 11 + .../autotests/TestInitializationOpenGL.java | 11 + .../TestInitializationOpenGLWidgets.java | 11 + .../TestInitializationPdfWidgets.java | 11 + .../TestInitializationQuickWidgets.java | 24 +- .../TestInitializationSpatialAudio.java | 40 + .../TestInitializationSvgWidgets.java | 11 + .../TestInitializationWebEngineWidgets.java | 18 + .../autotests/TestInitializationWidgets.java | 11 + .../io/qt/autotests/TestInjectedCode.java | 11 +- .../io/qt/autotests/TestInterfaces.java | 5 + .../autotests/TestMetaObjectQtMetaCast.java | 8 +- .../io/qt/autotests/TestMetaProgramming.java | 5 +- .../qt/autotests/TestMetaProgrammingQt6.java | 3 +- .../io/qt/autotests/TestMetaType.java | 69 +- .../io/qt/autotests/TestMetaTypeQt6.java | 407 ++ .../autotests/TestMultimediaCloneableQt6.java | 1 - .../autotests/TestPropertyAndMethodCall.java | 164 +- .../qt/autotests/TestQObjectPropertyQt6.java | 38 + .../autotest/io/qt/autotests/TestQThread.java | 6 +- .../io/qt/autotests/TestQVariant.java | 154 +- .../autotest/io/qt/autotests/TestQml.java | 6 +- .../io/qt/autotests/TestQmlPlugin.java | 1 - .../autotest/io/qt/autotests/TestQmlQt6.java | 268 +- .../qt/autotests/TestQuickPaintItemQt6.java | 35 +- .../qt/autotests/TestQuickTextureD3DQt6.java | 98 + .../autotests/TestQuickTextureMetalQt6.java | 97 + .../autotests/TestQuickTextureOpenGLQt6.java | 97 + .../autotests/TestQuickTextureVulkanQt6.java | 99 + .../io/qt/autotests/TestRemoteObjects.java | 231 +- .../io/qt/autotests/TestRetroHelper.java | 19 +- .../qt/autotests/TestSQLInjectedCodeQt5.java | 4 +- .../TestSignalSlotWithCustomTypes.java | 8 +- .../qt/autotests/TestSqlInjectedCodeQt6.java | 6 +- .../autotest/io/qt/autotests/TestTestlib.java | 88 +- .../io/qt/autotests/UnitTestInitializer.java | 46 +- .../qt/qtjambi/deployer/BundleGenerator.java | 25 +- .../qtjambi.spatialaudio/build.xml | 20 + .../qtjambi/Qt5/io/qt/core/QVariant.java | 1182 ---- .../qtjambi/Qt6/io/qt/core/QFuture.java | 24 + .../qtjambi/Qt6/io/qt/core/QProperty.java | 2 - .../Qt6/io/qt/core/QPropertyBinding.java | 10 +- .../qtjambi/Qt6/io/qt/core/QVariant.java | 1167 --- .../qt/internal/AbstractMetaObjectTools.java | 13 +- .../Retro/io/qt/internal/RetroHelper.java | 123 +- .../RetroJDK8/io/qt/internal/RetroHelper.java | 56 +- .../qtjambi/main/io/qt/InternalAccess.java | 25 +- .../io/qt/QPropertyDeclarationException.java | 41 + .../qtjambi/main/io/qt/QtAsGadget.java | 45 + .../qtjambi/main/io/qt/QtUtilities.java | 43 +- .../qtjambi/main/io/qt/core/QLogging.java | 31 + .../qtjambi/main/io/qt/core/QMetaObject.java | 8 +- .../main/io/qt/internal/MetaObjectTools.java | 184 +- .../io/qt/internal/NativeLibraryManager.java | 754 +- .../main/io/qt/internal/QtJambiInternal.java | 298 +- .../main/io/qt/internal/QtJambiPlugins.java | 16 + .../main/io/qt/internal/QtJambiResources.java | 2 +- src/java/qtjambi-plugins/plugins.xml | 3 +- .../io/qt/sql/jdbc/QJdbcSqlVariantUtil.java | 8 +- www/Android.md | 4 +- www/Characteristics-of-QtJambi.md | 39 +- www/How-to-bundle-Qt-libraries.md | 4 +- www/How-to-deploy-QtJambi-applications.md | 30 +- www/How-to-develop-Qt-in-Java.md | 53 +- www/Modules.md | 3138 +++++---- www/Whats-New.md | 30 +- 238 files changed, 29026 insertions(+), 16663 deletions(-) create mode 100644 generator/typesystem/xml/typesystem_spatialaudio-common.xml create mode 100644 generator/typesystem/xml/typesystem_spatialaudio-java.xml delete mode 100644 src/cpp/qtjambi_core/qtjambi_core_variant.cpp create mode 100644 src/cpp/qtjambi_qml/qtjambi_qml.h create mode 100644 src/cpp/qtjambi_quick/QSGMetalTexture.mm rename src/cpp/qtjambi_quick/{qtjambi_qquick.cpp => qtjambi_quick.cpp} (81%) create mode 100644 src/cpp/qtjambi_spatialaudio/qtjambi_spatialaudio.pro create mode 100644 src/java/autotest/io/qt/autotests/TestInitializationHttpServer.java create mode 100644 src/java/autotest/io/qt/autotests/TestInitializationSpatialAudio.java create mode 100644 src/java/autotest/io/qt/autotests/TestMetaTypeQt6.java create mode 100644 src/java/autotest/io/qt/autotests/TestQuickTextureD3DQt6.java create mode 100644 src/java/autotest/io/qt/autotests/TestQuickTextureMetalQt6.java create mode 100644 src/java/autotest/io/qt/autotests/TestQuickTextureOpenGLQt6.java create mode 100644 src/java/autotest/io/qt/autotests/TestQuickTextureVulkanQt6.java create mode 100644 src/java/qtjambi-modules/qtjambi.spatialaudio/build.xml delete mode 100644 src/java/qtjambi-modules/qtjambi/Qt5/io/qt/core/QVariant.java delete mode 100644 src/java/qtjambi-modules/qtjambi/Qt6/io/qt/core/QVariant.java create mode 100644 src/java/qtjambi-modules/qtjambi/main/io/qt/QPropertyDeclarationException.java create mode 100644 src/java/qtjambi-modules/qtjambi/main/io/qt/QtAsGadget.java diff --git a/README.md b/README.md index bee5bdec..14a0821d 100644 --- a/README.md +++ b/README.md @@ -55,7 +55,7 @@ This saves compilation time. `> set PATH=...\apache-ant-1.10.3\bin;%PATH%` -`> set QTDIR=C:\Qt\6.3.0\msvc2019_64` +`> set QTDIR=C:\Qt\6.4.0\msvc2019_64` #### Pre-Build Steps On Linux and macOS @@ -65,9 +65,9 @@ This saves compilation time. `> export JAVA_HOME_TARGET=path to your java jdk` -`> export QTDIR=/opt/Qt/6.3.0/gcc_64` on Linux +`> export QTDIR=/opt/Qt/6.4.0/gcc_64` on Linux -`> export QTDIR=/opt/Qt/6.3.0/macos` on macOS +`> export QTDIR=/opt/Qt/6.4.0/macos` on macOS #### Building Bindings @@ -100,7 +100,7 @@ to your project: $VERSION ``` -(exchange `$VERSION` either by `5.15.9`, `6.2.7` or by `6.3.4`). +(exchange `$VERSION` either by `5.15.10`, `6.2.8`, `6.3.5` or by `6.4.0`). Otherwise, download QtJambi JAR file from [Maven Central Repository](https://search.maven.org/artifact/io.qtjambi/qtjambi/). @@ -120,7 +120,7 @@ public class Test { Compile the file: ``` powershell -javac -cp qtjambi-6.3.4.jar Test.java +javac -cp qtjambi-6.4.0.jar Test.java ``` ### Execute Example @@ -132,16 +132,26 @@ Additionally, you need *Qt*. Use the [Qt installer](https://www.qt.io/download-q When running a QtJambi application you have to make the locations of Qt libraries known to Java. Therefore, use the PATH environment (LD_LIBRARY_PATH on Linux, DYLD_LIBRARY_PATH on macOS) -or the Java runtime property java.library.path. The example program can be executed this way: +or the Java runtime property java.library.path. +By default, on Windows Qt libraries are located in `bin` directory and on Linux and macOS in `lib` directory. +In case your Linux distribution provides Qt (of correct version) as system library you don't need to specify library path. -``` -java -cp qtjambi-6.3.4.jar;. -Djava.library.path=C:\Qt\6.3.1\msvc2019_64\bin Test +The example program can be executed this way on Windows: + +``` powershell +java -cp qtjambi-6.4.0.jar;. -Djava.library.path=C:\Qt\6.4.0\msvc2019_64\bin Test ``` -On macOS you additionally need to use the start parameter -XstartOnFirstThread and point to Qt `lib` folder and not `bin`, for example: +On Linux it looks this way: +``` bash +java -cp qtjambi-6.4.0.jar:. -Djava.library.path=/Qt/6.4.0/gcc_64/lib Test ``` -java -cp qtjambi-6.3.4.jar;. -Djava.library.path=/Users/max/Qt/6.2.3/macos/lib -XstartOnFirstThread Test + +On macOS you additionally need to use the start parameter -XstartOnFirstThread: + +``` bash +java -cp qtjambi-6.4.0.jar:. -Djava.library.path=/Qt/6.4.0/macos/lib -XstartOnFirstThread Test ``` In general, you can start learning how to use Qt in Java [as it is introduced for C++](https://doc.qt.io/qt-6/gettingstarted.html#create-your-first-applications). diff --git a/antfiles/generator.xml b/antfiles/generator.xml index fcdd5c1f..9ad6d79d 100644 --- a/antfiles/generator.xml +++ b/antfiles/generator.xml @@ -71,8 +71,7 @@ - + @@ -144,6 +143,7 @@ + diff --git a/autotestlib/general.h b/autotestlib/general.h index 02f757b2..a4a6f5cf 100644 --- a/autotestlib/general.h +++ b/autotestlib/general.h @@ -78,6 +78,22 @@ bool operator ==(const std::initializer_list& a,const std::initializer_listvulkanInstance(); +#else + Q_UNUSED(window) + return false; +#endif + } + #ifndef QTJAMBI_NO_WIDGETS static void callPaintCell(QCalendarWidget *w, QPainter *painter); static void callPaintCellNull(QCalendarWidget *w); diff --git a/autotestlib/injectedcode.cpp b/autotestlib/injectedcode.cpp index 31c73691..ed8394e8 100644 --- a/autotestlib/injectedcode.cpp +++ b/autotestlib/injectedcode.cpp @@ -191,3 +191,11 @@ QTJAMBI_REPOSITORY_DEFINE_CLASS(io/qt/widgets,QGraphicsItem$BlockedByModalPanelI } #endif } + +bool ImageIOHandlerSubclass::callRead(QImage *image) { + return read(image); +} + +bool ImageIOHandlerSubclass::read(QImage *image) { + return image != nullptr ? image->load(":io/qt/autotests/svgcards-example.png") : true; +} diff --git a/autotestlib/injectedcode.h b/autotestlib/injectedcode.h index 38edeebd..2eb34424 100644 --- a/autotestlib/injectedcode.h +++ b/autotestlib/injectedcode.h @@ -346,13 +346,9 @@ class ValidatorSubclass: public QValidator { class ImageIOHandlerSubclass: public QImageIOHandler { public: - bool callRead(QImage *image) { - return read(image); - } + bool callRead(QImage *image); - bool read(QImage *image) { - return image != nullptr ? image->load("classpath:io/qt/autotests/svgcards-example.png") : true; - } + bool read(QImage *image) override; }; #ifndef QTJAMBI_NO_SQL diff --git a/autotestlib/propertyandmethodcalltest.cpp b/autotestlib/propertyandmethodcalltest.cpp index b4ef63ac..7a3ea756 100644 --- a/autotestlib/propertyandmethodcalltest.cpp +++ b/autotestlib/propertyandmethodcalltest.cpp @@ -1,5 +1,85 @@ #include "propertyandmethodcalltest.h" +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) +#define QTJAMBI_ARG(Type, MetaType, arg) QArgument(#MetaType, arg) +#define QTJAMBI_RETURN_ARG(Type, MetaType, arg) QReturnArgument(#MetaType, arg) +#define TEST_METHOD(Type, MetaType, Method) "test"#Method"("#MetaType")" +#define PROPERTY_TEST(Type, MetaType, Property)\ + bool result = false;\ + if(qobj && qobj->metaObject()){\ + QString name(#Property);\ + name[0] = name[0].toLower();\ + QVariant variant = qobj->property(name.toLatin1());\ + if(variant.metaType()==QMetaType::fromName(#MetaType)){\ + const QMetaMethod testmethod = qobj->metaObject()->method(qobj->metaObject()->indexOfMethod(TEST_METHOD(Type, MetaType, Property)));\ + if(testmethod.isValid())\ + testmethod.invoke(qobj, Q_RETURN_ARG(bool, result), QGenericArgument(#MetaType, variant.constData()));\ + }\ + }\ + return result; + +#define GETMETHOD_TEST(Type, MetaType, Method)\ + bool result = false;\ + if(qobj){\ + QVariant variant(QMetaType::fromName(#MetaType));\ + const QMetaMethod qmethod = qobj->metaObject()->method(qobj->metaObject()->indexOfMethod("get"#Method"()"));\ + const QMetaMethod testmethod = qobj->metaObject()->method(qobj->metaObject()->indexOfMethod(TEST_METHOD(Type, MetaType, Method)));\ + if(qmethod.isValid())\ + qmethod.invoke(qobj, QGenericReturnArgument(#MetaType, variant.data()));\ + if(testmethod.isValid())\ + testmethod.invoke(qobj, Q_RETURN_ARG(bool, result), QGenericArgument(#MetaType, variant.constData()));\ + }\ + return result; +#else +#define QTJAMBI_ARG(Type, MetaType, arg) Q_ARG(Type, arg) +#define QTJAMBI_RETURN_ARG(Type, MetaType, arg) Q_RETURN_ARG(Type, arg) +#define TEST_METHOD(Type, MetaType, Method) "test"#Method"("#Type")" +#define PROPERTY_TEST(Type, MetaType, Property)\ + bool result = false;\ + if(qobj && qobj->metaObject()){\ + QString name(#Property);\ + name[0] = name[0].toLower();\ + QVariant pValue = qobj->property(name.toLatin1());\ + pValue.convert(QMetaType::fromType().id());\ + Type arg = pValue.value();\ + const QMetaMethod testmethod = qobj->metaObject()->method(qobj->metaObject()->indexOfMethod(TEST_METHOD(Type, MetaType, Property)));\ + if(testmethod.isValid())\ + testmethod.invoke(qobj, Q_RETURN_ARG(bool, result), Q_ARG(Type, arg));\ + }\ + return result; + +#define GETMETHOD_TEST(Type, MetaType, Method)\ + bool result = false;\ + if(qobj){\ + Type arg;\ + const QMetaMethod qmethod = qobj->metaObject()->method(qobj->metaObject()->indexOfMethod("get"#Method"()"));\ + const QMetaMethod testmethod = qobj->metaObject()->method(qobj->metaObject()->indexOfMethod(TEST_METHOD(Type, MetaType, Method)));\ + if(qmethod.isValid())\ + qmethod.invoke(qobj, QTJAMBI_RETURN_ARG(Type, MetaType, arg));\ + if(testmethod.isValid())\ + testmethod.invoke(qobj, Q_RETURN_ARG(bool, result), QTJAMBI_ARG(Type, MetaType, arg));\ + }\ + return result; + +#endif + +#define PTR_PROPERTY_TEST(Type, MetaType, Property)\ + bool result = false;\ + const QMetaObject* metaobject = qobj->metaObject();\ + if(qobj && metaobject){\ + QString name(#Property);\ + name[0] = name[0].toLower();\ + QVariant variant = qobj->property(name.toLatin1());\ + void** data = reinterpret_cast(variant.data());\ + if(data){\ + Type arg = reinterpret_cast(*data);\ + const QMetaMethod testmethod = metaobject->method(metaobject->indexOfMethod(TEST_METHOD(Type, MetaType, Property)));\ + if(testmethod.isValid())\ + testmethod.invoke(qobj, Q_RETURN_ARG(bool, result), QTJAMBI_ARG(Type, MetaType, arg));\ + }\ + }\ + return result; + PropertyAndMethodCallTest::PropertyAndMethodCallTest(QObject *parent) : QObject(parent), m_receivedEnum(), @@ -18,6 +98,19 @@ PropertyAndMethodCallTest::PropertyAndMethodCallTest(QObject *parent) : bool PropertyAndMethodCallTest::connectSignals(QObject* sender, bool useAnnotatedType){ bool connected = true; +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + connected &= bool(QtJambi::connect(sender, SIGNAL(customEnumChanged(io::qt::autotests::TestPropertyAndMethodCall::TestQObject::CustomEnum)), this, SLOT(receiveCustomEnum(JEnumWrapper)))); + connected &= bool(QtJambi::connect(sender, SIGNAL(customQtEnumChanged(io::qt::autotests::TestPropertyAndMethodCall::TestQObject::CustomQtEnum)), this, SLOT(receiveCustomQtEnum(JEnumWrapper)))); + connected &= bool(QtJambi::connect(sender, SIGNAL(customQtFlagsChanged(io::qt::autotests::TestPropertyAndMethodCall::TestQObject::CustomQtFlags)), this, SLOT(receiveQtFlags(JObjectWrapper)))); + connected &= bool(QObject::connect(sender, SIGNAL(customColorChanged(QColor)), this, SLOT(receiveColor(QColor)))); + if(useAnnotatedType) + connected &= bool(QObject::connect(sender, SIGNAL(customColorPtrChanged(QColor*)), this, SLOT(receiveColorPtr(QColor*)))); + connected &= bool(QtJambi::connect(sender, SIGNAL(customQtValueChanged(io::qt::autotests::TestPropertyAndMethodCall::TestQObject::CustomQtValue*)), this, SLOT(receiveCustomQtValue(QGraphicsItem*)))); + connected &= bool(QtJambi::connect(sender, SIGNAL(customQtInterfaceValueChanged(io::qt::autotests::TestPropertyAndMethodCall::TestQObject::CustomQtInterfaceValue*)), this, SLOT(receiveCustomQtInterfaceValue(QGraphicsItem*)))); + connected &= bool(QtJambi::connect(sender, SIGNAL(customJavaTypeChanged(io::qt::autotests::TestPropertyAndMethodCall::TestQObject::CustomJavaType*)), this, SLOT(receiveCustomJavaType(JObjectWrapper)))); + connected &= bool(QtJambi::connect(sender, SIGNAL(derivedQObjectChanged(io::qt::autotests::TestPropertyAndMethodCall::TestQObject::DerivedQObject*)), this, SLOT(receiveDerivedQObject(QObject*)))); + connected &= bool(QtJambi::connect(sender, SIGNAL(extendedColorChanged(io::qt::autotests::TestPropertyAndMethodCall::TestQObject::ExtendedColor)), this, SLOT(receiveExtendedColor(JObjectWrapper)))); +#else connected &= bool(QObject::connect(sender, SIGNAL(customEnumChanged(JEnumWrapper)), this, SLOT(receiveCustomEnum(JEnumWrapper)))); connected &= bool(QObject::connect(sender, SIGNAL(customQtEnumChanged(JEnumWrapper)), this, SLOT(receiveCustomQtEnum(JEnumWrapper)))); connected &= bool(QObject::connect(sender, SIGNAL(customQtFlagsChanged(JObjectWrapper)), this, SLOT(receiveQtFlags(JObjectWrapper)))); @@ -28,6 +121,8 @@ bool PropertyAndMethodCallTest::connectSignals(QObject* sender, bool useAnnotate connected &= bool(QObject::connect(sender, SIGNAL(customQtInterfaceValueChanged(QGraphicsItem*)), this, SLOT(receiveCustomQtInterfaceValue(QGraphicsItem*)))); connected &= bool(QObject::connect(sender, SIGNAL(customJavaTypeChanged(JObjectWrapper)), this, SLOT(receiveCustomJavaType(JObjectWrapper)))); connected &= bool(QObject::connect(sender, SIGNAL(derivedQObjectChanged(QObject*)), this, SLOT(receiveDerivedQObject(QObject*)))); + //connected &= bool(QObject::connect(sender, SIGNAL(extendedColorChanged(QColor)), this, SLOT(receiveExtendedColor(JObjectWrapper)))); +#endif return connected; } @@ -71,6 +166,10 @@ void PropertyAndMethodCallTest::receiveCustomJavaType(JObjectWrapper value){ m_receivedCustomJavaType = value; } +void PropertyAndMethodCallTest::receiveExtendedColor(JObjectWrapper value){ + m_receivedExtendedColor = value; +} + void PropertyAndMethodCallTest::receiveDerivedQObject(QObject* value){ m_receivedDerivedQObject = value; } @@ -115,85 +214,117 @@ QObject* PropertyAndMethodCallTest::receivedDerivedQObject(){ return m_receivedDerivedQObject; } +JObjectWrapper PropertyAndMethodCallTest::receivedExtendedColor(){ + return m_receivedExtendedColor; +} + JObjectWrapper PropertyAndMethodCallTest::receivedQtFlags(){ return m_receivedQtFlags; } bool PropertyAndMethodCallTest::testMethodCallNumber(QObject* qobj){ - GETMETHOD_TEST(JObjectWrapper, Number) + GETMETHOD_TEST(JObjectWrapper, java::lang::Number*, Number) } bool PropertyAndMethodCallTest::testMethodCallEnum(QObject* qobj){ - GETMETHOD_TEST(JEnumWrapper, Enum) +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + GETMETHOD_TEST(int, io::qt::autotests::TestPropertyAndMethodCall::TestQObject::CustomEnum, Enum) +#else + GETMETHOD_TEST(JEnumWrapper, io::qt::autotests::TestPropertyAndMethodCall::TestQObject::CustomEnum, Enum) +#endif } bool PropertyAndMethodCallTest::testMethodCallColor(QObject* qobj){ - GETMETHOD_TEST(QColor, Color) + GETMETHOD_TEST(QColor, QColor, Color) } bool PropertyAndMethodCallTest::testMethodCallColorPtr(QObject* qobj){ - GETMETHOD_TEST(QColor*, ColorPtr) + GETMETHOD_TEST(QColor*, QColor*, ColorPtr) } bool PropertyAndMethodCallTest::testMethodCallQtEnum(QObject* qobj){ - GETMETHOD_TEST(Qt::AspectRatioMode, QtEnum) + GETMETHOD_TEST(Qt::AspectRatioMode, Qt::AspectRatioMode, QtEnum) } bool PropertyAndMethodCallTest::testMethodCallDerivedQObject(QObject* qobj){ - GETMETHOD_TEST(QObject*, DerivedQObject) + GETMETHOD_TEST(QObject*, io::qt::autotests::TestPropertyAndMethodCall::TestQObject::DerivedQObject*, DerivedQObject) } bool PropertyAndMethodCallTest::testMethodCallCustomQtEnum(QObject* qobj){ - GETMETHOD_TEST(JEnumWrapper, CustomQtEnum) +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + GETMETHOD_TEST(int, io::qt::autotests::TestPropertyAndMethodCall::TestQObject::CustomQtEnum, CustomQtEnum) +#else + GETMETHOD_TEST(JEnumWrapper, io::qt::autotests::TestPropertyAndMethodCall::TestQObject::CustomQtEnum, CustomQtEnum) +#endif } bool PropertyAndMethodCallTest::testMethodCallQtFlags(QObject* qobj){ - GETMETHOD_TEST(Qt::Orientations, QtFlags) + GETMETHOD_TEST(Qt::Orientations, QFlags, QtFlags) } bool PropertyAndMethodCallTest::testMethodCallCustomQtValue(QObject* qobj){ - GETMETHOD_TEST(QGraphicsItem*, CustomQtValue) + GETMETHOD_TEST(QGraphicsItem*, io::qt::autotests::TestPropertyAndMethodCall::TestQObject::CustomQtValue*, CustomQtValue) } bool PropertyAndMethodCallTest::testMethodCallCustomQtInterfaceValue(QObject* qobj){ - GETMETHOD_TEST(QGraphicsItem*, CustomQtInterfaceValue) + GETMETHOD_TEST(QGraphicsItem*, io::qt::autotests::TestPropertyAndMethodCall::TestQObject::CustomQtInterfaceValue*, CustomQtInterfaceValue) } bool PropertyAndMethodCallTest::testMethodCallCustomJavaType(QObject* qobj){ - GETMETHOD_TEST(JObjectWrapper, CustomJavaType) + GETMETHOD_TEST(JObjectWrapper, io::qt::autotests::TestPropertyAndMethodCall::TestQObject::CustomJavaType*, CustomJavaType) } bool PropertyAndMethodCallTest::testMethodCallCustomQtEnum2(QObject* qobj){ - GETMETHOD_TEST(JEnumWrapper, CustomQtEnum2) +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + GETMETHOD_TEST(int, io::qt::autotests::TestPropertyAndMethodCall::TestQObject::CustomQtEnum, CustomQtEnum2) +#else + GETMETHOD_TEST(JEnumWrapper, io::qt::autotests::TestPropertyAndMethodCall::TestQObject::CustomQtEnum, CustomQtEnum2) +#endif +} + +bool PropertyAndMethodCallTest::testMethodCallExtendedColor(QObject* qobj){ +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + GETMETHOD_TEST(JObjectWrapper, io::qt::autotests::TestPropertyAndMethodCall::TestQObject::ExtendedColor, ExtendedColor) +#else + GETMETHOD_TEST(QColor, io::qt::autotests::TestPropertyAndMethodCall::TestQObject::ExtendedColor, ExtendedColor) +#endif } bool PropertyAndMethodCallTest::testFetchPropertyNumber(QObject* qobj){ - PROPERTY_TEST(JObjectWrapper, Number) + PROPERTY_TEST(JObjectWrapper, java::lang::Number*, Number) } bool PropertyAndMethodCallTest::testFetchPropertyEnum(QObject* qobj){ - PROPERTY_TEST(JEnumWrapper, CustomEnum) +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + PROPERTY_TEST(int, io::qt::autotests::TestPropertyAndMethodCall::TestQObject::CustomEnum, CustomEnum) +#else + PROPERTY_TEST(JEnumWrapper, io::qt::autotests::TestPropertyAndMethodCall::TestQObject::CustomEnum, CustomEnum) +#endif } bool PropertyAndMethodCallTest::testFetchPropertyColor(QObject* qobj){ - PROPERTY_TEST(QColor, Color) + PROPERTY_TEST(QColor, QColor, Color) } bool PropertyAndMethodCallTest::testFetchPropertyColorPtr(QObject* qobj){ - PROPERTY_TEST(QColor*, ColorPtr) + PROPERTY_TEST(QColor*, QColor*, ColorPtr) } bool PropertyAndMethodCallTest::testFetchPropertyQtEnum(QObject* qobj){ - PROPERTY_TEST(Qt::AspectRatioMode, QtEnum) + PROPERTY_TEST(Qt::AspectRatioMode, Qt::AspectRatioMode, QtEnum) } bool PropertyAndMethodCallTest::testFetchPropertyDerivedQObject(QObject* qobj){ - PROPERTY_TEST3(QObject*, DerivedQObject) + PROPERTY_TEST(QObject*, io::qt::autotests::TestPropertyAndMethodCall::TestQObject::DerivedQObject*, DerivedQObject) } bool PropertyAndMethodCallTest::testFetchPropertyCustomQtEnum(QObject* qobj){ - PROPERTY_TEST(JEnumWrapper, CustomQtEnum) +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + PROPERTY_TEST(int, io::qt::autotests::TestPropertyAndMethodCall::TestQObject::CustomQtEnum, CustomQtEnum) +#else + PROPERTY_TEST(JEnumWrapper, io::qt::autotests::TestPropertyAndMethodCall::TestQObject::CustomQtEnum, CustomQtEnum) +#endif } bool PropertyAndMethodCallTest::testFetchPropertyQtFlags(QObject* qobj){ @@ -209,19 +340,31 @@ bool PropertyAndMethodCallTest::testFetchPropertyQtFlags(QObject* qobj){ } bool PropertyAndMethodCallTest::testFetchPropertyCustomQtValue(QObject* qobj){ - PROPERTY_TEST3(QGraphicsItem*, CustomQtValue) + PROPERTY_TEST(QGraphicsItem*, io::qt::autotests::TestPropertyAndMethodCall::TestQObject::CustomQtValue*, CustomQtValue) +} + +bool PropertyAndMethodCallTest::testFetchPropertyExtendedColor(QObject* qobj){ +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + PROPERTY_TEST(JObjectWrapper, io::qt::autotests::TestPropertyAndMethodCall::TestQObject::ExtendedColor, ExtendedColor) +#else + PROPERTY_TEST(QColor, io::qt::autotests::TestPropertyAndMethodCall::TestQObject::ExtendedColor, ExtendedColor) +#endif } bool PropertyAndMethodCallTest::testFetchPropertyCustomQtInterfaceValue(QObject* qobj){ - PROPERTY_TEST3(QGraphicsItem*, CustomQtInterfaceValue) + PROPERTY_TEST(QGraphicsItem*, io::qt::autotests::TestPropertyAndMethodCall::TestQObject::CustomQtInterfaceValue*, CustomQtInterfaceValue) } bool PropertyAndMethodCallTest::testFetchPropertyCustomJavaType(QObject* qobj){ - PROPERTY_TEST(JObjectWrapper, CustomJavaType) + PROPERTY_TEST(JObjectWrapper, io::qt::autotests::TestPropertyAndMethodCall::TestQObject::CustomJavaType*, CustomJavaType) } bool PropertyAndMethodCallTest::testFetchPropertyCustomQtEnum2(QObject* qobj){ - PROPERTY_TEST(JEnumWrapper, CustomQtEnum2) +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + PROPERTY_TEST(int, io::qt::autotests::TestPropertyAndMethodCall::TestQObject::CustomQtEnum, CustomQtEnum2) +#else + PROPERTY_TEST(JEnumWrapper, io::qt::autotests::TestPropertyAndMethodCall::TestQObject::CustomQtEnum, CustomQtEnum2) +#endif } void PropertyAndMethodCallTest::dumpMetaObject(const QMetaObject* metaObject){ diff --git a/autotestlib/propertyandmethodcalltest.h b/autotestlib/propertyandmethodcalltest.h index ee709e05..078963df 100644 --- a/autotestlib/propertyandmethodcalltest.h +++ b/autotestlib/propertyandmethodcalltest.h @@ -14,59 +14,6 @@ #include #endif -#define GETMETHOD_TEST(Type, Method)\ - bool result = false;\ - if(qobj){\ - Type arg;\ - const QMetaMethod qmethod = qobj->metaObject()->method(qobj->metaObject()->indexOfMethod("get"#Method"()"));\ - const QMetaMethod testmethod = qobj->metaObject()->method(qobj->metaObject()->indexOfMethod("test"#Method"("#Type")"));\ - qmethod.invoke(qobj, Q_RETURN_ARG(Type, arg));\ - if(testmethod.isValid())\ - testmethod.invoke(qobj, Q_RETURN_ARG(bool, result), Q_ARG(Type, arg));\ - }\ - return result; - -#define PROPERTY_TEST(Type, Property)\ - bool result = false;\ - if(qobj && qobj->metaObject()){\ - QString name(#Property);\ - name[0] = name[0].toLower();\ - Type arg = qobj->property(name.toLatin1()).value();\ - const QMetaMethod testmethod = qobj->metaObject()->method(qobj->metaObject()->indexOfMethod("test"#Property"("#Type")"));\ - if(testmethod.isValid())\ - testmethod.invoke(qobj, Q_RETURN_ARG(bool, result), Q_ARG(Type, arg));\ - }\ - return result; - -#define PROPERTY_TEST2(Type, Property)\ - bool result = false;\ - if(qobj && qobj->metaObject()){\ - QString name(#Property);\ - name[0] = name[0].toLower();\ - Type arg = qobj->property(name.toLatin1()).value();\ - const QMetaMethod testmethod = qobj->metaObject()->method(qobj->metaObject()->indexOfMethod("test"#Property"("#Type")"));\ - if(testmethod.isValid())\ - testmethod.invoke(qobj, Q_RETURN_ARG(bool, result), Q_ARG(Type, arg));\ - }\ - return result; - -#define PROPERTY_TEST3(Type, Property)\ - bool result = false;\ - const QMetaObject* metaobject = qobj->metaObject();\ - if(qobj && metaobject){\ - QString name(#Property);\ - name[0] = name[0].toLower();\ - QVariant variant = qobj->property(name.toLatin1());\ - void** data = reinterpret_cast(variant.data());\ - if(data){\ - Type arg = reinterpret_cast(*data);\ - const QMetaMethod testmethod = metaobject->method(metaobject->indexOfMethod("test"#Property"("#Type")"));\ - if(testmethod.isValid())\ - testmethod.invoke(qobj, Q_RETURN_ARG(bool, result), Q_ARG(Type, arg));\ - }\ - }\ - return result; - class PropertyAndMethodCallTest : public QObject { Q_OBJECT @@ -87,6 +34,7 @@ class PropertyAndMethodCallTest : public QObject QGraphicsItem* receivedCustomQtInterfaceValue(); JObjectWrapper receivedCustomJavaType(); QObject* receivedDerivedQObject(); + JObjectWrapper receivedExtendedColor(); static bool testMethodCallNumber(QObject* qobj); static bool testMethodCallEnum(QObject* qobj); @@ -100,6 +48,7 @@ class PropertyAndMethodCallTest : public QObject static bool testMethodCallCustomQtInterfaceValue(QObject* qobj); static bool testMethodCallCustomJavaType(QObject* qobj); static bool testMethodCallCustomQtEnum2(QObject* qobj); + static bool testMethodCallExtendedColor(QObject* qobj); static bool testFetchPropertyNumber(QObject* qobj); static bool testFetchPropertyEnum(QObject* qobj); @@ -113,6 +62,7 @@ class PropertyAndMethodCallTest : public QObject static bool testFetchPropertyCustomQtInterfaceValue(QObject* qobj); static bool testFetchPropertyCustomJavaType(QObject* qobj); static bool testFetchPropertyCustomQtEnum2(QObject* qobj); + static bool testFetchPropertyExtendedColor(QObject* qobj); signals: @@ -130,6 +80,7 @@ private slots: void receiveCustomQtInterfaceValue(QGraphicsItem* value); void receiveCustomJavaType(JObjectWrapper value); void receiveDerivedQObject(QObject* value); + void receiveExtendedColor(JObjectWrapper value); private: JEnumWrapper m_receivedEnum; @@ -142,6 +93,7 @@ private slots: QGraphicsItem* m_receivedCustomQtValue; QGraphicsItem* m_receivedCustomQtInterfaceValue; JObjectWrapper m_receivedCustomJavaType; + JObjectWrapper m_receivedExtendedColor; QObject* m_receivedDerivedQObject; }; Q_DECLARE_METATYPE(QColor*) diff --git a/autotestlib/typesystem-autotestlib.xml b/autotestlib/typesystem-autotestlib.xml index 8751f076..9c447c63 100644 --- a/autotestlib/typesystem-autotestlib.xml +++ b/autotestlib/typesystem-autotestlib.xml @@ -223,7 +223,7 @@ - + %out = %in ? %env->NewDirectByteBuffer(%in, jlong(__qt_this->buffer_length)) : nullptr; JavaException::check(%env QTJAMBI_STACKTRACEINFO ); diff --git a/build_autotests.xml b/build_autotests.xml index ade15a04..b94cb10f 100644 --- a/build_autotests.xml +++ b/build_autotests.xml @@ -62,6 +62,8 @@ + + @@ -118,6 +120,7 @@ + @@ -130,6 +133,7 @@ + @@ -600,6 +604,18 @@ + + + + + + + + + + + + @@ -608,50 +624,67 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -960,7 +993,7 @@ - + diff --git a/generator/abstractmetabuilder.cpp b/generator/abstractmetabuilder.cpp index 28143345..c8ec6e64 100644 --- a/generator/abstractmetabuilder.cpp +++ b/generator/abstractmetabuilder.cpp @@ -157,8 +157,19 @@ AbstractMetaBuilder::RenamedOperator AbstractMetaBuilder::rename_operator(const return {QString("operator_%1").arg(operator_names.value(op)),nullptr,false}; } +const QStringList &AbstractMetaBuilder::getIncludePathsList() const +{ + return m_includePathsList; +} + +void AbstractMetaBuilder::setIncludePathsList(const QStringList &newIncludePathsList) +{ + m_includePathsList = newIncludePathsList; +} + AbstractMetaBuilder::AbstractMetaBuilder() : m_current_class(nullptr), + m_current_function(nullptr), m_features(nullptr), m_qtVersionMajor(QT_VERSION_MAJOR), m_qtVersionMinor(QT_VERSION_MINOR), @@ -214,12 +225,10 @@ void AbstractMetaBuilder::checkFunctionModifications() { possibleSignatures.append(function->minimalSignature() + " in " + function->implementingClass()->name()); } - if (!found && clazz->typeEntry()->codeGeneration()!=TypeEntry::GenerateNothing) { + if (!found && clazz->typeEntry()->codeGeneration()!=TypeEntry::GenerateNothing && modification.template_instantiations.isEmpty()) { QString warning = QString("signature '%1' for function modification in '%2' not found. Possible candidates: %3") - .arg(signature) - .arg(clazz->qualifiedCppName()) - .arg(possibleSignatures.join(",\n ")); + .arg(signature, clazz->qualifiedCppName(), possibleSignatures.join(",\n ")); ReportHandler::warning(warning); } @@ -269,6 +278,11 @@ void AbstractMetaBuilder::registerHashFunction(FunctionModelItem function_item) } if (arguments.size() == 1 || hasDefaultArgs) { if (AbstractMetaClass *cls = argumentToClass(arguments.at(0), "AbstractMetaBuilder::registerHashFunction")) { + for(auto& mod : cls->typeEntry()->functionModifications(QString("qHash(%1)").arg(cls->typeEntry()->qualifiedCppName()))){ + if(mod.isRemoveModifier()){ + return; + } + } QFileInfo info(function_item->fileName()); cls->typeEntry()->addExtraInclude(Include(Include::IncludePath, info.fileName())); @@ -290,6 +304,11 @@ void AbstractMetaBuilder::registerToStringCapability(FunctionModelItem function_ ArgumentModelItem arg = arguments.at(1); if (AbstractMetaClass *cls = argumentToClass(arg, "AbstractMetaBuilder::registerToStringCapability")) { if (arg->type().indirections().size() < 2) { + for(auto& mod : cls->typeEntry()->functionModifications(QString("operator<<(QDebug&,%1)").arg(arg->type().toString()))){ + if(mod.isRemoveModifier()){ + return; + } + } cls->setToStringCapability(function_item); } } @@ -531,8 +550,6 @@ void writeContent(QTextStream &stream, } } -void add_extra_includes_for_function(AbstractMetaClass *meta_class, const AbstractMetaFunction *meta_function); - bool AbstractMetaBuilder::build() { Q_ASSERT(!m_file_name.isEmpty()); ReportHandler::setContext("Parser"); @@ -702,7 +719,7 @@ bool AbstractMetaBuilder::build() { } // Start the generation... - for(ClassModelItem cls : m_dom->classes()){ + for(const ClassModelItem& cls : m_dom->classes()){ addAbstractMetaClass(traverseClass(cls)); } @@ -762,17 +779,62 @@ bool AbstractMetaBuilder::build() { } } - for(auto function_item : m_dom->functions()){ + for(auto& function_item : m_dom->functions()){ + if(function_item->name()==QStringLiteral("swap") + && function_item->arguments().size()==2){ + continue; + } + if(function_item->name()==QStringLiteral("qHash") + && function_item->arguments().size()<=2){ + continue; + } + if(function_item->name().startsWith(QStringLiteral("qRegisterNormalizedMetaType")) + || function_item->name()==QStringLiteral("operator!") + || function_item->name()==QStringLiteral("operator&") + || function_item->name()==QStringLiteral("operator*") + || function_item->name()==QStringLiteral("operator+") + || function_item->name()==QStringLiteral("operator-") + || function_item->name()==QStringLiteral("operator/") + || function_item->name()==QStringLiteral("operator<") + || function_item->name()==QStringLiteral("operator>") + || function_item->name()==QStringLiteral("operator|") + || function_item->name()==QStringLiteral("operator~") + || function_item->name()==QStringLiteral("operator^") + || function_item->name()==QStringLiteral("operator%") + || function_item->name()==QStringLiteral("operator!=") + || function_item->name()==QStringLiteral("operator&=") + || function_item->name()==QStringLiteral("operator*=") + || function_item->name()==QStringLiteral("operator+=") + || function_item->name()==QStringLiteral("operator-=") + || function_item->name()==QStringLiteral("operator/=") + || function_item->name()==QStringLiteral("operator|=") + || function_item->name()==QStringLiteral("operator<=") + || function_item->name()==QStringLiteral("operator>=") + || function_item->name()==QStringLiteral("operator%=") + || function_item->name()==QStringLiteral("operator<<") + || function_item->name()==QStringLiteral("operator>>") + || function_item->name()==QStringLiteral("operator<>") + || function_item->name()==QStringLiteral("operator==") + ){ + continue; + } QString _function_name = function_item->name(); + QString originalSignature = function_item->name(); QStringList tparams; - for(TemplateParameterModelItem t : function_item->templateParameters()){ - tparams << t->name(); + for(const TemplateParameterModelItem& t : function_item->templateParameters()){ + if(t->isVaradic()) + tparams << t->name()+"..."; + else + tparams << t->name(); } - if(!tparams.isEmpty()) + if(!tparams.isEmpty()){ _function_name += "<" + tparams.join(", ") + ">"; + originalSignature += "<" + tparams.join(",") + ">"; + } _function_name += "("; + originalSignature += "("; int counter = 0; - for(ArgumentModelItem arg : function_item->arguments()){ + for(const ArgumentModelItem& arg : function_item->arguments()){ if(arg->type().getReferenceType()==TypeInfo::NoReference && arg->type().indirections().isEmpty() && function_item->arguments().size()==1 @@ -781,31 +843,24 @@ bool AbstractMetaBuilder::build() { } if(counter!=0){ _function_name += ", "; + originalSignature += ","; } - if(arg->type().isConstant()) - _function_name += "const "; - _function_name += arg->type().qualifiedName().join("::"); - for(bool i : arg->type().indirections()){ - if(i) - _function_name += " const"; - _function_name += "*"; - } - switch(arg->type().getReferenceType()){ - case TypeInfo::Reference: - _function_name += "&"; - break; - case TypeInfo::RReference: - _function_name += "&&"; - break; - default: break; - } + _function_name += arg->type().toString(); + originalSignature += arg->type().toString(); ++counter; } + if(function_item->isVariadics()) + _function_name += "..."; _function_name += ") "; - if(function_item->isConstant()) + originalSignature += ")"; + if(function_item->isConstant()){ _function_name += "const "; - if(function_item->referenceType()==TypeInfo::Reference) + originalSignature += "const"; + } + if(function_item->referenceType()==TypeInfo::Reference){ _function_name += "& "; + originalSignature += "&"; + } _function_name += "-> "; if(function_item->type().isConstant()) _function_name += "const "; @@ -824,10 +879,114 @@ bool AbstractMetaBuilder::build() { break; default: break; } - if(!function_item->templateParameters().isEmpty()){ - m_rejected_template_functions.insert({_function_name, function_item->fileName()}, IsGlobal); + bool remove = TypeDatabase::instance()->isFunctionRejected("", function_item->name()); + AbstractMetaClass *targetClass = nullptr; + FunctionModificationList functionModificationList; + if (!remove) { + QString _originalSignature = QString::fromUtf8(QMetaObject::normalizedSignature(qPrintable(originalSignature))); + for(const TypeSystemTypeEntry* ts : TypeDatabase::instance()->typeSystemsByQtLibrary().values()){ + FunctionModificationList list = ts->functionModifications(originalSignature); + if(_originalSignature!=originalSignature) + list << ts->functionModifications(_originalSignature); + for(const FunctionModification& mod : qAsConst(list)){ + if(mod.isRemoveModifier()){ + remove = true; + break; + }else if(!mod.targetType.isEmpty()){ + targetClass = m_meta_classes.findClass(ts->name() + "." + mod.targetType); + if(!targetClass){ + ComplexTypeEntry *gte = TypeDatabase::instance()->findComplexType(mod.targetType); + if(!gte){ + gte = new NamespaceTypeEntry(mod.targetType, true); + gte->setTargetTypeSystem(ts->name()); + gte->setTargetLangPackage(ts->name()); + gte->setCodeGeneration(TypeEntry::GenerateAll); + } + targetClass = createMetaClass(); + targetClass->setTypeEntry(gte); + *targetClass += AbstractMetaAttributes::Final; + *targetClass += AbstractMetaAttributes::Public; + m_meta_classes << targetClass; + } + functionModificationList << list; + break; + } + } + if(targetClass) + break; + } + } + if(targetClass){ + AbstractMetaClass *old_current_class = m_current_class; + m_current_class = targetClass; + AbstractMetaFunction *meta_function = traverseFunction(function_item); + if(meta_function){ + meta_function->setFunctionType(AbstractMetaFunction::GlobalScopeFunction); + meta_function->setOriginalAttributes(meta_function->originalAttributes() | AbstractMetaAttributes::Public | AbstractMetaAttributes::Static); + *meta_function += AbstractMetaAttributes::Static; + *meta_function += AbstractMetaAttributes::Public; + meta_function->setDeclaringClass(targetClass); + meta_function->setOwnerClass(targetClass); + meta_function->setImplementingClass(targetClass); + if(meta_function->isInvalid()){ + targetClass->addInvalidFunction(meta_function); + }else{ + QString fileName = function_item->fileName(); + QFileInfo file(QDir::fromNativeSeparators(fileName)); + if(file.exists()){ + fileName = file.canonicalFilePath(); +#ifdef Q_OS_MAC + QDir dir = file.dir(); + if(QFileInfo(dir.absolutePath()).fileName()==QStringLiteral("Headers") && dir.cdUp()){ + if(!QFileInfo(dir.absolutePath()).fileName().endsWith(".framework")){ + if(dir.cdUp() && QFileInfo(dir.absolutePath()).fileName()==QStringLiteral("Versions") && dir.cdUp()){ + } + } + QString moduleName = QFileInfo(dir.absolutePath()).fileName(); + if(moduleName.endsWith(".framework")){ + moduleName = moduleName.mid(0, moduleName.length()-10); + targetClass->typeEntry()->addExtraInclude(Include(Include::IncludePath, QString("%1/%2").arg(moduleName, file.fileName()))); + fileName.clear(); + } + } +#endif + } + if(!fileName.isEmpty()){ + for(const QString& includePath : m_includePathsList){ + QFileInfo f(includePath); + if(f.isDir()){ + QString path = f.canonicalFilePath(); + if(!path.endsWith("/")) + path += "/"; + if(fileName.startsWith(path)){ + path = fileName.mid(path.size()); + targetClass->typeEntry()->addExtraInclude(Include(Include::IncludePath, path)); + break; + } + } + } + } + targetClass->addFunction(meta_function); + for(FunctionModification mod : functionModificationList){ + if(!mod.argument_mods.isEmpty() + || !mod.template_instantiations.isEmpty() + || !mod.association.isEmpty() + || !mod.ppCondition.isEmpty() + || mod.isCodeInjection() + || !mod.throws.isEmpty()){ + mod.signature = meta_function->minimalSignature(); + targetClass->typeEntry()->addFunctionModification(mod); + } + } + } + } + m_current_class = old_current_class; }else{ - m_rejected_functions.insert({_function_name, function_item->fileName()}, IsGlobal); + if(!function_item->templateParameters().isEmpty()){ + m_rejected_template_functions.insert({_function_name, function_item->fileName()}, remove ? GenerationDisabled : IsGlobal); + }else{ + m_rejected_functions.insert({_function_name, function_item->fileName()}, remove ? GenerationDisabled : IsGlobal); + } } } @@ -957,7 +1116,7 @@ bool AbstractMetaBuilder::build() { if(entry->codeGeneration()==TypeEntry::GenerateAll){ if (!cls) { ReportHandler::warning(QString("namespace '%1' for enum '%2' is not declared") - .arg(name).arg(entry->targetLangName())); + .arg(name, entry->targetLangName())); } else { AbstractMetaEnum *e = cls->findEnum(entry->targetLangName()); if (!e) @@ -1068,9 +1227,10 @@ void AbstractMetaBuilder::applyDocs(const DocModel* docModel){ if(docModel){ QHash> analyzedTypes; AbstractMetaFunctionalList meta_functionals = m_meta_functionals; + const DocNamespace* globalNamespace = docModel->getNamespace(""); for(AbstractMetaClass *meta_class : m_meta_classes) { if(meta_class->isNamespace() || meta_class->isFake()){ - const DocNamespace* ns = docModel->getNamespace(meta_class->isFake() ? "" : meta_class->qualifiedCppName()); + const DocNamespace* ns = meta_class->isFake() ? globalNamespace : docModel->getNamespace(meta_class->qualifiedCppName()); if(!ns && !meta_class->isFake()){ QStringList qualifiedCppName = meta_class->qualifiedCppName().split("::"); if(!qualifiedCppName.isEmpty()){ @@ -1087,23 +1247,110 @@ void AbstractMetaBuilder::applyDocs(const DocModel* docModel){ if(ns){ meta_class->setHref(ns->href()); meta_class->setBrief(ns->brief()); - for(AbstractMetaFunction * meta_function : meta_class->functions()){ - QList functions = ns->getFunctions(meta_function->originalName()); - if(functions.size()==1){ - meta_function->setHref(functions[0]->href()); - meta_function->setBrief(functions[0]->brief()); - }else for(const DocFunction* function : functions){ + } + for(AbstractMetaFunction * meta_function : meta_class->functions()){ + QList functions; + if(meta_function->functionType()==AbstractMetaFunction::GlobalScopeFunction){ + if(meta_function->functionTemplate()){ + if(ns){ + functions = ns->getFunctions(meta_function->functionTemplate()->originalName()); + } + if(functions.isEmpty() && globalNamespace){ + functions = globalNamespace->getFunctions(meta_function->functionTemplate()->originalName()); + } + }else{ + if(ns){ + functions = ns->getFunctions(meta_function->originalName()); + } + if(functions.isEmpty() && globalNamespace){ + functions = globalNamespace->getFunctions(meta_function->originalName()); + } + } + }else if(!ns){ + continue; + }else{ + if(meta_function->functionTemplate()){ + functions = ns->getFunctions(meta_function->functionTemplate()->originalName()); + }else{ + functions = ns->getFunctions(meta_function->originalName()); + } + } + if(functions.size()==1){ + meta_function->setHref(functions[0]->href()); + meta_function->setBrief(functions[0]->brief()); + }else{ + for(const DocFunction* function : functions){ if(meta_function->isConstant()==function->isConst() - && meta_function->isStatic()==function->isStatic() + && (meta_function->isStatic()==function->isStatic() || meta_function->functionType()==AbstractMetaFunction::GlobalScopeFunction) && meta_function->arguments().size()==function->parameters().size()){ bool ok = true; - if(functions.size()>1){ - for(int i=0; iarguments().size(); ++i){ - AbstractMetaArgument *argument = meta_function->arguments()[i]; + for(int i=0; iarguments().size(); ++i){ + AbstractMetaArgument *argument = meta_function->arguments()[i]; + QString arg = function->parameters()[i]; + if(arg.endsWith("...")){ + arg.chop(3); + if(!meta_function->isVariadics()){ + ok = false; + break; + } + } + QSharedPointer type = analyzedTypes[arg]; + if(!type){ + TypeInfo typeInfo = analyzeTypeInfo(meta_class, arg); + type = QSharedPointer(translateType(typeInfo, &ok, "")); + if(!ok || !type){ + QString qualifiedName = typeInfo.qualifiedName().join("::"); + if(qualifiedName=="ushort"){ + typeInfo.setQualifiedName({"unsigned short"}); + type = QSharedPointer(translateType(typeInfo, &ok, "")); + }else if(qualifiedName=="uint"){ + typeInfo.setQualifiedName({"unsigned int"}); + type = QSharedPointer(translateType(typeInfo, &ok, "")); + }else if(qualifiedName=="uchar"){ + typeInfo.setQualifiedName({"unsigned char"}); + type = QSharedPointer(translateType(typeInfo, &ok, "")); + }else if(qualifiedName=="ulonglong"){ + typeInfo.setQualifiedName({"unsigned long long"}); + type = QSharedPointer(translateType(typeInfo, &ok, "")); + } + } + analyzedTypes[arg] = type; + } + if(ok && type){ + if(type->isConstant()!=argument->type()->isConstant() + || type->getReferenceType()!=argument->type()->getReferenceType() + || type->indirections()!=argument->type()->indirections()){ + ok = false; + break; + }else{ + if(type->typeEntry()->isTemplateArgument() + && argument->type()->typeEntry()->isTemplateArgument()){ + if(type->typeEntry()->qualifiedCppName()!=argument->type()->typeEntry()->qualifiedCppName()){ + ok = false; + break; + } + }else if(type->typeEntry()!=argument->type()->typeEntry() + && !(type->typeEntry()->isQString() && argument->type()->typeEntry()==TypeDatabase::instance()->qstringType()) + && !(type->typeEntry()->isVariant() && argument->type()->typeEntry()==TypeDatabase::instance()->qvariantType()) + && !(type->typeEntry()->isChar() && argument->type()->typeEntry()==TypeDatabase::instance()->qcharType())){ + ok = false; + break; + } + } + } + } + if(ok){ + meta_function->setHref(function->href()); + meta_function->setBrief(function->brief()); + break; + }else if(meta_function->functionTemplate()){ + ok = true; + for(int i=0; ifunctionTemplate()->arguments().size(); ++i){ + AbstractMetaArgument *argument = meta_function->functionTemplate()->arguments()[i]; QString arg = function->parameters()[i]; if(arg.endsWith("...")){ arg.chop(3); - if(!meta_function->isVariadics()){ + if(!meta_function->functionTemplate()->isVariadics()){ ok = false; break; } @@ -1139,6 +1386,7 @@ void AbstractMetaBuilder::applyDocs(const DocModel* docModel){ }else{ if(type->typeEntry()!=argument->type()->typeEntry() && !(type->typeEntry()->isQString() && argument->type()->typeEntry()==TypeDatabase::instance()->qstringType()) + && !(type->typeEntry()->isVariant() && argument->type()->typeEntry()==TypeDatabase::instance()->qvariantType()) && !(type->typeEntry()->isChar() && argument->type()->typeEntry()==TypeDatabase::instance()->qcharType())){ ok = false; break; @@ -1146,11 +1394,11 @@ void AbstractMetaBuilder::applyDocs(const DocModel* docModel){ } } } - } - if(ok){ - meta_function->setHref(function->href()); - meta_function->setBrief(function->brief()); - break; + if(ok){ + meta_function->setHref(function->href()); + meta_function->setBrief(function->brief()); + break; + } } } } @@ -1219,7 +1467,11 @@ void AbstractMetaBuilder::applyDocs(const DocModel* docModel){ _cls = __cls; } } - QList functions = _cls->getFunctions(meta_function->originalName()); + QList functions; + functions = _cls->getFunctions(meta_function->originalName()); + if(functions.isEmpty() && meta_function->functionType()==AbstractMetaFunction::GlobalScopeFunction && globalNamespace){ + functions = globalNamespace->getFunctions(meta_function->originalName()); + } if(functions.size()==1){ meta_function->setHref(functions[0]->href()); meta_function->setBrief(functions[0]->brief()); @@ -1270,6 +1522,7 @@ void AbstractMetaBuilder::applyDocs(const DocModel* docModel){ }else{ if(type->typeEntry()!=argument->type()->typeEntry() && !(type->typeEntry()->isQString() && argument->type()->typeEntry()==TypeDatabase::instance()->qstringType()) + && !(type->typeEntry()->isVariant() && argument->type()->typeEntry()==TypeDatabase::instance()->qvariantType()) && !(type->typeEntry()->isChar() && argument->type()->typeEntry()==TypeDatabase::instance()->qcharType())){ ok = false; break; @@ -3837,7 +4090,6 @@ AbstractMetaClass *AbstractMetaBuilder::traverseTypeAlias(TypeAliasModelItem typ AbstractMetaClass *AbstractMetaBuilder::traverseClass(ClassModelItem class_item) { QString class_name = strip_template_args(class_item->name()); QString full_class_name = class_name; - // we have an inner class if (m_current_class) { full_class_name = strip_template_args(m_current_class->typeEntry()->qualifiedCppName()) @@ -3848,6 +4100,8 @@ AbstractMetaClass *AbstractMetaBuilder::traverseClass(ClassModelItem class_item) if(type){ if(type->isQString() && TypeDatabase::instance()->qstringType()){ type = TypeDatabase::instance()->qstringType(); + }else if(type->isVariant() && TypeDatabase::instance()->qvariantType()){ + type = TypeDatabase::instance()->qvariantType(); }else if(type->isChar() && TypeDatabase::instance()->qcharType()){ type = TypeDatabase::instance()->qcharType(); } @@ -3957,20 +4211,8 @@ AbstractMetaClass *AbstractMetaBuilder::traverseClass(ClassModelItem class_item) AbstractMetaClass *cl = traverseClass(ci); if (cl) { bool isEnclosedClass = cl->typeEntry()->targetLangName().startsWith(meta_class->typeEntry()->targetLangName()+"$"); - if(isEnclosedClass){ + if(isEnclosedClass) meta_class->addEnclosedClass(cl); - if(cl->isInterface()){ - AbstractMetaClass *interfaceImpl = cl->extractInterfaceImpl(); - //m_meta_classes << interfaceImpl; - ReportHandler::debugSparse(QString(" -> interface implementation class '%1'").arg(interfaceImpl->name())); - } - /* - if (cl->typeEntry()->designatedInterface()) { - AbstractMetaClass *interface = cl->extractInterface(); - meta_class->addEnclosedClass(interface); - } - */ - } addAbstractMetaClass(cl); } @@ -4128,6 +4370,10 @@ AbstractMetaClass *AbstractMetaBuilder::traverseClass(ClassModelItem class_item) instantiation_meta_class->setTemplateBaseClass(meta_class); instantiation_meta_class->setAttributes(meta_class->attributes()); instantiation_meta_class->setOriginalAttributes(meta_class->originalAttributes()); +// if(class_name=="StringResult") +// class_name.back(); + if(m_current_class) + m_current_class->addEnclosedClass(instantiation_meta_class); addAbstractMetaClass(instantiation_meta_class); } } @@ -4220,6 +4466,7 @@ void AbstractMetaBuilder::setupFunctionDefaults(AbstractMetaFunction *meta_funct void AbstractMetaBuilder::traverseFunctions(ScopeModelItem scope_item, AbstractMetaClass *meta_class) { // if there are just private constructors avoid generating the shell class + bool hasPrivateConstructors = false; bool hasJustPrivateConstructors = false; // detect virtual destructor bool hasVirtualDestructor = false; @@ -4231,7 +4478,6 @@ void AbstractMetaBuilder::traverseFunctions(ScopeModelItem scope_item, AbstractM QSet unimplementablePureVirtualFunctions; QList rValueFunctions; - for(const FunctionModelItem& function : scope_item->functions()) { AbstractMetaFunction *meta_function = traverseFunction(function); @@ -4292,15 +4538,7 @@ void AbstractMetaBuilder::traverseFunctions(ScopeModelItem scope_item, AbstractM hasPrivateDestructor = meta_function->isPrivate(); hasPublicDestructor = meta_function->isPublic(); }else if(meta_function->isConstructor()){ - if(meta_function->isPrivate() || meta_function->isInvalid()){ - AbstractMetaFunctionList functions = meta_class->queryFunctions(AbstractMetaClass::Constructors); - // do not generate derived class when only copy constructor is available - if(functions.isEmpty() || (functions.size()==1 && functions.at(0)->isCopyConstructor())){ - hasJustPrivateConstructors = true; - } - }else{ - hasJustPrivateConstructors = false; - } + hasPrivateConstructors |= meta_function->isInvalid() || meta_function->isPrivate(); }else if((/*meta_function->isPrivate() ||*/ meta_function->isInvalid()) && meta_function->isAbstract()){ unimplementablePureVirtualFunctions << meta_function->signature(); } @@ -4329,7 +4567,7 @@ void AbstractMetaBuilder::traverseFunctions(ScopeModelItem scope_item, AbstractM if (meta_function->isSignal() && !meta_class->isQObject()) { QString warn = QString("signal '%1' in non-QObject class '%2'") - .arg(meta_function->name()).arg(meta_class->name()); + .arg(meta_function->name(), meta_class->name()); ReportHandler::warning(warn); } if(meta_function->hasRReferences() @@ -4337,6 +4575,22 @@ void AbstractMetaBuilder::traverseFunctions(ScopeModelItem scope_item, AbstractM && !meta_function->isRemovedFrom(meta_class, TypeSystem::TargetLangCode)){ rValueFunctions << meta_function; } + if(meta_class->typeEntry()->isNamespace()){ + QString fileName = function->fileName(); + for(const QString& includePath : m_includePathsList){ + QFileInfo f(includePath); + if(f.isDir()){ + QString path = f.canonicalFilePath(); + if(!path.endsWith("/")) + path += "/"; + if(fileName.startsWith(path)){ + path = fileName.mid(path.size()); + meta_class->typeEntry()->addExtraInclude(Include(Include::IncludePath, path)); + break; + } + } + } + } meta_class->addFunction(meta_function); }else if(!meta_function->isDestructor() && !meta_function->isConstructor() && @@ -4345,6 +4599,13 @@ void AbstractMetaBuilder::traverseFunctions(ScopeModelItem scope_item, AbstractM } } } + if(hasPrivateConstructors){ + AbstractMetaFunctionList functions = meta_class->queryFunctions(AbstractMetaClass::Constructors); + // do not generate derived class when only copy constructor is available + if(functions.isEmpty() || (functions.size()==1 && functions.at(0)->isCopyConstructor())){ + hasJustPrivateConstructors = true; + } + } // remove duplicates by rvalue for(AbstractMetaFunction *meta_function : rValueFunctions){ for(AbstractMetaFunction * other : meta_class->functions()){ @@ -4377,16 +4638,55 @@ void AbstractMetaBuilder::traverseFunctions(ScopeModelItem scope_item, AbstractM meta_class->setUnimplmentablePureVirtualFunctions(unimplementablePureVirtualFunctions); } -bool AbstractMetaBuilder::setupTemplateInstantiations(AbstractMetaClass *meta_class){ +AbstractMetaType* AbstractMetaBuilder::exchangeTemplateTypes(const AbstractMetaType* type, bool isReturn, const QHash& templateTypes){ + if(type->typeEntry()->isTemplateArgument()){ + if(AbstractMetaType* ttype = templateTypes[type->typeEntry()->name()]){ + AbstractMetaType*rtype = type->copy(); + rtype->setConstant(ttype->isConstant() || type->isConstant()); + rtype->setIndirections(QList() << ttype->indirections() << type->indirections()); + rtype->setReferenceType(ttype->getReferenceType()); + rtype->setTypeEntry(ttype->typeEntry()); + decideUsagePattern(rtype); + if(!rtype->indirections().isEmpty() && isReturn){ + rtype->setTypeUsagePattern(AbstractMetaType::ObjectPattern); + } + QList instantiations; + for(auto instantiation : rtype->instantiations()){ + instantiations << exchangeTemplateTypes(instantiation, false, templateTypes); + } + rtype->setInstantiations(instantiations); + return rtype; + } + }else{ + QList instantiations; + for(auto instantiation : type->instantiations()){ + instantiations << exchangeTemplateTypes(instantiation, false, templateTypes); + } + if(type->instantiations()!=instantiations){ + AbstractMetaType*rtype = type->copy(); + rtype->setInstantiations(instantiations); + return rtype; + } + } + return const_cast(type); +} - const AbstractMetaFunctionList& funcs = meta_class->functions(); - for(AbstractMetaFunction *func : funcs) { - if(func->hasTemplateArgumentTypes()){ +bool AbstractMetaBuilder::setupTemplateInstantiations(AbstractMetaClass *meta_class){ + AbstractMetaFunctionList functions; + for(AbstractMetaFunction *func : meta_class->functions()) { + AbstractMetaTemplateParameterList templateParameters; + for(AbstractMetaTemplateParameter* tparam : func->templateParameters()){ + if(tparam->type()->typeEntry()->isTemplateArgument()){ + templateParameters << tparam; + } + } + if(!templateParameters.isEmpty() || (func->type() && func->type()->typeUsagePattern()==AbstractMetaType::AutoPattern)){ QList templateInstantiations = func->templateInstantiations(meta_class); if(!templateInstantiations.isEmpty()){ for(const TemplateInstantiation& template_instantiation : templateInstantiations){ // duplicate - AbstractMetaFunction *func2 = func->copy(); + std::unique_ptr func2; + func2.reset(func->copy()); // rename function if(!template_instantiation.renamedTo().isEmpty()){ func2->setOriginalName(func2->name()); @@ -4394,67 +4694,145 @@ bool AbstractMetaBuilder::setupTemplateInstantiations(AbstractMetaClass *meta_cl } // find types of the template instantiations - AbstractMetaTemplateParameterList templateParameters; + AbstractMetaTemplateParameterList untreatedTemplateParameters = func2->templateParameters(); QHash templateTypes; - for(int k=0; ktemplateParameters().size(); k++){ - TypeInfo info; - info.setQualifiedName(template_instantiation.arguments[k].split("::")); - bool ok = false; - AbstractMetaClass * tmp_current_class = m_current_class; - m_current_class = meta_class; - AbstractMetaType* ttype = translateType(info, &ok, QString("traverseTemplateInstantiation <%1>").arg(template_instantiation.arguments[k]), true, true, false); - m_current_class = tmp_current_class; - templateTypes[func->templateParameters()[k]->name()] = ttype; - AbstractMetaTemplateParameter* tparam = new AbstractMetaTemplateParameter(); - tparam->setName(func->templateParameters()[k]->name()); - tparam->setType(ttype); - tparam->setInstantiation(template_instantiation.arguments[k]); - templateParameters += tparam; + for(int k=0; ktemplateParameters().size(); k++){ + AbstractMetaTemplateParameter* tparam = func2->templateParameters()[k]; + if(tparam->type()->typeUsagePattern()==AbstractMetaType::TemplateArgumentPattern){ + if(template_instantiation.arguments[k].name.isEmpty()){ + TypeInfo info; + info.setQualifiedName(template_instantiation.arguments[k].type.split("::")); + bool ok = false; + AbstractMetaClass * tmp_current_class = m_current_class; + m_current_class = meta_class; + AbstractMetaType* ttype = translateType(info, &ok, QString("traverseTemplateInstantiation <%1>").arg(template_instantiation.arguments[k].type), true, true, false); + m_current_class = tmp_current_class; + if(ok && ttype){ + templateTypes[tparam->name()] = ttype; + tparam->setName(""); + tparam->setType(ttype); + tparam->setImplicit(template_instantiation.arguments[k].implicit); + tparam->setInstantiation(template_instantiation.arguments[k].type); + tparam->setDefaultType({}); + untreatedTemplateParameters.removeOne(tparam); + } + }else if(template_instantiation.arguments[k].name==tparam->name()){ + untreatedTemplateParameters.removeOne(tparam); + } + }else{ + untreatedTemplateParameters.removeOne(tparam); + } } - // set instantiations - func2->setTemplateParameters(templateParameters); - // exchange template types - if(func2->type()->typeUsagePattern()==AbstractMetaType::TemplateArgumentPattern){ - AbstractMetaType* rtype = templateTypes[func2->type()->typeEntry()->name()]; - if(rtype){ - rtype = rtype->copy(); - rtype->setConstant(func2->type()->isConstant()); - rtype->setIndirections(QList() << rtype->indirections() << func2->type()->indirections()); - rtype->setReferenceType(func2->type()->getReferenceType()); - decideUsagePattern(rtype); - if(!rtype->indirections().isEmpty()){ - rtype->setTypeUsagePattern(AbstractMetaType::ObjectPattern); + if(func2->type()){ + if(func2->type()->typeUsagePattern()==AbstractMetaType::AutoPattern){ + if(template_instantiation.arguments.size() > func2->templateParameters().size()){ + QString arg = template_instantiation.arguments[func2->templateParameters().size()].type; + TypeInfo info; + info.setQualifiedName(arg.split("::")); + bool ok = false; + AbstractMetaClass * tmp_current_class = m_current_class; + m_current_class = meta_class; + AbstractMetaType* ttype = translateType(info, &ok, QString("traverseTemplateInstantiation <%1>").arg(arg), true, true, false); + m_current_class = tmp_current_class; + if(ok && ttype){ + func2->setType(ttype); + } } - func2->setType(rtype); + }else{ + AbstractMetaType* rtype = exchangeTemplateTypes(func2->type(), true, templateTypes); + if(rtype!=func2->type()) + func2->setType(rtype); } } for(AbstractMetaArgument* arg : func2->arguments()){ - if(arg->type()->typeUsagePattern()==AbstractMetaType::TemplateArgumentPattern){ - AbstractMetaType* rtype = templateTypes[arg->type()->typeEntry()->name()]; - if(rtype){ - rtype = rtype->copy(); - rtype->setConstant(arg->type()->isConstant()); - rtype->setIndirections(QList() << rtype->indirections() << arg->type()->indirections()); - rtype->setReferenceType(arg->type()->getReferenceType()); - decideUsagePattern(rtype); - arg->setType(rtype); - } - } + AbstractMetaType* rtype = exchangeTemplateTypes(arg->type(), false, templateTypes); + if(rtype!=arg->type()) + arg->setType(rtype); } - if(!func2->hasTemplateArgumentTypes()){ - meta_class->addFunction(func2); + if(!untreatedTemplateParameters.isEmpty()){ + QStringList templ; + for(AbstractMetaTemplateParameter* tparam : untreatedTemplateParameters){ + templ << tparam->name(); + } + ReportHandler::warning(QString("template method %1::%2 has uninstantiated parameters <%3>").arg(func->implementingClass()->qualifiedCppName(), func->minimalSignature(), templ.join(", "))); + }else if(func2->type() && func2->type()->typeUsagePattern()==AbstractMetaType::AutoPattern){ + ReportHandler::warning(QString("method %1::%2 returns auto").arg(func->implementingClass()->qualifiedCppName(), func->minimalSignature())); }else{ - ReportHandler::warning(QString("template method has uninstantiated arguments %1 in class %2").arg(func->signature()).arg(func->implementingClass()->qualifiedCppName())); + func2->setFunctionTemplate(func); + if(template_instantiation.isCodeInjection() + || !template_instantiation.ppCondition.isEmpty() + || !template_instantiation.throws.isEmpty() + || !template_instantiation.association.isEmpty() + || !template_instantiation.snips.isEmpty() + || !template_instantiation.targetType.isEmpty() + || !template_instantiation.argument_mods.isEmpty()){ + FunctionModification mod; + AbstractFunctionModification& amod = mod; + amod = template_instantiation; + mod.signature = func2->minimalSignature(); + mod.removal = TypeSystem::NoLanguage; + meta_class->typeEntry()->addFunctionModification(mod); + } + func2->setDeclaringClass(meta_class); + func2->setOwnerClass(meta_class); + func2->setImplementingClass(meta_class); + functions << func2.release(); + } + } + }else if(!func->hasTemplateTypes() && !(func->type() && func->type()->typeUsagePattern()==AbstractMetaType::AutoPattern)){ + std::unique_ptr func2; + func2.reset(func->copy()); + func2->setFunctionTemplate(func); + func2->setDeclaringClass(meta_class); + func2->setOwnerClass(meta_class); + func2->setImplementingClass(meta_class); + QHash templateTypes; + for(int k=0; ktemplateParameters().size(); k++){ + AbstractMetaTemplateParameter* tparam = func2->templateParameters()[k]; + if(tparam->type()->typeUsagePattern()==AbstractMetaType::TemplateArgumentPattern){ + TypeInfo info; + info.setQualifiedName(tparam->defaultType().split("::")); + bool ok = false; + AbstractMetaClass * tmp_current_class = m_current_class; + m_current_class = meta_class; + AbstractMetaType* ttype = translateType(info, &ok, QString("traverseTemplateInstantiation <%1>").arg(tparam->defaultType()), true, true, false); + m_current_class = tmp_current_class; + tparam->setDefaultType({}); + if(ok && ttype){ + templateTypes[tparam->name()] = ttype; + tparam->setName(""); + tparam->setType(ttype); + tparam->setImplicit(true); + tparam->setInstantiation(tparam->defaultType()); + } } } + if(func2->type()){ + AbstractMetaType* rtype = exchangeTemplateTypes(func2->type(), true, templateTypes); + if(rtype!=func2->type()) + func2->setType(rtype); + } + for(AbstractMetaArgument* arg : func2->arguments()){ + AbstractMetaType* rtype = exchangeTemplateTypes(arg->type(), false, templateTypes); + if(rtype!=arg->type()) + arg->setType(rtype); + } + functions << func2.release(); + }else if(!func->hasTemplateArgumentTypes()){ + if(func->isRemovedFromAllLanguages(meta_class)) + functions << func; + else if(!func->isPrivate()) + ReportHandler::warning(QString("missing instantiations for template method %1::%2").arg(func->implementingClass()->qualifiedCppName(), func->minimalSignature())); } + }else{ + functions << func; } } - + meta_class->setFunctions(functions); return true; } @@ -4502,7 +4880,7 @@ bool AbstractMetaBuilder::setupInheritance(AbstractMetaClass *meta_class) { newTypeAliasType->setIndirections( QList() << newTypeAliasType->indirections() << typeAliasType->indirections()); if((!newTypeAliasType->typeEntry()->isPrimitive() || !newTypeAliasType->indirections().isEmpty()) && typeAliasType->isConstant()) newTypeAliasType->setConstant(true); - AbstractMetaBuilder::decideUsagePattern(newTypeAliasType); + decideUsagePattern(newTypeAliasType); delete meta_class->typeAliasType(); meta_class->setTypeAliasType(newTypeAliasType); } @@ -4831,10 +5209,10 @@ void AbstractMetaBuilder::traverseEnums(ScopeModelItem scope_item, AbstractMetaC AbstractMetaFunction *AbstractMetaBuilder::traverseFunction(FunctionModelItem function_item) { if(function_item->referenceType()==TypeInfo::RReference) return nullptr; - if(function_item->name()=="static_assert") - return nullptr; const ArgumentList& arguments = function_item->arguments(); QString function_name = function_item->name(); + if(function_name==QLatin1String("static_assert")) + return nullptr; QString class_name = m_current_class->typeEntry()->qualifiedCppName(); QString _function_name = function_name; @@ -4900,13 +5278,15 @@ AbstractMetaFunction *AbstractMetaBuilder::traverseFunction(FunctionModelItem fu } if (TypeDatabase::instance()->isFunctionRejected(class_name, function_name)) { - if(function_item->functionType() == CodeModel::Signal - || function_item->functionType() == CodeModel::PrivateSignal){ - m_rejected_signals.insert({class_name + "::" + _function_name, function_item->fileName()}, GenerationDisabled); - }else if(!function_item->templateParameters().isEmpty()){ - m_rejected_template_functions.insert({class_name + "::" + _function_name, function_item->fileName()}, GenerationDisabled); - }else{ - m_rejected_functions.insert({class_name + "::" + _function_name, function_item->fileName()}, GenerationDisabled); + if(function_item->accessPolicy() != CodeModel::Private && m_current_class->typeEntry()->codeGeneration()==TypeEntry::GenerateAll){ + if(function_item->functionType() == CodeModel::Signal + || function_item->functionType() == CodeModel::PrivateSignal){ + m_rejected_signals.insert({class_name + "::" + _function_name, function_item->fileName()}, GenerationDisabled); + }else if(!function_item->templateParameters().isEmpty()){ + m_rejected_template_functions.insert({class_name + "::" + _function_name, function_item->fileName()}, GenerationDisabled); + }else{ + m_rejected_functions.insert({class_name + "::" + _function_name, function_item->fileName()}, GenerationDisabled); + } } return nullptr; } @@ -4976,15 +5356,15 @@ AbstractMetaFunction *AbstractMetaBuilder::traverseFunction(FunctionModelItem fu else *meta_function += AbstractMetaAttributes::Protected; QHash metaTemplateParameters; - int k=0; + int templateParameterCounter=0; for(const TemplateParameterModelItem& p : function_item->templateParameters()){ if(!p->ownerClass()){ TemplateArgumentEntry* tae = new TemplateArgumentEntry(p->name()); - tae->setOrdinal(k); + tae->setOrdinal(templateParameterCounter); AbstractMetaType *type = createMetaType(); type->setTypeUsagePattern(AbstractMetaType::TemplateArgumentPattern); type->setTypeEntry(tae); - k++; + templateParameterCounter++; AbstractMetaTemplateParameter* tp = new AbstractMetaTemplateParameter(); tp->setName(p->name()); tp->setType(type); @@ -4993,6 +5373,8 @@ AbstractMetaFunction *AbstractMetaBuilder::traverseFunction(FunctionModelItem fu meta_function->addTemplateParameter(tp); } } + m_current_function = meta_function.get(); + auto onfinish = qScopeGuard([=]{this->m_current_function = nullptr;}); QString stripped_class_name = class_name; auto cc_pos = stripped_class_name.lastIndexOf("::"); @@ -5028,7 +5410,9 @@ AbstractMetaFunction *AbstractMetaBuilder::traverseFunction(FunctionModelItem fu } type = translateType(function_type, &ok, QString("traverseFunction %1.%2").arg(class_name).arg(function_name)); if(type){ - if(type->typeEntry()->isQString() && m_current_class && m_current_class->typeEntry()==TypeDatabase::instance()->qstringType()){ + if(type->typeEntry()->isVariant() && m_current_class && m_current_class->typeEntry()==TypeDatabase::instance()->qvariantType()){ + type->setTypeEntry(TypeDatabase::instance()->qvariantType()); + }else if(type->typeEntry()->isQString() && m_current_class && m_current_class->typeEntry()==TypeDatabase::instance()->qstringType()){ type->setTypeEntry(TypeDatabase::instance()->qstringType()); }else if(type->typeEntry()->isChar() && m_current_class && m_current_class->typeEntry()==TypeDatabase::instance()->qcharType()){ type->setTypeEntry(TypeDatabase::instance()->qcharType()); @@ -5037,19 +5421,23 @@ AbstractMetaFunction *AbstractMetaBuilder::traverseFunction(FunctionModelItem fu } if (!ok) { - if(function_item->functionType() == CodeModel::Signal - || function_item->functionType() == CodeModel::PrivateSignal){ - ReportHandler::warning(QString("skipping signal '%1::%2', unmatched return type '%3'") - .arg(class_name, function_item->name(), function_item->type().toString())); - m_rejected_signals[{class_name + "::" + _function_name, function_item->fileName()}] = UnmatchedReturnType; - }else if(!function_item->templateParameters().isEmpty()){ - ReportHandler::warning(QString("skipping function '%1::%2<%3>', unmatched return type '%4'") - .arg(class_name, function_item->name(), tparams.join(", "), function_item->type().toString())); - m_rejected_template_functions.insert({class_name + "::" + _function_name, function_item->fileName()}, UnmatchedReturnType); - }else{ - ReportHandler::warning(QString("skipping function '%1::%2', unmatched return type '%3'") - .arg(class_name, function_item->name(), function_item->type().toString())); - m_rejected_functions[{class_name + "::" + _function_name, function_item->fileName()}] = UnmatchedReturnType; + if(function_item->accessPolicy() != CodeModel::Private + && m_current_class->typeEntry()->codeGeneration()==TypeEntry::GenerateAll + && !TypeDatabase::instance()->isClassRejected(function_item->type().qualifiedName().join("::"))){ + if(function_item->functionType() == CodeModel::Signal + || function_item->functionType() == CodeModel::PrivateSignal){ + ReportHandler::warning(QString("skipping signal '%1::%2', unmatched return type '%3'") + .arg(class_name, function_item->name(), function_item->type().toString())); + m_rejected_signals[{class_name + "::" + _function_name, function_item->fileName()}] = UnmatchedReturnType; + }else if(!function_item->templateParameters().isEmpty()){ + ReportHandler::warning(QString("skipping function '%1::%2<%3>', unmatched return type '%4'") + .arg(class_name, function_item->name(), tparams.join(", "), function_item->type().toString())); + m_rejected_template_functions.insert({class_name + "::" + _function_name, function_item->fileName()}, UnmatchedReturnType); + }else{ + ReportHandler::warning(QString("skipping function '%1::%2', unmatched return type '%3'") + .arg(class_name, function_item->name(), function_item->type().toString())); + m_rejected_functions[{class_name + "::" + _function_name, function_item->fileName()}] = UnmatchedReturnType; + } } meta_function->setInvalid(true); return meta_function.release(); @@ -5092,23 +5480,7 @@ AbstractMetaFunction *AbstractMetaBuilder::traverseFunction(FunctionModelItem fu } if(i>0) originalSignature += ","; - if(arg->type().isConstant()) - originalSignature += "const "; - originalSignature += arg->type().qualifiedName().join("::"); - for(bool ind : arg->type().indirections()){ - if(ind) - originalSignature += " const"; - originalSignature += "*"; - } - switch(arg->type().getReferenceType()){ - case TypeInfo::Reference: - originalSignature += "&"; - break; - case TypeInfo::RReference: - originalSignature += "&&"; - break; - default: break; - } + originalSignature += arg->type().toString(); if(metaTemplateParameters.contains(arg->type().qualifiedName().join("::"))){ meta_type = metaTemplateParameters[arg->type().qualifiedName().join("::")]->type()->copy(); @@ -5121,7 +5493,9 @@ AbstractMetaFunction *AbstractMetaBuilder::traverseFunction(FunctionModelItem fu if(!ok){ meta_type = translateType(arg->type(), &ok, QString("traverseFunction %1.%2 arg#%3").arg(class_name).arg(function_name).arg(i)); if(meta_type){ - if(meta_type->typeEntry()->isQString() && m_current_class && m_current_class->typeEntry()==TypeDatabase::instance()->qstringType()){ + if(meta_type->typeEntry()->isVariant() && m_current_class && m_current_class->typeEntry()==TypeDatabase::instance()->qvariantType()){ + meta_type->setTypeEntry(TypeDatabase::instance()->qvariantType()); + }else if(meta_type->typeEntry()->isQString() && m_current_class && m_current_class->typeEntry()==TypeDatabase::instance()->qstringType()){ meta_type->setTypeEntry(TypeDatabase::instance()->qstringType()); }else if(meta_type->typeEntry()->isChar() && m_current_class && m_current_class->typeEntry()==TypeDatabase::instance()->qcharType()){ meta_type->setTypeEntry(TypeDatabase::instance()->qcharType()); @@ -5140,22 +5514,27 @@ AbstractMetaFunction *AbstractMetaBuilder::traverseFunction(FunctionModelItem fu if (!meta_type || !ok) { if(arg->type().isVolatile()) meta_type = translateType(arg->type(), &ok, QString("traverseFunction %1.%2 arg#%3").arg(class_name).arg(function_name).arg(i)); - if(function_item->functionType() == CodeModel::Signal - || function_item->functionType() == CodeModel::PrivateSignal){ - ReportHandler::warning(QString("skipping signal '%1::%2', " - "unmatched parameter type '%3'") - .arg(class_name, function_item->name(), arg->type().toString())); - m_rejected_signals[{class_name + "::" + _function_name, function_item->fileName()}] = UnmatchedArgumentType; - }else if(!function_item->templateParameters().isEmpty()){ - ReportHandler::warning(QString("skipping function '%1::%2<%3>', " - "unmatched parameter type '%4'") - .arg(class_name, function_item->name(), tparams.join(", "), arg->type().toString())); - m_rejected_template_functions.insert({class_name + "::" + _function_name, function_item->fileName()}, UnmatchedArgumentType); - }else{ - ReportHandler::warning(QString("skipping function '%1::%2', " - "unmatched parameter type '%3'") - .arg(class_name, function_item->name(), arg->type().toString())); - m_rejected_functions[{class_name + "::" + _function_name, function_item->fileName()}] = UnmatchedArgumentType; + if(function_item->accessPolicy() != CodeModel::Private + && m_current_class->typeEntry()->codeGeneration()==TypeEntry::GenerateAll + && !TypeDatabase::instance()->isClassRejected(arg->type().qualifiedName().join("::")) + && arg->type().qualifiedName().join("::")!=m_current_class->typeEntry()->qualifiedCppName()+"Private"){ + if(function_item->functionType() == CodeModel::Signal + || function_item->functionType() == CodeModel::PrivateSignal){ + ReportHandler::warning(QString("skipping signal '%1::%2', " + "unmatched parameter type '%3'") + .arg(class_name, function_item->name(), arg->type().toString())); + m_rejected_signals[{class_name + "::" + _function_name, function_item->fileName()}] = UnmatchedArgumentType; + }else if(!function_item->templateParameters().isEmpty()){ + ReportHandler::warning(QString("skipping function '%1::%2<%3>', " + "unmatched parameter type '%4'") + .arg(class_name, function_item->name(), tparams.join(", "), arg->type().toString())); + m_rejected_template_functions.insert({class_name + "::" + _function_name, function_item->fileName()}, UnmatchedArgumentType); + }else{ + ReportHandler::warning(QString("skipping function '%1::%2', " + "unmatched parameter type '%3'") + .arg(class_name, function_item->name(), arg->type().toString())); + m_rejected_functions[{class_name + "::" + _function_name, function_item->fileName()}] = UnmatchedArgumentType; + } } meta_function->setInvalid(true); return meta_function.release(); @@ -5232,11 +5611,13 @@ AbstractMetaFunction *AbstractMetaBuilder::traverseFunction(FunctionModelItem fu if (mod.isRenameModifier()) isRenamed = true; for(const ArgumentModification& argumentModification : mod.argument_mods){ - if(argumentModification.index==0){ - isReturnChanged = true; - } - if(!argumentModification.modified_name.isEmpty() && argumentModification.index>0 && argumentModification.index<=meta_arguments.size()){ - meta_arguments[argumentModification.index-1]->setModifiedName(argumentModification.modified_name); + if(argumentModification.type==ArgumentModification::Default){ + if(argumentModification.index==0){ + isReturnChanged = true; + } + if(!argumentModification.modified_name.isEmpty() && argumentModification.index>0 && argumentModification.index<=meta_arguments.size()){ + meta_arguments[argumentModification.index-1]->setModifiedName(argumentModification.modified_name); + } } } } @@ -5617,6 +5998,13 @@ AbstractMetaType *AbstractMetaBuilder::translateType(const TypeInfo& type_info, // 8.2. No? Check if the current class is a template and this type is one // of the parameters. + if (!type && m_current_function) { + for(AbstractMetaTemplateParameter* t : m_current_function->templateParameters()){ + if (t->type()->typeEntry()->name() == qualified_name){ + type = t->type()->typeEntry(); + } + } + } if (!type && m_current_class) { QList template_args = m_current_class->templateArguments(); for(TypeEntry *te : template_args) { @@ -5743,7 +6131,7 @@ AbstractMetaType *AbstractMetaBuilder::translateType(const TypeInfo& type_info, QString base = contexts.at(0); if(!visitedContexts.contains(base)){ visitedContexts.insert(base); - info.setQualifiedName(QStringList() << base << qualified_name.split("::")); + info.setQualifiedName(QStringList() << base << typei.qualifiedName()); // qDebug()<< "whiling in 9. type," << info.toString(); if(!visitedNames.contains(info.qualifiedName().join("::"))){ visitedNames.insert(info.qualifiedName().join("::")); @@ -5760,7 +6148,7 @@ AbstractMetaType *AbstractMetaBuilder::translateType(const TypeInfo& type_info, while (parts.size() > 1) { parts.removeLast(); if(!qualified_name.startsWith(parts.join("::"))){ - info.setQualifiedName(QStringList() << parts << qualified_name.split("::")); + info.setQualifiedName(QStringList() << parts << typei.qualifiedName()); if(!visitedNames.contains(info.qualifiedName().join("::"))){ visitedNames.insert(info.qualifiedName().join("::")); AbstractMetaType *t = translateType(info, &ok, contextString, true, false, prependScope); @@ -5798,39 +6186,6 @@ AbstractMetaType *AbstractMetaBuilder::translateType(const TypeInfo& type_info, } } - /*{ - qualifier_list = typeInfo.qualified_name; - qualified_name = qualifier_list.join("::"); - name = qualifier_list.takeLast(); - TypeAliasModelItem typeAliasModel = m_dom->findTypeAlias(qualified_name); - if(!typeAliasModel){ - ScopeModelItem smi = m_dom->toScope(); - QStringList qualifierList = qualifier_list; - while(smi && !qualifierList.isEmpty()){ - QString scope = qualifierList.takeFirst(); - if(ClassModelItem cls = smi->findClass(scope)){ - smi = cls; - }else if(NamespaceModelItem nms = smi->findNamespace(scope)){ - smi = nms; - }else{ - smi = nullptr; - } - } - if(smi){ - typeAliasModel = smi->findTypeAlias(name); - } - } - if(typeAliasModel){ - bool ok; - typei.setQualifiedName(typeAliasModel->type().qualifiedName()); - AbstractMetaType *t = translateType(typei, &ok, contextString, false, resolveScope, prependScope); - if (t && ok) { - //qDebug()<<"ResolveType ok (1. check)"<fullName(); - return t; - } - } - }*/ - // if error happened in type resolving if (!type) { *ok = false; @@ -5978,17 +6333,6 @@ AbstractMetaType *AbstractMetaBuilder::translateType(const TypeInfo& type_info, } } - /*if (container_type == ContainerTypeEntry::ListContainer - || container_type == ContainerTypeEntry::InitializerListContainer - || container_type == ContainerTypeEntry::VectorContainer - || container_type == ContainerTypeEntry::QDBusReplyContainer - || container_type == ContainerTypeEntry::StringListContainer - || container_type == ContainerTypeEntry::ByteArrayListContainer) { - if(meta_type->instantiations().size() == 0){ -// meta_type-> - } -// Q_ASSERT(meta_type->instantiations().size() == 1); - }*/ }else if (meta_type->typeEntry()->isComplex() && reinterpret_cast(type)->isGenericClass()) { for(const TypeParser::Info &ta : typeInfo.template_instantiations) { TypeInfo info; @@ -6130,13 +6474,21 @@ void AbstractMetaBuilder::decideUsagePattern(AbstractMetaType *meta_type) { if(meta_type->getReferenceType()==AbstractMetaType::RReference){ meta_type->setTypeUsagePattern(AbstractMetaType::RValuePattern); - } else if (type->isPrimitive() && (meta_type->actualIndirections() == 0 - || (meta_type->isConstant() && meta_type->getReferenceType()==AbstractMetaType::Reference && meta_type->indirections().size() == 0))) { - if(type->qualifiedCppName()=="std::nullptr_t") - meta_type->setTypeUsagePattern(AbstractMetaType::NullptrPattern); - else + } else if (type->isPrimitive()) { + if(meta_type->actualIndirections() == 0 + || (meta_type->isConstant() && meta_type->getReferenceType()==AbstractMetaType::Reference && meta_type->indirections().size() == 0)){ + if(type->qualifiedCppName()=="std::nullptr_t") + meta_type->setTypeUsagePattern(AbstractMetaType::NullptrPattern); + else + meta_type->setTypeUsagePattern(AbstractMetaType::PrimitivePattern); + }else if(meta_type->actualIndirections() == 1 + && type->qualifiedCppName().startsWith("_j")){ meta_type->setTypeUsagePattern(AbstractMetaType::PrimitivePattern); - + }else{ + meta_type->setTypeUsagePattern(AbstractMetaType::NativePointerPattern); + } + } else if (type->isAuto()) { + meta_type->setTypeUsagePattern(AbstractMetaType::AutoPattern); } else if (type->isVoid()) { meta_type->setTypeUsagePattern(AbstractMetaType::NativePointerPattern); @@ -6390,7 +6742,7 @@ QString AbstractMetaBuilder::translateDefaultValue(const QString& defaultValueEx || expr == "QStringView()" || expr == "QAnyStringView()" || expr == "QUtf8StringView()") { - return "\"\""; + return "(String)null"; } if(expr.startsWith("QString(\"") && expr.endsWith("\")")) return expr.mid(8, expr.length()-9); @@ -6872,6 +7224,87 @@ bool AbstractMetaBuilder::inheritHiddenBaseType(AbstractMetaClass *subclass, subclass->addFunction(f); } + const AbstractMetaFieldList& fields = subclass->fields(); + for(const AbstractMetaField *field : hidden_base_class->fields()) { + if (field->isStatic()) + continue; + + AbstractMetaField *f = field->copy(); + + bool ok = true; + AbstractMetaType *ftype = field->type(); + if(ftype){ + bool exchanged = false; + if(ftype->typeEntry()->isComplex() + && reinterpret_cast(ftype->typeEntry())->isTemplate() + && !info.template_instantiations.isEmpty()){ + const ComplexTypeEntry* ctype = reinterpret_cast(ftype->typeEntry()); + QStringList templateArgs; + for(const TypeParser::Info &i : info.template_instantiations) { + templateArgs << i.toString(); + } + if(const ComplexTypeEntry* instantiation = ctype->instantiations()[templateArgs]){ + AbstractMetaType *_ftype = ftype->copy(); + if(!instantiation->isGenericClass()){ + _ftype->setInstantiations({}); + _ftype->setTypeEntry(instantiation); + }else{ + _ftype->setInstantiations(template_types); + } + decideUsagePattern(_ftype); + f->setType(_ftype); + exchanged = true; + } + } + if(!exchanged){ + if(ftype->typeEntry()->qualifiedCppName()==hidden_base_class->typeEntry()->qualifiedCppName() + && ftype->instantiations().size()==0){ + ftype = ftype->copy(); + ftype->setInstantiations(template_types); + f->setType(inheritTemplateType(template_types, ftype, &ok)); + delete ftype; + }else if(iteratorTypeEntry + && newIteratorClass + && ftype->typeEntry()==iteratorTypeEntry){ + ftype = ftype->copy(); + ftype->setTypeEntry(newIteratorClass->typeEntry()); + f->setType(inheritTemplateType(template_types, ftype, &ok)); + delete ftype; + }else{ + f->setType(inheritTemplateType(template_types, ftype, &ok)); + } + } + } + if (!ok) { + delete f; + continue; + } + + if (!ok) { + delete f; + continue ; + } + + // if the instantiation has a function named the same as an existing + // function we have shadowing so we need to skip it. + bool found = false; + for (int i = 0; i < fields.size(); ++i) { + AbstractMetaField* f2 = fields.at(i); + if (f2->name() == f->name()) { + found = true; + if (found) { + continue; + } + } + } + if (found) { + delete f; + continue; + } + f->setEnclosingClass(subclass); + subclass->addField(f); + } + if(hidden_base_class->typeEntry()->qualifiedCppName()=="QStack" && template_types.size()>0 && template_types.at(0)->isPrimitive()){ @@ -7397,15 +7830,17 @@ void AbstractMetaBuilder::setupClonable(AbstractMetaClass *cls) { } } -static void write_reject_log_file(QFile *f, - const QMap, AbstractMetaBuilder::RejectReason> &rejects) { - if (!f->open(QIODevice::WriteOnly | QIODevice::Text)) { +static void write_reject_log_file(QFile &f, const QMap, AbstractMetaBuilder::RejectReason> &rejects) { + if(rejects.isEmpty()){ + f.remove(); + return; + }else if (!f.open(QIODevice::WriteOnly | QIODevice::Text)) { ReportHandler::warning(QString("failed to write log file: '%1'") - .arg(f->fileName())); + .arg(f.fileName())); return; } - QTextStream s(f); + QTextStream s(&f); decltype(QString().size()) maxSize = 0; for (QMap, AbstractMetaBuilder::RejectReason>::const_iterator it = rejects.constBegin(); @@ -7470,7 +7905,7 @@ void AbstractMetaBuilder::dumpLog() { QFile file(fileName); if (!outputDirectory().isNull()) file.setFileName(QDir(outputDirectory()).absoluteFilePath(fileName)); - write_reject_log_file(&file, m_rejected_classes); + write_reject_log_file(file, m_rejected_classes); } { @@ -7478,7 +7913,7 @@ void AbstractMetaBuilder::dumpLog() { QFile file(fileName); if (!outputDirectory().isNull()) file.setFileName(QDir(outputDirectory()).absoluteFilePath(fileName)); - write_reject_log_file(&file, m_rejected_functionals); + write_reject_log_file(file, m_rejected_functionals); } { @@ -7486,7 +7921,7 @@ void AbstractMetaBuilder::dumpLog() { QFile file(fileName); if (!outputDirectory().isNull()) file.setFileName(QDir(outputDirectory()).absoluteFilePath(fileName)); - write_reject_log_file(&file, m_rejected_enums); + write_reject_log_file(file, m_rejected_enums); } { @@ -7494,7 +7929,7 @@ void AbstractMetaBuilder::dumpLog() { QFile file(fileName); if (!outputDirectory().isNull()) file.setFileName(QDir(outputDirectory()).absoluteFilePath(fileName)); - write_reject_log_file(&file, m_rejected_functions); + write_reject_log_file(file, m_rejected_functions); } { @@ -7502,7 +7937,7 @@ void AbstractMetaBuilder::dumpLog() { QFile file(fileName); if (!outputDirectory().isNull()) file.setFileName(QDir(outputDirectory()).absoluteFilePath(fileName)); - write_reject_log_file(&file, m_rejected_template_functions); + write_reject_log_file(file, m_rejected_template_functions); } { @@ -7510,7 +7945,7 @@ void AbstractMetaBuilder::dumpLog() { QFile file(fileName); if (!outputDirectory().isNull()) file.setFileName(QDir(outputDirectory()).absoluteFilePath(fileName)); - write_reject_log_file(&file, m_rejected_signals); + write_reject_log_file(file, m_rejected_signals); } { @@ -7518,7 +7953,7 @@ void AbstractMetaBuilder::dumpLog() { QFile file(fileName); if (!outputDirectory().isNull()) file.setFileName(QDir(outputDirectory()).absoluteFilePath(fileName)); - write_reject_log_file(&file, m_rejected_fields); + write_reject_log_file(file, m_rejected_fields); } } diff --git a/generator/abstractmetabuilder.h b/generator/abstractmetabuilder.h index f59efd91..57895dcb 100644 --- a/generator/abstractmetabuilder.h +++ b/generator/abstractmetabuilder.h @@ -149,7 +149,11 @@ class AbstractMetaBuilder { } const QMap& typeSystemByPackage() const { return m_typeSystemByPackage; } const QMap>& containerBaseClasses() const { return m_containerBaseClasses; } - protected: + const QStringList &getIncludePathsList() const; + void setIncludePathsList(const QStringList &newIncludePathsList); + +protected: + AbstractMetaType* exchangeTemplateTypes(const AbstractMetaType* type, bool isReturn, const QHash& templateTypes); AbstractMetaClass *argumentToClass(ArgumentModelItem, const QString &contextString); virtual AbstractMetaClass *createMetaClass() = 0; @@ -203,6 +207,7 @@ class AbstractMetaBuilder { QHash m_enum_values; AbstractMetaClass *m_current_class; + AbstractMetaFunction *m_current_function; QList m_scopes; QString m_namespace_prefix; @@ -225,6 +230,7 @@ class AbstractMetaBuilder { QMap m_typeSystemByPackage; QMap> m_containerBaseClasses; QList m_scopeChangedEnums; + QStringList m_includePathsList; uint m_qtVersionMajor; uint m_qtVersionMinor; uint m_qtVersionPatch; diff --git a/generator/abstractmetalang.cpp b/generator/abstractmetalang.cpp index 8fc22783..21e55ce3 100644 --- a/generator/abstractmetalang.cpp +++ b/generator/abstractmetalang.cpp @@ -69,11 +69,7 @@ QString AbstractMetaType::cppSignature() const { if (isConstant()) s += "const "; - if(typeEntry()->qualifiedCppName().contains("qtjambireal")){ - s += typeEntry()->qualifiedCppName().replace("qtjambireal", "qreal"); - }else{ - s += typeEntry()->qualifiedCppName(); - } + s += typeEntry()->qualifiedCppName(); if (hasInstantiationInCpp()) { const QList& types = instantiations(); @@ -110,6 +106,7 @@ AbstractMetaTemplateParameter *AbstractMetaTemplateParameter::copy() const { AbstractMetaTemplateParameter *cpy = new AbstractMetaTemplateParameter; cpy->setName(AbstractMetaTemplateParameter::name()); cpy->setInstantiation(instantiation()); + cpy->setImplicit(isImplicit()); cpy->setType(type()->copy()); cpy->setDefaultType(defaultType()); @@ -541,7 +538,7 @@ int AbstractMetaFunction::actualMinimumArgumentCount() const { QSet removedArguments; for(const FunctionModification& modification : modifications) { for(const ArgumentModification& argument_modification : modification.argument_mods) { - if (argument_modification.removed) + if (argument_modification.type==ArgumentModification::Default && argument_modification.removed) removedArguments.insert(argument_modification.index); } } @@ -572,6 +569,8 @@ QList AbstractMetaFunction::referenceCounts(const AbstractMetaCl FunctionModificationList mods = this->modifications(cls); for(const FunctionModification& mod : mods) { for(const ArgumentModification& argument_mod : mod.argument_mods) { + if(argument_mod.type!=ArgumentModification::Default) + continue; if (argument_mod.index != idx && idx != -2) continue; returned += argument_mod.referenceCounts; @@ -596,6 +595,8 @@ QString AbstractMetaFunction::replacedDefaultExpression(const AbstractMetaClass FunctionModificationList modifications = this->modifications(cls); for(const FunctionModification& modification : modifications) { for(const ArgumentModification& argument_modification : modification.argument_mods) { + if(argument_modification.type!=ArgumentModification::Default) + continue; if (argument_modification.index == key && !argument_modification.replaced_default_expression.isEmpty()) { return argument_modification.replaced_default_expression; @@ -610,6 +611,8 @@ bool AbstractMetaFunction::removedDefaultExpression(const AbstractMetaClass *cls FunctionModificationList modifications = this->modifications(cls); for(const FunctionModification& modification : modifications) { for(const ArgumentModification& argument_modification : modification.argument_mods) { + if(argument_modification.type!=ArgumentModification::Default) + continue; if (argument_modification.index == key && argument_modification.removed_default_expression) { return true; @@ -626,6 +629,8 @@ bool AbstractMetaFunction::resetObjectAfterUse(int argument_idx) const { modifications << this->modifications(declaringClass()); for(const FunctionModification& modification : modifications) { for(const ArgumentModification& argumentModification : modification.argument_mods) { + if(argumentModification.type!=ArgumentModification::Default) + continue; if (argumentModification.index == argument_idx && argumentModification.reset_after_use) return true; } @@ -634,6 +639,22 @@ bool AbstractMetaFunction::resetObjectAfterUse(int argument_idx) const { return false; } +bool AbstractMetaFunction::valueAsPointer(int argument_idx) const { + FunctionModificationList modifications = this->modifications(implementingClass()); + if(implementingClass()!=declaringClass()) + modifications << this->modifications(declaringClass()); + for(const FunctionModification& modification : modifications) { + for(const ArgumentModification& argumentModification : modification.argument_mods) { + if(argumentModification.type!=ArgumentModification::Default) + continue; + if (argumentModification.index == argument_idx && argumentModification.value_as_pointer) + return true; + } + } + + return false; +} + bool AbstractMetaFunctional::resetObjectAfterUse(int argument_idx) const { for(const ArgumentModification& argumentModification : typeEntry()->argumentModification()) { if (argumentModification.index == argument_idx && argumentModification.reset_after_use) @@ -652,6 +673,8 @@ QString AbstractMetaFunction::nullPointerDefaultValue(const AbstractMetaClass *m FunctionModificationList modifications = this->modifications(cls); for(const FunctionModification& modification : modifications) { for(const ArgumentModification& argument_modification : modification.argument_mods) { + if(argument_modification.type!=ArgumentModification::Default) + continue; if (argument_modification.index == argument_idx && argument_modification.no_null_pointers) { return argument_modification.null_pointer_default_value; @@ -710,6 +733,8 @@ bool AbstractMetaFunction::nullPointersDisabled(const AbstractMetaClass *mainCla FunctionModificationList modifications = this->modifications(cls); for(const FunctionModification& modification : modifications) { for(const ArgumentModification& argument_modification : modification.argument_mods) { + if(argument_modification.type!=ArgumentModification::Default) + continue; if (argument_modification.index == argument_idx && argument_modification.no_null_pointers) { return true; @@ -727,10 +752,15 @@ QString AbstractMetaFunction::conversionRule(TypeSystem::Language language, int if(m_accessedField){ if( (key==1 && (this->attributes() & AbstractMetaAttributes::SetterFunction) == AbstractMetaAttributes::SetterFunction) || (key==0 && (this->attributes() & AbstractMetaAttributes::GetterFunction) == AbstractMetaAttributes::GetterFunction) ){ + TypeSystem::Language _language = language; + if(key==0) + _language = TypeSystem::Language(language | TypeSystem::Getter); + else + _language = TypeSystem::Language(language | TypeSystem::Setter); FieldModificationList modifications = m_accessedField->modifications(); for(const FieldModification& modification : modifications) { for(const CodeSnip& snip : modification.conversion_rules) { - if (snip.language == language){ + if (snip.language == _language){ QString core = snip.code(); if(!core.isEmpty()) return snip.code(); @@ -744,6 +774,8 @@ QString AbstractMetaFunction::conversionRule(TypeSystem::Language language, int modifications << this->modifications(declaringClass()); for(const FunctionModification& modification : modifications) { for(const ArgumentModification& argument_modification : modification.argument_mods) { + if(argument_modification.type!=ArgumentModification::Default) + continue; if (argument_modification.index != key) continue; @@ -765,10 +797,15 @@ bool AbstractMetaFunction::hasConversionRule(TypeSystem::Language language, int if(m_accessedField){ if( (key==1 && (this->attributes() & AbstractMetaAttributes::SetterFunction) == AbstractMetaAttributes::SetterFunction) || (key==0 && (this->attributes() & AbstractMetaAttributes::GetterFunction) == AbstractMetaAttributes::GetterFunction) ){ + TypeSystem::Language _language = language; + if(key==0) + _language = TypeSystem::Language(language | TypeSystem::Getter); + else + _language = TypeSystem::Language(language | TypeSystem::Setter); FieldModificationList modifications = m_accessedField->modifications(); for(const FieldModification& modification : modifications) { for(const CodeSnip& snip : modification.conversion_rules) { - if (snip.language == language && snip.hasCode()) + if (snip.language == _language && snip.hasCode()) return true; } } @@ -779,6 +816,8 @@ bool AbstractMetaFunction::hasConversionRule(TypeSystem::Language language, int modifications << this->modifications(declaringClass()); for(const FunctionModification& modification : modifications) { for(const ArgumentModification& argument_modification : modification.argument_mods) { + if(argument_modification.type!=ArgumentModification::Default) + continue; if (key>=0 && argument_modification.index != key) continue; @@ -820,12 +859,26 @@ bool AbstractMetaFunctional::hasConversionRule(TypeSystem::Language language, in return false; } +QString AbstractMetaFunction::proxyCall() const { + FunctionModificationList modifications = this->modifications(implementingClass()); + if(implementingClass()!=declaringClass()) + modifications << this->modifications(declaringClass()); + for(const FunctionModification& modification : modifications) { + if(!modification.proxyCall.isEmpty()) + return modification.proxyCall; + } + + return {}; +} + QString AbstractMetaFunction::argumentReplaced(int key) const { FunctionModificationList modifications = this->modifications(implementingClass()); if(implementingClass()!=declaringClass()) modifications << this->modifications(declaringClass()); for(const FunctionModification& modification : modifications) { for(const ArgumentModification& argument_modification : modification.argument_mods) { + if(argument_modification.type!=ArgumentModification::Default) + continue; if (argument_modification.index == key && !argument_modification.replace_value.isEmpty()) { return argument_modification.replace_value; } @@ -835,16 +888,35 @@ QString AbstractMetaFunction::argumentReplaced(int key) const { return ""; } -QList AbstractMetaFunction::addedArguments() const +QPair,QList> AbstractMetaFunction::addedArguments() const { - QList result; + QPair,QList> result; FunctionModificationList modifications = this->modifications(implementingClass()); if(implementingClass()!=declaringClass()) modifications << this->modifications(declaringClass()); for(const FunctionModification& modification : modifications) { for(const ArgumentModification& argument_modification : modification.argument_mods) { - if(argument_modification.index==ArgumentModification::ADDED_ARGUMENT){ - result << &argument_modification; + if(argument_modification.type==ArgumentModification::AdditionalArgument){ + if(argument_modification.index==std::numeric_limits::max()) + result.second << argument_modification; + else + result.first[argument_modification.index] = argument_modification; + } + } + } + return result; +} + +QList AbstractMetaFunction::addedParameterTypes() const +{ + QList result; + FunctionModificationList modifications = this->modifications(implementingClass()); + if(implementingClass()!=declaringClass()) + modifications << this->modifications(declaringClass()); + for(const FunctionModification& modification : modifications) { + for(const ArgumentModification& argument_modification : modification.argument_mods) { + if(argument_modification.type==ArgumentModification::TypeParameter){ + result << Parameter{{}, argument_modification.modified_name, argument_modification.modified_type}; } } } @@ -857,6 +929,8 @@ ArgumentRemove AbstractMetaFunction::argumentRemoved(int key) const { modifications << this->modifications(declaringClass()); for(const FunctionModification& modification : modifications) { for(const ArgumentModification& argument_modification : modification.argument_mods) { + if(argument_modification.type!=ArgumentModification::Default) + continue; if (argument_modification.index == key) { if (argument_modification.removed) { return ArgumentRemove_Remove; @@ -883,6 +957,8 @@ ThreadAffinity AbstractMetaFunction::argumentThreadAffinity(int key) const { modifications << this->modifications(declaringClass()); for(const FunctionModification& modification : modifications) { for(const ArgumentModification& argument_modification : modification.argument_mods) { + if(argument_modification.type!=ArgumentModification::Default) + continue; if (argument_modification.index == key) { return argument_modification.thread_affine; } @@ -993,6 +1069,8 @@ OwnershipRule AbstractMetaFunction::ownership(const AbstractMetaClass *cls, Type FunctionModificationList modifications = this->modifications(cls); for(const FunctionModification& modification : modifications) { for(const ArgumentModification& argument_modification : modification.argument_mods) { + if(argument_modification.type!=ArgumentModification::Default) + continue; if (argument_modification.index == key){ OwnershipRule o = argument_modification.ownerships.value(language, OwnershipRule{TypeSystem::InvalidOwnership, QString()}); if(o.ownership!=TypeSystem::InvalidOwnership) @@ -1026,6 +1104,8 @@ int AbstractMetaFunction::argumentTypeArrayLengthIndex(int key) const{ modifications << this->modifications(declaringClass()); for(const FunctionModification& modification : modifications) { for(const ArgumentModification& argument_modification : modification.argument_mods) { + if(argument_modification.type!=ArgumentModification::Default) + continue; if (argument_modification.index == key && argument_modification.useAsArrayType.testFlag(AsArrayType::Yes)) { return argument_modification.arrayLengthParameter; @@ -1042,6 +1122,8 @@ int AbstractMetaFunction::argumentTypeArrayLengthMinValue(int key) const{ modifications << this->modifications(declaringClass()); for(const FunctionModification& modification : modifications) { for(const ArgumentModification& argument_modification : modification.argument_mods) { + if(argument_modification.type!=ArgumentModification::Default) + continue; if (argument_modification.index == key && argument_modification.useAsArrayType.testFlag(AsArrayType::Yes)) { return argument_modification.minArrayLength; @@ -1057,6 +1139,8 @@ int AbstractMetaFunction::argumentTypeArrayLengthMaxValue(int key) const{ modifications << this->modifications(declaringClass()); for(const FunctionModification& modification : modifications) { for(const ArgumentModification& argument_modification : modification.argument_mods) { + if(argument_modification.type!=ArgumentModification::Default) + continue; if (argument_modification.index == key && argument_modification.useAsArrayType.testFlag(AsArrayType::Yes)) { return argument_modification.maxArrayLength; @@ -1102,6 +1186,8 @@ bool AbstractMetaFunction::argumentTypeArrayDeref(int key) const{ modifications << this->modifications(declaringClass()); for(const FunctionModification& modification : modifications) { for(const ArgumentModification& argument_modification : modification.argument_mods) { + if(argument_modification.type!=ArgumentModification::Default) + continue; if (argument_modification.index == key) { return argument_modification.useAsArrayType.testFlag(AsArrayType::Yes) && argument_modification.useAsArrayType.testFlag(AsArrayType::Deref); } @@ -1174,6 +1260,8 @@ bool AbstractMetaFunction::argumentTypeArray(int key) const{ modifications << this->modifications(declaringClass()); for(const FunctionModification& modification : modifications) { for(const ArgumentModification& argument_modification : modification.argument_mods) { + if(argument_modification.type!=ArgumentModification::Default) + continue; if (argument_modification.index == key) { return argument_modification.useAsArrayType.testFlag(AsArrayType::Yes) && !argument_modification.useAsArrayType.testFlag(AsArrayType::Buffer); } @@ -1189,6 +1277,8 @@ bool AbstractMetaFunction::argumentTypeBuffer(int key) const{ modifications << this->modifications(declaringClass()); for(const FunctionModification& modification : modifications) { for(const ArgumentModification& argument_modification : modification.argument_mods) { + if(argument_modification.type!=ArgumentModification::Default) + continue; if (argument_modification.index == key) { return argument_modification.useAsArrayType.testFlag(AsArrayType::Yes) && argument_modification.useAsArrayType.testFlag(AsArrayType::Buffer); } @@ -1204,6 +1294,8 @@ bool AbstractMetaFunction::argumentTypeArrayVarArgs(int key) const{ modifications << this->modifications(declaringClass()); for(const FunctionModification& modification : modifications) { for(const ArgumentModification& argument_modification : modification.argument_mods) { + if(argument_modification.type!=ArgumentModification::Default) + continue; if (argument_modification.index == key) { return argument_modification.useAsArrayType.testFlag(AsArrayType::Yes) && argument_modification.useAsArrayType.testFlag(AsArrayType::VarArgs); } @@ -1267,7 +1359,8 @@ QString AbstractMetaFunction::typeReplaced(int key, QString* jniType) const { modifications << this->modifications(declaringClass()); for(const FunctionModification& modification : modifications) { for(const ArgumentModification& argument_modification : modification.argument_mods) { - if (argument_modification.index == key + if (argument_modification.type==ArgumentModification::Default + && argument_modification.index == key && !argument_modification.modified_type.isEmpty()) { if(jniType && !argument_modification.modified_jni_type.isEmpty()){ *jniType = argument_modification.modified_jni_type; @@ -1284,7 +1377,9 @@ QString AbstractMetaFunctional::typeReplaced(int key, QString* jniType) const { for(const ArgumentModification& argument_modification : this->typeEntry()->argumentModification()) { if (argument_modification.index == key && !argument_modification.modified_type.isEmpty()) { - if(jniType && !argument_modification.modified_jni_type.isEmpty()){ + if(jniType + && argument_modification.type==ArgumentModification::Default + && !argument_modification.modified_jni_type.isEmpty()){ *jniType = argument_modification.modified_jni_type; } return argument_modification.modified_type; @@ -1294,11 +1389,29 @@ QString AbstractMetaFunctional::typeReplaced(int key, QString* jniType) const { return QString(); } +void writeTypeInfo(QTextStream &s, const AbstractMetaType *type); + QString AbstractMetaFunction::minimalSignature() const { if (!m_cached_minimal_signature.isEmpty()) return m_cached_minimal_signature; - QString minimalSignature = originalName() + "("; + QString tmpl; + for(int i=0; itype()){ + if(!tmpl.isEmpty()){ + tmpl += ","; + } + QTextStream s2(&tmpl); + writeTypeInfo(s2, param->type()); + }else{ + tmpl.clear(); + break; + } + } + if(!tmpl.isEmpty()) + tmpl = "<" + tmpl.trimmed() + ">"; + QString minimalSignature = originalName() + tmpl + "("; const AbstractMetaArgumentList& arguments = this->arguments(); for (int i = 0; i < arguments.count(); ++i) { @@ -1871,7 +1984,7 @@ void AbstractMetaClass::setFunctions(const AbstractMetaFunctionList &functions) *final_function += AbstractMetaAttributes::ForceShellImplementation; QString warn = QString("hiding of function '%1' in class '%2'") - .arg(final_function->name()).arg(name()); + .arg(final_function->name(), name()); ReportHandler::warning(warn); } } @@ -1882,11 +1995,12 @@ void AbstractMetaClass::setFunctions(const AbstractMetaFunctionList &functions) final_functions += f; currentName = f->name(); } - if(f->name()==QLatin1String("metaObject") && f->arguments().isEmpty()){ + if((this->isQObject() || this->m_has_Q_GADGET) && f->name()==QLatin1String("metaObject") && f->arguments().isEmpty()){ m_has_metaObject = true; m_has_private_metaObject = f->wasPrivate(); *f += AbstractMetaAttributes::Private; - }else if(f->name()==QLatin1String("qt_metacall") + }else if((this->isQObject() || this->m_has_Q_GADGET) + && f->name()==QLatin1String("qt_metacall") && f->arguments().size()==3 && f->arguments()[0]->type()->cppSignature()==QLatin1String("QMetaObject::Call") && f->arguments()[1]->type()->cppSignature()==QLatin1String("int") @@ -1894,12 +2008,22 @@ void AbstractMetaClass::setFunctions(const AbstractMetaFunctionList &functions) m_has_metacall = true; m_has_private_metacall = f->wasPrivate(); *f += AbstractMetaAttributes::Private; - }else if(f->name()==QLatin1String("qt_metacast") + }else if((this->isQObject() || this->m_has_Q_GADGET) + && f->name()==QLatin1String("qt_metacast") && f->arguments().size()==1 && f->arguments()[0]->type()->cppSignature()==QLatin1String("const char *")){ m_has_metacast = true; m_has_private_metacast = f->wasPrivate(); *f += AbstractMetaAttributes::Private; + }else{ + if(f->type() && f->type()->isNativePointer() && f->type()->typeEntry()->isValue() && f->valueAsPointer(0)){ + f->type()->setTypeUsagePattern(AbstractMetaType::ObjectPattern); + } + for(AbstractMetaArgument* arg : f->arguments()){ + if(arg->type()->isNativePointer() && arg->type()->typeEntry()->isValue() && f->valueAsPointer(arg->argumentIndex()+1)){ + arg->type()->setTypeUsagePattern(AbstractMetaType::ObjectPattern); + } + } } } @@ -2028,6 +2152,14 @@ void AbstractMetaClass::addFunction(AbstractMetaFunction *function) { if (!function->isDestructor()){ m_functions << function; + if(function->type() && function->type()->isNativePointer() && function->type()->typeEntry()->isValue() && function->valueAsPointer(0)){ + function->type()->setTypeUsagePattern(AbstractMetaType::ObjectPattern); + } + for(AbstractMetaArgument* arg : function->arguments()){ + if(arg->type()->isNativePointer() && arg->type()->typeEntry()->isValue() && function->valueAsPointer(arg->argumentIndex()+1)){ + arg->type()->setTypeUsagePattern(AbstractMetaType::ObjectPattern); + } + } sortFunctions(); } @@ -3009,9 +3141,11 @@ void AbstractMetaClass::fixFunctions(std::function,QList> addedArguments; if (!hasNonFinalModifier && !isBaseImplPrivate - && f->addedArguments().isEmpty() + && ( addedArguments = f->addedArguments() ).first.isEmpty() + && addedArguments.second.isEmpty() && (f->implementingClass()->typeEntry()->codeGeneration() & TypeEntry::GenerateTargetLang) && (sf->implementingClass()->typeEntry()->codeGeneration() & TypeEntry::GenerateTargetLang)) { ReportHandler::warning(QString::fromLatin1("Shadowing: %1::%2 and %3::%4; Java code will not compile") @@ -3126,9 +3260,6 @@ QString AbstractMetaType::minimalSignature() const { QString minimalSignature; if (isConstant()) minimalSignature += "const "; -// if(typeEntry()->qualifiedCppName()=="qtjambireal") -// minimalSignature += "qreal"; -// else minimalSignature += typeEntry()->qualifiedCppName(); if (hasInstantiations() && (!typeEntry()->isContainer() || static_cast(typeEntry())->type()!=ContainerTypeEntry::StringListContainer)) { diff --git a/generator/abstractmetalang.h b/generator/abstractmetalang.h index 5bd12f5f..bbd30a3a 100644 --- a/generator/abstractmetalang.h +++ b/generator/abstractmetalang.h @@ -130,7 +130,7 @@ class AbstractMetaAttributes { Deprecated = 0x01000000, - ConstExpr = 0x02000000, + ConstExpr = 0x04000000, Comment = 0x00800000, @@ -233,7 +233,8 @@ class AbstractMetaType { ThreadPattern, TemplateArgumentPattern, RValuePattern, - NullptrPattern + NullptrPattern, + AutoPattern }; AbstractMetaType() : @@ -492,13 +493,16 @@ class AbstractMetaVariable { class AbstractMetaTemplateParameter : public AbstractMetaVariable { public: - AbstractMetaTemplateParameter(){} + AbstractMetaTemplateParameter():m_implicit(false){} QString instantiation() const { return m_instantiation; } void setInstantiation(const QString &expr) { m_instantiation = expr; } + void setImplicit(bool implicit){m_implicit = implicit;} + bool isImplicit() const{return m_implicit;} AbstractMetaTemplateParameter *copy() const; private: QString m_instantiation; + bool m_implicit; }; class AbstractMetaArgument : public AbstractMetaVariable { @@ -608,7 +612,8 @@ class AbstractMetaFunction : public AbstractMetaAttributes { m_actualMinimumArgumentCount(-1), m_accessedField(nullptr), m_jumptable_id(-1), - m_functionReferenceType(AbstractMetaType::NoReference) + m_functionReferenceType(AbstractMetaType::NoReference), + m_functionTemplate(nullptr) { } @@ -687,7 +692,14 @@ class AbstractMetaFunction : public AbstractMetaAttributes { if (arg->type()->isTemplateArgument()) return true; } - return m_type && m_type->isTemplateArgument(); + return m_type && (m_type->isTemplateArgument() || m_type->typeUsagePattern()==AbstractMetaType::AutoPattern); + } + bool hasTemplateTypes() const{ + for(const AbstractMetaTemplateParameter *arg : m_templateParameters) { + if (arg->type()->isTemplateArgument() && arg->defaultType().isEmpty()) + return true; + } + return false; } FunctionType functionType() const { return m_function_type; } void setFunctionType(FunctionType type) { m_function_type = type; } @@ -720,6 +732,8 @@ class AbstractMetaFunction : public AbstractMetaAttributes { bool resetObjectAfterUse(int argument_idx) const; + bool valueAsPointer(int argument_idx) const; + // Returns the ownership rules for the given argument in the given context OwnershipRule ownership(const AbstractMetaClass *cls, TypeSystem::Language language, int idx) const; @@ -746,8 +760,9 @@ class AbstractMetaFunction : public AbstractMetaAttributes { ArgumentRemove argumentRemoved(int) const; ThreadAffinity argumentThreadAffinity(int) const; - QList addedArguments() const; + QPair,QList> addedArguments() const; + QString proxyCall() const; QString argumentReplaced(int key) const; bool needsSuppressUncheckedWarning() const; bool needsSuppressRawTypeWarning() const; @@ -799,6 +814,16 @@ class AbstractMetaFunction : public AbstractMetaAttributes { m_functionReferenceType = functionReferenceType; } + AbstractMetaFunction* functionTemplate() const{ + return m_functionTemplate; + } + + void setFunctionTemplate(AbstractMetaFunction* functionTemplate) { + m_functionTemplate = functionTemplate; + } + + QList addedParameterTypes() const; + private: QString m_name; QString m_original_name; @@ -806,6 +831,7 @@ class AbstractMetaFunction : public AbstractMetaAttributes { mutable QString m_cached_full_signature; mutable QString m_cached_full_signature_no_name; mutable QString m_cached_minimal_signature; + mutable QString m_cached_minimal_template_signature; mutable QString m_cached_modified_name; FunctionType m_function_type; @@ -826,6 +852,7 @@ class AbstractMetaFunction : public AbstractMetaAttributes { int m_jumptable_id; QString m_deprecatedComment; AbstractMetaType::ReferenceType m_functionReferenceType; + AbstractMetaFunction* m_functionTemplate; }; class AbstractMetaEnum; diff --git a/generator/cppgenerator.cpp b/generator/cppgenerator.cpp index 8e1790e9..817d7138 100644 --- a/generator/cppgenerator.cpp +++ b/generator/cppgenerator.cpp @@ -138,6 +138,10 @@ QString CppGenerator::translateType(const AbstractMetaType *java_type, Option op } } +void writeTypeInfo(QTextStream &s, const AbstractMetaType *type){ + CppGenerator::writeTypeInfo(s, type, CppGenerator::NoOption); +} + void CppGenerator::writeTypeInfo(QTextStream &s, const AbstractMetaType *type, Option options) { if(type->typeEntry()->isComplex()){ const ComplexTypeEntry *ctype = reinterpret_cast(type->typeEntry()); @@ -164,12 +168,7 @@ void CppGenerator::writeTypeInfo(QTextStream &s, const AbstractMetaType *type, O originalTypeDescription = QMetaObject::normalizedSignature(originalTypeDescription.toLatin1().constData()); originalTypeDescription = fixNormalizedSignatureForQt(originalTypeDescription); } - if (originalTypeDescription.contains("qtjambireal")){ // map generator type to qreal type - s << originalTypeDescription.replace("qtjambireal", "qreal"); - if (!(options & SkipName)) - s << ' '; - return; - }else if (originalTypeDescription.contains("qreal")){ // map generator type to qreal type + if (originalTypeDescription.contains("qreal")){ // map generator type to qreal type s << originalTypeDescription; if (!(options & SkipName)) s << ' '; @@ -313,6 +312,7 @@ void CppGenerator::writeTypeInfo(QTextStream &s, const AbstractMetaType *type, O s << ' '; } +QByteArray jniName(const QString &name); void CppGenerator::writeFunctionArguments(QTextStream &s, const AbstractMetaArgumentList &arguments, @@ -330,46 +330,8 @@ void CppGenerator::writeFunctionArguments(QTextStream &s, AbstractMetaArgument *arg = arguments.at(i); if(option & JNIProxyFunction){ QString typeReplaced = java_function->typeReplaced(arg->argumentIndex() + 1); - if(typeReplaced=="int") - s << "jint"; - else if(typeReplaced=="long") - s << "jlong"; - else if(typeReplaced=="short") - s << "jshort"; - else if(typeReplaced=="byte") - s << "jbyte"; - else if(typeReplaced=="boolean") - s << "jboolean"; - else if(typeReplaced=="char") - s << "jchar"; - else if(typeReplaced=="float") - s << "jfloat"; - else if(typeReplaced=="double") - s << "jdouble"; - else if(typeReplaced=="int[]") - s << "jintArray"; - else if(typeReplaced=="long[]") - s << "jlongArray"; - else if(typeReplaced=="short[]") - s << "jshortArray"; - else if(typeReplaced=="byte[]") - s << "jbyteArray"; - else if(typeReplaced=="boolean[]") - s << "jbooleanArray"; - else if(typeReplaced=="char[]") - s << "jcharArray"; - else if(typeReplaced=="float[]") - s << "jfloatArray"; - else if(typeReplaced=="double[]") - s << "jdoubleArray"; - else if(typeReplaced.endsWith("[]")) - s << "jobjectArray"; - else if(typeReplaced.startsWith("java.lang.Class")) - s << "jclass"; - else if(typeReplaced=="java.lang.String" || typeReplaced=="String") - s << "jstring"; - else if(!typeReplaced.isEmpty()) - s << "jobject"; + if(!typeReplaced.isEmpty()) + s << jniName(typeReplaced); else{ if(java_function->argumentTypeBuffer(arg->argumentIndex() + 1)){ s << "jobject"; @@ -459,7 +421,7 @@ void CppGenerator::writeFunctionSignature(QTextStream &s, // ### remove the implementor AbstractMetaType *function_type = java_function->type(); - if(java_function->hasTemplateArgumentTypes()){ + if(java_function->hasTemplateTypes()){ s << "template<"; for(AbstractMetaTemplateParameter * templateParameter : java_function->templateParameters()){ if(templateParameter->type()){ @@ -476,48 +438,8 @@ void CppGenerator::writeFunctionSignature(QTextStream &s, if ((option & SkipReturnType) == 0) { if((option & JNIProxyFunction)){ QString typeReplaced = java_function->typeReplaced(0); - if(typeReplaced=="void") - s << "void "; - else if(typeReplaced.startsWith("java.lang.Class")) - s << "jclass "; - else if(typeReplaced=="java.lang.String" || typeReplaced=="String") - s << "jstring "; - else if(typeReplaced=="int") - s << "jint "; - else if(typeReplaced=="long") - s << "jlong "; - else if(typeReplaced=="short") - s << "jshort "; - else if(typeReplaced=="byte") - s << "jbyte "; - else if(typeReplaced=="boolean") - s << "jboolean "; - else if(typeReplaced=="char") - s << "jchar "; - else if(typeReplaced=="float") - s << "jfloat "; - else if(typeReplaced=="double") - s << "jdouble "; - else if(typeReplaced=="int[]") - s << "jintArray "; - else if(typeReplaced=="long[]") - s << "jlongArray "; - else if(typeReplaced=="short[]") - s << "jshortArray "; - else if(typeReplaced=="byte[]") - s << "jbyteArray "; - else if(typeReplaced=="boolean[]") - s << "jbooleanArray "; - else if(typeReplaced=="char[]") - s << "jcharArray "; - else if(typeReplaced=="float[]") - s << "jfloatArray "; - else if(typeReplaced=="double[]") - s << "jdoubleArray "; - else if(typeReplaced.endsWith("[]")) - s << "jobjectArray "; - else if(!typeReplaced.isEmpty()) - s << "jobject "; + if(!typeReplaced.isEmpty()) + s << jniName(typeReplaced) << " "; else if (function_type) { s << translateType(function_type, Option(Option(option & ~JNIProxyFunction) & ~UseNativeIds)); s << " "; @@ -578,6 +500,15 @@ void CppGenerator::writeFunctionSignature(QTextStream &s, if(!java_function->isStatic()) s << ", jobject __this"; } + const QPair,QList> addedArguments = java_function->addedArguments(); + for(const ArgumentModification& argumentMod : addedArguments.first.values()){ + QString jniType = argumentMod.modified_jni_type.isEmpty() ? jniName(argumentMod.modified_type) : argumentMod.modified_jni_type; + s << ", " << jniType << " " << argumentMod.modified_name; + } + for(const ArgumentModification& argumentMod : addedArguments.second){ + QString jniType = argumentMod.modified_jni_type.isEmpty() ? jniName(argumentMod.modified_type) : argumentMod.modified_jni_type; + s << ", " << jniType << " " << argumentMod.modified_name; + } needComma = true; } @@ -752,7 +683,26 @@ QString CppGenerator::jni_signature(const AbstractMetaFunction *function, JNISig if(function->isConstructor()){ format = JNISignatureFormat(format | NoModification); } + QMap parameterTypesByName; + for(const Parameter& parameterType : function->addedParameterTypes()){ + parameterTypesByName[parameterType.name] = parameterType.extends.split("&").first().trimmed(); + } + const QPair,QList> addedArguments = function->addedArguments(); const AbstractMetaArgumentList& arguments = function->arguments(); + int argumentCounter = 1; + while(addedArguments.first.contains(argumentCounter)){ + const ArgumentModification& mod = addedArguments.first[argumentCounter]; + if(parameterTypesByName.contains(mod.modified_type)){ + QString t = parameterTypesByName[mod.modified_type]; + if(t.isEmpty()) + t = "java.lang.Object"; + returned += jni_signature(t, format); + }else if(mod.modified_jni_type.isEmpty()) + returned += jni_signature(mod.modified_type, format); + else + returned += jni_signature(mod.modified_jni_type, format); + ++argumentCounter; + } for(const AbstractMetaArgument *argument : arguments) { if (function->argumentRemoved(argument->argumentIndex() + 1)==ArgumentRemove_No) { if(function->argumentTypeArray(argument->argumentIndex() + 1)){ @@ -804,19 +754,45 @@ QString CppGenerator::jni_signature(const AbstractMetaFunction *function, JNISig QString modified_type = function->typeReplaced(argument->argumentIndex() + 1, &jniType); if (modified_type.isEmpty()) returned += jni_signature(argument->type(), format); - else if(jniType.isEmpty()) - returned += jni_signature(modified_type, format); - else - returned += jni_signature(jniType, format); + else{ + if(parameterTypesByName.contains(modified_type)){ + QString t = parameterTypesByName[modified_type]; + if(t.isEmpty()) + t = "java.lang.Object"; + returned += jni_signature(t, format); + }else if(jniType.isEmpty()) + returned += jni_signature(modified_type, format); + else + returned += jni_signature(jniType, format); + } } } + ++argumentCounter; + while(addedArguments.first.contains(argumentCounter)){ + const ArgumentModification& mod = addedArguments.first[argumentCounter]; + if(parameterTypesByName.contains(mod.modified_type)){ + QString t = parameterTypesByName[mod.modified_type]; + if(t.isEmpty()) + t = "java.lang.Object"; + returned += jni_signature(t, format); + }else if(mod.modified_jni_type.isEmpty()) + returned += jni_signature(mod.modified_type, format); + else + returned += jni_signature(mod.modified_jni_type, format); + ++argumentCounter; + } } - for(const ArgumentModification *mod : function->addedArguments()){ - if(mod->modified_jni_type.isEmpty()) - returned += jni_signature(mod->modified_type, format); + for(const ArgumentModification &mod : addedArguments.second){ + if(parameterTypesByName.contains(mod.modified_type)){ + QString t = parameterTypesByName[mod.modified_type]; + if(t.isEmpty()) + t = "java.lang.Object"; + returned += jni_signature(t, format); + }else if(mod.modified_jni_type.isEmpty()) + returned += jni_signature(mod.modified_type, format); else - returned += jni_signature(mod->modified_jni_type, format); + returned += jni_signature(mod.modified_jni_type, format); } returned += ")"; @@ -828,11 +804,17 @@ QString CppGenerator::jni_signature(const AbstractMetaFunction *function, JNISig returned += jni_signature(function->type(), JNISignatureFormat(format | ReturnType)); else returned += jni_signature(function->type(), JNISignatureFormat(format | ReturnType | NoQContainers)); - }else if(jniType.isEmpty()) - returned += jni_signature(modified_type, JNISignatureFormat(format | ReturnType)); - else - returned += jni_signature(jniType, JNISignatureFormat(format | ReturnType)); - + }else{ + if(parameterTypesByName.contains(modified_type)){ + QString t = parameterTypesByName[modified_type]; + if(t.isEmpty()) + t = "java.lang.Object"; + returned += jni_signature(t, JNISignatureFormat(format | ReturnType)); + }else if(jniType.isEmpty()) + returned += jni_signature(modified_type, JNISignatureFormat(format | ReturnType)); + else + returned += jni_signature(jniType, JNISignatureFormat(format | ReturnType)); + } return returned; } diff --git a/generator/cppheadergenerator.cpp b/generator/cppheadergenerator.cpp index 1e25fbbb..b2b1f1a0 100644 --- a/generator/cppheadergenerator.cpp +++ b/generator/cppheadergenerator.cpp @@ -160,14 +160,14 @@ void CppHeaderGenerator::write(QTextStream &s, const AbstractMetaFunctional *jav s << Qt::endl << "QT_WARNING_DISABLE_DEPRECATED" << Qt::endl << Qt::endl; } writeInjectedCode(s, java_class, {CodeSnip::Position1}); - if(QT_VERSION_CHECK(m_qtVersionMajor,m_qtVersionMinor,m_qtVersionPatch) >= QT_VERSION_CHECK(6,0,0)){ + /*if(QT_VERSION_CHECK(m_qtVersionMajor,m_qtVersionMinor,m_qtVersionPatch) >= QT_VERSION_CHECK(6,0,0)){ if(java_class->typeEntry()->qualifiedCppName().startsWith("QQuick") || java_class->typeEntry()->qualifiedCppName().startsWith("QSG")){ writeInclude(s, Include(Include::IncludePath, "QtGui/qtguiglobal.h"), included); s << "#undef QT_FEATURE_vulkan" << Qt::endl << "#define QT_FEATURE_vulkan -1" << Qt::endl; } - } + }*/ if(java_class->enclosingClass()){ writeInclude(s, java_class->enclosingClass()->typeEntry()->include(), included); } @@ -307,14 +307,14 @@ void CppHeaderGenerator::write(QTextStream &s, const AbstractMetaClass *java_cla s << Qt::endl << "QT_WARNING_DISABLE_DEPRECATED" << Qt::endl << Qt::endl; } writeInjectedCode(s, java_class, {CodeSnip::Position1}); - if(QT_VERSION_CHECK(m_qtVersionMajor,m_qtVersionMinor,m_qtVersionPatch) >= QT_VERSION_CHECK(6,0,0)){ + /*if(QT_VERSION_CHECK(m_qtVersionMajor,m_qtVersionMinor,m_qtVersionPatch) >= QT_VERSION_CHECK(6,0,0)){ if(java_class->typeEntry()->qualifiedCppName().startsWith("QQuick") || java_class->typeEntry()->qualifiedCppName().startsWith("QSG")){ writeInclude(s, Include(Include::IncludePath, "QtGui/qtguiglobal.h"), included); s << "#undef QT_FEATURE_vulkan" << Qt::endl << "#define QT_FEATURE_vulkan -1" << Qt::endl; } - } + }*/ if(java_class->enclosingClass()){ writeInclude(s, java_class->enclosingClass()->typeEntry()->include(), included); diff --git a/generator/cppimplgenerator.cpp b/generator/cppimplgenerator.cpp index 93f19aa6..bab6b1a8 100644 --- a/generator/cppimplgenerator.cpp +++ b/generator/cppimplgenerator.cpp @@ -101,7 +101,7 @@ QString CppImplGenerator::default_return_statement_qt(const AbstractMetaType *ja if(java_type->typeEntry()->isValue()){ if(AbstractMetaClass* cls = m_classes.findClass(java_type->typeEntry()->name())){ if(!cls->hasPublicStandardConstructor() && cls->hasConstructors() && cls->name()!="QItemSelection"){ - CustomFunction customFunction = reinterpret_cast(java_type->typeEntry())->customConstructor(TypeEntry::DefaultConstructor); + CustomFunction customFunction = reinterpret_cast(java_type->typeEntry())->customConstructor(ComplexTypeEntry::DefaultConstructor); if(customFunction.hasCode()){ QTextStream s(&returnStr); finished = true; @@ -206,9 +206,7 @@ QByteArray jniTypeName(const QString &name) { } QByteArray jniName(const QString &name) { - if(name=="java.lang.String" || name=="String") - return "jstring"; - else if(name=="void") + if(name=="void") return "void"; else if(name=="int") return "jint"; @@ -226,45 +224,31 @@ QByteArray jniName(const QString &name) { return "jboolean"; else if(name=="char") return "jchar"; - else if(name=="int[]") + else if(name=="int[]" || name=="int...") return "jintArray"; - else if(name=="long[]") + else if(name=="long[]" || name=="long...") return "jlongArray"; - else if(name=="short[]") + else if(name=="short[]" || name=="short...") return "jshortArray"; - else if(name=="byte[]") + else if(name=="byte[]" || name=="byte...") return "jbyteArray"; - else if(name=="double[]") + else if(name=="double[]" || name=="double...") return "jdoubleArray"; - else if(name=="float[]") + else if(name=="float[]" || name=="float...") return "jfloatArray"; - else if(name=="boolean[]") + else if(name=="boolean[]" || name=="boolean...") return "jbooleanArray"; - else if(name=="char[]") + else if(name=="char[]" || name=="char...") return "jcharArray"; - else if(name.endsWith("[]")) + else if(name.endsWith("[]") || name.endsWith("...")) return "jobjectArray"; + else if(name=="java.lang.String" || name=="String") + return "jstring"; + else if(name.startsWith("java.lang.Class")) + return "jclass"; TypeEntry *entry = TypeDatabase::instance()->findType(name); if (entry) return entry->jniName().toLatin1(); - else if(name=="boolean") - return "jboolean"; - else if(name=="void") - return "void"; - else if(name=="int") - return "jint"; - else if(name=="long") - return "jlong"; - else if(name=="short") - return "jshort"; - else if(name=="byte") - return "jbyte"; - else if(name=="double") - return "jdouble"; - else if(name=="float") - return "jfloat"; - else if(name=="char") - return "jchar"; else return "jobject"; } @@ -485,14 +469,14 @@ void CppImplGenerator::write(QTextStream &s, const AbstractMetaFunctional *java_ s << Qt::endl << "QT_WARNING_DISABLE_DEPRECATED" << Qt::endl << Qt::endl; } writeCodeInjections(s, java_class->typeEntry(), CodeSnip::Position1, TypeSystem::NativeCode); - if(QT_VERSION_CHECK(m_qtVersionMajor,m_qtVersionMinor,m_qtVersionPatch) >= QT_VERSION_CHECK(6,0,0)){ + /*if(QT_VERSION_CHECK(m_qtVersionMajor,m_qtVersionMinor,m_qtVersionPatch) >= QT_VERSION_CHECK(6,0,0)){ if(java_class->typeEntry()->qualifiedCppName().startsWith("QQuick") || java_class->typeEntry()->qualifiedCppName().startsWith("QSG")){ writeInclude(s, Include(Include::IncludePath, "QtGui/qtguiglobal.h"), included); s << "#undef QT_FEATURE_vulkan" << Qt::endl << "#define QT_FEATURE_vulkan -1" << Qt::endl; } - } + }*/ if(java_class->enclosingClass()){ writeInclude(s, java_class->enclosingClass()->typeEntry()->include(), included); } @@ -1161,14 +1145,14 @@ void CppImplGenerator::write(QTextStream &s, const AbstractMetaClass *java_class s << Qt::endl << "QT_WARNING_DISABLE_DEPRECATED" << Qt::endl << Qt::endl; } CppHeaderGenerator::writeInjectedCode(s, java_class, {CodeSnip::Position1}); - if(QT_VERSION_CHECK(m_qtVersionMajor,m_qtVersionMinor,m_qtVersionPatch) >= QT_VERSION_CHECK(6,0,0)){ + /*if(QT_VERSION_CHECK(m_qtVersionMajor,m_qtVersionMinor,m_qtVersionPatch) >= QT_VERSION_CHECK(6,0,0)){ if(java_class->typeEntry()->qualifiedCppName().startsWith("QQuick") || java_class->typeEntry()->qualifiedCppName().startsWith("QSG")){ writeInclude(s, Include(Include::IncludePath, "QtGui/qtguiglobal.h"), included); s << "#undef QT_FEATURE_vulkan" << Qt::endl << "#define QT_FEATURE_vulkan -1" << Qt::endl; } - } + }*/ writeInclude(s, java_class->typeEntry()->include(), included); writeExtraIncludes(s, java_class, included, true); writeInclude(s, Include(Include::IncludePath, "qtjambi/qtjambi_core.h"), included); @@ -2913,7 +2897,7 @@ void CppImplGenerator::writeShellFunction(QTextStream &s, const AbstractMetaFunc if(function_type->typeEntry()->isValue()){ if(AbstractMetaClass* cls = m_classes.findClass(function_type->typeEntry()->name())){ if(!cls->hasPublicStandardConstructor() && cls->hasConstructors() && cls->name()!="QItemSelection"){ - CustomFunction customFunction = reinterpret_cast(function_type->typeEntry())->customConstructor(TypeEntry::DefaultConstructor); + CustomFunction customFunction = reinterpret_cast(function_type->typeEntry())->customConstructor(ComplexTypeEntry::DefaultConstructor); if(customFunction.hasCode()){ finished = true; s << " __qt_return_value = *reinterpret_cast<"; @@ -3566,15 +3550,17 @@ bool CppImplGenerator::writeBaseClassFunctionCall(QTextStream &s, QString tmpl; for(int i=0; itemplateParameters().size(); i++){ AbstractMetaTemplateParameter* param = java_function->templateParameters()[i]; - if(param->type()){ - if(!tmpl.isEmpty()){ - tmpl += ", "; + if(!param->isImplicit()){ + if(param->type()){ + if(!tmpl.isEmpty()){ + tmpl += ", "; + } + QTextStream _s(&tmpl); + writeTypeInfo(_s, param->type()); + }else{ + tmpl.clear(); + break; } - QTextStream _s(&tmpl); - writeTypeInfo(_s, param->type()); - }else{ - tmpl.clear(); - break; } } if(!tmpl.isEmpty()){ @@ -3649,7 +3635,25 @@ void CppImplGenerator::writeFunctionName(QTextStream &s, args += jni_signature(java_function->declaringClass()->typeEntry()->qualifiedTargetLangName(), format); } } - + QMap parameterTypesByName; + for(const Parameter& parameterType : java_function->addedParameterTypes()){ + parameterTypesByName[parameterType.name] = parameterType.extends.split("&").first().trimmed(); + } + const QPair,QList> addedArguments = java_function->addedArguments(); + int argumentCounter = 1; + while(addedArguments.first.contains(argumentCounter)){ + const ArgumentModification& mod = addedArguments.first[argumentCounter]; + if(parameterTypesByName.contains(mod.modified_type)){ + QString t = parameterTypesByName[mod.modified_type]; + if(t.isEmpty()) + t = "java.lang.Object"; + args += jni_signature(t, format); + }else if(mod.modified_jni_type.isEmpty()) + args += jni_signature(mod.modified_type, format); + else + args += jni_signature(mod.modified_jni_type, format); + ++argumentCounter; + } if (!arguments.isEmpty()) { for(const AbstractMetaArgument *argument : arguments) { if (java_function->argumentRemoved(argument->argumentIndex() + 1)==ArgumentRemove_No) { @@ -3705,22 +3709,48 @@ void CppImplGenerator::writeFunctionName(QTextStream &s, if(arg=="Lio_qt_core_QString_2") arg = "Ljava_lang_CharSequence_2"; args += arg; - }else if(jniType.isEmpty()){ - args += jni_signature(modified_type, format); }else{ - args += jni_signature(jniType, format); + if(parameterTypesByName.contains(modified_type)){ + QString t = parameterTypesByName[modified_type]; + if(t.isEmpty()) + t = "java.lang.Object"; + args += jni_signature(t, format); + }else if(jniType.isEmpty()){ + args += jni_signature(modified_type, format); + }else{ + args += jni_signature(jniType, format); + } } } else { args += "J"; } } + ++argumentCounter; + while(addedArguments.first.contains(argumentCounter)){ + const ArgumentModification& mod = addedArguments.first[argumentCounter]; + if(parameterTypesByName.contains(mod.modified_type)){ + QString t = parameterTypesByName[mod.modified_type]; + if(t.isEmpty()) + t = "java.lang.Object"; + args += jni_signature(t, format); + }else if(mod.modified_jni_type.isEmpty()) + args += jni_signature(mod.modified_type, format); + else + args += jni_signature(mod.modified_jni_type, format); + ++argumentCounter; + } } } - for(const ArgumentModification *mod : java_function->addedArguments()){ - if(mod->modified_jni_type.isEmpty()) - args += jni_signature(mod->modified_type, format); + for(const ArgumentModification& mod : addedArguments.second){ + if(parameterTypesByName.contains(mod.modified_type)){ + QString t = parameterTypesByName[mod.modified_type]; + if(t.isEmpty()) + t = "java.lang.Object"; + args += jni_signature(t, format); + }else if(mod.modified_jni_type.isEmpty()) + args += jni_signature(mod.modified_type, format); else - args += jni_signature(mod->modified_jni_type, format); + args += jni_signature(mod.modified_jni_type, format); } if(java_function->isAbstract()){ @@ -3767,6 +3797,14 @@ void CppImplGenerator::writeFinalFunctionArguments(QTextStream &s, const Abstrac Option options = Option(EnumAsInts | UseNativeIds); if(java_function->isConstructor()) options = NoOption; + const QPair,QList> addedArguments = java_function->addedArguments(); + int argumentCounter = 1; + while(addedArguments.first.contains(argumentCounter)){ + const ArgumentModification& argumentMod = addedArguments.first[argumentCounter]; + s << "," << Qt::endl + << " " << jniName(argumentMod.modified_type) << " " << argumentMod.modified_name; + ++argumentCounter; + } for(const AbstractMetaArgument *argument : arguments) { if (java_function->argumentRemoved(argument->argumentIndex() + 1)==ArgumentRemove_No) { s << "," << Qt::endl; @@ -3789,91 +3827,21 @@ void CppImplGenerator::writeFinalFunctionArguments(QTextStream &s, const Abstrac s << " " << translateType(array.get(), options); }else if (modified_type.isEmpty()) s << " " << translateType(argument->type(), options); - else if(modified_type=="int") - s << " jint"; - else if(modified_type=="long") - s << " jlong"; - else if(modified_type=="short") - s << " jshort"; - else if(modified_type=="byte") - s << " jbyte"; - else if(modified_type=="double") - s << " jdouble"; - else if(modified_type=="float") - s << " jfloat"; - else if(modified_type=="boolean") - s << " jboolean"; - else if(modified_type=="char") - s << " jchar"; - else if(modified_type=="int[]") - s << " jintArray"; - else if(modified_type=="long[]") - s << " jlongArray"; - else if(modified_type=="short[]") - s << " jshortArray"; - else if(modified_type=="byte[]") - s << " jbyteArray"; - else if(modified_type=="double[]") - s << " jdoubleArray"; - else if(modified_type=="float[]") - s << " jfloatArray"; - else if(modified_type=="boolean[]") - s << " jbooleanArray"; - else if(modified_type=="char[]") - s << " jcharArray"; - else if(modified_type.endsWith("[]")) - s << " jobjectArray"; - else if(modified_type=="java.lang.String" || modified_type=="String") - s << " jstring"; - else if(modified_type.startsWith("java.lang.Class")) - s << "jclass"; else - s << " jobject"; + s << " " << jniName(modified_type); s << " " << argument->indexedName(); + ++argumentCounter; + while(addedArguments.first.contains(argumentCounter)){ + const ArgumentModification& argumentMod = addedArguments.first[argumentCounter]; + s << "," << Qt::endl + << " " << jniName(argumentMod.modified_type) << " " << argumentMod.modified_name; + ++argumentCounter; + } } } - QList addedArguments = java_function->addedArguments(); - for(const ArgumentModification* argumentMod : addedArguments){ - s << ","; - if(argumentMod->modified_type=="java.lang.String" || argumentMod->modified_type=="String") - s << " jstring"; - else if(argumentMod->modified_type=="int") - s << " jint"; - else if(argumentMod->modified_type=="long") - s << " jlong"; - else if(argumentMod->modified_type=="short") - s << " jshort"; - else if(argumentMod->modified_type=="byte") - s << " jbyte"; - else if(argumentMod->modified_type=="double") - s << " jdouble"; - else if(argumentMod->modified_type=="float") - s << " jfloat"; - else if(argumentMod->modified_type=="boolean") - s << " jboolean"; - else if(argumentMod->modified_type=="char") - s << " jchar"; - else if(argumentMod->modified_type=="int[]") - s << " jintArray"; - else if(argumentMod->modified_type=="long[]") - s << " jlongArray"; - else if(argumentMod->modified_type=="short[]") - s << " jshortArray"; - else if(argumentMod->modified_type=="byte[]") - s << " jbyteArray"; - else if(argumentMod->modified_type=="double[]") - s << " jdoubleArray"; - else if(argumentMod->modified_type=="float[]") - s << " jfloatArray"; - else if(argumentMod->modified_type=="boolean[]") - s << " jbooleanArray"; - else if(argumentMod->modified_type=="char[]") - s << " jcharArray"; - else if(argumentMod->modified_type.endsWith("[]")) - s << " jobjectArray"; - else - s << " jobject"; - s << " " << argumentMod->modified_name; + for(const ArgumentModification& argumentMod : addedArguments.second){ + s << "," << Qt::endl + << " " << jniName(argumentMod.modified_type) << " " << argumentMod.modified_name; } s << ")" << Qt::endl; } @@ -4147,6 +4115,7 @@ void CppImplGenerator::writeConstructor(QTextStream &s, const AbstractMetaFuncti Option options = Option(NoOption); int counter = 0; QScopedPointer scope; + const QPair,QList> addedArguments = java_function->addedArguments(); for(const AbstractMetaArgument *argument : arguments) { if(argument){ switch (java_function->argumentRemoved(argument->argumentIndex()+1)) { @@ -4159,6 +4128,50 @@ void CppImplGenerator::writeConstructor(QTextStream &s, const AbstractMetaFuncti } } } + int argumentCounter = 1; + while(addedArguments.first.contains(argumentCounter)){ + const ArgumentModification& argumentMod = addedArguments.first[argumentCounter]; + QString jniType = jniName(argumentMod.modified_type); + s << INDENT << jniType << " " << argumentMod.modified_name << " = "; + if(jniType=="jobjectArray" + || jniType=="jlongArray" + || jniType=="jintArray" + || jniType=="jshortArray" + || jniType=="jbyteArray" + || jniType=="jbooleanArray" + || jniType=="jcharArray" + || jniType=="jdoubleArray" + || jniType=="jfloatArray" + || jniType=="jarray" + || jniType=="jstring" + || jniType=="jthrowable" + || jniType=="jclass"){ + s << "static_cast<" << jniType << ">(__java_arguments[" << counter++ << "].l);" << Qt::endl; + }else{ + s << "__java_arguments[" << counter++ << "]."; + if(jniType=="jlong"){ + s << 'j'; + }else if(jniType=="jint"){ + s << 'i'; + }else if(jniType=="jshort"){ + s << 's'; + }else if(jniType=="jbyte"){ + s << 'b'; + }else if(jniType=="jboolean"){ + s << 'z'; + }else if(jniType=="jchar"){ + s << 'c'; + }else if(jniType=="jfloat"){ + s << 'f'; + }else if(jniType=="jdouble"){ + s << 'd'; + }else{ + s << 'l'; + } + s << ';' << Qt::endl; + } + ++argumentCounter; + } for(const AbstractMetaArgument *argument : arguments) { if(argument){ AbstractMetaType* argumentType = argument->type(); @@ -4442,6 +4455,50 @@ void CppImplGenerator::writeConstructor(QTextStream &s, const AbstractMetaFuncti default: break; } } + ++argumentCounter; + while(addedArguments.first.contains(argumentCounter)){ + const ArgumentModification& argumentMod = addedArguments.first[argumentCounter]; + QString jniType = jniName(argumentMod.modified_type); + s << INDENT << jniType << " " << argumentMod.modified_name << " = "; + if(jniType=="jobjectArray" + || jniType=="jlongArray" + || jniType=="jintArray" + || jniType=="jshortArray" + || jniType=="jbyteArray" + || jniType=="jbooleanArray" + || jniType=="jcharArray" + || jniType=="jdoubleArray" + || jniType=="jfloatArray" + || jniType=="jarray" + || jniType=="jstring" + || jniType=="jthrowable" + || jniType=="jclass"){ + s << "static_cast<" << jniType << ">(__java_arguments[" << counter++ << "].l);" << Qt::endl; + }else{ + s << "__java_arguments[" << counter++ << "]."; + if(jniType=="jlong"){ + s << 'j'; + }else if(jniType=="jint"){ + s << 'i'; + }else if(jniType=="jshort"){ + s << 's'; + }else if(jniType=="jbyte"){ + s << 'b'; + }else if(jniType=="jboolean"){ + s << 'z'; + }else if(jniType=="jchar"){ + s << 'c'; + }else if(jniType=="jfloat"){ + s << 'f'; + }else if(jniType=="jdouble"){ + s << 'd'; + }else{ + s << 'l'; + } + s << ';' << Qt::endl; + } + ++argumentCounter; + } } if(!hasDoneConstructorCheck){ if(cls->isQObject()){ @@ -4472,10 +4529,9 @@ void CppImplGenerator::writeConstructor(QTextStream &s, const AbstractMetaFuncti } } - QList addedArguments = java_function->addedArguments(); - for(int i=0; imodified_type); - s << INDENT << jniType << " " << addedArguments.at(i)->modified_name << " = "; + for(int i=0; iisRethrowExceptions() || java_function->isBlockExceptions() || java_function->isNoExcept()) s << INDENT << "QtJambiExceptionRaiser __qt_exceptionRaiser;" << Qt::endl; - QList addedArguments = java_function->addedArguments(); + const QPair,QList> addedArguments = java_function->addedArguments(); QList arguments; for(const AbstractMetaArgument *argument : java_function->arguments()) { if(java_function->argumentRemoved(argument->argumentIndex()+1)==ArgumentRemove_No) arguments << argument; } QString argumentRef; - if(arguments.size() + addedArguments.size() == 0){ + if(arguments.size() + addedArguments.first.size() + addedArguments.second.size() == 0){ argumentRef = "nullptr"; - }else if(arguments.size() + addedArguments.size() == 1){ + }else if(arguments.size() + addedArguments.first.size() + addedArguments.second.size() == 1){ argumentRef = "&arguments"; s << " jvalue arguments;" << Qt::endl; QString jniType; @@ -4671,9 +4727,12 @@ void CppImplGenerator::writeFinalConstructor(QTextStream &s, const AbstractMetaF else jniType = translateType(argument->type(), NoOption); argName = argument->indexedName(); + }else if(addedArguments.first.size()==1){ + jniType = addedArguments.first.first().modified_jni_type.isEmpty() ? jniName(addedArguments.first.first().modified_type) : addedArguments.first.first().modified_jni_type; + argName = addedArguments.first.first().modified_name; }else{ - jniType = jniName(addedArguments.at(0)->modified_type); - argName = addedArguments.at(0)->modified_name; + jniType = addedArguments.second.first().modified_jni_type.isEmpty() ? jniName(addedArguments.second.first().modified_type) : addedArguments.second.first().modified_jni_type; + argName = addedArguments.second.first().modified_name; } s << " arguments."; if(jniType=="jint") @@ -4697,7 +4756,33 @@ void CppImplGenerator::writeFinalConstructor(QTextStream &s, const AbstractMetaF s << " = " << argName << ";" << Qt::endl; }else{ argumentRef = "arguments"; - s << " jvalue arguments[" << (arguments.size() + addedArguments.size()) << "];" << Qt::endl; + s << " jvalue arguments[" << (arguments.size() + addedArguments.first.size() + addedArguments.second.size()) << "];" << Qt::endl; + int argumentCounter = 1; + while(addedArguments.first.contains(argumentCounter)){ + const ArgumentModification& argumentMod = addedArguments.first[argumentCounter]; + QString jniType = jniName(argumentMod.modified_type); + s << " arguments[" << argumentCounter-1 << "]."; + if(jniType=="jint") + s << "i"; + else if(jniType=="jlong") + s << "j"; + else if(jniType=="jshort") + s << "s"; + else if(jniType=="jbyte") + s << "b"; + else if(jniType=="jchar") + s << "c"; + else if(jniType=="jboolean") + s << "z"; + else if(jniType=="jfloat") + s << "f"; + else if(jniType=="jdouble") + s << "d"; + else + s << "l"; + s << " = " << argumentMod.modified_name << ";" << Qt::endl; + ++argumentCounter; + } for(int i=0; itype(), NoOption); - s << " arguments[" << i << "]."; + s << " arguments[" << argumentCounter-1 << "]."; if(jniType=="jint") s << "i"; else if(jniType=="jlong") @@ -4764,10 +4849,36 @@ void CppImplGenerator::writeFinalConstructor(QTextStream &s, const AbstractMetaF else s << "l"; s << " = " << argument->indexedName() << ";" << Qt::endl; + ++argumentCounter; + while(addedArguments.first.contains(argumentCounter)){ + const ArgumentModification& argumentMod = addedArguments.first[argumentCounter]; + QString jniType = jniName(argumentMod.modified_type); + s << " arguments[" << argumentCounter-1 << "]."; + if(jniType=="jint") + s << "i"; + else if(jniType=="jlong") + s << "j"; + else if(jniType=="jshort") + s << "s"; + else if(jniType=="jbyte") + s << "b"; + else if(jniType=="jchar") + s << "c"; + else if(jniType=="jboolean") + s << "z"; + else if(jniType=="jfloat") + s << "f"; + else if(jniType=="jdouble") + s << "d"; + else + s << "l"; + s << " = " << argumentMod.modified_name << ";" << Qt::endl; + ++argumentCounter; + } } - for(int i=0; imodified_type); - s << " arguments[" << i << "]."; + for(int i=0; iisQObject()){ @@ -4856,10 +4967,10 @@ void CppImplGenerator::writeFinalConstructor(QTextStream &s, const AbstractMetaF canRegister = true; } if(!canRegister && cls->typeEntry()->isValue() && !static_cast(cls->typeEntry())->skipMetaTypeRegistration()){ - canRegister = !cls->typeEntry()->customConstructor(TypeEntry::LegacyCopyConstructor).code().isEmpty() - || !cls->typeEntry()->customConstructor(TypeEntry::CopyConstructor).code().isEmpty() - || !cls->typeEntry()->customConstructor(TypeEntry::MoveConstructor).code().isEmpty() - || !cls->typeEntry()->customConstructor(TypeEntry::DefaultConstructor).code().isEmpty() + canRegister = !cls->typeEntry()->customConstructor(ComplexTypeEntry::LegacyCopyConstructor).code().isEmpty() + || !cls->typeEntry()->customConstructor(ComplexTypeEntry::CopyConstructor).code().isEmpty() + || !cls->typeEntry()->customConstructor(ComplexTypeEntry::MoveConstructor).code().isEmpty() + || !cls->typeEntry()->customConstructor(ComplexTypeEntry::DefaultConstructor).code().isEmpty() || !cls->typeEntry()->customDestructor().code().isEmpty(); } if(canRegister){ @@ -4955,7 +5066,6 @@ void CppImplGenerator::writeFinalFunction(QTextStream &s, const AbstractMetaFunc QString lines; { QTextStream s(&lines); - QString typeReplaced = java_function->typeReplaced(0); QString return_type = jniReturnName(java_function); if(return_type!="void"){ s << INDENT << return_type << " __java_return_value{0};" << Qt::endl; @@ -5072,7 +5182,9 @@ void CppImplGenerator::writeFinalFunction(QTextStream &s, const AbstractMetaFunc bool paren = false; bool noConversion = false; if (function_type) { - if(function_type->isEnum() && !static_cast(function_type->typeEntry())->isPublic()){ + if(!java_function->proxyCall().isEmpty()){ + s << "auto " << qt_return_value << " = "; + }else if(function_type->isEnum() && !static_cast(function_type->typeEntry())->isPublic()){ writeTypeInfo(s, function_type, EnumAsInts); s << qt_return_value << " = "; uint size = static_cast(function_type->typeEntry())->size(); @@ -5509,19 +5621,10 @@ void CppImplGenerator::writeFieldAccessors(QTextStream &s, const AbstractMetaFie else qt_return_value = "__qt_this->"; qt_return_value += java_field->name(); - //s << qt_return_value << ";" << Qt::endl; s << INDENT; writeTypeInfo(s, getter->type(), Option(/*ForceConstReference | */ArrayAsPointer)); s << " __qt_value = " << qt_return_value << ";" << Qt::endl; writeQtToJava(s, getter->type(), "__qt_value", "__java_return_value", getter, nullptr, 0, Option(EnumAsInts | NoTmpVariable), "__jni_env", "__qtjambi_scope"); - s << ";" << Qt::endl; - if(!pps.isEmpty()){ - s << "#else" << Qt::endl; - if(!getter->isStatic()) - s << INDENT << "Q_UNUSED(__this" << (cls->typeEntry()->isNativeIdBased() ? "_nativeId)" : ")") << Qt::endl; - s << INDENT << "JavaException::raiseQNoImplementationException(__jni_env, \"The method has no implementation on this platform.\" QTJAMBI_STACKTRACEINFO );" << Qt::endl; - s << "#endif //" << pps.join(" && ") << Qt::endl; - } }else{ s << INDENT << "__java_return_value = "; if (getter->isStatic()) @@ -5539,6 +5642,13 @@ void CppImplGenerator::writeFieldAccessors(QTextStream &s, const AbstractMetaFie } s << ");" << Qt::endl; } + if(!pps.isEmpty()){ + s << "#else" << Qt::endl; + if(!getter->isStatic()) + s << INDENT << "Q_UNUSED(__this" << (cls->typeEntry()->isNativeIdBased() ? "_nativeId)" : ")") << Qt::endl; + s << INDENT << "JavaException::raiseQNoImplementationException(__jni_env, \"The method has no implementation on this platform.\" QTJAMBI_STACKTRACEINFO );" << Qt::endl; + s << "#endif //" << pps.join(" && ") << Qt::endl; + } } s << INDENT << "}QTJAMBI_CATCH(const JavaException& exn){" << Qt::endl; s << INDENT << " exn.raiseInJava(__jni_env);" << Qt::endl; @@ -5552,19 +5662,6 @@ void CppImplGenerator::writeFieldAccessors(QTextStream &s, const AbstractMetaFie } } s << lines; - QString return_type = jniReturnName(getter); - if(return_type=="jobject" - || return_type=="jstring" - || return_type=="jthrowable" - || return_type=="jclass" - || return_type=="jarray" - || return_type.endsWith("Array")) { - s << INDENT << "return nullptr;" << Qt::endl; - }else if(return_type=="jboolean") { - s << INDENT << "return false;" << Qt::endl; - }else if(return_type!="void") { - s << INDENT << "return " << return_type << "(0);" << Qt::endl; - } } s << "}" << Qt::endl << Qt::endl; } @@ -5800,14 +5897,14 @@ void writeCodeBlock(QTextStream &s, const QString &code) { } } -void CppImplGenerator::writeCustomStructors(QTextStream &s, const TypeEntry *entry) { +void CppImplGenerator::writeCustomStructors(QTextStream &s, const ComplexTypeEntry *entry) { if (!entry->preferredConversion()) return ; - CustomFunction customLegacyConstructor = entry->customConstructor(TypeEntry::LegacyCopyConstructor); - CustomFunction customCopyConstructor = entry->customConstructor(TypeEntry::CopyConstructor); - CustomFunction customMoveConstructor = entry->customConstructor(TypeEntry::MoveConstructor); - CustomFunction customDefaultConstructor = entry->customConstructor(TypeEntry::DefaultConstructor); + CustomFunction customLegacyConstructor = entry->customConstructor(ComplexTypeEntry::LegacyCopyConstructor); + CustomFunction customCopyConstructor = entry->customConstructor(ComplexTypeEntry::CopyConstructor); + CustomFunction customMoveConstructor = entry->customConstructor(ComplexTypeEntry::MoveConstructor); + CustomFunction customDefaultConstructor = entry->customConstructor(ComplexTypeEntry::DefaultConstructor); CustomFunction customDestructor = entry->customDestructor(); if(!customLegacyConstructor.name.isEmpty()){ @@ -8400,7 +8497,12 @@ bool CppImplGenerator::writeJavaToQt(QTextStream &s, } if(!done){ s << INDENT; - writeTypeInfo(s, java_type, SkipName); //ForceConstReference + if(java_type->getReferenceType()==AbstractMetaType::RReference){ + writeTypeInfo(s, java_type, Option(ExcludeReference | SkipName)); + s << '&'; + }else{ + writeTypeInfo(s, java_type, SkipName); //ForceConstReference + } s << ' ' << qt_name << " = "; } } @@ -8486,11 +8588,6 @@ bool CppImplGenerator::writeQtToJava(QTextStream &s, QScopedPointer indentationPointer; bool semiRequired = (option & NoTmpVariable) != NoTmpVariable || !java_name.isEmpty(); - bool resetObjectAfterUse = ( - (java_function && java_function->resetObjectAfterUse(argument_index)) - || (java_functional && java_functional->resetObjectAfterUse(argument_index)) - ); - if (!java_type) { QString functionName; if(java_function){ @@ -8875,7 +8972,10 @@ bool CppImplGenerator::writeQtToJava(QTextStream &s, //Q_ASSERT((option & EnumAsInts) == 0); s << "qtjambi_cast(" << __jni_env << ", " << qt_name << ")"; } else if (java_type->isThread()) { - s << "qtjambi_from_thread(" << __jni_env << ", " << qt_name << ")"; + if(java_type->indirections().isEmpty() && java_type->getReferenceType()!=AbstractMetaType::NoReference) + s << "qtjambi_from_thread(" << __jni_env << ", &" << qt_name << ")"; + else + s << "qtjambi_from_thread(" << __jni_env << ", " << qt_name << ")"; } else if (java_type->isFunctional()) { const FunctionalTypeEntry* funEntry = static_cast(java_type->typeEntry()); QString funName = funEntry->targetLangName(); @@ -8893,7 +8993,10 @@ bool CppImplGenerator::writeQtToJava(QTextStream &s, s << qt_name << ")"; } else { if (java_type->isQObject()) { - s << "qtjambi_cast(" << __jni_env << ", " << qt_name << ")"; + if(java_type->indirections().isEmpty() && java_type->getReferenceType()!=AbstractMetaType::NoReference) + s << "qtjambi_cast(" << __jni_env << ", &" << qt_name << ")"; + else + s << "qtjambi_cast(" << __jni_env << ", " << qt_name << ")"; } else if (java_type->isNativePointer()) { s << "qtjambi_from_cpointer(" << __jni_env << ", "; if (java_type->getReferenceType()==AbstractMetaType::Reference) @@ -8929,13 +9032,19 @@ bool CppImplGenerator::writeQtToJava(QTextStream &s, if (!centry || centry->polymorphicIdValue().isEmpty()) { if(centry && (centry->isInterface() || centry->designatedInterface())){ - s << "qtjambi_cast(" << __jni_env << ", " << qt_name << ")"; + if(entry->isObject() && java_type->indirections().isEmpty() && java_type->getReferenceType()!=AbstractMetaType::NoReference) + s << "qtjambi_cast(" << __jni_env << ", &" << qt_name << ")"; + else + s << "qtjambi_cast(" << __jni_env << ", " << qt_name << ")"; }else{ if(entry->qualifiedCppName()=="__GLsync"){ s << "qtjambi_from_object(" << __jni_env << ", static_cast(" << (java_type->getReferenceType()==AbstractMetaType::Reference ? "&" : "") << qt_name << "), \"" << QString(package).replace(".", "/") << "/" << entry->lookupName() << "\", false, false)"; }else{ - s << "qtjambi_cast(" << __jni_env << ", " << qt_name << ")"; + if(entry->isObject() && java_type->indirections().isEmpty() && java_type->getReferenceType()!=AbstractMetaType::NoReference) + s << "qtjambi_cast(" << __jni_env << ", &" << qt_name << ")"; + else + s << "qtjambi_cast(" << __jni_env << ", " << qt_name << ")"; } } } else { @@ -8952,7 +9061,10 @@ bool CppImplGenerator::writeQtToJava(QTextStream &s, ReportHandler::warning(QString("class '%1' has polymorphic id but does not inherit a polymorphic class") .arg(centry->qualifiedCppName())); } - s << "qtjambi_cast(" << __jni_env << ", " << qt_name << ")"; + if(entry->isObject() && java_type->indirections().isEmpty() && java_type->getReferenceType()!=AbstractMetaType::NoReference) + s << "qtjambi_cast(" << __jni_env << ", &" << qt_name << ")"; + else + s << "qtjambi_cast(" << __jni_env << ", " << qt_name << ")"; } } } else if (java_type->isIterator()) { @@ -9097,7 +9209,10 @@ bool CppImplGenerator::writeQtToJava(QTextStream &s, << qt_name << "), \"" << QString(java_type->typeEntry()->javaPackage()).replace(".", "/") << "/" << java_type->typeEntry()->lookupName() << "\", false, false)"; } else { - s << "qtjambi_cast(" << __jni_env << ", " << qt_name << ")"; + if(java_type->typeEntry()->isObject() && java_type->indirections().isEmpty() && java_type->getReferenceType()!=AbstractMetaType::NoReference) + s << "qtjambi_cast(" << __jni_env << ", &" << qt_name << ")"; + else + s << "qtjambi_cast(" << __jni_env << ", " << qt_name << ")"; } } } @@ -9832,220 +9947,234 @@ void CppImplGenerator::writeFunctionCall(QTextStream &s, const QString &object_n s << object_name; return; } + QString proxyCall; QString function_name = option & OriginalName ? java_function->originalName() : java_function->name(); if(option & JNIProxyFunction){ function_name += marshalledArguments(java_function); + }else{ + proxyCall = java_function->proxyCall(); } - if(!java_function->templateParameters().isEmpty()){ - QString tmpl; - for(int i=0; itemplateParameters().size(); i++){ - AbstractMetaTemplateParameter* param = java_function->templateParameters()[i]; - if(param->type()){ - if(!param->defaultType().isEmpty()){ - if(!tmpl.isEmpty()){ - tmpl += ", "; + QString templateParams; + if(!proxyCall.isEmpty()){ + s << proxyCall << "("; + writeFunctionCallArguments(s, java_function, "__qt_", Option(option | JNIProxyFunction)); + s << ")"; + }else{ + if(!java_function->templateParameters().isEmpty()){ + QString tmpl; + for(int i=0; itemplateParameters().size(); i++){ + AbstractMetaTemplateParameter* param = java_function->templateParameters()[i]; + if(!param->isImplicit()){ + if(param->type()){ + if(param->defaultType().isEmpty()){ + if(!tmpl.isEmpty()){ + tmpl += ", "; + } + QTextStream s2(&tmpl); + writeTypeInfo(s2, param->type()); + } + }else{ + tmpl.clear(); + break; } - QTextStream s2(&tmpl); - writeTypeInfo(s2, param->type()); } - }else{ - tmpl.clear(); - break; } + if(!tmpl.isEmpty()) + templateParams = "<" + tmpl.trimmed() + ">"; } - if(!tmpl.isEmpty()) - function_name += "<" + tmpl.trimmed() + ">"; - } - //AbstractMetaClassList interfaces = java_function->implementingClass()->interfaces(); + //AbstractMetaClassList interfaces = java_function->implementingClass()->interfaces(); - if (prefix.isEmpty() - && !(option & JNIProxyFunction) - && !java_function->isStatic() - && !java_function->isAbstract() - && !java_function->implementingClass()->typeEntry()->isNativeInterface() - && !java_function->implementingClass()->interfaces().isEmpty() - && !java_function->implementingClass()->inheritsFrom(java_function->declaringClass())) { - prefix = java_function->declaringClass()->qualifiedCppName() + "::"; - } + if (prefix.isEmpty() + && !(option & JNIProxyFunction) + && !java_function->isStatic() + && !java_function->isAbstract() + && !java_function->implementingClass()->typeEntry()->isNativeInterface() + && !java_function->implementingClass()->interfaces().isEmpty() + && !java_function->implementingClass()->inheritsFrom(java_function->declaringClass())) { + prefix = java_function->declaringClass()->qualifiedCppName() + "::"; + } - // Global scope stream operators need the arguments to be reordered (this ref at end) - // so we special case them in order to simplify this code - bool stream_operator = java_function->originalName() == "operator<<" - || java_function->originalName() == "operator>>"; - if (java_function->isInGlobalScope() && stream_operator) { - if (!java_function->type()) - s << "if (" << object_name << " != nullptr) "; - else - s << "(" << object_name << " != nullptr) ? "; - if(!prefix.isEmpty()) - s << "::" << prefix; - s << function_name << "("; - if (!stream_operator) - s << "*" << object_name << ", "; - writeFunctionCallArguments(s, java_function, "__qt_", option); - if (stream_operator) - s << ", *" << object_name; - s << ")"; - if (java_function->type()!= nullptr) - s << " : " << default_return_statement_qt(java_function->type(), Generator::Option(option | Generator::NoReturnStatement)); - } else { - bool noPar = false; - bool additionalClosingPar = false; - if(prefix.isEmpty() && !java_function->isStatic() && (extra_arguments.size() + java_function->arguments().size())<=1){ - if(function_name=="operator++"){ - if((extra_arguments.size() + java_function->arguments().size())==0) - s << "++(*" << object_name << ")"; - else if((extra_arguments.size() + java_function->arguments().size())==1){ - s << "(*" << object_name << ")++"; - return; - } - noPar = true; - }else if(function_name=="operator--"){ - if((extra_arguments.size() + java_function->arguments().size())==0) - s << "--(*" << object_name << ")"; - else if((extra_arguments.size() + java_function->arguments().size())==1){ - s << "(*" << object_name << ")--"; - return; - } - noPar = true; - }else if(function_name=="operator*"){ - if((extra_arguments.size() + java_function->arguments().size())==0) - s << "*(*" << object_name << ")"; - else - s << "(*" << object_name << ") * "; - noPar = true; - }else if(function_name=="operator+"){ - if((extra_arguments.size() + java_function->arguments().size())==0) - s << "+(*" << object_name << ")"; - else - s << "(*" << object_name << ") + "; - noPar = true; - }else if(function_name=="operator-"){ - if((extra_arguments.size() + java_function->arguments().size())==0) - s << "-(*" << object_name << ")"; - else - s << "(*" << object_name << ") - "; - noPar = true; - }else if(function_name=="operator/"){ - s << "(*" << object_name << ") / "; - noPar = true; - }else if(function_name=="operator<"){ - s << "(*" << object_name << ") < "; - noPar = true; - }else if(function_name=="operator>"){ - s << "(*" << object_name << ") > "; - noPar = true; - }else if(function_name=="operator<="){ - s << "(*" << object_name << ") <= "; - noPar = true; - }else if(function_name=="operator<=>"){ - s << "(*" << object_name << ") <=> "; - noPar = true; - }else if(function_name=="operator>="){ - s << "(*" << object_name << ") >= "; - noPar = true; - }else if(function_name=="operator%"){ - s << "(*" << object_name << ") % "; - noPar = true; - }else if(function_name=="operator^"){ - s << "(*" << object_name << ") ^ "; - noPar = true; - }else if(function_name=="operator,"){ - s << "(*" << object_name << ") , "; - noPar = true; - }else if(function_name=="operator~"){ - if((extra_arguments.size() + java_function->arguments().size())==0) - s << "~(*" << object_name << ")"; - else s << "(*" << object_name << ") ~ "; - noPar = true; - }else if(function_name=="operator!"){ - s << "!(*" << object_name << ")"; - noPar = true; - }else if(function_name=="operator&"){ - if((extra_arguments.size() + java_function->arguments().size())==0) - s << "&(*" << object_name << ")"; - else - s << "(*" << object_name << ") & "; - noPar = true; - }else if(function_name=="operator|"){ - s << "(*" << object_name << ") | "; - noPar = true; - }else if(function_name=="operator&&"){ - s << "(*" << object_name << ") && "; - noPar = true; - }else if(function_name=="operator||"){ - s << "(*" << object_name << ") || "; - noPar = true; - }else if(function_name=="operator/="){ - s << "(*" << object_name << ") /= "; - noPar = true; - }else if(function_name=="operator-="){ - s << "(*" << object_name << ") -= "; - noPar = true; - }else if(function_name=="operator+="){ - s << "(*" << object_name << ") += "; - noPar = true; - }else if(function_name=="operator*="){ - s << "(*" << object_name << ") *= "; - noPar = true; - }else if(function_name=="operator~="){ - s << "(*" << object_name << ") ~= "; - noPar = true; - }else if(function_name=="operator^="){ - s << "(*" << object_name << ") ^= "; - noPar = true; - }else if(function_name=="operator|="){ - s << "(*" << object_name << ") |= "; - noPar = true; - }else if(function_name=="operator%="){ - s << "(*" << object_name << ") %= "; - noPar = true; - }else if(function_name=="operator&="){ - s << "(*" << object_name << ") &= "; - noPar = true; - }else if(function_name=="operator=="){ - s << "(*" << object_name << ") == "; - noPar = true; - }else if(function_name=="operator="){ - s << "((*" << object_name << ") = "; - noPar = true; - additionalClosingPar = true; - } - } - if(!noPar){ - if(java_function->isInGlobalScope()){ - s << function_name << "(*" << object_name << ", "; - }else{ - s << object_name; - if(java_function->isStatic()) - s << "::" << prefix; - else - s << "->" << prefix; - s << function_name; - if(java_function->arguments().isEmpty() - && java_function->declaringClass()->isNamespace() - && java_function->declaringClass()->qualifiedCppName().startsWith("QColorConstants")){ - return; + // Global scope stream operators need the arguments to be reordered (this ref at end) + // so we special case them in order to simplify this code + bool stream_operator = java_function->originalName() == "operator<<" + || java_function->originalName() == "operator>>"; + if (java_function->isInGlobalScope() && stream_operator) { + if (!java_function->type()) + s << "if (" << object_name << " != nullptr) "; + else + s << "(" << object_name << " != nullptr) ? "; + if(!prefix.isEmpty()) + s << "::" << prefix; + s << function_name << templateParams << "("; + if (!stream_operator) + s << "*" << object_name << ", "; + writeFunctionCallArguments(s, java_function, "__qt_", option); + if (stream_operator) + s << ", *" << object_name; + s << ")"; + if (java_function->type()!= nullptr) + s << " : " << default_return_statement_qt(java_function->type(), Generator::Option(option | Generator::NoReturnStatement)); + } else { + bool noPar = false; + bool additionalClosingPar = false; + if(prefix.isEmpty() && !java_function->isStatic() && (extra_arguments.size() + java_function->arguments().size())<=1){ + if(function_name=="operator++"){ + if((extra_arguments.size() + java_function->arguments().size())==0) + s << "++(*" << object_name << ")"; + else if((extra_arguments.size() + java_function->arguments().size())==1){ + s << "(*" << object_name << ")++"; + return; + } + noPar = true; + }else if(function_name=="operator--"){ + if((extra_arguments.size() + java_function->arguments().size())==0) + s << "--(*" << object_name << ")"; + else if((extra_arguments.size() + java_function->arguments().size())==1){ + s << "(*" << object_name << ")--"; + return; + } + noPar = true; + }else if(function_name=="operator*"){ + if((extra_arguments.size() + java_function->arguments().size())==0) + s << "*(*" << object_name << ")"; + else + s << "(*" << object_name << ") * "; + noPar = true; + }else if(function_name=="operator+"){ + if((extra_arguments.size() + java_function->arguments().size())==0) + s << "+(*" << object_name << ")"; + else + s << "(*" << object_name << ") + "; + noPar = true; + }else if(function_name=="operator-"){ + if((extra_arguments.size() + java_function->arguments().size())==0) + s << "-(*" << object_name << ")"; + else + s << "(*" << object_name << ") - "; + noPar = true; + }else if(function_name=="operator/"){ + s << "(*" << object_name << ") / "; + noPar = true; + }else if(function_name=="operator<"){ + s << "(*" << object_name << ") < "; + noPar = true; + }else if(function_name=="operator>"){ + s << "(*" << object_name << ") > "; + noPar = true; + }else if(function_name=="operator<="){ + s << "(*" << object_name << ") <= "; + noPar = true; + }else if(function_name=="operator<=>"){ + s << "(*" << object_name << ") <=> "; + noPar = true; + }else if(function_name=="operator>="){ + s << "(*" << object_name << ") >= "; + noPar = true; + }else if(function_name=="operator%"){ + s << "(*" << object_name << ") % "; + noPar = true; + }else if(function_name=="operator^"){ + s << "(*" << object_name << ") ^ "; + noPar = true; + }else if(function_name=="operator,"){ + s << "(*" << object_name << ") , "; + noPar = true; + }else if(function_name=="operator~"){ + if((extra_arguments.size() + java_function->arguments().size())==0) + s << "~(*" << object_name << ")"; + else s << "(*" << object_name << ") ~ "; + noPar = true; + }else if(function_name=="operator!"){ + s << "!(*" << object_name << ")"; + noPar = true; + }else if(function_name=="operator&"){ + if((extra_arguments.size() + java_function->arguments().size())==0) + s << "&(*" << object_name << ")"; + else + s << "(*" << object_name << ") & "; + noPar = true; + }else if(function_name=="operator|"){ + s << "(*" << object_name << ") | "; + noPar = true; + }else if(function_name=="operator&&"){ + s << "(*" << object_name << ") && "; + noPar = true; + }else if(function_name=="operator||"){ + s << "(*" << object_name << ") || "; + noPar = true; + }else if(function_name=="operator/="){ + s << "(*" << object_name << ") /= "; + noPar = true; + }else if(function_name=="operator-="){ + s << "(*" << object_name << ") -= "; + noPar = true; + }else if(function_name=="operator+="){ + s << "(*" << object_name << ") += "; + noPar = true; + }else if(function_name=="operator*="){ + s << "(*" << object_name << ") *= "; + noPar = true; + }else if(function_name=="operator~="){ + s << "(*" << object_name << ") ~= "; + noPar = true; + }else if(function_name=="operator^="){ + s << "(*" << object_name << ") ^= "; + noPar = true; + }else if(function_name=="operator|="){ + s << "(*" << object_name << ") |= "; + noPar = true; + }else if(function_name=="operator%="){ + s << "(*" << object_name << ") %= "; + noPar = true; + }else if(function_name=="operator&="){ + s << "(*" << object_name << ") &= "; + noPar = true; + }else if(function_name=="operator=="){ + s << "(*" << object_name << ") == "; + noPar = true; + }else if(function_name=="operator="){ + s << "((*" << object_name << ") = "; + noPar = true; + additionalClosingPar = true; + } + } + if(!noPar){ + if(java_function->isInGlobalScope()){ + s << function_name << templateParams << "("; + if(!java_function->isStatic()) + s << "*" << object_name << ", "; + }else{ + s << object_name; + if(java_function->isStatic()) + s << "::" << prefix; + else + s << "->" << prefix; + s << function_name << templateParams; + if(java_function->arguments().isEmpty() + && java_function->declaringClass()->isNamespace() + && java_function->declaringClass()->qualifiedCppName().startsWith("QColorConstants")){ + return; + } + s << "("; } - s << "("; } - } - if(option & JNIProxyFunction) - writeFunctionCallArguments(s, java_function, {}, option); - else if(!java_function->arguments().isEmpty()) - writeFunctionCallArguments(s, java_function, "__qt_", option); + if(option & JNIProxyFunction) + writeFunctionCallArguments(s, java_function, {}, option); + else if(!java_function->arguments().isEmpty()) + writeFunctionCallArguments(s, java_function, "__qt_", option); - // The extra arguments... - bool hasArgs = java_function->arguments().size() != 0; - for (int i = 0; i < extra_arguments.size(); ++i) { - if (i > 0 || hasArgs) - s << ", "; - s << extra_arguments.at(i); - } - if(!noPar || additionalClosingPar){ - s << ")"; + // The extra arguments... + bool hasArgs = java_function->arguments().size() != 0; + for (int i = 0; i < extra_arguments.size(); ++i) { + if (i > 0 || hasArgs) + s << ", "; + s << extra_arguments.at(i); + } + if(!noPar || additionalClosingPar){ + s << ")"; + } } } } @@ -10085,26 +10214,36 @@ void CppImplGenerator::writeFunctionCallArguments(QTextStream &s, s << "__jni_env"; ++written_arguments; if(!java_function->isStatic()){ - if(java_function->implementingClass()->typeEntry()->isNativeIdBased()) + if(!java_function->proxyCall().isEmpty()) + s << ", __qt_this"; + else if(java_function->implementingClass()->typeEntry()->isNativeIdBased()) s << ", __this_nativeId"; else s << ", __this"; ++written_arguments; } + const QPair,QList> addedArguments = java_function->addedArguments(); + for(const ArgumentModification& argumentMod : addedArguments.first.values()){ + s << ", " << argumentMod.modified_name; + ++written_arguments; + } + for(const ArgumentModification& argumentMod : addedArguments.second){ + s << ", " << argumentMod.modified_name; + ++written_arguments; + } } for (int i = 0; i < arguments.size(); ++i) { if(const AbstractMetaArgument *argument = arguments.at(i)){ + bool hasConversionRule = java_function->hasConversionRule(TypeSystem::NativeCode, argument->argumentIndex() + 1); if ((options & SkipRemovedArguments) == SkipRemovedArguments && java_function->argumentRemoved(argument->argumentIndex() + 1)==ArgumentRemove_Remove - && !java_function->hasConversionRule(TypeSystem::NativeCode, argument->argumentIndex() + 1) + && !hasConversionRule && !argument->originalDefaultValueExpression().isEmpty()) { continue; } if(argument->type()->isNativePointer()){ ReportHandler::debugFull(QString("native pointer pattern for '%1' %2::%3") - .arg(argument->type()->cppSignature()) - .arg(java_function->ownerClass()->fullName()) - .arg(java_function->signature())); + .arg(argument->type()->cppSignature(), java_function->ownerClass()->fullName(),java_function->signature())); } if (written_arguments++ > 0) { @@ -10151,10 +10290,10 @@ void CppImplGenerator::writeFunctionCallArguments(QTextStream &s, || argument->type()->isPrimitive() ) ) { - if(argument->type()->isPrimitive()) + if(argument->type()->isPrimitive() && !hasConversionRule) s << "static_cast<"; writeTypeInfo(s, argument->type(), Option(SkipName | ForceValueType)); - if(argument->type()->isPrimitive()) + if(argument->type()->isPrimitive() && !hasConversionRule) s << ">"; s << "("; paren++; @@ -10185,8 +10324,10 @@ void CppImplGenerator::writeFunctionCallArguments(QTextStream &s, int written_arguments = 0; for (int i = 0; i < arguments.size(); ++i) { const AbstractMetaArgument *argument = arguments.at(i); + bool hasConversionRule = java_function->hasConversionRule(TypeSystem::NativeCode, argument->argumentIndex() + 1); if ((options & SkipRemovedArguments) == SkipRemovedArguments + && !hasConversionRule && java_function->argumentRemoved(i + 1)!=ArgumentRemove_No) { continue; } @@ -10199,8 +10340,7 @@ void CppImplGenerator::writeFunctionCallArguments(QTextStream &s, }*/ if(argument->type()->isNativePointer()){ ReportHandler::debugFull(QString("native pointer pattern for '%1' %2") - .arg(argument->type()->cppSignature()) - .arg(java_function->fullName())); + .arg(argument->type()->cppSignature(), java_function->fullName())); } if (written_arguments++ > 0) { @@ -10223,7 +10363,7 @@ void CppImplGenerator::writeFunctionCallArguments(QTextStream &s, } } - bool paren = false; + int paren = 0; if ((!(options & NoCasts) && !enum_as_int) || ((options & ForceEnumCast) && argument->type()->isEnum())) { // If the type in the signature is specified without template instantiation, but the @@ -10234,16 +10374,15 @@ void CppImplGenerator::writeFunctionCallArguments(QTextStream &s, || argument->type()->isPrimitive() || argument->type()->isFlags()) ) { - if(argument->type()->isPrimitive()) + if(argument->type()->isPrimitive() && !hasConversionRule) s << "static_cast<"; writeTypeInfo(s, argument->type(), Option(SkipName | ForceValueType)); - if(argument->type()->isPrimitive()) + if(argument->type()->isPrimitive() && !hasConversionRule) s << ">"; s << "("; - paren = true; + ++paren; } } - if (argument->type()->isPointerContainer() && prefix=="__qt_") { const PointerContainerTypeEntry* pentry = static_cast(argument->type()->typeEntry()); switch(pentry->type()){ @@ -10252,19 +10391,23 @@ void CppImplGenerator::writeFunctionCallArguments(QTextStream &s, s << "std::unique_ptr<"; writeTypeInfo(s, argument->type()->instantiations()[0], SkipName); s << ">("; - paren = true; + ++paren; break; case PointerContainerTypeEntry::QScopedPointer: Q_ASSERT(argument->type()->instantiations().size()>0); s << "QScopedPointer<"; writeTypeInfo(s, argument->type()->instantiations()[0], SkipName); s << ">("; - paren = true; + ++paren; break; default: break; } } + if(argument->type()->getReferenceType()==AbstractMetaType::RReference){ + s << "std::move("; + ++paren; + } if (!argument->type()->isPrimitive() || java_function->hasConversionRule(TypeSystem::NativeCode, argument->argumentIndex() + 1) @@ -10272,7 +10415,7 @@ void CppImplGenerator::writeFunctionCallArguments(QTextStream &s, s << prefix; } s << argument->indexedName(); - if(paren) + for(int i=0; iisNamespace() && !cls->isFake() && cls->qualifiedCppName()!="QString" && cls->qualifiedCppName()!="QChar"){ + if(!cls->isNamespace() + && !cls->isFake() + && cls->typeEntry()!=TypeDatabase::instance()->qvariantType() + && cls->typeEntry()!=TypeDatabase::instance()->qcharType() + && cls->typeEntry()!=TypeDatabase::instance()->qstringType()){ bool isInterface = false; if (!entry->isInterface()){ // ?? && cls->hasStandardConstructor() ?? for(AbstractMetaClass *iface : cls->interfaces()){ @@ -10942,10 +11089,10 @@ void CppImplGenerator::writeMetaInfo(QTextStream &s, const AbstractMetaClass *cl } writeCodeInjections(s, cls->typeEntry(), CodeSnip::Position1, TypeSystem::MetaInfo); - CustomFunction customLegacyConstructor = entry->customConstructor(TypeEntry::LegacyCopyConstructor); - CustomFunction customCopyConstructor = entry->customConstructor(TypeEntry::CopyConstructor); - CustomFunction customMoveConstructor = entry->customConstructor(TypeEntry::MoveConstructor); - CustomFunction customDefaultConstructor = entry->customConstructor(TypeEntry::DefaultConstructor); + CustomFunction customLegacyConstructor = entry->customConstructor(ComplexTypeEntry::LegacyCopyConstructor); + CustomFunction customCopyConstructor = entry->customConstructor(ComplexTypeEntry::CopyConstructor); + CustomFunction customMoveConstructor = entry->customConstructor(ComplexTypeEntry::MoveConstructor); + CustomFunction customDefaultConstructor = entry->customConstructor(ComplexTypeEntry::DefaultConstructor); CustomFunction customDestructor = entry->customDestructor(); QString constructorLegacyName; QString constructorCopyName; @@ -11119,6 +11266,13 @@ void CppImplGenerator::writeMetaInfo(QTextStream &s, const AbstractMetaClass *cl s << "ConstructorInfo(&__qt_construct_" << cls->qualifiedCppName().replace("::", "_").replace("<", "_").replace(">", "_") << "_" << counter++ << ", "; QString args; QTextStream s2(&args); + const QPair,QList> addedArguments = function->addedArguments(); + int argumentCounter = 1; + while(addedArguments.first.contains(argumentCounter)){ + const ArgumentModification& argumentMod = addedArguments.first[argumentCounter]; + s2 << jni_signature(argumentMod.modified_type, JNISignatureFormat(NoModification | SlashesAndStuff)); + ++argumentCounter; + } for(const AbstractMetaArgument *argument : defaultArgumentOverloads[i]) { if (argument && function->argumentRemoved(argument->argumentIndex()+1)==ArgumentRemove_No) { if(function->argumentTypeArray(argument->argumentIndex() + 1)){ @@ -11168,9 +11322,15 @@ void CppImplGenerator::writeMetaInfo(QTextStream &s, const AbstractMetaClass *cl s2 << jni_signature(modified_type, JNISignatureFormat(NoModification | SlashesAndStuff)); } } + ++argumentCounter; + while(addedArguments.first.contains(argumentCounter)){ + const ArgumentModification& argumentMod = addedArguments.first[argumentCounter]; + s2 << jni_signature(argumentMod.modified_type, JNISignatureFormat(NoModification | SlashesAndStuff)); + ++argumentCounter; + } } - for(const ArgumentModification* mod : function->addedArguments()){ - s2 << jni_signature(mod->modified_type, JNISignatureFormat(NoModification | SlashesAndStuff)); + for(const ArgumentModification& mod : addedArguments.second){ + s2 << jni_signature(mod.modified_type, JNISignatureFormat(NoModification | SlashesAndStuff)); } if(args.isEmpty()) s << "nullptr)"; diff --git a/generator/cppimplgenerator.h b/generator/cppimplgenerator.h index 985d3594..a76d1a31 100644 --- a/generator/cppimplgenerator.h +++ b/generator/cppimplgenerator.h @@ -73,7 +73,7 @@ class CppImplGenerator : public CppGenerator { void writeAssignment(QTextStream &s, const QString &destName, const QString &srcName, const AbstractMetaType *java_type); - static void writeCustomStructors(QTextStream &s, const TypeEntry *entry); + static void writeCustomStructors(QTextStream &s, const ComplexTypeEntry *entry); void writeCodeInjections(QTextStream &s, const TypeEntry *typeEntry, CodeSnip::Position position, diff --git a/generator/docindex/docindexreader.cpp b/generator/docindex/docindexreader.cpp index 72ed7b8d..18918c50 100755 --- a/generator/docindex/docindexreader.cpp +++ b/generator/docindex/docindexreader.cpp @@ -70,18 +70,36 @@ void DocIndexReader::analyzeNamespace(const QDir& subdir, DocModel* model, const ns->setFullName(element.attribute("fullname")); model->addNamespace(ns); } - QDomNodeList childNodes = element.childNodes(); - for(int i=0; i childNodeList{element.childNodes()}; + while(!childNodeList.isEmpty()){ + QDomNodeList childNodes = childNodeList.takeFirst(); + for(int i=0; iname()+"'"); + DocNamespace* hns = new DocNamespace(model); + hns->setSubdir(subdir); + hns->setUrl(url); + if(fullName.isEmpty()) + hns->setName(element.attribute("name").mid(1).chopped(1).trimmed()); + else + hns->setName(fullName+"::"+element.attribute("name").mid(1).chopped(1).trimmed()); + hns->setHref(element.attribute("href")); + hns->setBrief(element.attribute("brief")); + hns->setFullName(hns->name()); + model->addNamespace(hns); + childNodeList << element.childNodes(); + } } } } @@ -175,9 +193,8 @@ void DocIndexReader::analyzeFunction(const QDir& subdir, DocFunctionOwner* owner const DocModel* DocIndexReader::readDocIndexes(const QDir& docDirectory, QThread* targetThread){ ReportHandler::setContext("DocIndexReader"); - QScopedPointer model(new DocModel()); + std::unique_ptr model(new DocModel()); if(docDirectory.exists()){ - //QList domDocuments; for(const QString& subdirp : docDirectory.entryList(QDir::Dirs | QDir::NoDotAndDotDot)){ QDir subdir(docDirectory.absoluteFilePath(subdirp)); for(const QString& idxfilep : subdir.entryList({"*.index"}, QDir::Files)){ @@ -210,17 +227,21 @@ const DocModel* DocIndexReader::readDocIndexes(const QDir& docDirectory, QThread } } } -// QThread* thread = QThread::create([](QList list){ -// while(!list.isEmpty()){ -// delete list.takeFirst(); -// } -// }, domDocuments); -// thread->start(); + /* + for(auto _ns : model->namespaces()){ + auto ns = model->getNamespace(_ns); + ReportHandler::warning("namespace '"+ns->name()+"'{"); + ReportHandler::warning(" "+ns->functions().keys().join(", ")); + for(auto s : ns->functions().values()){ + ReportHandler::warning(" --> "+s->name()); + } + ReportHandler::warning("}"); + }*/ } if(model->isEmpty()){ model.reset(); }else{ model->moveToThread(targetThread); } - return model.take(); + return model.release(); } diff --git a/generator/docindex/docnamespace.cpp b/generator/docindex/docnamespace.cpp index 70ba01d7..9027250d 100755 --- a/generator/docindex/docnamespace.cpp +++ b/generator/docindex/docnamespace.cpp @@ -8,6 +8,15 @@ DocNamespace::DocNamespace(QObject* parent): void DocNamespace::addFunction(const DocFunction* fct){ Q_ASSERT(fct); + for(const DocFunction* f : m_functions.values(fct->name())){ + if(f->isConst()==fct->isConst() + && f->isStatic()==fct->isStatic() + && f->type()==fct->type() + && f->parameters()==fct->parameters()){ + delete fct; + return; + } + } m_functions.insert(fct->name(), fct); } diff --git a/generator/docindex/docnamespace.h b/generator/docindex/docnamespace.h index cb83d062..05d6e11f 100755 --- a/generator/docindex/docnamespace.h +++ b/generator/docindex/docnamespace.h @@ -12,6 +12,7 @@ class DocNamespace: public DocElement DocNamespace(QObject* parent); void addFunction(const DocFunction*); QList getFunctions(const QString& name) const; + const QMultiHash& functions() const{return m_functions;} private: QMultiHash m_functions; }; diff --git a/generator/generator.cpp b/generator/generator.cpp index a7b9c312..94d14942 100644 --- a/generator/generator.cpp +++ b/generator/generator.cpp @@ -116,13 +116,13 @@ void Generator::writeInclude(QTextStream &s, const Include &inc, QSet & if (inc.type == Include::TargetLangImport) s << "import " << incString << ";" << Qt::endl; else{ - if(incString==QLatin1String("qquickgraphicsdevice.h") + /*if(incString==QLatin1String("qquickgraphicsdevice.h") || incString==QLatin1String("QtQuick/QQuickGraphicsDevice")){ s << "#ifdef QT_FEATURE_vulkan" << Qt::endl << "#undef QT_FEATURE_vulkan" << Qt::endl << "#define QT_FEATURE_vulkan -1" << Qt::endl << "#endif" << Qt::endl; - } + }*/ for(const QString& feature : inc.requiredFeatures.keys()){ QString configFile = inc.requiredFeatures[feature]; if(!configFile.isEmpty()){ diff --git a/generator/generatorset.h b/generator/generatorset.h index f7568144..68d35662 100644 --- a/generator/generatorset.h +++ b/generator/generatorset.h @@ -59,7 +59,7 @@ class GeneratorSet : public QObject { virtual QString usage() = 0; virtual bool readParameters(const QMap args) = 0; - virtual void buildModel(const QMap& features, const QString pp_file) = 0; + virtual void buildModel(const QMap& features, const QString pp_file, const QStringList& includePathsList) = 0; virtual void dumpObjectTree() = 0; virtual void generate() = 0; diff --git a/generator/generatorsetjava.cpp b/generator/generatorsetjava.cpp index 4edf34c0..5ac400c9 100644 --- a/generator/generatorsetjava.cpp +++ b/generator/generatorsetjava.cpp @@ -120,7 +120,7 @@ bool GeneratorSetJava::readParameters(const QMap args) { ui_file_name = args.value("convert-to-jui"); do_ui_convert = true; - if (!QFileInfo(ui_file_name).exists()) { + if (!QFileInfo::exists(ui_file_name)) { printf(".ui file '%s' does not exist\n", qPrintable(ui_file_name)); return false; } @@ -128,7 +128,8 @@ bool GeneratorSetJava::readParameters(const QMap args) { return GeneratorSet::readParameters(args); } -void GeneratorSetJava::buildModel(const QMap& features, const QString pp_file) { +void GeneratorSetJava::buildModel(const QMap& features, const QString pp_file, const QStringList& includePathsList) { + builder.setIncludePathsList(includePathsList); builder.setQtVersion(qtVersionMajor, qtVersionMinor, qtVersionPatch, qtjambiVersionPatch); builder.setFileName(pp_file); if (!outDir.isNull()) diff --git a/generator/generatorsetjava.h b/generator/generatorsetjava.h index 827a9a71..5d4de2c5 100644 --- a/generator/generatorsetjava.h +++ b/generator/generatorsetjava.h @@ -48,7 +48,7 @@ class GeneratorSetJava : public GeneratorSet { QString usage() override; bool readParameters(const QMap args) override; - void buildModel(const QMap& features, const QString pp_file) override; + void buildModel(const QMap& features, const QString pp_file, const QStringList& includePathsList) override; void dumpObjectTree() override; void generate() override; diff --git a/generator/javagenerator.cpp b/generator/javagenerator.cpp index d8348bc3..3edb2e57 100644 --- a/generator/javagenerator.cpp +++ b/generator/javagenerator.cpp @@ -705,7 +705,16 @@ QString JavaGenerator::translateType(const AbstractMetaType *java_type, const Ab }else if(type->isComplex()){ const ComplexTypeEntry *ctype = reinterpret_cast(type); if(ctype->isGenericClass()){ - if(context && !context->templateArguments().isEmpty()){ + if(java_type->hasInstantiations()){ + s += '<'; + const QList& args = java_type->instantiations(); + for (int i=0; itemplateArguments().isEmpty()){ s += '<'; const QList& args = context->templateArguments(); for (int i=0; iisNormal() || java_function->isSignal() ) ? NoOption : SkipReturnType))); if (java_function->isConstructor()){ - if(java_function->declaringClass()->typeEntry()->isGenericClass() + const QList addedParameterTypes = java_function->addedParameterTypes(); + if((java_function->declaringClass()->typeEntry()->isGenericClass() && java_function->declaringClass()->templateBaseClass() - && java_function->declaringClass()->templateBaseClass()->templateArguments().size()>0){ + && java_function->declaringClass()->templateBaseClass()->templateArguments().size()>0) || !addedParameterTypes.isEmpty()){ s << "<"; bool first = true; for(TypeEntry * t : java_function->declaringClass()->templateBaseClass()->templateArguments()){ @@ -1988,6 +1998,17 @@ void JavaGenerator::writePrivateNativeFunction(QTextStream &s, const AbstractMet } s << t->name(); } + for(const Parameter& p : addedParameterTypes){ + if(first){ + first = false; + }else{ + s << ","; + } + s << p.name; + if(!p.extends.isEmpty()){ + s << " extends " << p.extends; + } + } s << "> "; } s << "void "; @@ -2031,6 +2052,16 @@ void JavaGenerator::writePrivateNativeFunction(QTextStream &s, const AbstractMet needsComma = true; } } + const QPair,QList> addedArguments = java_function->addedArguments(); + int argumentCounter = 1; + while(addedArguments.first.contains(argumentCounter)){ + const ArgumentModification& argumentMod = addedArguments.first[argumentCounter]; + if(needsComma) + s << ", "; + needsComma = true; + s << QString(argumentMod.modified_type).replace('$', '.') << " " << argumentMod.modified_name; + ++argumentCounter; + } for (int i = 0; i < arguments.count(); ++i) { const AbstractMetaArgument *arg = arguments.at(i); @@ -2046,14 +2077,22 @@ void JavaGenerator::writePrivateNativeFunction(QTextStream &s, const AbstractMet else s << "long " << arg->modifiedArgumentName(); } + ++argumentCounter; + while(addedArguments.first.contains(argumentCounter)){ + const ArgumentModification& argumentMod = addedArguments.first[argumentCounter]; + if(needsComma) + s << ", "; + needsComma = true; + s << QString(argumentMod.modified_type).replace('$', '.') << " " << argumentMod.modified_name; + ++argumentCounter; + } } - QList addedArguments = java_function->addedArguments(); - for(const ArgumentModification* argumentMod : addedArguments){ + for(const ArgumentModification& argumentMod : addedArguments.second){ if(needsComma) s << ", "; needsComma = true; - registerPackage(argumentMod->modified_type); - s << QString(argumentMod->modified_type).replace('$', '.') << " " << argumentMod->modified_name; + registerPackage(argumentMod.modified_type); + s << QString(argumentMod.modified_type).replace('$', '.') << " " << argumentMod.modified_name; } s << ")"; @@ -2172,11 +2211,13 @@ void JavaGenerator::writeInjectedCode(QTextStream &s, const AbstractMetaFunction } void JavaGenerator::writeJavaCallThroughContents(QTextStream &s, const AbstractMetaFunction *java_function, uint attributes) { - if((java_function->isAbstract() || !(java_function->originalAttributes() & AbstractMetaAttributes::Public)) && !java_function->implementingClass()->generateShellClass()){ - s << INDENT << "throw new io.qt.QNoImplementationException();" << Qt::endl; - }else if(java_function->isAbstract() && java_function->implementingClass()->hasUnimplmentablePureVirtualFunction()){ - s << INDENT << "throw new io.qt.QNoImplementationException();" << Qt::endl; - }else{ +// if((java_function->isAbstract() || !(java_function->originalAttributes() & AbstractMetaAttributes::Public)) && !java_function->implementingClass()->generateShellClass()){ +// s << INDENT << "throw new io.qt.QNoImplementationException();" << Qt::endl; +// }else +// if(java_function->isAbstract() && java_function->implementingClass()->hasUnimplmentablePureVirtualFunction()){ +// s << INDENT << "throw new io.qt.QNoImplementationException();" << Qt::endl; +// }else + { const AbstractMetaArgumentList& arguments = java_function->arguments(); QString lines; @@ -2447,7 +2488,16 @@ void JavaGenerator::writeJavaCallThroughContents(QTextStream &s, const AbstractM } } - + const QPair,QList> addedArguments = java_function->addedArguments(); + int argumentCounter = 1; + while(addedArguments.first.contains(argumentCounter)){ + const ArgumentModification& argumentMod = addedArguments.first[argumentCounter]; + if(needsComma) + s << ", "; + needsComma = true; + s << argumentMod.modified_name; + ++argumentCounter; + } for (int i = 0; i < arguments.count(); ++i) { const AbstractMetaArgument *arg = arguments.at(i); const AbstractMetaType *type = arg->type(); @@ -2469,13 +2519,21 @@ void JavaGenerator::writeJavaCallThroughContents(QTextStream &s, const AbstractM s << arg->modifiedArgumentName(); } } + ++argumentCounter; + while(addedArguments.first.contains(argumentCounter)){ + const ArgumentModification& argumentMod = addedArguments.first[argumentCounter]; + if(needsComma) + s << ", "; + needsComma = true; + s << argumentMod.modified_name; + ++argumentCounter; + } } - QList addedArguments = java_function->addedArguments(); - for(const ArgumentModification* argumentMod : addedArguments){ + for(const ArgumentModification& argumentMod : addedArguments.second){ if(needsComma) s << ", "; needsComma = true; - s << argumentMod->modified_name; + s << argumentMod.modified_name; } if (useJumpTable) { @@ -3685,7 +3743,7 @@ void JavaGenerator::writeFunction(QTextStream &s, const AbstractMetaFunction *ja if(!java_function->href().isEmpty()){ QString url = docsUrl+java_function->href(); commentStream << "

See "; - if(java_function->declaringClass()){ + if(java_function->declaringClass() && java_function->functionType()!=AbstractMetaFunction::GlobalScopeFunction){ commentStream << java_function->declaringClass()->qualifiedCppName() .replace("", "") .replace("QtJambi", "Q") @@ -4801,6 +4859,7 @@ void JavaGenerator::writeEnumOverload(QTextStream &s, const AbstractMetaFunction generate_enum_overload = arguments.at(i)->type()->isTargetLangFlags() ? i : -1; if (generate_enum_overload >= 0) { + const QPair,QList> addedArguments = java_function->addedArguments(); QString comment; QTextStream commentStream(&comment); if (m_doc_parser) { @@ -4836,7 +4895,7 @@ void JavaGenerator::writeEnumOverload(QTextStream &s, const AbstractMetaFunction writeFunctionAttributes(s, java_function, generate_enum_overload >= 0 ? generate_enum_overload : -1, include_attributes, exclude_attributes, option); s << java_function->name() << "("; - if (generate_enum_overload > 0) { + if (generate_enum_overload > 0 || addedArguments.first.size() + addedArguments.second.size()>0) { writeFunctionArguments(s, java_function, generate_enum_overload); s << ", "; } @@ -4872,10 +4931,25 @@ void JavaGenerator::writeEnumOverload(QTextStream &s, const AbstractMetaFunction } s << "("; + int argumentCounter = 1; + while(addedArguments.first.contains(argumentCounter)){ + const ArgumentModification& mod = addedArguments.first[argumentCounter]; + s << mod.modified_name << ", "; + ++argumentCounter; + } for (int i = 0; i < generate_enum_overload; ++i) { AbstractMetaArgument *arg = arguments.at(i); if(java_function->argumentRemoved(arg->argumentIndex()+1)==ArgumentRemove_No) s << arg->modifiedArgumentName() << ", "; + ++argumentCounter; + while(addedArguments.first.contains(argumentCounter)){ + const ArgumentModification& mod = addedArguments.first[argumentCounter]; + s << mod.modified_name << ", "; + ++argumentCounter; + } + } + for(const ArgumentModification& mod : addedArguments.second){ + s << mod.modified_name << ", "; } registerPackage(affected_arg->type()->fullName()); s << "new " << affected_arg->type()->fullName().replace('$', '.') << "(" << affected_arg->modifiedArgumentName() << "));" << Qt::endl @@ -5097,6 +5171,16 @@ void JavaGenerator::writeFunctionOverloads(QTextStream &s, const AbstractMetaFun s << "("; int written_arguments = 0; + const QPair,QList> addedArguments = java_function->addedArguments(); + int argumentCounter = 1; + while(addedArguments.first.contains(argumentCounter)){ + const ArgumentModification& argumentMod = addedArguments.first[argumentCounter]; + if(written_arguments > 0) + s << ", "; + s << argumentMod.modified_name; + ++argumentCounter; + ++written_arguments; + } for (int j = 0; j < arguments.size(); ++j) { const AbstractMetaArgument* arg = arguments.at(j); if (java_function->argumentRemoved(arg->argumentIndex() + 1)==ArgumentRemove_No) { @@ -5160,6 +5244,21 @@ void JavaGenerator::writeFunctionOverloads(QTextStream &s, const AbstractMetaFun } ++written_arguments; } + ++argumentCounter; + while(addedArguments.first.contains(argumentCounter)){ + const ArgumentModification& argumentMod = addedArguments.first[argumentCounter]; + if(written_arguments > 0) + s << ", "; + s << argumentMod.modified_name; + ++argumentCounter; + ++written_arguments; + } + } + for(const ArgumentModification& argumentMod : addedArguments.second){ + if(written_arguments > 0) + s << ", "; + ++written_arguments; + s << argumentMod.modified_name; } s << ");" << Qt::endl; } @@ -5264,7 +5363,16 @@ void JavaGenerator::write(QTextStream &s, const AbstractMetaClass *java_class, i << "

" << Qt::endl; } if(java_class->href().isEmpty()){ - commentStream << "

Java wrapper for Qt class " << (java_class->templateBaseClass() ? java_class->templateBaseClass()->qualifiedCppName().replace("", "") : java_class->qualifiedCppName() ) + commentStream << "

Java wrapper for Qt "; + if(java_class->typeEntry()->isNamespace()){ + if(reinterpret_cast(java_class->typeEntry())->isHeader()) + commentStream << "namespace "; + else + commentStream << "header file "; + }else{ + commentStream << "class "; + } + commentStream << (java_class->templateBaseClass() ? java_class->templateBaseClass()->qualifiedCppName().replace("", "") : java_class->qualifiedCppName() ) .replace("&", "&") .replace("<", "<") .replace(">", ">") @@ -5274,7 +5382,9 @@ void JavaGenerator::write(QTextStream &s, const AbstractMetaClass *java_class, i .replace("*/", "*/") << "

" << Qt::endl; }else{ QString url = docsUrl+java_class->href(); - commentStream << "

Java wrapper for Qt class " + commentStream << "

Java wrapper for Qt's " + << (java_class->typeEntry()->isNamespace() ? "namespace" : "class") + << " " << (java_class->templateBaseClass() ? java_class->templateBaseClass()->qualifiedCppName().replace("", "") : java_class->qualifiedCppName() ) .replace("&", "&") .replace("<", "<") @@ -7026,7 +7136,9 @@ void JavaGenerator::generate() { QFile file(fileName); if (!logOutputDirectory().isNull()) file.setFileName(QDir(logOutputDirectory()).absoluteFilePath(fileName)); - if (file.open(QFile::WriteOnly)) { + if(m_nativepointer_functions.isEmpty()){ + file.remove(); + }else if (file.open(QFile::WriteOnly)) { QTextStream s(&file); s << "Number of public or protected functions with QNativePointer API: " @@ -7049,7 +7161,9 @@ void JavaGenerator::generate() { QFile file(fileName); if (!logOutputDirectory().isNull()) file.setFileName(QDir(logOutputDirectory()).absoluteFilePath(fileName)); - if (file.open(QFile::WriteOnly)) { + if(m_resettable_object_functions.isEmpty()){ + file.remove(); + }else if (file.open(QFile::WriteOnly)) { QTextStream s(&file); AbstractMetaFunctionList resettable_object_functions; @@ -7082,7 +7196,9 @@ void JavaGenerator::generate() { QFile file(fileName); if (!logOutputDirectory().isNull()) file.setFileName(QDir(logOutputDirectory()).absoluteFilePath(fileName)); - if (file.open(QFile::WriteOnly)) { + if(m_reference_count_candidate_functions.isEmpty()){ + file.remove(); + }else if (file.open(QFile::WriteOnly)) { QTextStream s(&file); s << "The following functions have a signature pattern which may imply that" << Qt::endl @@ -7106,7 +7222,9 @@ void JavaGenerator::generate() { QFile file(fileName); if (!logOutputDirectory().isNull()) file.setFileName(QDir(logOutputDirectory()).absoluteFilePath(fileName)); - if (file.open(QFile::WriteOnly)) { + if(m_factory_functions.isEmpty()){ + file.remove(); + }else if (file.open(QFile::WriteOnly)) { QTextStream s(&file); s << "The following functions have a signature pattern which may imply that" << Qt::endl @@ -7136,7 +7254,9 @@ void JavaGenerator::generate() { QFile file(fileName); if (!logOutputDirectory().isNull()) file.setFileName(QDir(logOutputDirectory()).absoluteFilePath(fileName)); - if (file.open(QFile::WriteOnly)) { + if(m_inconsistent_functions.isEmpty()){ + file.remove(); + }else if (file.open(QFile::WriteOnly)) { QTextStream s(&file); s << "The following functions are inconsistent (virtual but declared final in java) (" @@ -7410,8 +7530,8 @@ void JavaGenerator::writeFunctionAttributes(QTextStream &s, const AbstractMetaFu if (isDefault) s << "default "; + QList templateArguments; if(isStatic){ - QList templateArguments; if(java_function->type() && java_function->type()->typeEntry()->isTemplateArgument() && !templateArguments.contains(java_function->type()->typeEntry()->qualifiedCppName())){ templateArguments << java_function->type()->typeEntry()->qualifiedCppName(); @@ -7422,10 +7542,18 @@ void JavaGenerator::writeFunctionAttributes(QTextStream &s, const AbstractMetaFu templateArguments << arg->type()->typeEntry()->qualifiedCppName(); } } - if(!templateArguments.isEmpty()){ - s << "<" << templateArguments.join(",") << "> "; + } + if(!java_function->isConstructor()){ + const QList addedParameterTypes = java_function->addedParameterTypes(); + for(const Parameter& p : addedParameterTypes){ + if(p.extends.isEmpty()) + templateArguments << p.name; + else + templateArguments << p.name + " extends " + p.extends; } } + if(!templateArguments.isEmpty()) + s << "<" << templateArguments.join(",") << "> "; } if ((options & SkipReturnType) == 0) { @@ -7481,6 +7609,16 @@ void JavaGenerator::writeFunctionArguments(QTextStream &s, const AbstractMetaFun argument_count = int(arguments.size()); bool commaRequired = false; + const QPair,QList> addedArguments = java_function->addedArguments(); + int argumentCounter = 1; + while(addedArguments.first.contains(argumentCounter)){ + const ArgumentModification& mod = addedArguments.first[argumentCounter]; + if(commaRequired) + s << ", "; + commaRequired = true; + s << QString(mod.modified_type).replace('$', '.') << " " << mod.modified_name; + ++argumentCounter; + } for (int i = 0; i < argument_count; ++i) { const AbstractMetaArgument *arg = arguments.at(i); if (java_function->argumentRemoved(arg->argumentIndex() + 1)==ArgumentRemove_No) { @@ -7489,13 +7627,21 @@ void JavaGenerator::writeFunctionArguments(QTextStream &s, const AbstractMetaFun writeArgument(s, java_function, arg, Option(options | CollectionAsCollection)); commaRequired = true; } + ++argumentCounter; + while(addedArguments.first.contains(argumentCounter)){ + const ArgumentModification& mod = addedArguments.first[argumentCounter]; + if(commaRequired) + s << ", "; + commaRequired = true; + s << QString(mod.modified_type).replace('$', '.') << " " << mod.modified_name; + ++argumentCounter; + } } - QList addedArguments = java_function->addedArguments(); - for(const ArgumentModification* argumentMod : addedArguments){ + for(const ArgumentModification& argumentMod : addedArguments.second){ if(commaRequired) s << ", "; commaRequired = true; - s << QString(argumentMod->modified_type).replace('$', '.') << " " << argumentMod->modified_name; + s << QString(argumentMod.modified_type).replace('$', '.') << " " << argumentMod.modified_name; } } diff --git a/generator/metainfogenerator.cpp b/generator/metainfogenerator.cpp index e442ddb1..0774d0bc 100644 --- a/generator/metainfogenerator.cpp +++ b/generator/metainfogenerator.cpp @@ -276,8 +276,6 @@ void MetaInfoGenerator::writeContainerAccess(){ } void MetaInfoGenerator::writeCppFile() { - const TypeEntryHash& entries = TypeDatabase::instance()->allEntries(); - QHash fileHash; QHash> writtenClasses; @@ -348,13 +346,6 @@ void MetaInfoGenerator::writeCppFile() { const QString& package = iter->first; FileOut *f = iter->second; if (f != nullptr) { - for (const QList& _entries : entries) { - for(TypeEntry *entry : _entries) { - if (shouldGenerate(entry) && entry->isPrimitive()) { - CppImplGenerator::writeCustomStructors(f->stream, entry); - } - } - } TypeSystemTypeEntry * typeSystemEntry = static_cast(TypeDatabase::instance()->findType(package)); if(typeSystemEntry) generateInitializer(f->stream, typeSystemEntry, {}, TypeSystem::MetaInfo, CodeSnip::Position2, INDENT); @@ -586,98 +577,157 @@ void MetaInfoGenerator::writeLibraryInitializers() { QSet alreadyInitializedPackages; struct Analyzer{ - static void analyzeRequiredQtLibraries(TypeDatabase* typeDatabase, QSet& alreadyInitializedPackages, QList& requiredQtLibraries, const TypeSystemTypeEntry* ts, Dependency::Mode mode, const QStringList& platforms = {}){ + static void analyzeRequiredQtLibraries(TypeDatabase* typeDatabase, QSet& alreadyInitializedPackages, QMap& expandedQtLibraries, QList& requiredQtLibraries, const TypeSystemTypeEntry* ts, Dependency::Mode mode = Dependency::Mandatory, const QStringList& platforms = {}){ if(ts && !alreadyInitializedPackages.contains(ts->name())){ + alreadyInitializedPackages.insert(ts->name()); for(const TypeSystemTypeEntry* entry : ts->requiredTypeSystems()){ - analyzeRequiredQtLibraries(typeDatabase, alreadyInitializedPackages, requiredQtLibraries, entry, mode, platforms); + analyzeRequiredQtLibraries(typeDatabase, alreadyInitializedPackages, expandedQtLibraries, requiredQtLibraries, entry, mode, platforms); } for(const Dependency& dep : ts->requiredQtLibraries()){ - Dependency::Mode newMode; - if(dep.mode==Dependency::ProvideOnly){ - requiredQtLibraries.append(dep); - continue; + if(!platforms.isEmpty() && !dep.platforms.isEmpty()){ + if(!QSet(platforms.begin(), platforms.end()).intersects(QSet(dep.platforms.begin(), dep.platforms.end()))){ + continue; + } } - if(dep.mode==Dependency::Mandatory && mode==Dependency::Mandatory){ + Dependency::Mode newMode; + if(mode==Dependency::ProvideOnly){ + newMode = Dependency::ProvideOnly; + }else if(dep.mode==Dependency::Mandatory && mode==Dependency::Mandatory){ newMode = Dependency::Mandatory; }else{ - newMode = Dependency::Optional; + newMode = dep.mode; } QStringList _platforms; _platforms << platforms << dep.platforms; if(!_platforms.isEmpty()) _platforms.removeDuplicates(); - analyzeRequiredQtLibraries(typeDatabase, alreadyInitializedPackages, requiredQtLibraries, dep.entry, newMode, _platforms); + QSet _alreadyInitializedPackages = alreadyInitializedPackages; + analyzeRequiredQtLibraries(typeDatabase, _alreadyInitializedPackages, expandedQtLibraries, requiredQtLibraries, dep.entry, newMode, _platforms); } - bool found = false; - for(Dependency& dep : requiredQtLibraries){ - if(dep.entry==ts->qtLibrary()){ - if(mode==Dependency::Mandatory){ - dep.mode = Dependency::Mandatory; - }else if(mode==Dependency::Optional){ - if(dep.mode==Dependency::ProvideOnly){ - dep.mode = Dependency::Optional; + if(mode==Dependency::ProvideOnly){ + if(!expandedQtLibraries.contains(ts->qtLibrary())){ + expandedQtLibraries[ts->qtLibrary()] = platforms; + }else{ + QStringList& _platforms = expandedQtLibraries[ts->qtLibrary()]; + if(!_platforms.isEmpty()){ + if(platforms.isEmpty()){ + _platforms.clear(); + }else{ + _platforms << platforms; + _platforms.removeDuplicates(); } + }else{ + if(platforms.isEmpty()) + _platforms.clear(); + else + _platforms << platforms; } - found = true; - break; } + }else{ + bool found = false; + for(Dependency& dep : requiredQtLibraries){ + if(dep.entry==ts->qtLibrary()){ + if(mode==Dependency::Mandatory){ + dep.mode = Dependency::Mandatory; + } + found = true; + break; + } + } + if(!found) + requiredQtLibraries.append(Dependency(QString(ts->qtLibrary()), mode, QStringList(platforms))); } - if(!found) - requiredQtLibraries.append(Dependency(QString(ts->qtLibrary()), mode, QStringList(platforms))); } } - static void analyzeRequiredQtLibraries(TypeDatabase* typeDatabase, QSet& alreadyInitializedPackages, QList& requiredQtLibraries, const QString& lib, Dependency::Mode mode, const QStringList& platforms = {}){ + static void analyzeRequiredQtLibraries(TypeDatabase* typeDatabase, QSet& alreadyInitializedPackages, QMap& expandedQtLibraries, QList& requiredQtLibraries, const QString& lib, Dependency::Mode mode, const QStringList& platforms = {}){ if(TypeSystemTypeEntry* ts = typeDatabase->typeSystemsByQtLibrary()[lib]){ if(ts && !alreadyInitializedPackages.contains(ts->name())){ + alreadyInitializedPackages.insert(ts->name()); for(const TypeSystemTypeEntry* entry : ts->requiredTypeSystems()){ - analyzeRequiredQtLibraries(typeDatabase, alreadyInitializedPackages, requiredQtLibraries, entry, mode, platforms); + analyzeRequiredQtLibraries(typeDatabase, alreadyInitializedPackages, expandedQtLibraries, requiredQtLibraries, entry, mode, platforms); } for(const Dependency& dep : ts->requiredQtLibraries()){ - Dependency::Mode newMode; - if(dep.mode==Dependency::ProvideOnly){ - requiredQtLibraries.append(dep); - continue; + if(!platforms.isEmpty() && !dep.platforms.isEmpty()){ + if(!QSet(platforms.begin(), platforms.end()).intersects(QSet(dep.platforms.begin(), dep.platforms.end()))){ + continue; + } } - if(dep.mode==Dependency::Mandatory && mode==Dependency::Mandatory){ + Dependency::Mode newMode; + if(mode==Dependency::ProvideOnly){ + newMode = Dependency::ProvideOnly; + }else if(dep.mode==Dependency::Mandatory && mode==Dependency::Mandatory){ newMode = Dependency::Mandatory; }else{ - newMode = Dependency::Optional; + newMode = dep.mode; } QStringList _platforms; _platforms << platforms << dep.platforms; if(!_platforms.isEmpty()) _platforms.removeDuplicates(); - analyzeRequiredQtLibraries(typeDatabase, alreadyInitializedPackages, requiredQtLibraries, dep.entry, newMode, _platforms); + QSet _alreadyInitializedPackages = alreadyInitializedPackages; + analyzeRequiredQtLibraries(typeDatabase, _alreadyInitializedPackages, expandedQtLibraries, requiredQtLibraries, dep.entry, newMode, _platforms); } - bool found = false; - for(Dependency& dep : requiredQtLibraries){ - if(dep.entry==ts->qtLibrary()){ - found = true; - if(mode==Dependency::Mandatory){ - dep.mode = Dependency::Mandatory; - }else if(mode==Dependency::Optional){ - if(dep.mode==Dependency::ProvideOnly){ - dep.mode = Dependency::Optional; + if(mode==Dependency::ProvideOnly){ + if(!expandedQtLibraries.contains(ts->qtLibrary())){ + expandedQtLibraries[ts->qtLibrary()] = platforms; + }else{ + QStringList& _platforms = expandedQtLibraries[ts->qtLibrary()]; + if(!_platforms.isEmpty()){ + if(platforms.isEmpty()){ + _platforms.clear(); + }else{ + _platforms << platforms; + _platforms.removeDuplicates(); } + }else{ + if(platforms.isEmpty()) + _platforms.clear(); + else + _platforms << platforms; } - break; } + }else{ + bool found = false; + for(Dependency& dep : requiredQtLibraries){ + if(dep.entry==ts->qtLibrary() && dep.platforms==platforms){ + found = true; + if(mode==Dependency::Mandatory){ + dep.mode = Dependency::Mandatory; + } + break; + } + } + if(!found) + requiredQtLibraries.append(Dependency(QString(ts->qtLibrary()), mode, QStringList(platforms))); + } + } + }else if(mode==Dependency::ProvideOnly){ + if(!expandedQtLibraries.contains(lib)){ + expandedQtLibraries[lib] = platforms; + }else{ + QStringList& _platforms = expandedQtLibraries[lib]; + if(!_platforms.isEmpty()){ + if(platforms.isEmpty()){ + _platforms.clear(); + }else{ + _platforms << platforms; + _platforms.removeDuplicates(); + } + }else{ + if(platforms.isEmpty()) + _platforms.clear(); + else + _platforms << platforms; } - if(!found) - requiredQtLibraries.append(Dependency(QString(ts->qtLibrary()), mode, QStringList(platforms))); } }else{ bool found = false; for(Dependency& dep : requiredQtLibraries){ - if(dep.entry==lib){ + if(dep.entry==lib && dep.platforms==platforms){ found = true; if(mode==Dependency::Mandatory){ dep.mode = Dependency::Mandatory; - }else if(mode==Dependency::Optional){ - if(dep.mode==Dependency::ProvideOnly){ - dep.mode = Dependency::Optional; - } } break; } @@ -700,14 +750,31 @@ void MetaInfoGenerator::writeLibraryInitializers() { generateInitializer(s, typeSystemEntry, {}, TypeSystem::TargetLangCode, CodeSnip::Position2, INDENT); QList requiredQtLibraries; - for(const Dependency& pair : typeSystemEntry->requiredQtLibraries()){ - Analyzer::analyzeRequiredQtLibraries(typeDatabase, alreadyInitializedPackages, requiredQtLibraries, pair.entry, pair.mode, pair.platforms); + QMap expandedQtLibraries; + Analyzer::analyzeRequiredQtLibraries(typeDatabase, alreadyInitializedPackages, expandedQtLibraries, requiredQtLibraries, typeSystemEntry); + expandedQtLibraries.take(typeSystemEntry->qtLibrary()); + expandedQtLibraries.take("QtCore"); + expandedQtLibraries.take("QtUiPlugin"); + expandedQtLibraries.take("QtQmlIntegration"); + for(const QString& key : expandedQtLibraries.keys()){ + if(key.startsWith("Qt")){ + s << INDENT << "io.qt.QtUtilities.loadQtLibrary(\"" << key.mid(2); + }else{ + s << INDENT << "io.qt.QtUtilities.loadUtilityLibrary(\"" << key; + } + s << "\", io.qt.QtUtilities.LibraryRequirementMode.ProvideOnly"; + for(const QString& pl : expandedQtLibraries[key]){ + if(!pl.isEmpty()){ + s << ", \"" << pl << "\""; + } + } + s << ");" << Qt::endl; } + QSet loaded{"QtCore", typeSystemEntry->qtLibrary(), "QtUiPlugin", "QtQmlIntegration"}; - for(const Dependency& dep : requiredQtLibraries){ + for(const Dependency& dep : qAsConst(requiredQtLibraries)){ if(loaded.contains(dep.entry) || m_staticLibraries.contains(dep.entry)) continue; - loaded.insert(dep.entry); QString append; switch(dep.mode){ case Dependency::Mandatory: @@ -720,9 +787,15 @@ void MetaInfoGenerator::writeLibraryInitializers() { case Dependency::Optional: append = ", io.qt.QtUtilities.LibraryRequirementMode.Optional"; break; case Dependency::ProvideOnly: append = ", io.qt.QtUtilities.LibraryRequirementMode.ProvideOnly"; break; } + bool isPlatformDependent = false; for(const QString& pl : dep.platforms){ - if(!pl.isEmpty()) + if(!pl.isEmpty()){ + isPlatformDependent = true; append += ", \"" + pl + "\""; + } + } + if(!isPlatformDependent && dep.mode==Dependency::Mandatory){ + loaded.insert(dep.entry); } if(dep.entry.startsWith("Qt")){ s << INDENT << "io.qt.QtUtilities.loadQtLibrary(\"" << dep.entry.mid(2) << "\"" << append << ");" << Qt::endl; diff --git a/generator/parser/binder.cpp b/generator/parser/binder.cpp index 3cb9fe51..e49b4a1e 100644 --- a/generator/parser/binder.cpp +++ b/generator/parser/binder.cpp @@ -624,6 +624,7 @@ void Binder::visitTemplateDeclaration(TemplateDeclarationAST *node) { QString defaultType; NameAST *name; + bool isVariadic = false; if (!type_parameter) { // A hacky hack to work around missing support for parameter declarations in // templates. We just need the to get the name of the variable, since we @@ -637,7 +638,11 @@ void Binder::visitTemplateDeclaration(TemplateDeclarationAST *node) { } + isVariadic = parameter->parameter_declaration->declarator->ellipsis!=0 && parameter->parameter_declaration->declarator->ellipsis!=std::numeric_limits::max(); name = parameter->parameter_declaration->declarator->id; + if(parameter->parameter_declaration->expression){ + defaultType = parameter->parameter_declaration->expression->toString(this->tokenStream()); + } } else { int tk = decode_token(type_parameter->type); if (tk != Token_typename && tk != Token_class) { @@ -646,8 +651,11 @@ void Binder::visitTemplateDeclaration(TemplateDeclarationAST *node) { } assert(tk == Token_typename || tk == Token_class); + isVariadic = type_parameter->ellipsis!=0 && type_parameter->ellipsis!=std::numeric_limits::max(); name = type_parameter->name; - if(type_parameter->type_expression){ + if(type_parameter->type_id){ + defaultType = type_parameter->type_id->toString(this->tokenStream()); + }else if(type_parameter->type_expression){ defaultType = type_parameter->type_expression->toString(this->tokenStream()); } } @@ -655,6 +663,7 @@ void Binder::visitTemplateDeclaration(TemplateDeclarationAST *node) { TemplateParameterModelItem p = model()->create(); name_cc.run(name); p->setName(name_cc.name()); + p->setIsVaradic(isVariadic); p->setDefaultValue(defaultType); _M_current_template_parameters.append(p); diff --git a/generator/parser/codemodel.cpp b/generator/parser/codemodel.cpp index 6536f792..10e3ad4d 100644 --- a/generator/parser/codemodel.cpp +++ b/generator/parser/codemodel.cpp @@ -208,6 +208,9 @@ QString TypeInfo::toString() const { tmp += QLatin1String("volatile "); tmp += m_qualifiedName.join("::"); + if(isVariadic()){ + tmp += "..."; + } for (int i=0; i m_flags; @@ -762,22 +766,20 @@ class _TemplateParameterModelItem: public _CodeModelItem { static TemplateParameterModelItem create(CodeModel *model); public: - const TypeInfo &type() const; - void setType(const TypeInfo &type); - const QString& defaultValue() const; void setDefaultValue(const QString& defaultValue); - + void setIsVaradic(bool isVaradic); + bool isVaradic() const; void setOwnerClass(const ClassModelItem& ownerClass); ClassModelItem ownerClass() const; protected: _TemplateParameterModelItem(CodeModel *model, int kind = __node_kind) - : _CodeModelItem(model, kind), _M_defaultValue() {} + : _CodeModelItem(model, kind), _M_defaultValue(), _M_isVaradic(false), _M_ownerClass(nullptr) {} private: - TypeInfo _M_type; QString _M_defaultValue; + bool _M_isVaradic; ClassModelItem _M_ownerClass; private: diff --git a/generator/parser/compiler_utils.cpp b/generator/parser/compiler_utils.cpp index 5062818c..6dbbdd04 100644 --- a/generator/parser/compiler_utils.cpp +++ b/generator/parser/compiler_utils.cpp @@ -60,6 +60,7 @@ TypeInfo CompilerUtils::typeDescription(TypeSpecifierAST *type_specifier, Declar TypeInfo typeInfo; typeInfo.setQualifiedName(type_cc.qualifiedName()); + typeInfo.setVariadic(type_cc.isVariadic()); typeInfo.setConstant(type_cc.isConstant()); typeInfo.setVolatile(type_cc.isVolatile()); typeInfo.setReferenceType(TypeInfo::ReferenceType(decl_cc.getReferenceType())); diff --git a/generator/parser/lexer.cpp b/generator/parser/lexer.cpp index e92f53dc..82a215c5 100644 --- a/generator/parser/lexer.cpp +++ b/generator/parser/lexer.cpp @@ -109,6 +109,7 @@ void LocationManager::addRequiredFeature(std::size_t offset, QString feature){ QString filename; positionAt(offset, &line, &column, &filename); _M_requiredFeatures[filename] << feature; + //printf("requiredFeatures: %s = %s\n", qPrintable(filename), qPrintable(feature)); } void LocationManager::positionAt(std::size_t offset, int *line, int *column, diff --git a/generator/parser/parser.cpp b/generator/parser/parser.cpp index 96428a9b..421b813e 100644 --- a/generator/parser/parser.cpp +++ b/generator/parser/parser.cpp @@ -48,6 +48,7 @@ #include #include +#include #define ADVANCE(tk, descr) \ { \ diff --git a/generator/parser/rpp/pp-qt-configuration b/generator/parser/rpp/pp-qt-configuration index b7a30940..616808c2 100644 --- a/generator/parser/rpp/pp-qt-configuration +++ b/generator/parser/rpp/pp-qt-configuration @@ -3,6 +3,7 @@ #define __STDC__ // Qt +#define QT_COORD_TYPE _QT_COORD_TYPE __QT_COORD_TYPE; using ___QT_COORD_TYPE = #define QOBJECTDEFS_H #define QTMETAMACROS_H #define QFLAGS_H diff --git a/generator/parser/type_compiler.cpp b/generator/parser/type_compiler.cpp index adbda622..b9418c87 100644 --- a/generator/parser/type_compiler.cpp +++ b/generator/parser/type_compiler.cpp @@ -56,7 +56,7 @@ #include TypeCompiler::TypeCompiler(Binder *binder) - : _M_binder(binder), _M_token_stream(binder->tokenStream()) { + : _M_binder(binder), _M_token_stream(binder->tokenStream()), _m_isVariadic(false) { } void TypeCompiler::run(TypeSpecifierAST *node) { @@ -68,6 +68,7 @@ void TypeCompiler::run(TypeSpecifierAST *node) { if (node && node->cv) { const ListNode *it = node->cv->toFront(); const ListNode *end = it; + _m_isVariadic = node->ellipsis!=0 && node->ellipsis!=std::numeric_limits::max(); do { int kind = _M_token_stream->kind(it->element); if (! _M_cv.contains(kind)) @@ -79,6 +80,7 @@ void TypeCompiler::run(TypeSpecifierAST *node) { } void TypeCompiler::visitClassSpecifier(ClassSpecifierAST *node) { + _m_isVariadic = node->ellipsis!=0 && node->ellipsis!=std::numeric_limits::max(); visit(node->name); } @@ -88,10 +90,12 @@ void TypeCompiler::visitEnumSpecifier(EnumSpecifierAST *node) { } void TypeCompiler::visitElaboratedTypeSpecifier(ElaboratedTypeSpecifierAST *node) { + _m_isVariadic = node->ellipsis!=0 && node->ellipsis!=std::numeric_limits::max(); visit(node->name); } void TypeCompiler::visitSimpleTypeSpecifier(SimpleTypeSpecifierAST *node) { + _m_isVariadic = node->ellipsis!=0 && node->ellipsis!=std::numeric_limits::max(); if (const ListNode *it = node->integrals) { it = it->toFront(); const ListNode *end = it; @@ -149,4 +153,8 @@ bool TypeCompiler::isVolatile() const { return _M_cv.contains(Token_volatile); } +bool TypeCompiler::isVariadic() const { + return _m_isVariadic; +} + // kate: space-indent on; indent-width 2; replace-tabs on; diff --git a/generator/parser/type_compiler.h b/generator/parser/type_compiler.h index 9725070e..2da8e1c5 100644 --- a/generator/parser/type_compiler.h +++ b/generator/parser/type_compiler.h @@ -66,6 +66,7 @@ class TypeCompiler: protected DefaultVisitor { bool isConstant() const; bool isVolatile() const; + bool isVariadic() const; QStringList cvString() const; @@ -91,6 +92,7 @@ class TypeCompiler: protected DefaultVisitor { QList _M_functionalArgumentTypes; QList _M_functionalArgumentNames; QList _M_cv; + bool _m_isVariadic; }; #endif // TYPE_COMPILER_H diff --git a/generator/preprocesshandler.cpp b/generator/preprocesshandler.cpp index b746d2f5..cb61258e 100644 --- a/generator/preprocesshandler.cpp +++ b/generator/preprocesshandler.cpp @@ -181,13 +181,7 @@ QStringList PreprocessHandler::setIncludes() { if (!Wrapper::include_directory.isNull()) { includedir = Wrapper::include_directory; } else { -#if defined(Q_OS_MAC) - includedir = "/Library/Frameworks"; -#else - includedir = "/usr/include/qt4"; -#endif - if(!includedir.isNull()) - std::fprintf(stdout, "Appending built-in --qt-include-directory: %s\n", qPrintable(includedir)); + std::fprintf(stdout, "Appending built-in --qt-include-directory: %s\n", qPrintable(includedir)); } if (!includedir.isNull()) includes << includedir; diff --git a/generator/targets/build_all.xml b/generator/targets/build_all.xml index 8d02e539..82d940b8 100644 --- a/generator/targets/build_all.xml +++ b/generator/targets/build_all.xml @@ -70,4 +70,5 @@ + diff --git a/generator/targets/build_test.xml b/generator/targets/build_test.xml index 1b8be07f..2146bf25 100644 --- a/generator/targets/build_test.xml +++ b/generator/targets/build_test.xml @@ -1,4 +1,6 @@ + + diff --git a/generator/targets/generator_predefinitions.h b/generator/targets/generator_predefinitions.h index 0b8b049f..a46d9d98 100644 --- a/generator/targets/generator_predefinitions.h +++ b/generator/targets/generator_predefinitions.h @@ -1149,10 +1149,6 @@ inline const char *qt_getEnumName(ENUM,bool) #undef qt_getEnumName #define QT_CONFIG(a) 1 #undef QT_REQUIRE_CONFIG -//#define QT_REQUIRE_CONFIG(a) QT_REQUIRE_CONFIG(a) -// then override the previous typedef with qtjambireal. -// the qtjambireal type is referred in the typesystem. -typedef qtjambireal qreal; #include diff --git a/generator/targets/qtjambi_masterinclude.h b/generator/targets/qtjambi_masterinclude.h index 6c7c8853..b6dda53a 100644 --- a/generator/targets/qtjambi_masterinclude.h +++ b/generator/targets/qtjambi_masterinclude.h @@ -51,6 +51,7 @@ #define QGENERICMATRIX_H #define QTJAMBI_UTILS_H #define QTJAMBI_REGISTRY_H +#define QT_KEYPAD_NAVIGATION #include #include @@ -178,6 +179,28 @@ # include # define Q_QUICK_PRIVATE_EXPORT # else +# include +# ifndef Q_OS_WIN +# define Q_OS_WIN +# ifndef Q_OS_MACOS +# define Q_OS_MACOS +# include +# include +# undef Q_OS_MACOS +# else +# include +# include +# endif +# undef Q_OS_WIN +# elif !defined(Q_OS_MACOS) +# define Q_OS_MACOS +# include +# include +# undef Q_OS_MACOS +# else +# include +# include +# endif # define QSGTEXTURE_PLATFORM_H # include # undef QSGTEXTURE_PLATFORM_H @@ -507,6 +530,9 @@ #define QT_WEBSOCKETS_LIB #include #endif +#ifndef QTJAMBI_NO_SPATIALAUDIO +#include +#endif #ifndef QTJAMBI_NO_OPENGL diff --git a/generator/typesystem/handler.cpp b/generator/typesystem/handler.cpp index 84dbcddd..803572cb 100644 --- a/generator/typesystem/handler.cpp +++ b/generator/typesystem/handler.cpp @@ -45,8 +45,6 @@ #include "../reporthandler.h" #include "../main.h" -int ArgumentModification::ADDED_ARGUMENT = -12345; - void Handler::parse(const QString &filepath){ QFile file(filepath); Q_ASSERT(file.exists()); @@ -58,21 +56,21 @@ void Handler::parse(const QString &filepath){ if(file.open(QIODevice::ReadOnly) && document.setContent(&file, true, &errorMsg, &errorLine, &errorColumn)){ QDomElement documentElement = document.documentElement(); if(documentElement.localName()=="typesystem"){ - parseTypeSystem(documentElement); + parseTypeSystem(documentElement, QFileInfo(filepath).fileName()); for(TypeSystemTypeEntry* entry : m_requiredModules.keys()){ for(const QString& libraryName : m_requiredModules.values(entry)){ if(TypeSystemTypeEntry* ts = TypeDatabase::instance()->findTypeSystem(libraryName)){ entry->addRequiredTypeSystem(ts); }else{ - TypesystemException::raise(QString("Unable to find required package %1").arg(libraryName)); + TypesystemException::raise(QString("Unable to find required package %1 (%2:%3:%4)").arg(libraryName, filepath).arg(errorLine).arg(errorColumn)); } } } }else{ - TypesystemException::raise(QString("Unexpected tag: <%1>. Expected: ").arg(documentElement.localName())); + TypesystemException::raise(QString("Unexpected tag: <%1>. Expected: (%2:%3:%4)").arg(documentElement.localName(), filepath).arg(errorLine).arg(errorColumn)); } }else{ - TypesystemException::raise(QString("XML Error: %1 (%2:%3)").arg(errorMsg).arg(errorLine).arg(errorColumn)); + TypesystemException::raise(QString("XML Error: %1 (%2:%3:%4)").arg(errorMsg, filepath).arg(errorLine).arg(errorColumn)); } }catch(...){ file.close(); @@ -80,273 +78,279 @@ void Handler::parse(const QString &filepath){ } } -void Handler::parseTypeSystem(const QDomElement &element){ - QDomNamedNodeMap attributes = element.attributes(); - if (checkQtVersion(attributes)){ - QList currentNamespacePrefixes = m_namespacePrefixes; - m_namespacePrefixes.clear(); - m_defaultPackage = attributeValue(attributes.removeNamedItem("package")); - m_defaultSuperclass = attributeValue(attributes.removeNamedItem("default-superclass")); - bool noExports = convertBoolean(attributeValue(attributes.removeNamedItem("no-exports"), "false"), "no-exports", false); - QString moduleName = attributeValue(attributes.removeNamedItem("module")); - QString description = attributeValue(attributes.removeNamedItem("description")); - if(element.hasChildNodes()){ - QDomNodeList childNodes = element.childNodes(); - for(int i=0; i in line %3").arg(childElement.localName()).arg(attributes.item(0).localName()).arg(element.lineNumber())); - } - } - }else if(childElement.localName()=="description"){ - QDomNamedNodeMap attributes = childElement.attributes(); - if (checkQtVersion(attributes)){ - if(!description.isEmpty()) - TypesystemException::raise(QString("Duplicate description specification in line %1").arg(childElement.lineNumber())); - if(attributes.count()){ - TypesystemException::raise(QString("Unexpected attribute '%2' of tag <%1> in line %3").arg(childElement.localName()).arg(attributes.item(0).localName()).arg(element.lineNumber())); +void Handler::parseTypeSystem(const QDomElement &element, const QString& fileName){ + try{ + QDomNamedNodeMap attributes = element.attributes(); + if (checkQtVersion(attributes)){ + QList currentNamespacePrefixes = m_namespacePrefixes; + m_namespacePrefixes.clear(); + m_defaultPackage = attributeValue(attributes.removeNamedItem("package")); + m_defaultSuperclass = attributeValue(attributes.removeNamedItem("default-superclass")); + bool noExports = convertBoolean(attributeValue(attributes.removeNamedItem("no-exports"), "false"), "no-exports", false); + QString moduleName = attributeValue(attributes.removeNamedItem("module")); + QString description = attributeValue(attributes.removeNamedItem("description")); + if(element.hasChildNodes()){ + QDomNodeList childNodes = element.childNodes(); + for(int i=0; i in line %3").arg(childElement.localName()).arg(attributes.item(0).localName()).arg(element.lineNumber())); + } } - QDomNodeList childNodes = childElement.childNodes(); - for(int i=0; i in line %2").arg(element.localName()).arg(item.lineNumber())); - break; + }else if(childElement.localName()=="description"){ + QDomNamedNodeMap attributes = childElement.attributes(); + if (checkQtVersion(attributes)){ + if(!description.isEmpty()) + TypesystemException::raise(QString("Duplicate description specification in line %1").arg(childElement.lineNumber())); + if(attributes.count()){ + TypesystemException::raise(QString("Unexpected attribute '%2' of tag <%1> in line %3").arg(childElement.localName()).arg(attributes.item(0).localName()).arg(element.lineNumber())); + } + QDomNodeList childNodes = childElement.childNodes(); + for(int i=0; i in line %2").arg(element.localName()).arg(item.lineNumber())); + break; + } } } } } - } - break; - default: break; + break; + default: break; + } } } - } - TypeSystemTypeEntry* entry = new TypeSystemTypeEntry(m_defaultPackage, - attributeValue(attributes.removeNamedItem("qt-library")), - moduleName); - entry->setNoExports(noExports); - entry->setDescription(description); - entry->setCodeGeneration(m_generate); - //qDebug()<<"Adding element->entry (root)"<entry->name(); - ReportHandler::debugTypes("Adding to TypeDatabase(3): " + entry->name()); - TypeDatabase::instance()->addType(entry); - if(attributes.count()){ - TypesystemException::raise(QString("Unexpected attribute '%2' of tag <%1> in line %3").arg(element.localName()).arg(attributes.item(0).localName()).arg(element.lineNumber())); - } - if(element.hasChildNodes()){ - QDomNodeList childNodes = element.childNodes(); - for(int i=0; isetNoExports(noExports); + entry->setDescription(description); + entry->setCodeGeneration(m_generate); + //qDebug()<<"Adding element->entry (root)"<entry->name(); + ReportHandler::debugTypes("Adding to TypeDatabase(3): " + entry->name()); + TypeDatabase::instance()->addType(entry); + if(attributes.count()){ + TypesystemException::raise(QString("Unexpected attribute '%2' of tag <%1> in line %3").arg(element.localName()).arg(attributes.item(0).localName()).arg(element.lineNumber())); + } + if(element.hasChildNodes()){ + QDomNodeList childNodes = element.childNodes(); + for(int i=0; i in line %3").arg(childElement.localName()).arg(attributes.item(0).localName()).arg(element.lineNumber())); + } + if(libraryName.isEmpty()) + ReportHandler::warning("required-library with no name specified"); + entry->addRequiredQtLibrary(std::move(libraryName), mode, std::move(platforms)); } - QStringList platforms; - QString _platforms = attributeValue(attributes.removeNamedItem("platforms")); - if(!_platforms.isEmpty()) - platforms << _platforms.split(","); - if(attributes.count()){ - TypesystemException::raise(QString("Unexpected attribute '%2' of tag <%1> in line %3").arg(childElement.localName()).arg(attributes.item(0).localName()).arg(element.lineNumber())); - } - if(libraryName.isEmpty()) - ReportHandler::warning("required-library with no name specified"); - entry->addRequiredQtLibrary(std::move(libraryName), mode, std::move(platforms)); - } - }else if(childElement.localName()=="required-package"){ - QDomNamedNodeMap attributes = childElement.attributes(); - if (checkQtVersion(attributes)){ - QString libraryName = attributeValue(attributes.removeNamedItem("name")); - if(attributes.count()){ - TypesystemException::raise(QString("Unexpected attribute '%2' of tag <%1> in line %3").arg(childElement.localName()).arg(attributes.item(0).localName()).arg(element.lineNumber())); - } - if(libraryName.isEmpty()) - ReportHandler::warning("required-module with no name specified"); - if(TypeSystemTypeEntry* ts = TypeDatabase::instance()->findTypeSystem(libraryName)){ - entry->addRequiredTypeSystem(ts); - }else{ - m_requiredModules.insert(entry, libraryName); - } - } - }else if(childElement.localName()=="forward-declaration"){ - QDomNamedNodeMap attributes = childElement.attributes(); - if (checkQtVersion(attributes)){ - QString className = attributeValue(attributes.removeNamedItem("class")); - if(attributes.count()){ - TypesystemException::raise(QString("Unexpected attribute '%2' of tag <%1> in line %3").arg(childElement.localName()).arg(attributes.item(0).localName()).arg(element.lineNumber())); + }else if(childElement.localName()=="required-package"){ + QDomNamedNodeMap attributes = childElement.attributes(); + if (checkQtVersion(attributes)){ + QString libraryName = attributeValue(attributes.removeNamedItem("name")); + if(attributes.count()){ + TypesystemException::raise(QString("Unexpected attribute '%2' of tag <%1> in line %3").arg(childElement.localName()).arg(attributes.item(0).localName()).arg(element.lineNumber())); + } + if(libraryName.isEmpty()) + ReportHandler::warning("required-module with no name specified"); + if(TypeSystemTypeEntry* ts = TypeDatabase::instance()->findTypeSystem(libraryName)){ + entry->addRequiredTypeSystem(ts); + }else{ + m_requiredModules.insert(entry, libraryName); + } } - if(className.isEmpty()) - ReportHandler::warning("forward-declaration with no class specified"); - entry->addForwardDeclaration(className); - } - }else if(childElement.localName()=="namespace-prefix"){ - QDomNamedNodeMap attributes = childElement.attributes(); - if (checkQtVersion(attributes)){ - QString prefix = attributeValue(attributes.removeNamedItem("prefix")); - QString _namespace = attributeValue(attributes.removeNamedItem("namespace")); - NamespacePrefix::NamingPolicy namingPolicy = NamespacePrefix::Preserve; - QString _namingPolicy = attributeValue(attributes.removeNamedItem("naming-policy")); - if(!_namingPolicy.isEmpty()){ - static const QHash namingPolicies{ - {"preserve", NamespacePrefix::Preserve}, - {"cut", NamespacePrefix::Cut}}; - if (!namingPolicies.contains(_namingPolicy)) { - TypesystemException::raise(QString("Invalid java-naming-policy specifier '%1' of tag <%2> in line %3").arg(_namingPolicy).arg(childElement.localName()).arg(childElement.lineNumber())); + }else if(childElement.localName()=="forward-declaration"){ + QDomNamedNodeMap attributes = childElement.attributes(); + if (checkQtVersion(attributes)){ + QString className = attributeValue(attributes.removeNamedItem("class")); + if(attributes.count()){ + TypesystemException::raise(QString("Unexpected attribute '%2' of tag <%1> in line %3").arg(childElement.localName()).arg(attributes.item(0).localName()).arg(element.lineNumber())); } - namingPolicy = namingPolicies[_namingPolicy]; + if(className.isEmpty()) + ReportHandler::warning("forward-declaration with no class specified"); + entry->addForwardDeclaration(className); } - if(!prefix.isEmpty() && !prefix.endsWith("::")) - prefix += "::"; - if(!_namespace.isEmpty() && !_namespace.endsWith("::")) - _namespace += "::"; - m_namespacePrefixes.append({prefix, _namespace, namingPolicy}); - QDomNodeList _childNodes = childElement.childNodes(); - for(int i=0; i<_childNodes.length(); ++i){ - QDomNode item = _childNodes.item(i); - switch(item.nodeType()){ - case QDomNode::ElementNode: - TypesystemException::raise(QString("Unexpected tag <%1> as child of tag <%2> in line %3").arg(item.toElement().localName()).arg(childElement.localName()).arg(item.lineNumber())); - break; - case QDomNode::TextNode: - TypesystemException::raise(QString("Unexpected text content as child of tag <%1> in line %2").arg(childElement.localName()).arg(item.lineNumber())); - break; - case QDomNode::CharacterDataNode: - case QDomNode::CDATASectionNode: - TypesystemException::raise(QString("Unexpected CDATA as child of tag <%1> in line %2").arg(childElement.localName()).arg(item.lineNumber())); - break; - case QDomNode::EntityNode: - TypesystemException::raise(QString("Unexpected entity as child of tag <%1> in line %2").arg(childElement.localName()).arg(item.lineNumber())); - break; - case QDomNode::NotationNode: - TypesystemException::raise(QString("Unexpected notation as child of tag <%1> in line %2").arg(childElement.localName()).arg(item.lineNumber())); - break; - default: break; + }else if(childElement.localName()=="namespace-prefix"){ + QDomNamedNodeMap attributes = childElement.attributes(); + if (checkQtVersion(attributes)){ + QString prefix = attributeValue(attributes.removeNamedItem("prefix")); + QString _namespace = attributeValue(attributes.removeNamedItem("namespace")); + NamespacePrefix::NamingPolicy namingPolicy = NamespacePrefix::Preserve; + QString _namingPolicy = attributeValue(attributes.removeNamedItem("naming-policy")); + if(!_namingPolicy.isEmpty()){ + static const QHash namingPolicies{ + {"preserve", NamespacePrefix::Preserve}, + {"cut", NamespacePrefix::Cut}}; + if (!namingPolicies.contains(_namingPolicy)) { + TypesystemException::raise(QString("Invalid java-naming-policy specifier '%1' of tag <%2> in line %3").arg(_namingPolicy).arg(childElement.localName()).arg(childElement.lineNumber())); + } + namingPolicy = namingPolicies[_namingPolicy]; + } + if(!prefix.isEmpty() && !prefix.endsWith("::")) + prefix += "::"; + if(!_namespace.isEmpty() && !_namespace.endsWith("::")) + _namespace += "::"; + m_namespacePrefixes.append({prefix, _namespace, namingPolicy}); + QDomNodeList _childNodes = childElement.childNodes(); + for(int i=0; i<_childNodes.length(); ++i){ + QDomNode item = _childNodes.item(i); + switch(item.nodeType()){ + case QDomNode::ElementNode: + TypesystemException::raise(QString("Unexpected tag <%1> as child of tag <%2> in line %3").arg(item.toElement().localName()).arg(childElement.localName()).arg(item.lineNumber())); + break; + case QDomNode::TextNode: + TypesystemException::raise(QString("Unexpected text content as child of tag <%1> in line %2").arg(childElement.localName()).arg(item.lineNumber())); + break; + case QDomNode::CharacterDataNode: + case QDomNode::CDATASectionNode: + TypesystemException::raise(QString("Unexpected CDATA as child of tag <%1> in line %2").arg(childElement.localName()).arg(item.lineNumber())); + break; + case QDomNode::EntityNode: + TypesystemException::raise(QString("Unexpected entity as child of tag <%1> in line %2").arg(childElement.localName()).arg(item.lineNumber())); + break; + case QDomNode::NotationNode: + TypesystemException::raise(QString("Unexpected notation as child of tag <%1> in line %2").arg(childElement.localName()).arg(item.lineNumber())); + break; + default: break; + } } } + }else if(childElement.localName()=="load-typesystem"){ + parseLoadTypeSystem(childElement); + }else if(childElement.localName()=="rejection"){ + parseRejection(childElement); + }else if(childElement.localName()=="primitive-type"){ + parsePrimitiveType(childElement); + }else if(childElement.localName()=="object-type"){ + parseObjectType(childElement); + }else if(childElement.localName()=="template-type"){ + parseTemplateType(childElement); + }else if(childElement.localName()=="functional-type"){ + parseFunctionalType(childElement); + }else if(childElement.localName()=="iterator-type"){ + parseIteratorType(childElement); + }else if(childElement.localName()=="value-type"){ + parseValueType(childElement); + }else if(childElement.localName()=="typealias-type"){ + parseTypeAliasType(childElement); + }else if(childElement.localName()=="interface-type"){ + parseInterfaceType(childElement); + }else if(childElement.localName()=="namespace-type" || childElement.localName()=="header-type"){ + parseNamespaceType(childElement); + }else if(childElement.localName()=="enum-type"){ + parseEnumType(childElement); + }else if(childElement.localName()=="extra-includes"){ + parseExtraIncludes(childElement, entry); + }else if(childElement.localName()=="inject-code"){ + static const QHash languageNames{ + {"java", TypeSystem::TargetLangCode}, + {"native", TypeSystem::NativeCode}, + {"module-info", TypeSystem::ModuleInfo}, + // {"shell", TypeSystem::ShellCode}, + // {"shell-declaration", TypeSystem::ShellDeclaration}, + {"library-initializer", TypeSystem::PackageInitializer}, + // {"destructor-function", TypeSystem::DestructorFunction}, + {"metainfo", TypeSystem::MetaInfo}, + // {"constructors", TypeSystem::Constructors}, + // {"interface", TypeSystem::Interface}, + // {"signal", TypeSystem::Signal} + }; + + static const QHash positionNames{ + {"begin", CodeSnip::Beginning}, + {"beginning", CodeSnip::Beginning}, + {"position1", CodeSnip::Position1}, + {"position2", CodeSnip::Position2}, + {"position3", CodeSnip::Position3}, + {"position4", CodeSnip::Position4}, + {"1", CodeSnip::Position1}, + {"2", CodeSnip::Position2}, + {"3", CodeSnip::Position3}, + {"4", CodeSnip::Position4}, + {"end", CodeSnip::End} + }; + parseInjectCode(childElement, languageNames, positionNames, [entry](const QString& subTypeSystem, const CodeSnip &snip){ + entry->addCodeSnip(subTypeSystem, snip); + }, false, true); + }else if(childElement.localName()=="suppress-warning"){ + parseSuppressedWarning(childElement); + }else if(childElement.localName()=="template"){ + parseTemplate(childElement); + }else if(childElement.localName()=="global-function"){ + parseModifyFunction(childElement, entry); + }else{ + TypesystemException::raise(QString("Unexpected tag <%2> as child of tag <%1> in line %3").arg(element.localName()).arg(childElement.localName()).arg(childElement.lineNumber())); } - }else if(childElement.localName()=="load-typesystem"){ - parseLoadTypeSystem(childElement); - }else if(childElement.localName()=="rejection"){ - parseRejection(childElement); - }else if(childElement.localName()=="primitive-type"){ - parsePrimitiveType(childElement); - }else if(childElement.localName()=="object-type"){ - parseObjectType(childElement); - }else if(childElement.localName()=="template-type"){ - parseTemplateType(childElement); - }else if(childElement.localName()=="functional-type"){ - parseFunctionalType(childElement); - }else if(childElement.localName()=="iterator-type"){ - parseIteratorType(childElement); - }else if(childElement.localName()=="value-type"){ - parseValueType(childElement); - }else if(childElement.localName()=="typealias-type"){ - parseTypeAliasType(childElement); - }else if(childElement.localName()=="interface-type"){ - parseInterfaceType(childElement); - }else if(childElement.localName()=="namespace-type"){ - parseNamespaceType(childElement); - }else if(childElement.localName()=="enum-type"){ - parseEnumType(childElement); - }else if(childElement.localName()=="extra-includes"){ - parseExtraIncludes(childElement, entry); - }else if(childElement.localName()=="inject-code"){ - static const QHash languageNames{ - {"java", TypeSystem::TargetLangCode}, - {"native", TypeSystem::NativeCode}, - {"module-info", TypeSystem::ModuleInfo}, - // {"shell", TypeSystem::ShellCode}, - // {"shell-declaration", TypeSystem::ShellDeclaration}, - {"library-initializer", TypeSystem::PackageInitializer}, - // {"destructor-function", TypeSystem::DestructorFunction}, - {"metainfo", TypeSystem::MetaInfo}, - // {"constructors", TypeSystem::Constructors}, - // {"interface", TypeSystem::Interface}, - // {"signal", TypeSystem::Signal} - }; - - static const QHash positionNames{ - {"begin", CodeSnip::Beginning}, - {"beginning", CodeSnip::Beginning}, - {"position1", CodeSnip::Position1}, - {"position2", CodeSnip::Position2}, - {"position3", CodeSnip::Position3}, - {"position4", CodeSnip::Position4}, - {"1", CodeSnip::Position1}, - {"2", CodeSnip::Position2}, - {"3", CodeSnip::Position3}, - {"4", CodeSnip::Position4}, - {"end", CodeSnip::End} - }; - parseInjectCode(childElement, languageNames, positionNames, [entry](const QString& subTypeSystem, const CodeSnip &snip){ - entry->addCodeSnip(subTypeSystem, snip); - }, false, true); - }else if(childElement.localName()=="suppress-warning"){ - parseSuppressedWarning(childElement); - }else if(childElement.localName()=="template"){ - parseTemplate(childElement); - }else{ - TypesystemException::raise(QString("Unexpected tag <%2> as child of tag <%1> in line %3").arg(element.localName()).arg(childElement.localName()).arg(childElement.lineNumber())); } - } - break; - case QDomNode::TextNode: - TypesystemException::raise(QString("Unexpected text content as child of tag <%1> in line %2").arg(element.localName()).arg(item.lineNumber())); - break; - case QDomNode::CharacterDataNode: - case QDomNode::CDATASectionNode: - TypesystemException::raise(QString("Unexpected CDATA as child of tag <%1> in line %2").arg(element.localName()).arg(item.lineNumber())); - break; - case QDomNode::EntityNode: - TypesystemException::raise(QString("Unexpected entity as child of tag <%1> in line %2").arg(element.localName()).arg(item.lineNumber())); - break; - case QDomNode::NotationNode: - TypesystemException::raise(QString("Unexpected notation as child of tag <%1> in line %2").arg(element.localName()).arg(item.lineNumber())); - break; - default: break; + break; + case QDomNode::TextNode: + TypesystemException::raise(QString("Unexpected text content as child of tag <%1> in line %2").arg(element.localName()).arg(item.lineNumber())); + break; + case QDomNode::CharacterDataNode: + case QDomNode::CDATASectionNode: + TypesystemException::raise(QString("Unexpected CDATA as child of tag <%1> in line %2").arg(element.localName()).arg(item.lineNumber())); + break; + case QDomNode::EntityNode: + TypesystemException::raise(QString("Unexpected entity as child of tag <%1> in line %2").arg(element.localName()).arg(item.lineNumber())); + break; + case QDomNode::NotationNode: + TypesystemException::raise(QString("Unexpected notation as child of tag <%1> in line %2").arg(element.localName()).arg(item.lineNumber())); + break; + default: break; + } } } + m_namespacePrefixes = currentNamespacePrefixes; } - m_namespacePrefixes = currentNamespacePrefixes; + }catch(const TypesystemException& exn){ + TypesystemException::raise(QString("%1 in file %2").arg(QLatin1String(exn.what()), fileName)); } } @@ -445,6 +449,7 @@ Include Handler::parseInclude(const QDomElement &element){ if (checkQtVersion(attributes)){ QString location = attributeValue(attributes.removeNamedItem("location")).toLower(); QString fileName = attributeValue(attributes.removeNamedItem("file-name")); + QString ppCondition = attributeValue(attributes.removeNamedItem("pp-condition")); incl.inherited = convertBoolean(attributeValue(attributes.removeNamedItem("inherited"), "false"), "inherited", false); incl.suppressed = convertBoolean(attributeValue(attributes.removeNamedItem("suppressed"), "no"), "suppressed", false); if(attributes.count()){ @@ -1027,31 +1032,34 @@ void Handler::parsePrimitiveType(const QDomElement &element){ if (name.isEmpty()) { TypesystemException::raise(QString("No 'name' attribute specified for tag <%1> in line %2").arg(element.localName()).arg(element.lineNumber())); } - QString java_name = attributeValue(attributes.removeNamedItem("java-name")); - QString jni_name = attributeValue(attributes.removeNamedItem("jni-name")); - QString preferred_conversion = attributeValue(attributes.removeNamedItem("preferred-conversion"), "yes").toLower(); - QString preferred_java_type = attributeValue(attributes.removeNamedItem("preferred-java-type"), "yes").toLower(); + try{ + QString java_name = attributeValue(attributes.removeNamedItem("java-name")); + QString jni_name = attributeValue(attributes.removeNamedItem("jni-name")); + QString preferred_conversion = attributeValue(attributes.removeNamedItem("preferred-conversion"), "yes").toLower(); + QString preferred_java_type = attributeValue(attributes.removeNamedItem("preferred-java-type"), "yes").toLower(); - if(attributes.count()){ - TypesystemException::raise(QString("Unexpected attribute '%2' of tag <%1> in line %3").arg(element.localName()).arg(attributes.item(0).localName()).arg(element.lineNumber())); - } - ensureNoChildren(element); + if(attributes.count()){ + TypesystemException::raise(QString("Unexpected attribute '%2' of tag <%1> in line %3").arg(element.localName()).arg(attributes.item(0).localName()).arg(element.lineNumber())); + } + ensureNoChildren(element); - if (java_name.isEmpty()) - java_name = name; - if (jni_name.isEmpty()) - jni_name = name; + if (java_name.isEmpty()) + java_name = name; + if (jni_name.isEmpty()) + jni_name = name; - PrimitiveTypeEntry *entry = new PrimitiveTypeEntry(name, m_defaultPackage); - entry->setCodeGeneration(m_generate); - entry->setTargetLangName(java_name); - entry->setJniName(jni_name); + PrimitiveTypeEntry *entry = new PrimitiveTypeEntry(name, m_defaultPackage); + entry->setCodeGeneration(m_generate); + entry->setTargetLangName(java_name); + entry->setJniName(jni_name); - entry->setPreferredConversion(convertBoolean(preferred_conversion, "preferred-conversion", true)); - entry->setPreferredTargetLangType(convertBoolean(preferred_java_type, "preferred-java-type", true)); + entry->setPreferredConversion(convertBoolean(preferred_conversion, "preferred-conversion", true)); + entry->setPreferredTargetLangType(convertBoolean(preferred_java_type, "preferred-java-type", true)); - ReportHandler::debugTypes("Adding to TypeDatabase(2): " + entry->name()); - m_database->addType(entry); + ReportHandler::debugTypes("Adding to TypeDatabase(2): " + entry->name()); + m_database->addType(entry); }catch(const TypesystemException& exn){ + TypesystemException::raise(QString("%1 of type %2").arg(QLatin1String(exn.what()), name)); + } } } @@ -1174,51 +1182,53 @@ void Handler::parseObjectType(const QDomElement &element){ QDomNamedNodeMap attributes = element.attributes(); if (checkQtVersion(attributes)){ QString name = parseTypeName(attributes, element); - QString targetName; - for(const NamespacePrefix& prefix : m_namespacePrefixes){ - if(name.startsWith(prefix.prefix)){ - name = name.mid(prefix.prefix.size()); - if(prefix.namingPolicy==NamespacePrefix::Cut) - targetName = name; - name = prefix._namespace + name; - break; + try{ + QString targetName; + for(const NamespacePrefix& prefix : m_namespacePrefixes){ + if(name.startsWith(prefix.prefix)){ + name = name.mid(prefix.prefix.size()); + if(prefix.namingPolicy==NamespacePrefix::Cut) + targetName = name; + name = prefix._namespace + name; + break; + } } - } - std::unique_ptr entry(new ObjectTypeEntry(name)); - if(!targetName.isEmpty()) - entry->setTargetLangName(targetName); - entry->setIsValueOwner(convertBoolean(attributeValue(attributes.removeNamedItem("is-value-owner"), "no"), "is-value-owner", false)); - entry->setIsPolymorphicBase(convertBoolean(attributeValue(attributes.removeNamedItem("polymorphic-base"), "no"), "polymorphic-base", false)); - entry->setPolymorphicIdValue(attributeValue(attributes.removeNamedItem("polymorphic-id-expression"))); - parseAttributesOfComplexType(element, attributes, entry.get()); - QList unhandledElements = parseChildrenOfComplexType(element, entry.get()); - for(const QDomElement& childElement : unhandledElements){ - TypesystemException::raise(QString("Unexpected tag <%2> as child of tag <%1> in line %3").arg(element.localName()).arg(childElement.toElement().localName()).arg(childElement.lineNumber())); - } - if(entry->name().endsWith(">")){ - auto idx = entry->name().indexOf('<'); - QString templateName = entry->name().mid(0, idx); - QStringList templateArguments = entry->name().mid(idx+1).chopped(1).split(","); - ComplexTypeEntry* templateType = m_database->findComplexType(templateName); - if(templateType){ - if(templateType->isTemplate()){ - if(templateType->instantiations().contains(templateArguments) && templateType->instantiations()[templateArguments]==nullptr){ - if(entry->targetLangName()==entry->name()){ - entry->setTargetLangName(templateName); - } - templateType->addInstantiation(templateArguments, entry.release()); + std::unique_ptr entry(new ObjectTypeEntry(name)); + if(!targetName.isEmpty()) + entry->setTargetLangName(targetName); + entry->setIsValueOwner(convertBoolean(attributeValue(attributes.removeNamedItem("is-value-owner"), "no"), "is-value-owner", false)); + entry->setIsPolymorphicBase(convertBoolean(attributeValue(attributes.removeNamedItem("polymorphic-base"), "no"), "polymorphic-base", false)); + entry->setPolymorphicIdValue(attributeValue(attributes.removeNamedItem("polymorphic-id-expression"))); + parseAttributesOfComplexType(element, attributes, entry.get()); + QList unhandledElements = parseChildrenOfComplexType(element, entry.get()); + for(const QDomElement& childElement : unhandledElements){ + TypesystemException::raise(QString("Unexpected tag <%2> as child of tag <%1> in line %3").arg(element.localName()).arg(childElement.toElement().localName()).arg(childElement.lineNumber())); + } + if(name.endsWith(">")){ + auto idx = name.indexOf('<'); + QString templateName = name.mid(0, idx); + QStringList templateArguments = name.mid(idx+1).chopped(1).split(","); + ComplexTypeEntry* templateType = m_database->findComplexType(templateName); + if(templateType){ + if(templateType->isTemplate()){ + if(templateType->instantiations().contains(templateArguments) && templateType->instantiations()[templateArguments]==nullptr){ + entry->setTargetLangName(templateType->targetLangName()); + templateType->addInstantiation(templateArguments, entry.release()); + }else{ + TypesystemException::raise(QString("Template %1<%2> already defined").arg(templateName).arg(templateArguments.join(","))); + } }else{ - TypesystemException::raise(QString("Template %1<%2> already defined").arg(templateName).arg(templateArguments.join(","))); + TypesystemException::raise(QString("Type %1 not a template").arg(templateName)); } }else{ - TypesystemException::raise(QString("Type %1 not a template").arg(templateName)); + TypesystemException::raise(QString("Template %1 not found").arg(templateName)); } }else{ - TypesystemException::raise(QString("Template %1 not found").arg(templateName)); + ReportHandler::debugTypes("Adding to TypeDatabase(2): " + entry->name()); + m_database->addType(entry.release()); } - }else{ - ReportHandler::debugTypes("Adding to TypeDatabase(2): " + entry->name()); - m_database->addType(entry.release()); + }catch(const TypesystemException& exn){ + TypesystemException::raise(QString("%1 of type %2").arg(QLatin1String(exn.what()), name)); } } } @@ -1319,10 +1329,10 @@ QList Handler::parseChildrenOfComplexType(const QDomElement &elemen func.param_name = attributeValue(attributes.removeNamedItem("param-name"), "copy"); func.placement_name = attributeValue(attributes.removeNamedItem("placement-name"), "placement"); QString _type = attributeValue(attributes.removeNamedItem("type")); - QHash types{{"",TypeEntry::LegacyCopyConstructor}, - {"default",TypeEntry::DefaultConstructor}, - {"copy",TypeEntry::CopyConstructor}, - {"move",TypeEntry::MoveConstructor}}; + QHash types{{"",ComplexTypeEntry::LegacyCopyConstructor}, + {"default",ComplexTypeEntry::DefaultConstructor}, + {"copy",ComplexTypeEntry::CopyConstructor}, + {"move",ComplexTypeEntry::MoveConstructor}}; if(attributes.count()){ TypesystemException::raise(QString("Unexpected attribute '%2' of tag <%1> in line %3").arg(childElement.localName()).arg(attributes.item(0).localName()).arg(childElement.lineNumber())); } @@ -1414,19 +1424,23 @@ void Handler::parseTemplateType(const QDomElement &element){ QDomNamedNodeMap attributes = element.attributes(); if (checkQtVersion(attributes)){ QString name = parseTypeName(attributes, element); - std::unique_ptr entry(new TemplateTypeEntry(name)); - if(attributes.count()){ - TypesystemException::raise(QString("Unexpected attribute '%2' of tag <%1> in line %3").arg(element.localName()).arg(attributes.item(0).localName()).arg(element.lineNumber())); - } - QList unhandledElements = parseChildrenOfComplexType(element, entry.get()); - for(const QDomElement& childElement : unhandledElements){ - TypesystemException::raise(QString("Unexpected tag <%2> as child of tag <%1> in line %3").arg(element.localName()).arg(childElement.toElement().localName()).arg(childElement.lineNumber())); - } - m_database->addTemplateType(entry.release()); + try{ + std::unique_ptr entry(new TemplateTypeEntry(name)); + if(attributes.count()){ + TypesystemException::raise(QString("Unexpected attribute '%2' of tag <%1> in line %3").arg(element.localName()).arg(attributes.item(0).localName()).arg(element.lineNumber())); + } + QList unhandledElements = parseChildrenOfComplexType(element, entry.get()); + for(const QDomElement& childElement : unhandledElements){ + TypesystemException::raise(QString("Unexpected tag <%2> as child of tag <%1> in line %3").arg(element.localName()).arg(childElement.toElement().localName()).arg(childElement.lineNumber())); + } + m_database->addTemplateType(entry.release()); + }catch(const TypesystemException& exn){ + TypesystemException::raise(QString("%1 of type %2").arg(QLatin1String(exn.what()), name)); + } QString targetName; } } -void Handler::parseModifyArgument(const QDomElement &element, FunctionModification& mod){ +void Handler::parseModifyArgument(const QDomElement &element, AbstractFunctionModification& mod){ QDomNamedNodeMap attributes = element.attributes(); if (checkQtVersion(attributes)){ QString index = attributeValue(attributes.removeNamedItem("index")); @@ -1455,6 +1469,7 @@ void Handler::parseModifyArgument(const QDomElement &element, FunctionModificati argumentModification.modified_name = attributeValue(attributes.removeNamedItem("rename")); argumentModification.modified_type = attributeValue(attributes.removeNamedItem("replace-type")); argumentModification.reset_after_use = convertBoolean(attributeValue(attributes.removeNamedItem("invalidate-after-use"), "no"), "invalidate-after-use", false); + argumentModification.value_as_pointer = convertBoolean(attributeValue(attributes.removeNamedItem("value-as-pointer"), "no"), "value-as-pointer", false); if(attributes.count()){ TypesystemException::raise(QString("Unexpected attribute '%2' of tag <%1> in line %3").arg(element.localName()).arg(attributes.item(0).localName()).arg(element.lineNumber())); @@ -1609,7 +1624,11 @@ void Handler::parseModifyArgument(const QDomElement &element, FunctionModificati } }else if(childElement.localName()=="conversion-rule"){ - parseConversionRule(childElement, [&argumentModification](const CodeSnip& snip){argumentModification.conversion_rules.append(snip);}); + static const QHash languageNames{ + {"native", TypeSystem::NativeCode}, + {"shell", TypeSystem::ShellCode} + }; + parseConversionRule(languageNames, childElement, [&argumentModification](const CodeSnip& snip){argumentModification.conversion_rules.append(snip);}); }else if(childElement.localName()=="no-null-pointer"){ QDomNamedNodeMap attributes = childElement.attributes(); if (checkQtVersion(attributes)){ @@ -1696,14 +1715,9 @@ void Handler::parseModifyArgument(const QDomElement &element, FunctionModificati } } -void Handler::parseConversionRule(const QDomElement &element, const std::function& appendCodeSnip){ +void Handler::parseConversionRule(const QHash& languageNames, const QDomElement &element, const std::function& appendCodeSnip){ QDomNamedNodeMap attributes = element.attributes(); if (checkQtVersion(attributes)){ - static const QHash languageNames{ - {"native", TypeSystem::NativeCode}, - {"shell", TypeSystem::ShellCode} - }; - CodeSnip snip; QString languageAttribute = attributeValue(attributes.removeNamedItem("class")).toLower(); TypeSystem::Language lang = languageNames.value(languageAttribute, TypeSystem::NoLanguage); @@ -1755,18 +1769,10 @@ void Handler::parseConversionRule(const QDomElement &element, const std::functio } } -void Handler::parseModifyFunction(const QDomElement &element, ComplexTypeEntry* entry){ +TemplateInstantiation Handler::parseInstantiation(const QDomElement &element){ + TemplateInstantiation mod; QDomNamedNodeMap attributes = element.attributes(); if (checkQtVersion(attributes)){ - QString signature = attributeValue(attributes.removeNamedItem("signature")).replace(QLatin1String("qreal"), QLatin1String("qtjambireal")); - for(const NamespacePrefix& prefix : m_namespacePrefixes){ - if(prefix._namespace!=prefix.prefix) - signature = signature.replace(prefix.prefix, prefix._namespace); - } - signature = QString::fromLatin1(QMetaObject::normalizedSignature(qPrintable(signature))); - if (signature.isEmpty()) { - TypesystemException::raise(QString("No signature for <%1> in line %2").arg(element.localName()).arg(element.lineNumber())); - } QStringList accesses = attributeValue(attributes.removeNamedItem("access")).trimmed().toLower().split(QLatin1String(",")); accesses.removeAll(QLatin1String("")); QString noExcept = attributeValue(attributes.removeNamedItem("no-except"), "no"); @@ -1779,10 +1785,11 @@ void Handler::parseModifyFunction(const QDomElement &element, ComplexTypeEntry* QString allowAsSlot = attributeValue(attributes.removeNamedItem("allow-as-slot"), "no"); QString privateSignal = attributeValue(attributes.removeNamedItem("private-signal"), "no"); QString threadAffine = attributeValue(attributes.removeNamedItem("thread-affine"), "no"); - FunctionModification mod; - mod.signature = signature; mod.ppCondition = attributeValue(attributes.removeNamedItem("pp-condition")); mod.throws = attributeValue(attributes.removeNamedItem("throws")).trimmed(); + mod.proxyCall = attributeValue(attributes.removeNamedItem("proxy-call"), ""); + QDomNode targetTypeAttr; + mod.targetType = attributeValue(targetTypeAttr = attributes.removeNamedItem("target-type"), ""); static const QHash modifierNames{ {"private", Modification::Private}, @@ -1824,25 +1831,8 @@ void Handler::parseModifyFunction(const QDomElement &element, ComplexTypeEntry* mod.modifiers |= Modification::PrivateSignal; } - QString remove = attributeValue(attributes.removeNamedItem("remove")).toLower(); - if (!remove.isEmpty()) { - if (remove == QLatin1String("all")) - mod.removal = TypeSystem::All; - else if (remove == QLatin1String("java")) - mod.removal = TypeSystem::TargetLangAndNativeCode; - else if (remove == QLatin1String("non-native")) - mod.removal = TypeSystem::TargetLangCode; - else if (remove == QLatin1String("none")) - mod.removal = TypeSystem::NoLanguage; - else { - TypesystemException::raise(QString("Bad removal type '%3' in <%1> in line %2").arg(element.localName()).arg(element.lineNumber()).arg(remove)); - } - } - - if (!association.isEmpty()) { - association = association.replace(QLatin1String("qreal"), QLatin1String("qtjambireal")); + if (!association.isEmpty()) mod.association = association; - } if(threadAffine=="ui"){ mod.modifiers |= Modification::UIThreadAffine; @@ -1863,30 +1853,27 @@ void Handler::parseModifyFunction(const QDomElement &element, ComplexTypeEntry* case QDomNode::ElementNode: { QDomElement childElement = item.toElement(); - if(childElement.localName()=="modify-argument"){ - parseModifyArgument(childElement, mod); - }else if(childElement.localName()=="remove"){ + if(childElement.localName()=="argument"){ QDomNamedNodeMap attributes = childElement.attributes(); if (checkQtVersion(attributes)){ - if(!remove.isEmpty()){ - TypesystemException::raise(QString("REMOVE is already specified as attribute in tag <%1> in line %2").arg(element.localName()).arg(element.lineNumber())); - } - static QHash languageNames{ - {"java", TypeSystem::TargetLangAndNativeCode}, - {"all", TypeSystem::All} - }; - - QString languageAttribute = attributeValue(attributes.removeNamedItem("class"), "all").toLower(); - TypeSystem::Language lang = languageNames.value(languageAttribute, TypeSystem::NoLanguage); - if (lang == TypeSystem::NoLanguage) { - TypesystemException::raise(QString("Unsupported class attribute '%3' in tag <%1> in line %2").arg(childElement.localName()).arg(childElement.lineNumber()).arg(languageAttribute)); + QString type = attributeValue(attributes.removeNamedItem("type"), ""); + bool implicit = convertBoolean(attributeValue(attributes.removeNamedItem("implicit"), "no"), "implicit", false); + if(type.isEmpty()){ + QString parameter = attributeValue(attributes.removeNamedItem("parameter"), ""); + QString extends = attributeValue(attributes.removeNamedItem("extends"), ""); + if(parameter.isEmpty()){ + TypesystemException::raise(QString("Attribute 'type' or 'parameter' required in tag <%1> in line %2").arg(childElement.localName()).arg(childElement.lineNumber())); + } + mod.arguments << Parameter{type,parameter,extends,implicit}; + }else{ + mod.arguments << Parameter{type,{},{},implicit}; } if(attributes.count()){ TypesystemException::raise(QString("Unexpected attribute '%2' of tag <%1> in line %3").arg(childElement.localName()).arg(attributes.item(0).localName()).arg(childElement.lineNumber())); } - ensureNoChildren(childElement); - mod.removal = lang; } + }else if(childElement.localName()=="modify-argument"){ + parseModifyArgument(childElement, mod); }else if(childElement.localName()=="rename"){ QDomNamedNodeMap attributes = childElement.attributes(); if (checkQtVersion(attributes)){ @@ -1917,7 +1904,11 @@ void Handler::parseModifyFunction(const QDomElement &element, ComplexTypeEntry* }else if(childElement.localName()=="add-argument"){ QDomNamedNodeMap attributes = childElement.attributes(); if (checkQtVersion(attributes)){ - ArgumentModification argumentModification = ArgumentModification(ArgumentModification::ADDED_ARGUMENT); + QString _index = attributeValue(attributes.removeNamedItem("index")); + bool ok = false; + uint index = _index.toUInt(&ok); + ArgumentModification argumentModification = ArgumentModification(ok ? index : std::numeric_limits::max(), ArgumentModification::AdditionalArgument); + argumentModification.replaced_default_expression = attributeValue(attributes.removeNamedItem("default")); argumentModification.modified_name = attributeValue(attributes.removeNamedItem("name")); argumentModification.modified_type = attributeValue(attributes.removeNamedItem("type")); argumentModification.modified_jni_type = attributeValue(attributes.removeNamedItem("jni-type")); @@ -1928,6 +1919,18 @@ void Handler::parseModifyFunction(const QDomElement &element, ComplexTypeEntry* ensureNoChildren(childElement); mod.argument_mods.append(argumentModification); } + }else if(childElement.localName()=="add-type-parameter"){ + QDomNamedNodeMap attributes = childElement.attributes(); + if (checkQtVersion(attributes)){ + ArgumentModification argumentModification = ArgumentModification(ArgumentModification::TypeParameter); + argumentModification.modified_name = attributeValue(attributes.removeNamedItem("name")); + argumentModification.modified_type = attributeValue(attributes.removeNamedItem("extends")); + if(attributes.count()){ + TypesystemException::raise(QString("Unexpected attribute '%2' of tag <%1> in line %3").arg(childElement.localName()).arg(attributes.item(0).localName()).arg(childElement.lineNumber())); + } + ensureNoChildren(childElement); + mod.argument_mods.append(argumentModification); + } }else if(childElement.localName()=="inject-code"){ static const QHash languageNames{ {"java", TypeSystem::TargetLangCode}, @@ -1976,65 +1979,329 @@ void Handler::parseModifyFunction(const QDomElement &element, ComplexTypeEntry* default: break; } } - if (!rename.isEmpty()) { mod.renamedToName = rename; mod.modifiers |= Modification::Rename; } - entry->addFunctionModification(mod); - if(entry->designatedInterface()) - entry->designatedInterface()->addFunctionModification(mod); + if(attributes.count()){ + TypesystemException::raise(QString("Unexpected attribute '%2' of tag <%1> in line %3").arg(element.localName()).arg(attributes.item(0).localName()).arg(element.lineNumber())); + } } + return mod; } -void Handler::parseModifyField(const QDomElement &element, ComplexTypeEntry* entry){ +void Handler::parseModifyFunction(const QDomElement &element, TypeEntry* entry){ QDomNamedNodeMap attributes = element.attributes(); if (checkQtVersion(attributes)){ - FieldModification fm; - fm.name = attributeValue(attributes.removeNamedItem("name")); - fm.modifiers = 0; - if (convertBoolean(attributeValue(attributes.removeNamedItem("read"), "true"), "read", false)) { - fm.modifiers |= FieldModification::Readable; - } - if (convertBoolean(attributeValue(attributes.removeNamedItem("write"), "true"), "write", false)) { - fm.modifiers |= FieldModification::Writable; + QString signature = attributeValue(attributes.removeNamedItem("signature")); + for(const NamespacePrefix& prefix : m_namespacePrefixes){ + if(prefix._namespace!=prefix.prefix) + signature = signature.replace(prefix.prefix, prefix._namespace); } - QString rename = attributeValue(attributes.removeNamedItem("rename")); - if (!rename.isEmpty()){ - fm.setRenamedTo(rename); + signature = QString::fromLatin1(QMetaObject::normalizedSignature(qPrintable(signature))); + if (signature.isEmpty()) { + TypesystemException::raise(QString("No signature for <%1> in line %2").arg(element.localName()).arg(element.lineNumber())); } QStringList accesses = attributeValue(attributes.removeNamedItem("access")).trimmed().toLower().split(QLatin1String(",")); accesses.removeAll(QLatin1String("")); - if(attributes.count()){ - TypesystemException::raise(QString("Unexpected attribute '%2' of tag <%1> in line %3").arg(element.localName()).arg(attributes.item(0).localName()).arg(element.lineNumber())); - } + QString noExcept = attributeValue(attributes.removeNamedItem("no-except"), "no"); + QString blockExcept = attributeValue(attributes.removeNamedItem("block-exceptions"), "no"); + QString rethrowExcept = attributeValue(attributes.removeNamedItem("rethrow-exceptions"), "no"); + QString rename = attributeValue(attributes.removeNamedItem("rename")).trimmed(); + QString deprecated = attributeValue(attributes.removeNamedItem("deprecated"), "no"); + QString association = attributeValue(attributes.removeNamedItem("associated-to")); + QString virtualSlot = attributeValue(attributes.removeNamedItem("virtual-slot"), "no"); + QString allowAsSlot = attributeValue(attributes.removeNamedItem("allow-as-slot"), "no"); + QString privateSignal = attributeValue(attributes.removeNamedItem("private-signal"), "no"); + QString threadAffine = attributeValue(attributes.removeNamedItem("thread-affine"), "no"); + FunctionModification mod; + mod.removal = TypeSystem::NoLanguage; + mod.signature = signature; + mod.ppCondition = attributeValue(attributes.removeNamedItem("pp-condition")); + mod.throws = attributeValue(attributes.removeNamedItem("throws")).trimmed(); + mod.proxyCall = attributeValue(attributes.removeNamedItem("proxy-call"), ""); + QDomNode targetTypeAttr; + mod.targetType = attributeValue(targetTypeAttr = attributes.removeNamedItem("target-type"), ""); static const QHash modifierNames{ {"private", Modification::Private}, {"public", Modification::Public}, {"protected", Modification::Protected}, {"friendly", Modification::Friendly}, - {"rename", Modification::Rename}, {"final", Modification::Final}, {"declared-final", Modification::NativeDeclFinal}, {"non-final", Modification::NonFinal} }; - - if (!accesses.isEmpty() && !accesses[0].isEmpty()) { + if (!accesses.isEmpty()) { for(const QString& access : accesses){ if(!modifierNames.contains(access)){ TypesystemException::raise(QString("Bad access type '%3' in <%1> in line %2").arg(element.localName()).arg(element.lineNumber()).arg(access)); } - fm.modifiers |= modifierNames[access]; + mod.modifiers |= modifierNames[access]; } } - QDomNodeList childNodes = element.childNodes(); - for(int i=0; i in line %2").arg(element.localName()).arg(element.lineNumber()).arg(remove)); + } + } + + if (!association.isEmpty()) + mod.association = association; + + if(threadAffine=="ui"){ + mod.modifiers |= Modification::UIThreadAffine; + }else if(threadAffine=="pixmap"){ + mod.modifiers |= Modification::PixmapThreadAffine; + }else if(!threadAffine.isEmpty() && convertBoolean(threadAffine, "thread-affine", false)){ + mod.modifiers |= Modification::ThreadAffine; + } + + if(attributes.count()){ + TypesystemException::raise(QString("Unexpected attribute '%2' of tag <%1> in line %3").arg(element.localName()).arg(attributes.item(0).localName()).arg(element.lineNumber())); + } + + QDomNodeList childNodes = element.childNodes(); + for(int i=0; i in line %2").arg(element.localName()).arg(element.lineNumber())); + } + static QHash languageNames{ + {"java", TypeSystem::TargetLangAndNativeCode}, + {"all", TypeSystem::All} + }; + + QString languageAttribute = attributeValue(attributes.removeNamedItem("class"), "all").toLower(); + TypeSystem::Language lang = languageNames.value(languageAttribute, TypeSystem::NoLanguage); + if (lang == TypeSystem::NoLanguage) { + TypesystemException::raise(QString("Unsupported class attribute '%3' in tag <%1> in line %2").arg(childElement.localName()).arg(childElement.lineNumber()).arg(languageAttribute)); + } + if(attributes.count()){ + TypesystemException::raise(QString("Unexpected attribute '%2' of tag <%1> in line %3").arg(childElement.localName()).arg(attributes.item(0).localName()).arg(childElement.lineNumber())); + } + ensureNoChildren(childElement); + mod.removal = lang; + } + }else if(childElement.localName()=="rename"){ + QDomNamedNodeMap attributes = childElement.attributes(); + if (checkQtVersion(attributes)){ + rename = attributeValue(attributes.removeNamedItem("to")); + if(attributes.count()){ + TypesystemException::raise(QString("Unexpected attribute '%2' of tag <%1> in line %3").arg(childElement.localName()).arg(attributes.item(0).localName()).arg(childElement.lineNumber())); + } + ensureNoChildren(childElement); + } + }else if(childElement.localName()=="access"){ + QDomNamedNodeMap attributes = childElement.attributes(); + if (checkQtVersion(attributes)){ + if(!accesses.isEmpty()){ + TypesystemException::raise(QString("ACCESS is already specified as attribute in tag <%1> in line %2").arg(element.localName()).arg(element.lineNumber())); + } + QString access = attributeValue(attributes.removeNamedItem("modifier")); + if (!access.isEmpty()) { + if(!modifierNames.contains(access)){ + TypesystemException::raise(QString("Bad access type '%3' in <%1> in line %2").arg(element.localName()).arg(element.lineNumber()).arg(access)); + } + mod.modifiers |= modifierNames[access]; + } + if(attributes.count()){ + TypesystemException::raise(QString("Unexpected attribute '%2' of tag <%1> in line %3").arg(childElement.localName()).arg(attributes.item(0).localName()).arg(childElement.lineNumber())); + } + ensureNoChildren(childElement); + } + }else if(childElement.localName()=="add-argument"){ + QDomNamedNodeMap attributes = childElement.attributes(); + if (checkQtVersion(attributes)){ + QString _index = attributeValue(attributes.removeNamedItem("index")); + bool ok = false; + uint index = _index.toUInt(&ok); + ArgumentModification argumentModification = ArgumentModification(ok ? index : std::numeric_limits::max(), ArgumentModification::AdditionalArgument); + argumentModification.replaced_default_expression = attributeValue(attributes.removeNamedItem("default")); + argumentModification.modified_name = attributeValue(attributes.removeNamedItem("name")); + argumentModification.modified_type = attributeValue(attributes.removeNamedItem("type")); + argumentModification.modified_jni_type = attributeValue(attributes.removeNamedItem("jni-type")); + argumentModification.reset_after_use = convertBoolean(attributeValue(attributes.removeNamedItem("invalidate-after-use"), "no"), "invalidate-after-use", false); + if(attributes.count()){ + TypesystemException::raise(QString("Unexpected attribute '%2' of tag <%1> in line %3").arg(childElement.localName()).arg(attributes.item(0).localName()).arg(childElement.lineNumber())); + } + ensureNoChildren(childElement); + mod.argument_mods.append(argumentModification); + } + }else if(childElement.localName()=="add-type-parameter"){ + QDomNamedNodeMap attributes = childElement.attributes(); + if (checkQtVersion(attributes)){ + ArgumentModification argumentModification = ArgumentModification(ArgumentModification::TypeParameter); + argumentModification.modified_name = attributeValue(attributes.removeNamedItem("name")); + argumentModification.modified_type = attributeValue(attributes.removeNamedItem("extends")); + if(attributes.count()){ + TypesystemException::raise(QString("Unexpected attribute '%2' of tag <%1> in line %3").arg(childElement.localName()).arg(attributes.item(0).localName()).arg(childElement.lineNumber())); + } + ensureNoChildren(childElement); + mod.argument_mods.append(argumentModification); + } + }else if(childElement.localName()=="inject-code"){ + static const QHash languageNames{ + {"java", TypeSystem::TargetLangCode}, + {"java-interface-default", TypeSystem::Interface}, + {"native", TypeSystem::NativeCode}, + {"shell", TypeSystem::ShellCode}, + {"signal", TypeSystem::Signal} + }; + + static const QHash positionNames{ + {"begin", CodeSnip::Beginning}, + {"beginning", CodeSnip::Beginning}, + {"position1", CodeSnip::Position1}, + {"position2", CodeSnip::Position2}, + {"position3", CodeSnip::Position3}, + {"position4", CodeSnip::Position4}, + {"1", CodeSnip::Position1}, + {"2", CodeSnip::Position2}, + {"3", CodeSnip::Position3}, + {"4", CodeSnip::Position4}, + {"end", CodeSnip::End} + }; + parseInjectCode(childElement, + languageNames, + positionNames, + [&mod](const QString&,const CodeSnip &snip){mod.snips << snip;}, + true); + }else{ + TypesystemException::raise(QString("Unexpected tag <%2> as child of tag <%1> in line %3").arg(element.localName()).arg(item.toElement().localName()).arg(item.lineNumber())); + } + } + break; + case QDomNode::TextNode: + TypesystemException::raise(QString("Unexpected text content as child of tag <%1> in line %2").arg(element.localName()).arg(item.lineNumber())); + break; + case QDomNode::CharacterDataNode: + case QDomNode::CDATASectionNode: + TypesystemException::raise(QString("Unexpected CDATA as child of tag <%1> in line %2").arg(element.localName()).arg(item.lineNumber())); + break; + case QDomNode::EntityNode: + TypesystemException::raise(QString("Unexpected entity as child of tag <%1> in line %2").arg(element.localName()).arg(item.lineNumber())); + break; + case QDomNode::NotationNode: + TypesystemException::raise(QString("Unexpected notation as child of tag <%1> in line %2").arg(element.localName()).arg(item.lineNumber())); + break; + default: break; + } + } + + if (!rename.isEmpty()) { + mod.renamedToName = rename; + mod.modifiers |= Modification::Rename; + } + if(entry->isComplex()){ + if(!mod.targetType.isEmpty()){ + TypesystemException::raise(QString("Unexpected attribute '%2' of tag <%1> in line %3").arg(element.localName()).arg(targetTypeAttr.localName()).arg(element.lineNumber())); + } + reinterpret_cast(entry)->addFunctionModification(mod); + if(entry->designatedInterface()) + entry->designatedInterface()->addFunctionModification(mod); + }else if(entry->isTypeSystem()){ + if(mod.targetType.isEmpty() && mod.removal != TypeSystem::All){ + TypesystemException::raise(QString("Either define target-type or remove all for global functions")); + } + reinterpret_cast(entry)->addFunctionModification(mod); + } + } +} + +void Handler::parseModifyField(const QDomElement &element, ComplexTypeEntry* entry){ + QDomNamedNodeMap attributes = element.attributes(); + if (checkQtVersion(attributes)){ + FieldModification fm; + fm.name = attributeValue(attributes.removeNamedItem("name")); + fm.modifiers = 0; + if (convertBoolean(attributeValue(attributes.removeNamedItem("read"), "true"), "read", false)) { + fm.modifiers |= FieldModification::Readable; + } + if (convertBoolean(attributeValue(attributes.removeNamedItem("write"), "true"), "write", false)) { + fm.modifiers |= FieldModification::Writable; + } + QString rename = attributeValue(attributes.removeNamedItem("rename")); + if (!rename.isEmpty()){ + fm.setRenamedTo(rename); + } + QStringList accesses = attributeValue(attributes.removeNamedItem("access")).trimmed().toLower().split(QLatin1String(",")); + accesses.removeAll(QLatin1String("")); + if(attributes.count()){ + TypesystemException::raise(QString("Unexpected attribute '%2' of tag <%1> in line %3").arg(element.localName()).arg(attributes.item(0).localName()).arg(element.lineNumber())); + } + + static const QHash modifierNames{ + {"private", Modification::Private}, + {"public", Modification::Public}, + {"protected", Modification::Protected}, + {"friendly", Modification::Friendly}, + {"rename", Modification::Rename}, + {"final", Modification::Final}, + {"declared-final", Modification::NativeDeclFinal}, + {"non-final", Modification::NonFinal} + }; + + if (!accesses.isEmpty() && !accesses[0].isEmpty()) { + for(const QString& access : accesses){ + if(!modifierNames.contains(access)){ + TypesystemException::raise(QString("Bad access type '%3' in <%1> in line %2").arg(element.localName()).arg(element.lineNumber()).arg(access)); + } + fm.modifiers |= modifierNames[access]; + } + } + + QDomNodeList childNodes = element.childNodes(); + for(int i=0; i languageNames{ + {"native-getter", TypeSystem::Language(TypeSystem::Getter | TypeSystem::NativeCode)}, + {"native-setter", TypeSystem::Language(TypeSystem::Setter | TypeSystem::NativeCode)} + }; + parseConversionRule(languageNames, childElement, [&fm](const CodeSnip& snip){fm.conversion_rules.append(snip);}); }else if(childElement.localName()=="reference-count"){ QDomNamedNodeMap attributes = childElement.attributes(); if (checkQtVersion(attributes)){ @@ -2235,127 +2506,132 @@ void Handler::parseFunctionalType(const QDomElement &element){ QDomNamedNodeMap attributes = element.attributes(); if (checkQtVersion(attributes)){ QString name = parseTypeName(attributes, element); - QString targetName; - for(const NamespacePrefix& prefix : m_namespacePrefixes){ - if(name.startsWith(prefix.prefix)){ - name = name.mid(prefix.prefix.size()); - if(prefix.namingPolicy==NamespacePrefix::Cut) - targetName = name; - name = prefix._namespace + name; - break; + try{ + QString targetName; + for(const NamespacePrefix& prefix : m_namespacePrefixes){ + if(name.startsWith(prefix.prefix)){ + name = name.mid(prefix.prefix.size()); + if(prefix.namingPolicy==NamespacePrefix::Cut) + targetName = name; + name = prefix._namespace + name; + break; + } + } + QStringList names = name.split(QLatin1String("::")); + QString generate = attributeValue(attributes.removeNamedItem("generate"), "yes"); + QString package = attributeValue(attributes.removeNamedItem("package"), m_defaultPackage); + QString implements = attributeValue(attributes.removeNamedItem("implements")); + QString ppCondition = attributeValue(attributes.removeNamedItem("pp-condition")); + QString _using = attributeValue(attributes.removeNamedItem("using")); + QString javaName = attributeValue(attributes.removeNamedItem("java-name")); + QString _count = attributeValue(attributes.removeNamedItem("count"), "0"); + QString noExcept = attributeValue(attributes.removeNamedItem("no-except"), "false"); + QString blockExcept = attributeValue(attributes.removeNamedItem("block-exceptions"), "no"); + QString rethrowExcept = attributeValue(attributes.removeNamedItem("rethrow-exceptions"), "no"); + QString functionName = attributeValue(attributes.removeNamedItem("function-name"), ""); + QString disableNativeIdUsage = attributeValue(attributes.removeNamedItem("disable-native-id-usage"), "no"); + if(attributes.count()){ + TypesystemException::raise(QString("Unexpected attribute '%2' of tag <%1> in line %3").arg(element.localName()).arg(attributes.item(0).localName()).arg(element.lineNumber())); } - } - QStringList names = name.split(QLatin1String("::")); - QString generate = attributeValue(attributes.removeNamedItem("generate"), "yes"); - QString package = attributeValue(attributes.removeNamedItem("package"), m_defaultPackage); - QString implements = attributeValue(attributes.removeNamedItem("implements")); - QString ppCondition = attributeValue(attributes.removeNamedItem("pp-condition")); - QString _using = attributeValue(attributes.removeNamedItem("using")); - QString javaName = attributeValue(attributes.removeNamedItem("java-name")); - QString _count = attributeValue(attributes.removeNamedItem("count"), "0"); - QString noExcept = attributeValue(attributes.removeNamedItem("no-except"), "false"); - QString blockExcept = attributeValue(attributes.removeNamedItem("block-exceptions"), "no"); - QString rethrowExcept = attributeValue(attributes.removeNamedItem("rethrow-exceptions"), "no"); - QString functionName = attributeValue(attributes.removeNamedItem("function-name"), ""); - QString disableNativeIdUsage = attributeValue(attributes.removeNamedItem("disable-native-id-usage"), "no"); - if(attributes.count()){ - TypesystemException::raise(QString("Unexpected attribute '%2' of tag <%1> in line %3").arg(element.localName()).arg(attributes.item(0).localName()).arg(element.lineNumber())); - } - std::unique_ptr fentry; - if (names.size() == 1) { - fentry.reset(new FunctionalTypeEntry(QString(), name)); - if(!targetName.isEmpty()) - fentry->setTargetLangName(targetName); - } else { - fentry.reset(new FunctionalTypeEntry(QStringList(names.mid(0, names.size() - 1)).join("::"), names.last())); - } - fentry->setFunctionName(functionName); - if(m_generate==TypeEntry::GenerateAll){ - if(generate=="no-shell"){ - fentry->setCodeGeneration(TypeEntry::GenerateNoShell | TypeEntry::GenerateAll); - }else if (!convertBoolean(generate, "generate", true)) - fentry->setCodeGeneration(TypeEntry::GenerateNothing); - else + std::unique_ptr fentry; + if (names.size() == 1) { + fentry.reset(new FunctionalTypeEntry(QString(), name)); + if(!targetName.isEmpty()) + fentry->setTargetLangName(targetName); + } else { + fentry.reset(new FunctionalTypeEntry(QStringList(names.mid(0, names.size() - 1)).join("::"), names.last())); + } + fentry->setFunctionName(functionName); + if(m_generate==TypeEntry::GenerateAll){ + if(generate=="no-shell"){ + fentry->setCodeGeneration(TypeEntry::GenerateNoShell | TypeEntry::GenerateAll); + }else if (!convertBoolean(generate, "generate", true)) + fentry->setCodeGeneration(TypeEntry::GenerateNothing); + else + fentry->setCodeGeneration(m_generate); + }else fentry->setCodeGeneration(m_generate); - }else - fentry->setCodeGeneration(m_generate); - if (convertBoolean(disableNativeIdUsage, "disable-native-id-usage", false)) - fentry->disableNativeIdUsage(); - { - Modification mod; - if (convertBoolean(noExcept, "no-except", false)) { - mod.modifiers |= Modification::NoExcept; - } - if (convertBoolean(blockExcept, "block-exceptions", false)) { - mod.modifiers |= Modification::BlockExcept; - } - if (convertBoolean(rethrowExcept, "rethrow-exceptions", false)) { - mod.modifiers |= Modification::RethrowExcept; + if (convertBoolean(disableNativeIdUsage, "disable-native-id-usage", false)) + fentry->disableNativeIdUsage(); + { + Modification mod; + if (convertBoolean(noExcept, "no-except", false)) { + mod.modifiers |= Modification::NoExcept; + } + if (convertBoolean(blockExcept, "block-exceptions", false)) { + mod.modifiers |= Modification::BlockExcept; + } + if (convertBoolean(rethrowExcept, "rethrow-exceptions", false)) { + mod.modifiers |= Modification::RethrowExcept; + } + if(mod.modifiers) + fentry->addModification(mod); } - if(mod.modifiers) - fentry->addModification(mod); - } - fentry->setTargetLangPackage(package); - fentry->setTargetTypeSystem(m_defaultPackage); - fentry->setImplements(implements); - fentry->setPPCondition(ppCondition); - fentry->setUsing(_using); - if(!javaName.isEmpty()) - fentry->setTargetLangName(javaName); + fentry->setTargetLangPackage(package); + fentry->setTargetTypeSystem(m_defaultPackage); + fentry->setImplements(implements); + fentry->setPPCondition(ppCondition); + fentry->setUsing(_using); + if(!javaName.isEmpty()) + fentry->setTargetLangName(javaName); - bool ok = false; - uint count = _count.toUInt(&ok); - if (!ok) { - TypesystemException::raise(QString("Cannot convert count='%1' to integer in tag <%2> in line %3").arg(_count).arg(element.localName()).arg(element.lineNumber())); - } - fentry->setCount(count); + bool ok = false; + uint count = _count.toUInt(&ok); + if (!ok) { + TypesystemException::raise(QString("Cannot convert count='%1' to integer in tag <%2> in line %3").arg(_count).arg(element.localName()).arg(element.lineNumber())); + } + fentry->setCount(count); - QDomNodeList childNodes = element.childNodes(); - for(int i=0; iaddArgumentModification(am); + QDomNodeList childNodes = element.childNodes(); + for(int i=0; iaddArgumentModification(am); + } + }else if(childElement.localName()=="inject-code"){ + parseInjectCode(childElement, fentry.get()); + }else if(childElement.localName()=="include"){ + Include incl = parseInclude(childElement); + if(incl.isValid()) + fentry->setInclude(incl); + }else if(childElement.localName()=="extra-includes"){ + parseExtraIncludes(childElement, fentry.get()); + }else{ + TypesystemException::raise(QString("Unexpected tag <%2> as child of tag <%1> in line %3").arg(element.localName()).arg(item.toElement().localName()).arg(item.lineNumber())); } - }else if(childElement.localName()=="inject-code"){ - parseInjectCode(childElement, fentry.get()); - }else if(childElement.localName()=="include"){ - Include incl = parseInclude(childElement); - if(incl.isValid()) - fentry->setInclude(incl); - }else if(childElement.localName()=="extra-includes"){ - parseExtraIncludes(childElement, fentry.get()); - }else{ - TypesystemException::raise(QString("Unexpected tag <%2> as child of tag <%1> in line %3").arg(element.localName()).arg(item.toElement().localName()).arg(item.lineNumber())); + } + break; + case QDomNode::TextNode: + TypesystemException::raise(QString("Unexpected text content as child of tag <%1> in line %2").arg(element.localName()).arg(item.lineNumber())); + break; + case QDomNode::CharacterDataNode: + case QDomNode::CDATASectionNode: + TypesystemException::raise(QString("Unexpected CDATA as child of tag <%1> in line %2").arg(element.localName()).arg(item.lineNumber())); + break; + case QDomNode::EntityNode: + TypesystemException::raise(QString("Unexpected entity as child of tag <%1> in line %2").arg(element.localName()).arg(item.lineNumber())); + break; + case QDomNode::NotationNode: + TypesystemException::raise(QString("Unexpected notation as child of tag <%1> in line %2").arg(element.localName()).arg(item.lineNumber())); + break; + default: break; } } - break; - case QDomNode::TextNode: - TypesystemException::raise(QString("Unexpected text content as child of tag <%1> in line %2").arg(element.localName()).arg(item.lineNumber())); - break; - case QDomNode::CharacterDataNode: - case QDomNode::CDATASectionNode: - TypesystemException::raise(QString("Unexpected CDATA as child of tag <%1> in line %2").arg(element.localName()).arg(item.lineNumber())); - break; - case QDomNode::EntityNode: - TypesystemException::raise(QString("Unexpected entity as child of tag <%1> in line %2").arg(element.localName()).arg(item.lineNumber())); - break; - case QDomNode::NotationNode: - TypesystemException::raise(QString("Unexpected notation as child of tag <%1> in line %2").arg(element.localName()).arg(item.lineNumber())); - break; - default: break; - } - } - m_database->addType(fentry.release()); + m_database->addType(fentry.release()); + }catch(const TypesystemException& exn){ + TypesystemException::raise(QString("%1 of type %2").arg(QLatin1String(exn.what()), name)); + } } } @@ -2363,29 +2639,33 @@ void Handler::parseIteratorType(const QDomElement &element){ QDomNamedNodeMap attributes = element.attributes(); if (checkQtVersion(attributes)){ QString name = parseTypeName(attributes, element); - for(const NamespacePrefix& prefix : m_namespacePrefixes){ - if(name.startsWith(prefix.prefix)){ - name = name.mid(prefix.prefix.size()); - name = prefix._namespace + name; - break; + try{ + for(const NamespacePrefix& prefix : m_namespacePrefixes){ + if(name.startsWith(prefix.prefix)){ + name = name.mid(prefix.prefix.size()); + name = prefix._namespace + name; + break; + } } + ComplexTypeEntry* containerType = nullptr; + QStringList spl = name.split("::"); + spl.removeLast(); + TypeEntry *tmp = m_database->findType(spl.join("::")); + if(tmp && tmp->isComplex()){ + containerType = static_cast(tmp); + } + std::unique_ptr entry(new IteratorTypeEntry(name, containerType)); + QString genericClass = attributeValue(attributes.removeNamedItem("generic-class"), "no"); + entry->setGenericClass(convertBoolean(genericClass, "generic-class", false)); + if(attributes.count()){ + TypesystemException::raise(QString("Unexpected attribute '%2' of tag <%1> in line %3").arg(element.localName()).arg(attributes.item(0).localName()).arg(element.lineNumber())); + } + ensureNoChildren(element); + ReportHandler::debugTypes("Adding to TypeDatabase(2): " + entry->name()); + m_database->addType(entry.release()); + }catch(const TypesystemException& exn){ + TypesystemException::raise(QString("%1 of type %2").arg(QLatin1String(exn.what()), name)); } - ComplexTypeEntry* containerType = nullptr; - QStringList spl = name.split("::"); - spl.removeLast(); - TypeEntry *tmp = m_database->findType(spl.join("::")); - if(tmp && tmp->isComplex()){ - containerType = static_cast(tmp); - } - std::unique_ptr entry(new IteratorTypeEntry(name, containerType)); - QString genericClass = attributeValue(attributes.removeNamedItem("generic-class"), "no"); - entry->setGenericClass(convertBoolean(genericClass, "generic-class", false)); - if(attributes.count()){ - TypesystemException::raise(QString("Unexpected attribute '%2' of tag <%1> in line %3").arg(element.localName()).arg(attributes.item(0).localName()).arg(element.lineNumber())); - } - ensureNoChildren(element); - ReportHandler::debugTypes("Adding to TypeDatabase(2): " + entry->name()); - m_database->addType(entry.release()); } } @@ -2393,51 +2673,53 @@ void Handler::parseValueType(const QDomElement &element){ QDomNamedNodeMap attributes = element.attributes(); if (checkQtVersion(attributes)){ QString name = parseTypeName(attributes, element); - QString targetName; - for(const NamespacePrefix& prefix : m_namespacePrefixes){ - if(name.startsWith(prefix.prefix)){ - name = name.mid(prefix.prefix.size()); - if(prefix.namingPolicy==NamespacePrefix::Cut) - targetName = name; - name = prefix._namespace + name; - break; + try{ + QString targetName; + for(const NamespacePrefix& prefix : m_namespacePrefixes){ + if(name.startsWith(prefix.prefix)){ + name = name.mid(prefix.prefix.size()); + if(prefix.namingPolicy==NamespacePrefix::Cut) + targetName = name; + name = prefix._namespace + name; + break; + } } - } - std::unique_ptr entry(new ValueTypeEntry(name)); - if(!targetName.isEmpty()) - entry->setTargetLangName(targetName); - entry->setSkipMetaTypeRegistration(convertBoolean(attributeValue(attributes.removeNamedItem("no-meta-type"), "no"), "no-meta-type", false)); - entry->setIsPolymorphicBase(convertBoolean(attributeValue(attributes.removeNamedItem("polymorphic-base"), "no"), "polymorphic-base", false)); - entry->setPolymorphicIdValue(attributeValue(attributes.removeNamedItem("polymorphic-id-expression"))); - parseAttributesOfComplexType(element, attributes, entry.get()); - QList unhandledElements = parseChildrenOfComplexType(element, entry.get()); - for(const QDomElement& childElement : unhandledElements){ - TypesystemException::raise(QString("Unexpected tag <%2> as child of tag <%1> in line %3").arg(element.localName()).arg(childElement.toElement().localName()).arg(childElement.lineNumber())); - } - if(entry->name().endsWith(">")){ - auto idx = entry->name().indexOf('<'); - QString templateName = entry->name().mid(0, idx); - QStringList templateArguments = entry->name().mid(idx+1).chopped(1).split(","); - ComplexTypeEntry* templateType = m_database->findComplexType(templateName); - if(templateType){ - if(templateType->isTemplate()){ - if(templateType->instantiations().contains(templateArguments) && templateType->instantiations()[templateArguments]==nullptr){ - if(entry->targetLangName()==entry->name()){ - entry->setTargetLangName(templateName); - } - templateType->addInstantiation(templateArguments, entry.release()); + std::unique_ptr entry(new ValueTypeEntry(name)); + if(!targetName.isEmpty()) + entry->setTargetLangName(targetName); + entry->setSkipMetaTypeRegistration(convertBoolean(attributeValue(attributes.removeNamedItem("no-meta-type"), "no"), "no-meta-type", false)); + entry->setIsPolymorphicBase(convertBoolean(attributeValue(attributes.removeNamedItem("polymorphic-base"), "no"), "polymorphic-base", false)); + entry->setPolymorphicIdValue(attributeValue(attributes.removeNamedItem("polymorphic-id-expression"))); + parseAttributesOfComplexType(element, attributes, entry.get()); + QList unhandledElements = parseChildrenOfComplexType(element, entry.get()); + for(const QDomElement& childElement : unhandledElements){ + TypesystemException::raise(QString("Unexpected tag <%2> as child of tag <%1> in line %3").arg(element.localName()).arg(childElement.toElement().localName()).arg(childElement.lineNumber())); + } + if(name.endsWith(">")){ + auto idx = name.indexOf('<'); + QString templateName = name.mid(0, idx); + QStringList templateArguments = name.mid(idx+1).chopped(1).split(","); + ComplexTypeEntry* templateType = m_database->findComplexType(templateName); + if(templateType){ + if(templateType->isTemplate()){ + if(templateType->instantiations().contains(templateArguments) && templateType->instantiations()[templateArguments]==nullptr){ + entry->setTargetLangName(templateType->targetLangName()); + templateType->addInstantiation(templateArguments, entry.release()); + }else{ + TypesystemException::raise(QString("Template %1<%2> already defined").arg(templateName).arg(templateArguments.join(","))); + } }else{ - TypesystemException::raise(QString("Template %1<%2> already defined").arg(templateName).arg(templateArguments.join(","))); + TypesystemException::raise(QString("Type %1 not a template").arg(templateName)); } }else{ - TypesystemException::raise(QString("Type %1 not a template").arg(templateName)); + TypesystemException::raise(QString("Template %1 not found").arg(templateName)); } }else{ - TypesystemException::raise(QString("Template %1 not found").arg(templateName)); + ReportHandler::debugTypes("Adding to TypeDatabase(2): " + name); + m_database->addType(entry.release()); } - }else{ - ReportHandler::debugTypes("Adding to TypeDatabase(2): " + entry->name()); - m_database->addType(entry.release()); + }catch(const TypesystemException& exn){ + TypesystemException::raise(QString("%1 of type %2").arg(QLatin1String(exn.what()), name)); } } } @@ -2448,7 +2730,7 @@ QString Handler::parseTypeName(QDomNamedNodeMap& attributes, const QDomElement & TypesystemException::raise(QString("No 'name' attribute specified for tag <%1> in line %2").arg(element.localName()).arg(element.lineNumber())); } TypeEntry *tmp = m_database->findType(name); - if (tmp && !tmp->isQString() && !tmp->isChar()) { + if (tmp && !tmp->isQString() && !tmp->isChar() && !tmp->isVariant()) { ReportHandler::warning(QString("Duplicate type entry: '%1'").arg(name)); } return name; @@ -2458,64 +2740,66 @@ void Handler::parseTypeAliasType(const QDomElement &element){ QDomNamedNodeMap attributes = element.attributes(); if (checkQtVersion(attributes)){ QString name = parseTypeName(attributes, element); - for(const NamespacePrefix& prefix : m_namespacePrefixes){ - if(name.startsWith(prefix.prefix)){ - name = name.mid(prefix.prefix.size()); - name = prefix._namespace + name; - break; + try{ + for(const NamespacePrefix& prefix : m_namespacePrefixes){ + if(name.startsWith(prefix.prefix)){ + name = name.mid(prefix.prefix.size()); + name = prefix._namespace + name; + break; + } } - } - if(attributes.count()){ - TypesystemException::raise(QString("Unexpected attribute '%2' of tag <%1> in line %3").arg(element.localName()).arg(attributes.item(0).localName()).arg(element.lineNumber())); - } - std::unique_ptr entry(new AliasTypeEntry(name, m_defaultPackage)); - QDomNodeList childNodes = element.childNodes(); - for(int i=0; i as child of tag <%1> in line %3").arg(element.localName()).arg(item.toElement().localName()).arg(item.lineNumber())); - break; - case QDomNode::TextNode: - TypesystemException::raise(QString("Unexpected text content as child of tag <%1> in line %2").arg(element.localName()).arg(item.lineNumber())); - break; - case QDomNode::CharacterDataNode: - case QDomNode::CDATASectionNode: - TypesystemException::raise(QString("Unexpected CDATA as child of tag <%1> in line %2").arg(element.localName()).arg(item.lineNumber())); - break; - case QDomNode::EntityNode: - TypesystemException::raise(QString("Unexpected entity as child of tag <%1> in line %2").arg(element.localName()).arg(item.lineNumber())); - break; - case QDomNode::NotationNode: - TypesystemException::raise(QString("Unexpected notation as child of tag <%1> in line %2").arg(element.localName()).arg(item.lineNumber())); - break; - default: break; + if(attributes.count()){ + TypesystemException::raise(QString("Unexpected attribute '%2' of tag <%1> in line %3").arg(element.localName()).arg(attributes.item(0).localName()).arg(element.lineNumber())); } - } - if(entry->name().endsWith(">")){ - auto idx = entry->name().indexOf('<'); - QString templateName = entry->name().mid(0, idx); - QStringList templateArguments = entry->name().mid(idx+1).chopped(1).split(","); - ComplexTypeEntry* templateType = m_database->findComplexType(templateName); - if(templateType){ - if(templateType->isTemplate()){ - if(templateType->instantiations().contains(templateArguments) && templateType->instantiations()[templateArguments]==nullptr){ - if(entry->targetLangName()==entry->name()){ - entry->setTargetLangName(templateName); + std::unique_ptr entry(new AliasTypeEntry(name, m_defaultPackage)); + QDomNodeList childNodes = element.childNodes(); + for(int i=0; i as child of tag <%1> in line %3").arg(element.localName()).arg(item.toElement().localName()).arg(item.lineNumber())); + break; + case QDomNode::TextNode: + TypesystemException::raise(QString("Unexpected text content as child of tag <%1> in line %2").arg(element.localName()).arg(item.lineNumber())); + break; + case QDomNode::CharacterDataNode: + case QDomNode::CDATASectionNode: + TypesystemException::raise(QString("Unexpected CDATA as child of tag <%1> in line %2").arg(element.localName()).arg(item.lineNumber())); + break; + case QDomNode::EntityNode: + TypesystemException::raise(QString("Unexpected entity as child of tag <%1> in line %2").arg(element.localName()).arg(item.lineNumber())); + break; + case QDomNode::NotationNode: + TypesystemException::raise(QString("Unexpected notation as child of tag <%1> in line %2").arg(element.localName()).arg(item.lineNumber())); + break; + default: break; + } + } + if(name.endsWith(">")){ + auto idx = name.indexOf('<'); + QString templateName = name.mid(0, idx); + QStringList templateArguments = name.mid(idx+1).chopped(1).split(","); + ComplexTypeEntry* templateType = m_database->findComplexType(templateName); + if(templateType){ + if(templateType->isTemplate()){ + if(templateType->instantiations().contains(templateArguments) && templateType->instantiations()[templateArguments]==nullptr){ + entry->setTargetLangName(templateType->targetLangName()); + templateType->addInstantiation(templateArguments, entry.release()); + }else{ + TypesystemException::raise(QString("Template %1<%2> already defined").arg(templateName).arg(templateArguments.join(","))); } - templateType->addInstantiation(templateArguments, entry.release()); }else{ - TypesystemException::raise(QString("Template %1<%2> already defined").arg(templateName).arg(templateArguments.join(","))); + TypesystemException::raise(QString("Type %1 not a template").arg(templateName)); } }else{ - TypesystemException::raise(QString("Type %1 not a template").arg(templateName)); + TypesystemException::raise(QString("Template %1 not found").arg(templateName)); } }else{ - TypesystemException::raise(QString("Template %1 not found").arg(templateName)); + ReportHandler::debugTypes("Adding to TypeDatabase(2): " + entry->name()); + m_database->addType(entry.release()); } - }else{ - ReportHandler::debugTypes("Adding to TypeDatabase(2): " + entry->name()); - m_database->addType(entry.release()); + }catch(const TypesystemException& exn){ + TypesystemException::raise(QString("%1 of type %2").arg(QLatin1String(exn.what()), name)); } } } @@ -2524,36 +2808,40 @@ void Handler::parseInterfaceType(const QDomElement &element){ QDomNamedNodeMap attributes = element.attributes(); if (checkQtVersion(attributes)){ QString name = parseTypeName(attributes, element); - QString targetName; - for(const NamespacePrefix& prefix : m_namespacePrefixes){ - if(name.startsWith(prefix.prefix)){ - name = name.mid(prefix.prefix.size()); - if(prefix.namingPolicy==NamespacePrefix::Cut) - targetName = name; - name = prefix._namespace + name; - break; + try{ + QString targetName; + for(const NamespacePrefix& prefix : m_namespacePrefixes){ + if(name.startsWith(prefix.prefix)){ + name = name.mid(prefix.prefix.size()); + if(prefix.namingPolicy==NamespacePrefix::Cut) + targetName = name; + name = prefix._namespace + name; + break; + } } + std::unique_ptr otype; + if(convertBoolean(attributeValue(attributes.removeNamedItem("is-value"), "no"), "is-value", false)){ + ValueTypeEntry* ventry = new ValueTypeEntry(InterfaceTypeEntry::implName(name)); + ventry->setSkipMetaTypeRegistration(convertBoolean(attributeValue(attributes.removeNamedItem("no-meta-type"), "no"), "no-meta-type", false)); + otype.reset(ventry); + }else + otype.reset(new ObjectTypeEntry(InterfaceTypeEntry::implName(name))); + if(!targetName.isEmpty()) + otype->setTargetLangName(targetName); + std::unique_ptr itype(new InterfaceTypeEntry(name)); + otype->setDesignatedInterface(itype.get()); + itype->setOrigin(otype.get()); + itype->setNoImpl(convertBoolean(attributeValue(attributes.removeNamedItem("no-impl"), "no"), "no-impl", false)); + parseAttributesOfComplexType(element, attributes, otype.get()); + QList unhandledElements = parseChildrenOfComplexType(element, otype.get()); + for(const QDomElement& childElement : unhandledElements){ + TypesystemException::raise(QString("Unexpected tag <%2> as child of tag <%1> in line %3").arg(element.localName()).arg(childElement.toElement().localName()).arg(childElement.lineNumber())); + } + m_database->addType(otype.release()); + itype.release(); + }catch(const TypesystemException& exn){ + TypesystemException::raise(QString("%1 of type %2").arg(QLatin1String(exn.what()), name)); } - std::unique_ptr otype; - if(convertBoolean(attributeValue(attributes.removeNamedItem("is-value"), "no"), "is-value", false)){ - ValueTypeEntry* ventry = new ValueTypeEntry(InterfaceTypeEntry::implName(name)); - ventry->setSkipMetaTypeRegistration(convertBoolean(attributeValue(attributes.removeNamedItem("no-meta-type"), "no"), "no-meta-type", false)); - otype.reset(ventry); - }else - otype.reset(new ObjectTypeEntry(InterfaceTypeEntry::implName(name))); - if(!targetName.isEmpty()) - otype->setTargetLangName(targetName); - std::unique_ptr itype(new InterfaceTypeEntry(name)); - otype->setDesignatedInterface(itype.get()); - itype->setOrigin(otype.get()); - itype->setNoImpl(convertBoolean(attributeValue(attributes.removeNamedItem("no-impl"), "no"), "no-impl", false)); - parseAttributesOfComplexType(element, attributes, otype.get()); - QList unhandledElements = parseChildrenOfComplexType(element, otype.get()); - for(const QDomElement& childElement : unhandledElements){ - TypesystemException::raise(QString("Unexpected tag <%2> as child of tag <%1> in line %3").arg(element.localName()).arg(childElement.toElement().localName()).arg(childElement.lineNumber())); - } - m_database->addType(otype.release()); - itype.release(); } } @@ -2561,26 +2849,30 @@ void Handler::parseNamespaceType(const QDomElement &element){ QDomNamedNodeMap attributes = element.attributes(); if (checkQtVersion(attributes)){ QString name = parseTypeName(attributes, element); - QString targetName; - for(const NamespacePrefix& prefix : m_namespacePrefixes){ - if(name.startsWith(prefix.prefix)){ - name = name.mid(prefix.prefix.size()); - if(prefix.namingPolicy==NamespacePrefix::Cut) - targetName = name; - name = prefix._namespace + name; - break; + try{ + QString targetName; + for(const NamespacePrefix& prefix : m_namespacePrefixes){ + if(name.startsWith(prefix.prefix)){ + name = name.mid(prefix.prefix.size()); + if(prefix.namingPolicy==NamespacePrefix::Cut) + targetName = name; + name = prefix._namespace + name; + break; + } } + std::unique_ptr entry(new NamespaceTypeEntry(name, element.localName()=="header-type")); + if(!targetName.isEmpty()) + entry->setTargetLangName(targetName); + parseAttributesOfComplexType(element, attributes, entry.get()); + QList unhandledElements = parseChildrenOfComplexType(element, entry.get()); + for(const QDomElement& childElement : unhandledElements){ + TypesystemException::raise(QString("Unexpected tag <%2> as child of tag <%1> in line %3").arg(element.localName()).arg(childElement.toElement().localName()).arg(childElement.lineNumber())); + } + ReportHandler::debugTypes("Adding to TypeDatabase(2): " + entry->name()); + m_database->addType(entry.release()); + }catch(const TypesystemException& exn){ + TypesystemException::raise(QString("%1 of type %2").arg(QLatin1String(exn.what()), name)); } - std::unique_ptr entry(new NamespaceTypeEntry(name)); - if(!targetName.isEmpty()) - entry->setTargetLangName(targetName); - parseAttributesOfComplexType(element, attributes, entry.get()); - QList unhandledElements = parseChildrenOfComplexType(element, entry.get()); - for(const QDomElement& childElement : unhandledElements){ - TypesystemException::raise(QString("Unexpected tag <%2> as child of tag <%1> in line %3").arg(element.localName()).arg(childElement.toElement().localName()).arg(childElement.lineNumber())); - } - ReportHandler::debugTypes("Adding to TypeDatabase(2): " + entry->name()); - m_database->addType(entry.release()); } } @@ -2588,161 +2880,166 @@ void Handler::parseEnumType(const QDomElement &element){ QDomNamedNodeMap attributes = element.attributes(); if (checkQtVersion(attributes)){ QString name = parseTypeName(attributes, element); - QString flags = attributeValue(attributes.removeNamedItem("flags")); - for(const NamespacePrefix& prefix : m_namespacePrefixes){ - if(name.startsWith(prefix.prefix)){ - name = name.mid(prefix.prefix.size()); - name = prefix._namespace + name; - if(flags.startsWith(prefix.prefix)){ - flags = flags.mid(prefix.prefix.size()); - flags = prefix._namespace + flags; + try{ + QString flags = attributeValue(attributes.removeNamedItem("flags")); + for(const NamespacePrefix& prefix : m_namespacePrefixes){ + if(name.startsWith(prefix.prefix)){ + name = name.mid(prefix.prefix.size()); + name = prefix._namespace + name; + if(flags.startsWith(prefix.prefix)){ + flags = flags.mid(prefix.prefix.size()); + flags = prefix._namespace + flags; + break; + } break; } - break; } - } - QStringList names = name.split(QLatin1String("::")); - QString generate = attributeValue(attributes.removeNamedItem("generate"), "yes"); - QString package = attributeValue(attributes.removeNamedItem("package"), m_defaultPackage); - QString upperBound = attributeValue(attributes.removeNamedItem("upper-bound")); - QString lowerBound = attributeValue(attributes.removeNamedItem("lower-bound")); - QString javaScope = attributeValue(attributes.removeNamedItem("java-scope")); - QString implements = attributeValue(attributes.removeNamedItem("implements")); - QString forceInteger = attributeValue(attributes.removeNamedItem("force-integer"), "no"); - QString extensible = attributeValue(attributes.removeNamedItem("extensible"), "no"); - QString hiddenMetaobject = attributeValue(attributes.removeNamedItem("hidden-metaobject"), "no"); - if(attributes.count()){ - TypesystemException::raise(QString("Unexpected attribute '%2' of tag <%1> in line %3").arg(element.localName()).arg(attributes.item(0).localName()).arg(element.lineNumber())); - } + QStringList names = name.split(QLatin1String("::")); + QString generate = attributeValue(attributes.removeNamedItem("generate"), "yes"); + QString package = attributeValue(attributes.removeNamedItem("package"), m_defaultPackage); + QString ppCondition = attributeValue(attributes.removeNamedItem("pp-condition")); + QString upperBound = attributeValue(attributes.removeNamedItem("upper-bound")); + QString lowerBound = attributeValue(attributes.removeNamedItem("lower-bound")); + QString javaScope = attributeValue(attributes.removeNamedItem("java-scope")); + QString implements = attributeValue(attributes.removeNamedItem("implements")); + QString forceInteger = attributeValue(attributes.removeNamedItem("force-integer"), "no"); + QString extensible = attributeValue(attributes.removeNamedItem("extensible"), "no"); + QString hiddenMetaobject = attributeValue(attributes.removeNamedItem("hidden-metaobject"), "no"); + if(attributes.count()){ + TypesystemException::raise(QString("Unexpected attribute '%2' of tag <%1> in line %3").arg(element.localName()).arg(attributes.item(0).localName()).arg(element.lineNumber())); + } - std::unique_ptr eentry; - if (names.size() == 1) { - eentry.reset(new EnumTypeEntry(QString(), name)); - } else { - eentry.reset(new EnumTypeEntry(QStringList(names.mid(0, names.size() - 1)).join("::"), names.last())); - } - if(m_generate==TypeEntry::GenerateAll){ - if(generate=="no-shell"){ - eentry->setCodeGeneration(TypeEntry::GenerateNoShell | TypeEntry::GenerateAll); - }else if (!convertBoolean(generate, "generate", true)) - eentry->setCodeGeneration(TypeEntry::GenerateNothing); - else + std::unique_ptr eentry; + if (names.size() == 1) { + eentry.reset(new EnumTypeEntry(QString(), name)); + } else { + eentry.reset(new EnumTypeEntry(QStringList(names.mid(0, names.size() - 1)).join("::"), names.last())); + } + if(m_generate==TypeEntry::GenerateAll){ + if(generate=="no-shell"){ + eentry->setCodeGeneration(TypeEntry::GenerateNoShell | TypeEntry::GenerateAll); + }else if (!convertBoolean(generate, "generate", true)) + eentry->setCodeGeneration(TypeEntry::GenerateNothing); + else + eentry->setCodeGeneration(m_generate); + }else eentry->setCodeGeneration(m_generate); - }else - eentry->setCodeGeneration(m_generate); - eentry->setTargetLangPackage(package); - eentry->setTargetTypeSystem(m_defaultPackage); - eentry->setUpperBound(upperBound); - eentry->setLowerBound(lowerBound); - if(!javaScope.isEmpty()){ - eentry->setJavaScope(javaScope); - } - eentry->setImplements(implements); - eentry->setForceInteger(convertBoolean(forceInteger, "force-integer", false)); - eentry->setExtensible(convertBoolean(extensible, "extensible", false)); - eentry->setHiddenMetaObject(convertBoolean(hiddenMetaobject, "hidden-metaobject", false)); + eentry->setTargetLangPackage(package); + eentry->setTargetTypeSystem(m_defaultPackage); + eentry->setUpperBound(upperBound); + eentry->setLowerBound(lowerBound); + if(!javaScope.isEmpty()){ + eentry->setJavaScope(javaScope); + } + eentry->setImplements(implements); + eentry->setForceInteger(convertBoolean(forceInteger, "force-integer", false)); + eentry->setExtensible(convertBoolean(extensible, "extensible", false)); + eentry->setHiddenMetaObject(convertBoolean(hiddenMetaobject, "hidden-metaobject", false)); - QDomNodeList childNodes = element.childNodes(); - for(int i=0; i in line %2").arg(childElement.localName()).arg(childElement.lineNumber())); - } - eentry->addEnumValueRejection(name, convertBoolean(attributeValue(attributes.removeNamedItem("remove"), "no"), "remove", false)); - if(attributes.count()){ - TypesystemException::raise(QString("Unexpected attribute of tag <%1>: %2").arg(childElement.localName()).arg(attributes.item(0).localName())); - } - } - }else if(childElement.localName()=="rename-enum-value"){ - QDomNamedNodeMap attributes = childElement.attributes(); - if (checkQtVersion(attributes)){ - QString name = attributeValue(attributes.removeNamedItem("name")); - if (name.isEmpty()) { - TypesystemException::raise(QString("No 'name' attribute specified for tag <%1> in line %2").arg(childElement.localName()).arg(childElement.lineNumber())); - } - QString rename = attributeValue(attributes.removeNamedItem("rename")); - if (rename.isEmpty()) { - TypesystemException::raise(QString("No 'rename' attribute specified for tag <%1> in line %2").arg(childElement.localName()).arg(childElement.lineNumber())); + QDomNodeList childNodes = element.childNodes(); + for(int i=0; i in line %2").arg(childElement.localName()).arg(childElement.lineNumber())); + } + eentry->addEnumValueRejection(name, convertBoolean(attributeValue(attributes.removeNamedItem("remove"), "no"), "remove", false)); + if(attributes.count()){ + TypesystemException::raise(QString("Unexpected attribute of tag <%1>: %2").arg(childElement.localName()).arg(attributes.item(0).localName())); + } } - eentry->addRenamedEnumValue(name, rename); - if(attributes.count()){ - TypesystemException::raise(QString("Unexpected attribute of tag <%1>: %2").arg(childElement.localName()).arg(attributes.item(0).localName())); + }else if(childElement.localName()=="rename-enum-value"){ + QDomNamedNodeMap attributes = childElement.attributes(); + if (checkQtVersion(attributes)){ + QString name = attributeValue(attributes.removeNamedItem("name")); + if (name.isEmpty()) { + TypesystemException::raise(QString("No 'name' attribute specified for tag <%1> in line %2").arg(childElement.localName()).arg(childElement.lineNumber())); + } + QString rename = attributeValue(attributes.removeNamedItem("rename")); + if (rename.isEmpty()) { + TypesystemException::raise(QString("No 'rename' attribute specified for tag <%1> in line %2").arg(childElement.localName()).arg(childElement.lineNumber())); + } + eentry->addRenamedEnumValue(name, rename); + if(attributes.count()){ + TypesystemException::raise(QString("Unexpected attribute of tag <%1>: %2").arg(childElement.localName()).arg(attributes.item(0).localName())); + } } - } - }else if(childElement.localName()=="inject-code"){ - static const QHash languageNames{ - {"java", TypeSystem::TargetLangCode}, - }; + }else if(childElement.localName()=="inject-code"){ + static const QHash languageNames{ + {"java", TypeSystem::TargetLangCode}, + }; - static const QHash positionNames{ - {"begin", CodeSnip::Beginning}, - {"beginning", CodeSnip::Beginning}, - {"position1", CodeSnip::Position1}, - {"position2", CodeSnip::Position2}, - {"position3", CodeSnip::Position3}, - {"position4", CodeSnip::Position4}, - {"1", CodeSnip::Position1}, - {"2", CodeSnip::Position2}, - {"3", CodeSnip::Position3}, - {"4", CodeSnip::Position4}, - {"end", CodeSnip::End} - }; - parseInjectCode(childElement, languageNames, positionNames, [&eentry](const QString&,const CodeSnip &snip){eentry->addCodeSnip(snip);}); - }else{ - TypesystemException::raise(QString("Unexpected tag <%2> as child of tag <%1> in line %3").arg(element.localName()).arg(childElement.localName()).arg(childElement.lineNumber())); + static const QHash positionNames{ + {"begin", CodeSnip::Beginning}, + {"beginning", CodeSnip::Beginning}, + {"position1", CodeSnip::Position1}, + {"position2", CodeSnip::Position2}, + {"position3", CodeSnip::Position3}, + {"position4", CodeSnip::Position4}, + {"1", CodeSnip::Position1}, + {"2", CodeSnip::Position2}, + {"3", CodeSnip::Position3}, + {"4", CodeSnip::Position4}, + {"end", CodeSnip::End} + }; + parseInjectCode(childElement, languageNames, positionNames, [&eentry](const QString&,const CodeSnip &snip){eentry->addCodeSnip(snip);}); + }else{ + TypesystemException::raise(QString("Unexpected tag <%2> as child of tag <%1> in line %3").arg(element.localName()).arg(childElement.localName()).arg(childElement.lineNumber())); + } + } + break; + case QDomNode::TextNode: + TypesystemException::raise(QString("Unexpected text content as child of tag <%1> in line %2").arg(element.localName()).arg(item.lineNumber())); + break; + case QDomNode::CharacterDataNode: + case QDomNode::CDATASectionNode: + TypesystemException::raise(QString("Unexpected CDATA as child of tag <%1> in line %2").arg(element.localName()).arg(item.lineNumber())); + break; + case QDomNode::EntityNode: + TypesystemException::raise(QString("Unexpected entity as child of tag <%1> in line %2").arg(element.localName()).arg(item.lineNumber())); + break; + case QDomNode::NotationNode: + TypesystemException::raise(QString("Unexpected notation as child of tag <%1> in line %2").arg(element.localName()).arg(item.lineNumber())); + break; + default: break; } } - break; - case QDomNode::TextNode: - TypesystemException::raise(QString("Unexpected text content as child of tag <%1> in line %2").arg(element.localName()).arg(item.lineNumber())); - break; - case QDomNode::CharacterDataNode: - case QDomNode::CDATASectionNode: - TypesystemException::raise(QString("Unexpected CDATA as child of tag <%1> in line %2").arg(element.localName()).arg(item.lineNumber())); - break; - case QDomNode::EntityNode: - TypesystemException::raise(QString("Unexpected entity as child of tag <%1> in line %2").arg(element.localName()).arg(item.lineNumber())); - break; - case QDomNode::NotationNode: - TypesystemException::raise(QString("Unexpected notation as child of tag <%1> in line %2").arg(element.localName()).arg(item.lineNumber())); - break; - default: break; - } - } - // put in the flags parallel... - if (!flags.isEmpty() && flags.toLower() != "no") { - std::unique_ptr ftype(new FlagsTypeEntry("QFlags<" + eentry->qualifiedCppName() + ">")); - ftype->setOriginator(eentry.get()); - QStringList flagsNames = flags.split(QLatin1String("::")); - ftype->setOriginalName(flags); - ftype->setCodeGeneration(eentry->codeGeneration()); - QString n = ftype->originalName(); - - QStringList lst = n.split("::"); - if (QStringList(lst.mid(0, lst.size() - 1)).join("::") != QStringList(names.mid(0, names.size() - 1)).join("::")) { - ReportHandler::warning(QString("Enum %1 and flags %2 differ in qualifiers in line %3") - .arg(eentry->qualifiedCppName()) - .arg(n).arg(element.lineNumber())); - } + // put in the flags parallel... + if (!flags.isEmpty() && flags.toLower() != "no") { + std::unique_ptr ftype(new FlagsTypeEntry("QFlags<" + eentry->qualifiedCppName() + ">")); + ftype->setOriginator(eentry.get()); + QStringList flagsNames = flags.split(QLatin1String("::")); + ftype->setOriginalName(flags); + ftype->setCodeGeneration(eentry->codeGeneration()); + QString n = ftype->originalName(); + + QStringList lst = n.split("::"); + if (QStringList(lst.mid(0, lst.size() - 1)).join("::") != QStringList(names.mid(0, names.size() - 1)).join("::")) { + ReportHandler::warning(QString("Enum %1 and flags %2 differ in qualifiers in line %3") + .arg(eentry->qualifiedCppName()) + .arg(n).arg(element.lineNumber())); + } - ftype->setFlagsName(lst.last()); - eentry->setFlags(ftype.get()); + ftype->setFlagsName(lst.last()); + eentry->setFlags(ftype.get()); - m_database->addFlagsType(ftype.get()); - //qDebug()<<"Adding ftype"<name(); - ReportHandler::debugTypes("Adding to TypeDatabase(1): " + ftype->name()); - m_database->addType(ftype.release()); + m_database->addFlagsType(ftype.get()); + //qDebug()<<"Adding ftype"<name(); + ReportHandler::debugTypes("Adding to TypeDatabase(1): " + ftype->name()); + m_database->addType(ftype.release()); + } + m_database->addType(eentry.release()); + }catch(const TypesystemException& exn){ + TypesystemException::raise(QString("%1 of type %2").arg(QLatin1String(exn.what()), name)); } - m_database->addType(eentry.release()); } } diff --git a/generator/typesystem/handler.h b/generator/typesystem/handler.h index 12a10523..e88c0a5c 100644 --- a/generator/typesystem/handler.h +++ b/generator/typesystem/handler.h @@ -84,7 +84,7 @@ class Handler { uint parseQtVersion(QString strg, uint defaultValue); bool checkQtVersion(QDomNamedNodeMap& attributes); - void parseTypeSystem(const QDomElement &typeSystemElement); + void parseTypeSystem(const QDomElement &typeSystemElement, const QString& fileName); void parseLoadTypeSystem(const QDomElement &element); void parseSuppressedWarning(const QDomElement &element); void parseInjectCode(const QDomElement &element, ComplexTypeEntry* entry); @@ -92,7 +92,7 @@ class Handler { void parseInjectCode(const QDomElement &element,const QHash& languageNames, const QHash& positionNames, const std::function& appendCodeSnip, bool argumentMapAllowed = false, bool allowPackage = false); - void parseConversionRule(const QDomElement &element, const std::function& appendCodeSnip); + void parseConversionRule(const QHash& languageNames, const QDomElement &element, const std::function& appendCodeSnip); void parseImportFile(const QDomElement &element, const std::function& consumeCode); void parseInsertTemplate(const QDomElement &element, const std::function& consumeTemplateInstance); void parseExtraIncludes(const QDomElement &element, TypeEntry* entry); @@ -112,8 +112,9 @@ class Handler { void parseTypeAliasType(const QDomElement &element); void parseInterfaceType(const QDomElement &element); void parseNamespaceType(const QDomElement &element); - void parseModifyArgument(const QDomElement &element, FunctionModification& mod); - void parseModifyFunction(const QDomElement &element, ComplexTypeEntry* entry); + void parseModifyArgument(const QDomElement &element, AbstractFunctionModification& mod); + void parseModifyFunction(const QDomElement &element, TypeEntry* entry); + TemplateInstantiation parseInstantiation(const QDomElement &element); void parseModifyField(const QDomElement &element, ComplexTypeEntry* entry); void parseEnumType(const QDomElement &element); CustomFunction parseCustomStructor(const QDomElement &element); diff --git a/generator/typesystem/java/typesystem_concurrent-java.java b/generator/typesystem/java/typesystem_concurrent-java.java index 1ee67d54..8586d7db 100644 --- a/generator/typesystem/java/typesystem_concurrent-java.java +++ b/generator/typesystem/java/typesystem_concurrent-java.java @@ -35,181 +35,23 @@ ** ****************************************************************************/ -/** -The QtConcurrent class contains static methods for running computations in parallel (using separate threads) -on the items in a java.util.Collection, such as a Vector or LinkedList. We will now describe these methods. - -The QtConcurrent::map(), QtConcurrent::mapped() and QtConcurrent::mappedReduced() functions run computations in parallel on the items in a sequence such as a QList or a QVector. QtConcurrent::map() modifies a sequence in-place, QtConcurrent::mapped() returns a new sequence containing the modified content, and QtConcurrent::mappedReduced() returns a single result. -Concurrent Map -

-QtConcurrent::mapped() takes an input sequence and a map function. This map function is then called for each item in the sequence, and a new sequence containing the return values from the map function is returned. -

-The map function must be of the form: -

-     U function(const T &t);
-
-T and U can be any type (and they can even be the same type), but T must match the type stored in the sequence. The function returns the modified or mapped content. -

-This example shows how to apply a scale function to all the items in a sequence: -

-     QImage scaled(const QImage &image)
-     {
-         return image.scaled(100, 100);
-     }
-
-     QList <QImage> images = ...;
-     QFuture<QImage> thumbnails = QtConcurrent::mapped(images, scaled);
-
-The results of the map are made available through QFuture. See the QFuture and QFutureWatcher documentation for more information on how to use QFuture in your applications. -

-If you want to modify a sequence in-place, use QtConcurrent::map(). The map function must then be of the form: -

-     U function(T &t);
-
-Note that the return value and return type of the map function are not used. -

-Using QtConcurrent::map() is similar to using QtConcurrent::mapped(): -

-     void scale(QImage &image)
-     {
-         image = image.scaled(100, 100);
-     }
-
-     QList<QImage> images = ...;
-     QFuture<void> future = QtConcurrent::map(images, scale);
-
-Since the sequence is modified in place, QtConcurrent::map() does not return any results via QFuture. However, you can still use QFuture and QFutureWatcher to monitor the status of the map. -Concurrent Map-Reduce -

-QtConcurrent::mappedReduced() is similar to QtConcurrent::mapped(), but instead of returning a sequence with the new results, the results are combined into a single value using a reduce function. -

-The reduce function must be of the form: -

-     V function(T &result, const U &intermediate)
-
-T is the type of the final result, U is the return type of the map function. Note that the return value and return type of the reduce function are not used. -

-Call QtConcurrent::mappedReduced() like this: -

-     void addToCollage(QImage &collage, const QImage &thumbnail)
-     {
-         QPainter p(&collage);
-         static QPoint offset = QPoint(0, 0);
-         p.drawImage(offset, thumbnail);
-         offset += ...;
-     }
-
-     QList<QImage> images = ...;
-     QFuture<QImage> collage = QtConcurrent::mappedReduced(images, scaled, addToCollage);
-
-The reduce function will be called once for each result returned by the map function, and should merge the intermediate into the result variable. QtConcurrent::mappedReduced() guarantees that only one thread will call reduce at a time, so using a mutex to lock the result variable is not neccesary. The QtConcurrent::ReduceOptions enum provides a way to control the order in which the reduction is done. If QtConcurrent::UnorderedReduce is used (the default), the order is undefined, while QtConcurrent::OrderedReduce ensures that the reduction is done in the order of the original sequence. -Additional API Features -Using Iterators instead of Sequence -

-Each of the above functions has a variant that takes an iterator range instead of a sequence. You use them in the same way as the sequence variants: -

-     QList<QImage> images = ...;
-
-     QFuture<QImage> thumbnails = QtConcurrent::mapped(images.constBegin(), images.constEnd(), scaled);
-
-     // map in-place only works on non-const iterators
-     QFuture<void> future = QtConcurrent::map(images.begin(), images.end(), scale);
-
-     QFuture<QImage> collage = QtConcurrent::mappedReduced(images.constBegin(), images.constEnd(), scaled, addToCollage);
-
-Blocking Variants -

-Each of the above functions has a blocking variant that returns the final result instead of a QFuture. You use them in the same way as the asynchronous variants. -

-     QList<QImage> images = ...;
-
-     // each call blocks until the entire operation is finished
-     QList<QImage> future = QtConcurrent::blockingMapped(images, scaled);
-
-     QtConcurrent::blockingMap(images, scale);
-
-     QImage collage = QtConcurrent::blockingMappedReduced(images, scaled, addToCollage);
-
-Note that the result types above are not QFuture objects, but real result types (in this case, QList<QImage> and QImage). -Using Member Functions -

-QtConcurrent::map(), QtConcurrent::mapped(), and QtConcurrent::mappedReduced() accept pointers to member functions. The member function class type must match the type stored in the sequence: -

-     // squeeze all strings in a QStringList
-     QStringList strings = ...;
-     QFuture<void> squeezedStrings = QtConcurrent::map(strings, &QString::squeeze);
-
-     // swap the rgb values of all pixels on a list of images
-     QList<QImage> images = ...;
-     QFuture<QImage> bgrImages = QtConcurrent::mapped(images, &QImage::rgbSwapped);
-
-     // create a set of the lengths of all strings in a list
-     QStringList strings = ...;
-     QFuture<QSet<int> > wordLengths = QtConcurrent::mappedReduced(string, &QString::length, &QSet<int>::insert);
-
-Note that when using QtConcurrent::mappedReduced(), you can mix the use of normal and member functions freely: -

-

-     // can mix normal functions and member functions with QtConcurrent::mappedReduced()
-
-     // compute the average length of a list of strings
-     extern void computeAverage(int &average, int length);
-     QStringList strings = ...;
-     QFuture<int> averageWordLength = QtConcurrent::mappedReduced(strings, &QString::length, computeAverage);
-
-     // create a set of the color distribution of all images in a list
-     extern int colorDistribution(const QImage &string);
-     QList<QImage> images = ...;
-     QFuture<QSet<int> > totalColorDistribution = QtConcurrent::mappedReduced(images, colorDistribution, QSet<int>::insert);
-
-Using Function Objects -

-QtConcurrent::map(), QtConcurrent::mapped(), and QtConcurrent::mappedReduced() accept function objects, which can be used to add state to a function call. The result_type typedef must define the result type of the function call operator: -

-     struct Scaled
-     {
-         Scaled(int size)
-         : m_size(size) { }
-
-         typedef QImage result_type;
-
-         QImage operator()(const QImage &image)
-         {
-             return image.scaled(m_size, m_size);
-         }
-
-         int m_size;
-     };
-
-     QList<QImage> images = ...;
-     QFuture<QImage> thumbnails = QtConcurrent::mapped(images, Scaled(100));
-
-Using Bound Function Arguments -

-Note that Qt does not provide support for bound functions. This is provided by 3rd party libraries like Boost or C++ TR1 Library Extensions. -

-If you want to use a map function that takes more than one argument you can use boost::bind() or std::tr1::bind() to transform it onto a function that takes one argument. -

-As an example, we'll use QImage::scaledToWidth(): -

-     QImage QImage::scaledToWidth(int width, Qt::TransformationMode) const;
-
-scaledToWidth takes three arguments (including the "this" pointer) and can't be used with QtConcurrent::mapped() directly, because QtConcurrent::mapped() expects a function that takes one argument. To use QImage::scaledToWidth() with QtConcurrent::mapped() we have to provide a value for the width and the transformation mode: -
-     boost::bind(&QImage::scaledToWidth, 100 Qt::SmoothTransformation)
-
-The return value from boost::bind() is a function object (functor) with the following signature: -
-     QImage scaledToWith(const QImage &image)
-
-This matches what QtConcurrent::mapped() expects, and the complete example becomes: -
-     QList>QImage< images = ...;
-     QFuture>QImage< thumbnails = QtConcurrent::mapped(images, boost::bind(&QImage::scaledToWidth, 100 Qt::SmoothTransformation));
-
-*/ class QtConcurrent___ extends QtConcurrent { + public static final class ThreadEngineStarter extends io.qt.QtObject{ + private ThreadEngineStarter(QPrivateConstructor p){ + super(p); + } + + public final QFuture startAsynchronously(){ + QFuture result = startAsynchronously(QtJambi_LibraryUtilities.internal.nativeId(this)); + dispose(); + return result; + } + + @io.qt.QtUninvokable + private static native final QFuture startAsynchronously(long nativeId); + } + /** * An implemetation of this interface is given one to QtConcurrent's map() methods. * The map() method of this interface is called for each object in a java.util.Collection. @@ -224,29 +66,6 @@ public interface MapFunctor { @io.qt.NativeAccess public void map(T object); } - /** - * Calls function once for each item in sequence. The function is passed a reference to the item, so that any modifications done to the item will appear in sequence. - */ - @io.qt.QtUninvokable - public static QFuture map(java.util.Collection sequence, MapFunctor functor){ - java.util.Objects.requireNonNull(sequence); - return _map(null, sequence, java.util.Objects.requireNonNull(functor)); - } - - @io.qt.QtUninvokable - private static native QFuture _map(QThreadPool threadPool, java.util.Collection sequence, MapFunctor functor); - - /** - * Calls function once for each item in sequence. The function is passed a reference to the item, so that any modifications done to the item will appear in sequence. - */ - @io.qt.QtUninvokable - public static void blockingMap(java.util.Collection sequence, MapFunctor functor){ - java.util.Objects.requireNonNull(sequence); - _blockingMap(null, sequence, java.util.Objects.requireNonNull(functor)); - } - - @io.qt.QtUninvokable - private static native void _blockingMap(QThreadPool threadPool, java.util.Collection sequence, MapFunctor functor); /** * Implement this interface to perform a mapped operation. An implementation of the interface is sendt @@ -265,30 +84,19 @@ public interface MappedFunctor { } /** - * Calls function once for each item in sequence and returns a future with each mapped item as a result. You can QFutureIterator to iterate through the results. + * An implementation of this interface is given to one of QtConcurrent's filtered() methods. + * The filter method if this interface is called for each item in a java.util.Collection. * */ - @io.qt.QtUninvokable - public static QFuture mapped(java.util.Collection sequence, MappedFunctor functor){ - java.util.Objects.requireNonNull(sequence); - return _mapped(null, sequence, java.util.Objects.requireNonNull(functor)); - } - - @io.qt.QtUninvokable - private static native QFuture _mapped(QThreadPool threadPool, java.util.Collection sequence, MappedFunctor functor); + public interface FilteredFunctor { - /** - * Calls function once for each item in sequence and returns a future with each mapped item as a result. You can QFutureIterator to iterate through the results. - */ - @io.qt.QtUninvokable - public static java.util.List blockingMapped(java.util.Collection sequence, MappedFunctor functor){ - java.util.Objects.requireNonNull(sequence); - return _blockingMapped(null, sequence, java.util.Objects.requireNonNull(functor)); + /** + * This method is called for each item in a java.util.Collection. The items for which + * this method returns true are removed from the collection. + */ + public boolean filter(T object); } - @io.qt.QtUninvokable - private static native java.util.List _blockingMapped(QThreadPool threadPool, java.util.Collection sequence, MappedFunctor functor); - /** * Implement this interface in order to perform a reduce operation. *

@@ -297,247 +105,245 @@ public static java.util.List blockingMapped(java.util.Collection se * the returned value of the defaultResult() method. */ @FunctionalInterface - public interface ReducedFunctor { - @io.qt.NativeAccess - public default U defaultResult() { return null; } - + public interface ReduceFunctor extends java.io.Serializable{ /** - * Performs a reduce operation on intermediate. result is the result of the reduction. + * Performs a reduce operation on intermediate. + * Returns the result of the reduction. */ @io.qt.NativeAccess - public void reduce(U result, T intermediate); + public U reduce(U result, T intermediate); } - /** - * This is an overloaded method provided for convenience. - *

- * It is equivalent of mappedReduced(sequence, functor, reducedFunctor, ReduceOption.UnorderedReduce, ReduceOption.SequentialReduce) - */ + @SuppressWarnings("unchecked") @io.qt.QtUninvokable - public static QFuture mappedReduced(java.util.Collection sequence, MappedFunctor functor, ReducedFunctor reducedFunctor) { - return mappedReduced(sequence, functor, reducedFunctor, ReduceOption.UnorderedReduce, ReduceOption.SequentialReduce); + private static U computeDefaultResult(ReduceFunctor functor) { + int[] types = QtJambi_LibraryUtilities.internal.lambdaMetaTypes(ReduceFunctor.class, functor); + if(types!=null && types.length>0) { + return (U)new QMetaType(types[0]).create(); + } + return null; } - /** - * This is an overloaded method provided for convenience. - *

- * Note that while mapFunction is called concurrently, only one thread at a time will call reduceFunction. The order in which reduceFunction is called is determined by reduceOptions. - * + *

See QtConcurrent::map(Sequence, MapFunctor)

*/ @io.qt.QtUninvokable - public static QFuture mappedReduced(java.util.Collection sequence, MappedFunctor functor, ReducedFunctor reducedFunctor, ReduceOption ... options) { - return mappedReduced(sequence, functor, reducedFunctor, new ReduceOptions(options)); + public static QFuture map(Collection sequence, MapFunctor functor){ + return startMap(0, Objects.requireNonNull(sequence), Objects.requireNonNull(functor)).startAsynchronously(); } /** - * Calls mapFunction once for each item in sequence. The return value of each mapFunction is passed to reduceFunction. - *

- * Note that while mapFunction is called concurrently, only one thread at a time will call reduceFunction. The order in which reduceFunction is called is determined by reduceOptions. - * + *

See QtConcurrent::blockingMap(Sequence, MapFunctor)

*/ @io.qt.QtUninvokable - public static QFuture mappedReduced(java.util.Collection sequence, MappedFunctor functor, ReducedFunctor reducedFunctor, ReduceOptions options) { - java.util.Objects.requireNonNull(sequence); - return _mappedReduced(null, sequence, java.util.Objects.requireNonNull(functor), java.util.Objects.requireNonNull(reducedFunctor), options.value()); + public static void blockingMap(Collection sequence, MapFunctor functor){ + QFuture future = map(sequence, functor); + future.waitForFinished(); } + /** + *

See QtConcurrent::mapped(Sequence, MappedFunctor)

+ */ @io.qt.QtUninvokable - private native static QFuture _mappedReduced(QThreadPool threadPool, java.util.Collection sequence, MappedFunctor functor, ReducedFunctor reducedFunctor, int options); - + public static QFuture mapped(Collection sequence, MappedFunctor functor){ + return startMapped(0, Objects.requireNonNull(sequence), Objects.requireNonNull(functor)).startAsynchronously(); + } /** - * This is an overloaded method provided for convenience. - *

- * It is equivalent of calling blockingMappedReduced(sequence, functor, reducedFunctor, ReduceOption.UnorderedReduce, ReduceOption.SequentialReduce) - * + *

See QtConcurrent::blockingMapped(Sequence, MappedFunctor)

*/ @io.qt.QtUninvokable - public static U blockingMappedReduced(java.util.Collection sequence, MappedFunctor functor, ReducedFunctor reducedFunctor) { - return blockingMappedReduced(sequence, functor, reducedFunctor, ReduceOption.UnorderedReduce, ReduceOption.SequentialReduce); + public static QList blockingMapped(Collection sequence, MappedFunctor functor){ + QFuture future = mapped(sequence, functor); + return future.results(); } /** - * Calls mapFunction once for each item in sequence. The return value of each mapFunction is passed to reduceFunction. - *

- * Note that while mapFunction is called concurrently, only one thread at a time will call reduceFunction. The order in which reduceFunction is called is determined by reduceOptions. - *

- * Note: This function will block until all items in the sequence have been processed. + *

See QtConcurrent::mappedReduced(Sequence, MappedFunctor, ReduceFunctor, QtConcurrent::ReduceOptions)

*/ @io.qt.QtUninvokable - public static U blockingMappedReduced(java.util.Collection sequence, MappedFunctor functor, ReducedFunctor reducedFunctor, ReduceOption ... options) { - return blockingMappedReduced(sequence, functor, reducedFunctor, new ReduceOptions(options)); + public static QFuture mappedReduced(Collection sequence, MappedFunctor functor, ReduceFunctor reduceFunctor) { + return mappedReduced(sequence, functor, reduceFunctor, ReduceOption.UnorderedReduce, ReduceOption.SequentialReduce); } /** - * Calls mapFunction once for each item in sequence. The return value of each mapFunction is passed to reduceFunction. - *

- * Note that while mapFunction is called concurrently, only one thread at a time will call reduceFunction. The order in which reduceFunction is called is determined by reduceOptions. - *

- * Note: This function will block until all items in the sequence have been processed. + *

See QtConcurrent::mappedReduced(Sequence, MappedFunctor, ReduceFunctor, QtConcurrent::ReduceOptions)

*/ @io.qt.QtUninvokable - public static U blockingMappedReduced(java.util.Collection sequence, MappedFunctor functor, ReducedFunctor reducedFunctor, ReduceOptions options) { - return _blockingMappedReduced(null, java.util.Objects.requireNonNull(sequence), java.util.Objects.requireNonNull(functor), java.util.Objects.requireNonNull(reducedFunctor), options.value()); + public static QFuture mappedReduced(Collection sequence, MappedFunctor functor, ReduceFunctor reduceFunctor, ReduceOption ... options) { + return mappedReduced(sequence, functor, reduceFunctor, new ReduceOptions(options)); } + /** + *

See QtConcurrent::mappedReduced(Sequence, MappedFunctor, ReduceFunctor, QtConcurrent::ReduceOptions)

+ */ @io.qt.QtUninvokable - private native static U _blockingMappedReduced(QThreadPool threadPool, java.util.Collection sequence, MappedFunctor functor, ReducedFunctor reducedFunctor, int options); + public static QFuture mappedReduced(Collection sequence, MappedFunctor functor, ReduceFunctor reduceFunctor, ReduceOptions options) { + return startMappedReduced(0, Objects.requireNonNull(sequence), Objects.requireNonNull(functor), Objects.requireNonNull(reduceFunctor), computeDefaultResult(reduceFunctor), options.value()).startAsynchronously(); + } /** - * An implementation of this interface is given to one of QtConcurrent's filtered() methods. - * The filter method if this interface is called for each item in a java.util.Collection. - * + *

See QtConcurrent::blockingMappedReduced(Sequence, MappedFunctor, ReduceFunctor, QtConcurrent::ReduceOptions)

*/ - public interface FilteredFunctor { - - /** - * This method is called for each item in a java.util.Collection. The items for which - * this method returns true are removed from the collection. - */ - public boolean filter(T object); + @io.qt.QtUninvokable + public static U blockingMappedReduced(Collection sequence, MappedFunctor functor, ReduceFunctor reduceFunctor) { + QFuture future = mappedReduced(sequence, functor, reduceFunctor); + return future.result(); } /** - * Calls filterFunctor's filter() method once for each item in sequence and returns a new Sequence of kept items. If filterFunction returns true, a copy of the item is put in the new Sequence. Otherwise, the item will not appear in the new Sequence. + *

See QtConcurrent::blockingMappedReduced(Sequence, MappedFunctor, ReduceFunctor, QtConcurrent::ReduceOptions)

*/ @io.qt.QtUninvokable - public static QFuture filter(java.util.Collection sequence, FilteredFunctor filteredFunctor){ - return _filter(null, java.util.Objects.requireNonNull(sequence), filteredFunctor); + public static U blockingMappedReduced(Collection sequence, MappedFunctor functor, ReduceFunctor reduceFunctor, ReduceOption ... options) { + QFuture future = mappedReduced(sequence, functor, reduceFunctor, options); + return future.result(); } - @io.qt.QtUninvokable - private native static QFuture _filter(QThreadPool threadPool, java.util.Collection sequence, FilteredFunctor filteredFunctor); - /** - * Calls filterFunctor's filter() method once for each item in sequence and returns a new Sequence of kept items. If filterFunction returns true, a copy of the item is put in the new Sequence. Otherwise, the item will not appear in the new Sequence. + *

See QtConcurrent::blockingMappedReduced(Sequence, MappedFunctor, ReduceFunctor, QtConcurrent::ReduceOptions)

*/ @io.qt.QtUninvokable - public static QFuture filtered(java.util.Collection sequence, FilteredFunctor filteredFunctor){ - return _filtered(null, java.util.Objects.requireNonNull(sequence), java.util.Objects.requireNonNull(filteredFunctor)); + public static U blockingMappedReduced(Collection sequence, MappedFunctor functor, ReduceFunctor reduceFunctor, ReduceOptions options) { + QFuture future = mappedReduced(sequence, functor, reduceFunctor, options); + return future.result(); } - @io.qt.QtUninvokable - private native static QFuture _filtered(QThreadPool threadPool, java.util.Collection sequence, FilteredFunctor filteredFunctor); - /** - * Calls filterFunctor's filter() method once for each item in sequence and returns a new Sequence of kept items. If filterFunction returns true, a copy of the item is put in the new Sequence. Otherwise, the item will not appear in the new Sequence. + *

See QtConcurrent::filter(Sequence, FilteredFunctor)

*/ @io.qt.QtUninvokable - public static java.util.List blockingFiltered(java.util.Collection sequence, FilteredFunctor filteredFunctor){ - return _blockingFiltered(null, java.util.Objects.requireNonNull(sequence), java.util.Objects.requireNonNull(filteredFunctor)); + public static QFuture filter(Collection sequence, FilteredFunctor filteredFunctor){ + return filter(0, Objects.requireNonNull(sequence), Objects.requireNonNull(filteredFunctor)); } + /** + *

See QtConcurrent::blockingFilter(Sequence, FilteredFunctor)

+ */ @io.qt.QtUninvokable - private native static java.util.List _blockingFiltered(QThreadPool threadPool, java.util.Collection sequence, FilteredFunctor filteredFunctor); + public static void blockingFilter(Collection sequence, FilteredFunctor filteredFunctor){ + QFuture future = filter(sequence, filteredFunctor); + future.waitForFinished(); + } /** - * Calls filterFunction once for each item in sequence. If filterFunction returns true, the item is kept in sequence; otherwise, the item is removed from sequence. - * Note: This function will block until all items in the sequence have been processed. + *

See QtConcurrent::filtered(Sequence, FilteredFunctor)

*/ @io.qt.QtUninvokable - public static void blockingFilter(java.util.Collection sequence, FilteredFunctor filteredFunctor){ - _blockingFilter(null, java.util.Objects.requireNonNull(sequence), java.util.Objects.requireNonNull(filteredFunctor)); + public static QFuture filtered(Collection sequence, FilteredFunctor filteredFunctor){ + return startFiltered(0, Objects.requireNonNull(sequence), Objects.requireNonNull(filteredFunctor)).startAsynchronously(); } + /** + *

See QtConcurrent::blockingFiltered(Sequence, FilteredFunctor)

+ */ @io.qt.QtUninvokable - private native static void _blockingFilter(QThreadPool threadPool, java.util.Collection sequence, FilteredFunctor filteredFunctor); - + public static QList blockingFiltered(Collection sequence, FilteredFunctor filteredFunctor){ + QFuture future = filtered(sequence, filteredFunctor); + return future.results(); + } + /** - * This is an overloaded method provided for convenience. It is equivalent of calling filteredReduced(sequence, filteredFunctor, ReduceOption.UnorderedReduce, ReduceOption.Seq This is an overloaded method provided for convenience. It is equivalent of calling filteredReduced) + *

See QtConcurrent::filteredReduced(Sequence, FilteredFunctor, ReduceFunctor, QtConcurrent::ReduceOptions)

*/ @io.qt.QtUninvokable - public static QFuture filteredReduced(java.util.Collection sequence, FilteredFunctor filteredFunctor, ReducedFunctor reducedFunctor) { - return filteredReduced(sequence, filteredFunctor, reducedFunctor, ReduceOption.UnorderedReduce, ReduceOption.SequentialReduce); + public static QFuture filteredReduced(Collection sequence, FilteredFunctor filteredFunctor, ReduceFunctor reduceFunctor) { + return filteredReduced(sequence, filteredFunctor, reduceFunctor, ReduceOption.UnorderedReduce, ReduceOption.SequentialReduce); } /** - * Calls filterFunction once for each item in sequence. If filterFunction returns true for an item, that item is then passed to reduceFunction. In other words, the return value is the result of reduceFunction for each item where filterFunction returns true. - *

- * Note that while filterFunction is called concurrently, only one thread at a time will call reduceFunction. The order in which reduceFunction is called is undefined if reduceOptions is QtConcurrent::UnorderedReduce. If reduceOptions is QtConcurrent::OrderedReduce, reduceFunction is called in the order of the original sequence. + *

See QtConcurrent::filteredReduced(Sequence, FilteredFunctor, ReduceFunctor, QtConcurrent::ReduceOptions)

*/ @io.qt.QtUninvokable - public static QFuture filteredReduced(java.util.Collection sequence, FilteredFunctor filteredFunctor, ReducedFunctor reducedFunctor, ReduceOption ... options) { - return filteredReduced(sequence, filteredFunctor, reducedFunctor, new ReduceOptions(options)); + public static QFuture filteredReduced(Collection sequence, FilteredFunctor filteredFunctor, ReduceFunctor reduceFunctor, ReduceOption ... options) { + return filteredReduced(sequence, filteredFunctor, reduceFunctor, new ReduceOptions(options)); } /** - * Calls filterFunction once for each item in sequence. If filterFunction returns true for an item, that item is then passed to reduceFunction. In other words, the return value is the result of reduceFunction for each item where filterFunction returns true. - *

- * Note that while filterFunction is called concurrently, only one thread at a time will call reduceFunction. The order in which reduceFunction is called is undefined if reduceOptions is QtConcurrent::UnorderedReduce. If reduceOptions is QtConcurrent::OrderedReduce, reduceFunction is called in the order of the original sequence. + *

See QtConcurrent::filteredReduced(Sequence, FilteredFunctor, ReduceFunctor, QtConcurrent::ReduceOptions)

*/ @io.qt.QtUninvokable - public static QFuture filteredReduced(java.util.Collection sequence, FilteredFunctor filteredFunctor, ReducedFunctor reducedFunctor, ReduceOptions options) { - return _filteredReduced(null, java.util.Objects.requireNonNull(sequence), java.util.Objects.requireNonNull(filteredFunctor), java.util.Objects.requireNonNull(reducedFunctor), options.value()); + public static QFuture filteredReduced(Collection sequence, FilteredFunctor filteredFunctor, ReduceFunctor reduceFunctor, ReduceOptions options) { + return startFilteredReduced(0, Objects.requireNonNull(sequence), Objects.requireNonNull(filteredFunctor), Objects.requireNonNull(reduceFunctor), computeDefaultResult(reduceFunctor), options.value()).startAsynchronously(); } - @io.qt.QtUninvokable - private native static QFuture _filteredReduced(QThreadPool threadPool, java.util.Collection sequence, FilteredFunctor filteredFunctor, ReducedFunctor reducedFunctor, int options); /** - * This is an overloaded method provided for convenience. It is the equivalent of calling blockingFilteredReduced(sequence, filteredFunctor, reducedFunctor, ReduceOption.UnorderedReduce, ReduceOption.SequentialReduce) + *

See QtConcurrent::blockingFilteredReduced(Sequence, FilteredFunctor, ReduceFunctor, QtConcurrent::ReduceOptions)

*/ @io.qt.QtUninvokable - public static U blockingFilteredReduced(java.util.Collection sequence, FilteredFunctor filteredFunctor, ReducedFunctor reducedFunctor) { - return blockingFilteredReduced(sequence, filteredFunctor, reducedFunctor, ReduceOption.UnorderedReduce, ReduceOption.SequentialReduce); + public static U blockingFilteredReduced(Collection sequence, FilteredFunctor filteredFunctor, ReduceFunctor reduceFunctor) { + QFuture future = filteredReduced(sequence, filteredFunctor, reduceFunctor); + return future.result(); } /** - * Calls filterFunction once for each item in sequence. If filterFunction returns true for an item, that item is then passed to reduceFunction. In other words, the return value is the result of reduceFunction for each item where filterFunction returns true. - *

- * Note that while filterFunction is called concurrently, only one thread at a time will call reduceFunction. The order in which reduceFunction is called is undefined if reduceOptions is QtConcurrent::UnorderedReduce. If reduceOptions is QtConcurrent::OrderedReduce, reduceFunction is called in the order of the original sequence. + *

See QtConcurrent::blockingFilteredReduced(Sequence, FilteredFunctor, ReduceFunctor, QtConcurrent::ReduceOptions)

*/ @io.qt.QtUninvokable - public static U blockingFilteredReduced(java.util.Collection sequence, FilteredFunctor filteredFunctor, ReducedFunctor reducedFunctor, ReduceOption ... options) { - return blockingFilteredReduced(sequence, filteredFunctor, reducedFunctor, new ReduceOptions(options)); + public static U blockingFilteredReduced(Collection sequence, FilteredFunctor filteredFunctor, ReduceFunctor reduceFunctor, ReduceOption ... options) { + QFuture future = filteredReduced(sequence, filteredFunctor, reduceFunctor, options); + return future.result(); } /** - * Calls filterFunction once for each item in sequence. If filterFunction returns true for an item, that item is then passed to reduceFunction. In other words, the return value is the result of reduceFunction for each item where filterFunction returns true. - *

- * Note that while filterFunction is called concurrently, only one thread at a time will call reduceFunction. The order in which reduceFunction is called is undefined if reduceOptions is QtConcurrent::UnorderedReduce. If reduceOptions is QtConcurrent::OrderedReduce, reduceFunction is called in the order of the original sequence. + *

See QtConcurrent::blockingFilteredReduced(Sequence, FilteredFunctor, ReduceFunctor, QtConcurrent::ReduceOptions)

*/ @io.qt.QtUninvokable - public static U blockingFilteredReduced(java.util.Collection sequence, FilteredFunctor filteredFunctor, ReducedFunctor reducedFunctor, ReduceOptions options) { - return _blockingFilteredReduced(null, java.util.Objects.requireNonNull(sequence), java.util.Objects.requireNonNull(filteredFunctor), java.util.Objects.requireNonNull(reducedFunctor), options.value()); + public static U blockingFilteredReduced(Collection sequence, FilteredFunctor filteredFunctor, ReduceFunctor reduceFunctor, ReduceOptions options) { + QFuture future = filteredReduced(sequence, filteredFunctor, reduceFunctor, options); + return future.result(); } @io.qt.QtUninvokable - private native static U _blockingFilteredReduced(QThreadPool threadPool, java.util.Collection sequence, FilteredFunctor filteredFunctor, ReducedFunctor reducedFunctor, int options); + private native static QFuture filter(long threadPool, Collection sequence, FilteredFunctor filteredFunctor); + + @io.qt.QtUninvokable + private native static ThreadEngineStarter startMap(long threadPool, Collection sequence, MapFunctor functor); + + @io.qt.QtUninvokable + private native static ThreadEngineStarter startMapped(long threadPool, Collection sequence, MappedFunctor functor); + + @io.qt.QtUninvokable + private native static ThreadEngineStarter startMappedReduced(long threadPool, Collection sequence, MappedFunctor functor, ReduceFunctor reduceFunctor, U initialValue, int options); + + @io.qt.QtUninvokable + private native static ThreadEngineStarter startFilteredReduced(long threadPool, Collection sequence, FilteredFunctor filteredFunctor, ReduceFunctor reduceFunctor, U initialValue, int options); + + @io.qt.QtUninvokable + private native static ThreadEngineStarter startFiltered(long threadPool, Collection sequence, FilteredFunctor filteredFunctor); /** - * Executes the Callable callable through the QtConcurrent framework. The returned QFuture object's result will be the - * return value of callable. + *

See QtConcurrent::run(Function, ...)

*/ @io.qt.QtUninvokable - public static QFuture run(java.util.concurrent.Callable callable){ - return run0(null, java.util.Objects.requireNonNull(callable)); + public static QFuture run(Callable callable){ + return run0(null, Objects.requireNonNull(callable)); } /** - * Executes the Callable callable through the QtConcurrent framework. The thread is taken from the QThreadPool pool. - * The returned QFuture object's result will be the return value of callable. + *

See QtConcurrent::run(QThreadPool*, Function, ...)

*/ @io.qt.QtUninvokable - public static QFuture run(QThreadPool threadPool, java.util.concurrent.Callable callable){ - return run0(threadPool, java.util.Objects.requireNonNull(callable)); + public static QFuture run(QThreadPool threadPool, Callable callable){ + return run0(threadPool, Objects.requireNonNull(callable)); } @io.qt.QtUninvokable - private native static QFuture run0(QThreadPool threadPool, java.util.concurrent.Callable callable); + private native static QFuture run0(QThreadPool threadPool, Callable callable); /** - * Executes the Runnable Void using the QtConcurrent framework. + *

See QtConcurrent::run(Function, ...)

*/ @io.qt.QtUninvokable public static QFuture run(Runnable runnable) { - return runVoid0(null, java.util.Objects.requireNonNull(runnable)); + return runVoid0(null, Objects.requireNonNull(runnable)); } /** - * Executes the Runnable Void using the QtConcurrent framework. The thread is taken from the QThreadPool pool. + *

See QtConcurrent::run(QThreadPool*, Function, ...)

*/ @io.qt.QtUninvokable public static QFuture run(QThreadPool threadPool, Runnable runnable) { - return runVoid0(threadPool, java.util.Objects.requireNonNull(runnable)); + return runVoid0(threadPool, Objects.requireNonNull(runnable)); } @io.qt.QtUninvokable private native static QFuture runVoid0(QThreadPool threadPool, Runnable runnable); @@ -568,72 +374,77 @@ public interface Runnable5{ } /** - * Executes the Runnable using the QtConcurrent framework. + *

See QtConcurrent::run(Function, ...)

*/ public static QFuture run(Runnable1 runnable, A a) { return runVoid1(null, runnable, a); } + /** - * Executes the Runnable using the QtConcurrent framework. The thread is taken from the QThreadPool pool. + *

See QtConcurrent::run(QThreadPool*, Function, ...)

*/ public static QFuture run(QThreadPool threadPool, Runnable1 runnable, A a) { - return runVoid1(threadPool, java.util.Objects.requireNonNull(runnable), a); + return runVoid1(threadPool, Objects.requireNonNull(runnable), a); } private native static QFuture runVoid1(QThreadPool threadPool, Runnable1 runnable, A a); /** - * Executes the Runnable using the QtConcurrent framework. + *

See QtConcurrent::run(Function, ...)

*/ public static QFuture run(Runnable2 runnable, A a, B b) { - return runVoid2(null, java.util.Objects.requireNonNull(runnable), a, b); + return runVoid2(null, Objects.requireNonNull(runnable), a, b); } + /** - * Executes the Runnable using the QtConcurrent framework. The thread is taken from the QThreadPool pool. + *

See QtConcurrent::run(QThreadPool*, Function, ...)

*/ public static QFuture run(QThreadPool threadPool, Runnable2 runnable, A a, B b) { - return runVoid2(threadPool, java.util.Objects.requireNonNull(runnable), a, b); + return runVoid2(threadPool, Objects.requireNonNull(runnable), a, b); } private native static QFuture runVoid2(QThreadPool threadPool, Runnable2 runnable, A a, B b); /** - * Executes the Runnable using the QtConcurrent framework. + *

See QtConcurrent::run(Function, ...)

*/ public static QFuture run(Runnable3 runnable, A a, B b, C c) { - return runVoid3(null, java.util.Objects.requireNonNull(runnable), a, b, c); + return runVoid3(null, Objects.requireNonNull(runnable), a, b, c); } + /** - * Executes the Runnable using the QtConcurrent framework. The thread is taken from the QThreadPool pool. + *

See QtConcurrent::run(QThreadPool*, Function, ...)

*/ public static QFuture run(QThreadPool threadPool, Runnable3 runnable, A a, B b, C c) { - return runVoid3(threadPool, java.util.Objects.requireNonNull(runnable), a, b, c); + return runVoid3(threadPool, Objects.requireNonNull(runnable), a, b, c); } private native static QFuture runVoid3(QThreadPool threadPool, Runnable3 runnable, A a, B b, C c); /** - * Executes the Runnable using the QtConcurrent framework. + *

See QtConcurrent::run(Function, ...)

*/ public static QFuture run(Runnable4 runnable, A a, B b, C c, D d) { - return runVoid4(null, java.util.Objects.requireNonNull(runnable), a, b, c, d); + return runVoid4(null, Objects.requireNonNull(runnable), a, b, c, d); } + /** - * Executes the Runnable using the QtConcurrent framework. The thread is taken from the QThreadPool pool. + *

See QtConcurrent::run(QThreadPool*, Function, ...)

*/ public static QFuture run(QThreadPool threadPool, Runnable4 runnable, A a, B b, C c, D d) { - return runVoid4(threadPool, java.util.Objects.requireNonNull(runnable), a, b, c, d); + return runVoid4(threadPool, Objects.requireNonNull(runnable), a, b, c, d); } private native static QFuture runVoid4(QThreadPool threadPool, Runnable4 runnable, A a, B b, C c, D d); /** - * Executes the Runnable using the QtConcurrent framework. + *

See QtConcurrent::run(Function, ...)

*/ public static QFuture run(Runnable5 runnable, A a, B b, C c, D d, E e) { - return runVoid5(null, java.util.Objects.requireNonNull(runnable), a, b, c, d, e); + return runVoid5(null, Objects.requireNonNull(runnable), a, b, c, d, e); } + /** - * Executes the Runnable using the QtConcurrent framework. The thread is taken from the QThreadPool pool. + *

See QtConcurrent::run(QThreadPool*, Function, ...)

*/ public static QFuture run(QThreadPool threadPool, Runnable5 runnable, A a, B b, C c, D d, E e) { - return runVoid5(threadPool, java.util.Objects.requireNonNull(runnable), a, b, c, d, e); + return runVoid5(threadPool, Objects.requireNonNull(runnable), a, b, c, d, e); } private native static QFuture runVoid5(QThreadPool threadPool, Runnable5 runnable, A a, B b, C c, D d, E e); @@ -665,77 +476,120 @@ public interface Callable5{ } /** - * Executes the Callable using the QtConcurrent framework. + *

See QtConcurrent::run(Function, ...)

*/ public static QFuture run(Callable1 runnable, A a) { - return run1(null, java.util.Objects.requireNonNull(runnable), a); + return run1(null, Objects.requireNonNull(runnable), a); } + /** - * Executes the Callable using the QtConcurrent framework. The thread is taken from the QThreadPool pool. + *

See QtConcurrent::run(QThreadPool*, Function, ...)

*/ public static QFuture run(QThreadPool threadPool, Callable1 runnable, A a) { - return run1(threadPool, java.util.Objects.requireNonNull(runnable), a); + return run1(threadPool, Objects.requireNonNull(runnable), a); } private native static QFuture run1(QThreadPool threadPool, Callable1 runnable, A a); /** - * Executes the Callable using the QtConcurrent framework. + *

See QtConcurrent::run(Function, ...)

*/ public static QFuture run(Callable2 runnable, A a, B b) { - return run2(null, java.util.Objects.requireNonNull(runnable), a, b); + return run2(null, Objects.requireNonNull(runnable), a, b); } + /** - * Executes the Callable using the QtConcurrent framework. The thread is taken from the QThreadPool pool. + *

See QtConcurrent::run(QThreadPool*, Function, ...)

*/ public static QFuture run(QThreadPool threadPool, Callable2 runnable, A a, B b) { - return run2(threadPool, java.util.Objects.requireNonNull(runnable), a, b); + return run2(threadPool, Objects.requireNonNull(runnable), a, b); } private native static QFuture run2(QThreadPool threadPool, Callable2 runnable, A a, B b); /** - * Executes the Callable using the QtConcurrent framework. + *

See QtConcurrent::run(Function, ...)

*/ public static QFuture run(Callable3 runnable, A a, B b, C c) { - return run3(null, java.util.Objects.requireNonNull(runnable), a, b, c); + return run3(null, Objects.requireNonNull(runnable), a, b, c); } + /** - * Executes the Callable using the QtConcurrent framework. The thread is taken from the QThreadPool pool. + *

See QtConcurrent::run(QThreadPool*, Function, ...)

*/ public static QFuture run(QThreadPool threadPool, Callable3 runnable, A a, B b, C c) { - return run3(threadPool, java.util.Objects.requireNonNull(runnable), a, b, c); + return run3(threadPool, Objects.requireNonNull(runnable), a, b, c); } private native static QFuture run3(QThreadPool threadPool, Callable3 runnable, A a, B b, C c); /** - * Executes the Callable using the QtConcurrent framework. + *

See QtConcurrent::run(Function, ...)

*/ public static QFuture run(Callable4 runnable, A a, B b, C c, D d) { - return run4(null, java.util.Objects.requireNonNull(runnable), a, b, c, d); + return run4(null, Objects.requireNonNull(runnable), a, b, c, d); } + /** - * Executes the Callable using the QtConcurrent framework. The thread is taken from the QThreadPool pool. + *

See QtConcurrent::run(QThreadPool*, Function, ...)

*/ public static QFuture run(QThreadPool threadPool, Callable4 runnable, A a, B b, C c, D d) { - return run4(threadPool, java.util.Objects.requireNonNull(runnable), a, b, c, d); + return run4(threadPool, Objects.requireNonNull(runnable), a, b, c, d); } private native static QFuture run4(QThreadPool threadPool, Callable4 runnable, A a, B b, C c, D d); /** - * Executes the Callable using the QtConcurrent framework. + *

See QtConcurrent::run(Function, ...)

*/ public static QFuture run(Callable5 runnable, A a, B b, C c, D d, E e) { - return run5(null, java.util.Objects.requireNonNull(runnable), a, b, c, d, e); + return run5(null, Objects.requireNonNull(runnable), a, b, c, d, e); } + /** - * Executes the Callable using the QtConcurrent framework. The thread is taken from the QThreadPool pool. + *

See QtConcurrent::run(QThreadPool*, Function, ...)

*/ public static QFuture run(QThreadPool threadPool, Callable5 runnable, A a, B b, C c, D d, E e) { - return run5(threadPool, java.util.Objects.requireNonNull(runnable), a, b, c, d, e); + return run5(threadPool, Objects.requireNonNull(runnable), a, b, c, d, e); } private native static QFuture run5(QThreadPool threadPool, Callable5 runnable, A a, B b, C c, D d, E e); }// class +class QtConcurrent_5__ extends QtConcurrent { + + public static ThreadEngineStarter startMap(Collection sequence, MapFunctor functor) { + return startMap(0, Objects.requireNonNull(sequence), Objects.requireNonNull(functor)); + } + + @io.qt.QtUninvokable + public static ThreadEngineStarter startMapped(Collection sequence, MappedFunctor functor){ + return startMapped(0, Objects.requireNonNull(sequence), Objects.requireNonNull(functor)); + } + + @io.qt.QtUninvokable + public static ThreadEngineStarter startMappedReduced(Collection sequence, MappedFunctor functor, ReduceFunctor reduceFunctor, ReduceOptions options) { + return startMappedReduced(0, Objects.requireNonNull(sequence), Objects.requireNonNull(functor), Objects.requireNonNull(reduceFunctor), computeDefaultResult(reduceFunctor), options.value()); + } + + @io.qt.QtUninvokable + public static ThreadEngineStarter startMappedReduced(Collection sequence, MappedFunctor functor, ReduceFunctor reduceFunctor, ReduceOption... options) { + return startMappedReduced(sequence, functor, reduceFunctor, new ReduceOptions(options)); + } + + @io.qt.QtUninvokable + public static ThreadEngineStarter startFilteredReduced(Collection sequence, FilteredFunctor filteredFunctor, ReduceFunctor reduceFunctor, ReduceOption ... options) { + return startFilteredReduced(sequence, filteredFunctor, reduceFunctor, new ReduceOptions(options)); + } + + @io.qt.QtUninvokable + public static ThreadEngineStarter startFilteredReduced(Collection sequence, FilteredFunctor filteredFunctor, ReduceFunctor reduceFunctor, ReduceOptions options) { + return startFilteredReduced(0, Objects.requireNonNull(sequence), Objects.requireNonNull(filteredFunctor), Objects.requireNonNull(reduceFunctor), computeDefaultResult(reduceFunctor), options.value()); + } + + @io.qt.QtUninvokable + public static ThreadEngineStarter startFiltered(Collection sequence, FilteredFunctor filteredFunctor){ + return startFiltered(0, Objects.requireNonNull(sequence), Objects.requireNonNull(filteredFunctor)); + } + +}// class + class QtConcurrent_6__ extends QtConcurrent { @FunctionalInterface @@ -779,335 +633,595 @@ public interface Callable9{ } /** - * Executes the Runnable using the QtConcurrent framework. + *

See QtConcurrent::run(Function, ...)

*/ public static QFuture run(Runnable6 runnable, A a, B b, C c, D d, E e, F f) { - return runVoid6(null, java.util.Objects.requireNonNull(runnable), a, b, c, d, e, f); + return runVoid6(null, Objects.requireNonNull(runnable), a, b, c, d, e, f); } + /** - * Executes the Runnable using the QtConcurrent framework. The thread is taken from the QThreadPool pool. + *

See QtConcurrent::run(QThreadPool*, Function, ...)

*/ public static QFuture run(QThreadPool threadPool, Runnable6 runnable, A a, B b, C c, D d, E e, F f) { - return runVoid6(threadPool, java.util.Objects.requireNonNull(runnable), a, b, c, d, e, f); + return runVoid6(threadPool, Objects.requireNonNull(runnable), a, b, c, d, e, f); } private native static QFuture runVoid6(QThreadPool threadPool, Runnable6 runnable, A a, B b, C c, D d, E e, F f); /** - * Executes the Runnable using the QtConcurrent framework. + *

See QtConcurrent::run(Function, ...)

*/ public static QFuture run(Runnable7 runnable, A a, B b, C c, D d, E e, F f, G g) { - return runVoid7(null, java.util.Objects.requireNonNull(runnable), a, b, c, d, e, f, g); + return runVoid7(null, Objects.requireNonNull(runnable), a, b, c, d, e, f, g); } + /** - * Executes the Runnable using the QtConcurrent framework. The thread is taken from the QThreadPool pool. + *

See QtConcurrent::run(QThreadPool*, Function, ...)

*/ public static QFuture run(QThreadPool threadPool, Runnable7 runnable, A a, B b, C c, D d, E e, F f, G g) { - return runVoid7(threadPool, java.util.Objects.requireNonNull(runnable), a, b, c, d, e, f, g); + return runVoid7(threadPool, Objects.requireNonNull(runnable), a, b, c, d, e, f, g); } private native static QFuture runVoid7(QThreadPool threadPool, Runnable7 runnable, A a, B b, C c, D d, E e, F f, G g); /** - * Executes the Runnable using the QtConcurrent framework. + *

See QtConcurrent::run(Function, ...)

*/ public static QFuture run(Runnable8 runnable, A a, B b, C c, D d, E e, F f, G g, H h) { - return runVoid8(null, java.util.Objects.requireNonNull(runnable), a, b, c, d, e, f, g, h); + return runVoid8(null, Objects.requireNonNull(runnable), a, b, c, d, e, f, g, h); } + /** - * Executes the Runnable using the QtConcurrent framework. The thread is taken from the QThreadPool pool. + *

See QtConcurrent::run(QThreadPool*, Function, ...)

*/ public static QFuture run(QThreadPool threadPool, Runnable8 runnable, A a, B b, C c, D d, E e, F f, G g, H h) { - return runVoid8(threadPool, java.util.Objects.requireNonNull(runnable), a, b, c, d, e, f, g, h); + return runVoid8(threadPool, Objects.requireNonNull(runnable), a, b, c, d, e, f, g, h); } private native static QFuture runVoid8(QThreadPool threadPool, Runnable8 runnable, A a, B b, C c, D d, E e, F f, G g, H h); /** - * Executes the Runnable using the QtConcurrent framework. + *

See QtConcurrent::run(Function, ...)

*/ public static QFuture run(Runnable9 runnable, A a, B b, C c, D d, E e, F f, G g, H h, I i) { - return runVoid9(null, java.util.Objects.requireNonNull(runnable), a, b, c, d, e, f, g, h, i); + return runVoid9(null, Objects.requireNonNull(runnable), a, b, c, d, e, f, g, h, i); } + /** - * Executes the Runnable using the QtConcurrent framework. The thread is taken from the QThreadPool pool. + *

See QtConcurrent::run(QThreadPool*, Function, ...)

*/ public static QFuture run(QThreadPool threadPool, Runnable9 runnable, A a, B b, C c, D d, E e, F f, G g, H h, I i) { - return runVoid9(threadPool, java.util.Objects.requireNonNull(runnable), a, b, c, d, e, f, g, h, i); + return runVoid9(threadPool, Objects.requireNonNull(runnable), a, b, c, d, e, f, g, h, i); } private native static QFuture runVoid9(QThreadPool threadPool, Runnable9 runnable, A a, B b, C c, D d, E e, F f, G g, H h, I i); /** - * Executes the Callable using the QtConcurrent framework. + *

See QtConcurrent::run(Function, ...)

*/ public static QFuture run(Callable6 runnable, A a, B b, C c, D d, E e, F f) { - return run6(null, java.util.Objects.requireNonNull(runnable), a, b, c, d, e, f); + return run6(null, Objects.requireNonNull(runnable), a, b, c, d, e, f); } + /** - * Executes the Callable using the QtConcurrent framework. The thread is taken from the QThreadPool pool. + *

See QtConcurrent::run(QThreadPool*, Function, ...)

*/ public static QFuture run(QThreadPool threadPool, Callable6 runnable, A a, B b, C c, D d, E e, F f) { - return run6(threadPool, java.util.Objects.requireNonNull(runnable), a, b, c, d, e, f); + return run6(threadPool, Objects.requireNonNull(runnable), a, b, c, d, e, f); } private native static QFuture run6(QThreadPool threadPool, Callable6 runnable, A a, B b, C c, D d, E e, F f); /** - * Executes the Callable using the QtConcurrent framework. + *

See QtConcurrent::run(Function, ...)

*/ public static QFuture run(Callable7 runnable, A a, B b, C c, D d, E e, F f, G g) { - return run7(null, java.util.Objects.requireNonNull(runnable), a, b, c, d, e, f, g); + return run7(null, Objects.requireNonNull(runnable), a, b, c, d, e, f, g); } + /** - * Executes the Callable using the QtConcurrent framework. The thread is taken from the QThreadPool pool. + *

See QtConcurrent::run(QThreadPool*, Function, ...)

*/ public static QFuture run(QThreadPool threadPool, Callable7 runnable, A a, B b, C c, D d, E e, F f, G g) { - return run7(threadPool, java.util.Objects.requireNonNull(runnable), a, b, c, d, e, f, g); + return run7(threadPool, Objects.requireNonNull(runnable), a, b, c, d, e, f, g); } private native static QFuture run7(QThreadPool threadPool, Callable7 runnable, A a, B b, C c, D d, E e, F f, G g); /** - * Executes the Callable using the QtConcurrent framework. + *

See QtConcurrent::run(Function, ...)

*/ public static QFuture run(Callable8 runnable, A a, B b, C c, D d, E e, F f, G g, H h) { - return run8(null, java.util.Objects.requireNonNull(runnable), a, b, c, d, e, f, g, h); + return run8(null, Objects.requireNonNull(runnable), a, b, c, d, e, f, g, h); } + /** - * Executes the Callable using the QtConcurrent framework. The thread is taken from the QThreadPool pool. + *

See QtConcurrent::run(QThreadPool*, Function, ...)

*/ public static QFuture run(QThreadPool threadPool, Callable8 runnable, A a, B b, C c, D d, E e, F f, G g, H h) { - return run8(threadPool, java.util.Objects.requireNonNull(runnable), a, b, c, d, e, f, g, h); + return run8(threadPool, Objects.requireNonNull(runnable), a, b, c, d, e, f, g, h); } private native static QFuture run8(QThreadPool threadPool, Callable8 runnable, A a, B b, C c, D d, E e, F f, G g, H h); /** - * Executes the Callable using the QtConcurrent framework. + *

See QtConcurrent::run(Function, ...)

*/ public static QFuture run(Callable9 runnable, A a, B b, C c, D d, E e, F f, G g, H h, I i) { - return run9(null, java.util.Objects.requireNonNull(runnable), a, b, c, d, e, f, g, h, i); + return run9(null, Objects.requireNonNull(runnable), a, b, c, d, e, f, g, h, i); } + /** - * Executes the Callable using the QtConcurrent framework. The thread is taken from the QThreadPool pool. + *

See QtConcurrent::run(QThreadPool*, Function, ...)

*/ public static QFuture run(QThreadPool threadPool, Callable9 runnable, A a, B b, C c, D d, E e, F f, G g, H h, I i) { - return run9(threadPool, java.util.Objects.requireNonNull(runnable), a, b, c, d, e, f, g, h, i); + return run9(threadPool, Objects.requireNonNull(runnable), a, b, c, d, e, f, g, h, i); } private native static QFuture run9(QThreadPool threadPool, Callable9 runnable, A a, B b, C c, D d, E e, F f, G g, H h, I i); /** - * Calls function once for each item in sequence. The function is passed a reference to the item, so that any modifications done to the item will appear in sequence. + *

See QtConcurrent::map(QThreadPool*, Sequence, MapFunctor)

*/ @io.qt.QtUninvokable - public static QFuture map(QThreadPool threadPool, java.util.Collection sequence, MapFunctor functor){ - return _map(threadPool, java.util.Objects.requireNonNull(sequence), java.util.Objects.requireNonNull(functor)); + public static QFuture map(QThreadPool threadPool, Collection sequence, MapFunctor functor){ + return startMap(threadPool, sequence, functor).startAsynchronously(); } /** - * Calls function once for each item in sequence. The function is passed a reference to the item, so that any modifications done to the item will appear in sequence. + *

See QtConcurrent::blockingMap(QThreadPool*, Sequence, MapFunctor)

*/ @io.qt.QtUninvokable - public static void blockingMap(QThreadPool threadPool, java.util.Collection sequence, MapFunctor functor){ - _blockingMap(threadPool, java.util.Objects.requireNonNull(sequence), java.util.Objects.requireNonNull(functor)); + public static void blockingMap(QThreadPool threadPool, Collection sequence, MapFunctor functor){ + QFuture future = map(threadPool, sequence, functor); + future.waitForFinished(); } /** - * Calls function once for each item in sequence and returns a future with each mapped item as a result. You can QFutureIterator to iterate through the results. - * + *

See QtConcurrent::mapped(QThreadPool*, Sequence, MappedFunctor)

*/ @io.qt.QtUninvokable - public static QFuture mapped(QThreadPool threadPool, java.util.Collection sequence, MappedFunctor functor){ - return _mapped(threadPool, java.util.Objects.requireNonNull(sequence), java.util.Objects.requireNonNull(functor)); + public static QFuture mapped(QThreadPool threadPool, Collection sequence, MappedFunctor functor){ + return startMapped(threadPool, sequence, functor).startAsynchronously(); } /** - * Calls function once for each item in sequence and returns a future with each mapped item as a result. You can QFutureIterator to iterate through the results. + *

See QtConcurrent::blockingMapped(QThreadPool*, Sequence, MappedFunctor)

*/ @io.qt.QtUninvokable - public static java.util.List blockingMapped(QThreadPool threadPool, java.util.Collection sequence, MappedFunctor functor){ - return _blockingMapped(threadPool, java.util.Objects.requireNonNull(sequence), java.util.Objects.requireNonNull(functor)); + public static QList blockingMapped(QThreadPool threadPool, Collection sequence, MappedFunctor functor){ + QFuture future = mapped(threadPool, sequence, functor); + return future.results(); } /** - * This is an overloaded method provided for convenience. - *

- * It is equivalent of mappedReduced(sequence, functor, reducedFunctor, ReduceOption.UnorderedReduce, ReduceOption.SequentialReduce) + *

See QtConcurrent::mappedReduced(QThreadPool*, Sequence, MappedFunctor, ReduceFunctor, QtConcurrent::ReduceOptions)

*/ @io.qt.QtUninvokable - public static QFuture mappedReduced(QThreadPool threadPool, java.util.Collection sequence, MappedFunctor functor, ReducedFunctor reducedFunctor) { - return mappedReduced(threadPool, sequence, functor, reducedFunctor, ReduceOption.UnorderedReduce, ReduceOption.SequentialReduce); + public static QFuture mappedReduced(QThreadPool threadPool, Collection sequence, MappedFunctor functor, ReduceFunctor reduceFunctor) { + return mappedReduced(threadPool, sequence, functor, reduceFunctor, ReduceOption.UnorderedReduce, ReduceOption.SequentialReduce); } /** - * This is an overloaded method provided for convenience. - *

- * Note that while mapFunction is called concurrently, only one thread at a time will call reduceFunction. The order in which reduceFunction is called is determined by reduceOptions. - * + *

See QtConcurrent::mappedReduced(QThreadPool*, Sequence, MappedFunctor, ReduceFunctor, QtConcurrent::ReduceOptions)

*/ @io.qt.QtUninvokable - public static QFuture mappedReduced(QThreadPool threadPool, java.util.Collection sequence, MappedFunctor functor, ReducedFunctor reducedFunctor, ReduceOption ... options) { - return mappedReduced(threadPool, sequence, functor, reducedFunctor, new ReduceOptions(options)); + public static QFuture mappedReduced(QThreadPool threadPool, Collection sequence, MappedFunctor functor, ReduceFunctor reduceFunctor, ReduceOption ... options) { + return mappedReduced(threadPool, sequence, functor, reduceFunctor, new ReduceOptions(options)); } /** - * Calls mapFunction once for each item in sequence. The return value of each mapFunction is passed to reduceFunction. - *

- * Note that while mapFunction is called concurrently, only one thread at a time will call reduceFunction. The order in which reduceFunction is called is determined by reduceOptions. - * + *

See QtConcurrent::mappedReduced(QThreadPool*, Sequence, MappedFunctor, ReduceFunctor, QtConcurrent::ReduceOptions)

*/ @io.qt.QtUninvokable - public static QFuture mappedReduced(QThreadPool threadPool, java.util.Collection sequence, MappedFunctor functor, ReducedFunctor reducedFunctor, ReduceOptions options) { - return _mappedReduced(threadPool, java.util.Objects.requireNonNull(sequence), java.util.Objects.requireNonNull(functor), java.util.Objects.requireNonNull(reducedFunctor), options.value()); + public static QFuture mappedReduced(QThreadPool threadPool, Collection sequence, MappedFunctor functor, ReduceFunctor reduceFunctor, ReduceOptions options) { + return startMappedReduced(threadPool, sequence, functor, reduceFunctor, options).startAsynchronously(); } - + /** - * This is an overloaded method provided for convenience. - *

- * It is equivalent of calling blockingMappedReduced(sequence, functor, reducedFunctor, ReduceOption.UnorderedReduce, ReduceOption.SequentialReduce) - * + *

See QtConcurrent::mappedReduced(QThreadPool*, Sequence, MappedFunctor, ReduceFunctor, InitialValueType, QtConcurrent::ReduceOptions)

*/ @io.qt.QtUninvokable - public static U blockingMappedReduced(QThreadPool threadPool, java.util.Collection sequence, MappedFunctor functor, ReducedFunctor reducedFunctor) { - return blockingMappedReduced(threadPool, sequence, functor, reducedFunctor, ReduceOption.UnorderedReduce, ReduceOption.SequentialReduce); + public static QFuture mappedReduced(QThreadPool threadPool, Collection sequence, MappedFunctor functor, ReduceFunctor reduceFunctor, U initialValue) { + return mappedReduced(threadPool, sequence, functor, reduceFunctor, initialValue, ReduceOption.UnorderedReduce, ReduceOption.SequentialReduce); } + /** - * Calls mapFunction once for each item in sequence. The return value of each mapFunction is passed to reduceFunction. - *

- * Note that while mapFunction is called concurrently, only one thread at a time will call reduceFunction. The order in which reduceFunction is called is determined by reduceOptions. - *

- * Note: This function will block until all items in the sequence have been processed. + *

See QtConcurrent::mappedReduced(QThreadPool*, Sequence, MappedFunctor, ReduceFunctor, InitialValueType, QtConcurrent::ReduceOptions)

*/ @io.qt.QtUninvokable - public static U blockingMappedReduced(QThreadPool threadPool, java.util.Collection sequence, MappedFunctor functor, ReducedFunctor reducedFunctor, ReduceOption ... options) { - return blockingMappedReduced(threadPool, sequence, functor, reducedFunctor, new ReduceOptions(options)); + public static QFuture mappedReduced(QThreadPool threadPool, Collection sequence, MappedFunctor functor, ReduceFunctor reduceFunctor, U initialValue, ReduceOption ... options) { + return mappedReduced(threadPool, sequence, functor, reduceFunctor, initialValue, new ReduceOptions(options)); } /** - * Calls mapFunction once for each item in sequence. The return value of each mapFunction is passed to reduceFunction. - *

- * Note that while mapFunction is called concurrently, only one thread at a time will call reduceFunction. The order in which reduceFunction is called is determined by reduceOptions. - *

- * Note: This function will block until all items in the sequence have been processed. + *

See QtConcurrent::mappedReduced(QThreadPool*, Sequence, MappedFunctor, ReduceFunctor, InitialValueType, QtConcurrent::ReduceOptions)

*/ @io.qt.QtUninvokable - public static U blockingMappedReduced(QThreadPool threadPool, java.util.Collection sequence, MappedFunctor functor, ReducedFunctor reducedFunctor, ReduceOptions options) { - return _blockingMappedReduced(threadPool, java.util.Objects.requireNonNull(sequence), java.util.Objects.requireNonNull(functor), java.util.Objects.requireNonNull(reducedFunctor), options.value()); + public static QFuture mappedReduced(QThreadPool threadPool, Collection sequence, MappedFunctor functor, ReduceFunctor reduceFunctor, U initialValue, ReduceOptions options) { + return startMappedReduced(threadPool, sequence, functor, reduceFunctor, initialValue, options).startAsynchronously(); } /** - * Calls filterFunctor's filter() method once for each item in sequence and returns a new Sequence of kept items. If filterFunction returns true, a copy of the item is put in the new Sequence. Otherwise, the item will not appear in the new Sequence. + *

See QtConcurrent::mappedReduced(Sequence, MappedFunctor, ReduceFunctor, InitialValueType, QtConcurrent::ReduceOptions)

*/ @io.qt.QtUninvokable - public static QFuture filter(QThreadPool threadPool, java.util.Collection sequence, FilteredFunctor filteredFunctor){ - return _filter(threadPool, java.util.Objects.requireNonNull(sequence), filteredFunctor); + public static QFuture mappedReduced(Collection sequence, MappedFunctor functor, ReduceFunctor reduceFunctor, U initialValue) { + return mappedReduced(sequence, functor, reduceFunctor, initialValue, ReduceOption.UnorderedReduce, ReduceOption.SequentialReduce); } /** - * Calls filterFunctor's filter() method once for each item in sequence and returns a new Sequence of kept items. If filterFunction returns true, a copy of the item is put in the new Sequence. Otherwise, the item will not appear in the new Sequence. + *

See QtConcurrent::mappedReduced(Sequence, MappedFunctor, ReduceFunctor, InitialValueType, QtConcurrent::ReduceOptions)

*/ @io.qt.QtUninvokable - public static QFuture filtered(QThreadPool threadPool, java.util.Collection sequence, FilteredFunctor filteredFunctor){ - return _filtered(threadPool, java.util.Objects.requireNonNull(sequence), java.util.Objects.requireNonNull(filteredFunctor)); + public static QFuture mappedReduced(Collection sequence, MappedFunctor functor, ReduceFunctor reduceFunctor, U initialValue, ReduceOption ... options) { + return mappedReduced(sequence, functor, reduceFunctor, initialValue, new ReduceOptions(options)); } /** - * Calls filterFunctor's filter() method once for each item in sequence and returns a new Sequence of kept items. If filterFunction returns true, a copy of the item is put in the new Sequence. Otherwise, the item will not appear in the new Sequence. + *

See QtConcurrent::mappedReduced(Sequence, MappedFunctor, ReduceFunctor, InitialValueType, QtConcurrent::ReduceOptions)

*/ @io.qt.QtUninvokable - public static java.util.List blockingFiltered(QThreadPool threadPool, java.util.Collection sequence, FilteredFunctor filteredFunctor){ - return _blockingFiltered(threadPool, java.util.Objects.requireNonNull(sequence), java.util.Objects.requireNonNull(filteredFunctor)); + public static QFuture mappedReduced(Collection sequence, MappedFunctor functor, ReduceFunctor reduceFunctor, U initialValue, ReduceOptions options) { + return startMappedReduced(0, Objects.requireNonNull(sequence), Objects.requireNonNull(functor), Objects.requireNonNull(reduceFunctor), computeDefaultResult(reduceFunctor), options.value()).startAsynchronously(); } - + /** - * Calls filterFunction once for each item in sequence. If filterFunction returns true, the item is kept in sequence; otherwise, the item is removed from sequence. - * Note: This function will block until all items in the sequence have been processed. + *

See QtConcurrent::blockingMappedReduced(QThreadPool*, Sequence, MappedFunctor, ReduceFunctor, QtConcurrent::ReduceOptions)

*/ @io.qt.QtUninvokable - public static void blockingFilter(QThreadPool threadPool, java.util.Collection sequence, FilteredFunctor filteredFunctor){ - _blockingFilter(threadPool, java.util.Objects.requireNonNull(sequence), java.util.Objects.requireNonNull(filteredFunctor)); + public static U blockingMappedReduced(QThreadPool threadPool, Collection sequence, MappedFunctor functor, ReduceFunctor reduceFunctor) { + QFuture future = mappedReduced(threadPool, sequence, functor, reduceFunctor); + return future.result(); } /** - * This is an overloaded method provided for convenience. It is equivalent of calling filteredReduced(sequence, filteredFunctor, ReduceOption.UnorderedReduce, ReduceOption.Seq This is an overloaded method provided for convenience. It is equivalent of calling filteredReduced) + *

See QtConcurrent::blockingMappedReduced(QThreadPool*, Sequence, MappedFunctor, ReduceFunctor, QtConcurrent::ReduceOptions)

*/ @io.qt.QtUninvokable - public static QFuture filteredReduced(QThreadPool threadPool, java.util.Collection sequence, FilteredFunctor filteredFunctor, ReducedFunctor reducedFunctor) { - return filteredReduced(threadPool, sequence, filteredFunctor, reducedFunctor, ReduceOption.UnorderedReduce, ReduceOption.SequentialReduce); + public static U blockingMappedReduced(QThreadPool threadPool, Collection sequence, MappedFunctor functor, ReduceFunctor reduceFunctor, ReduceOption ... options) { + QFuture future = mappedReduced(threadPool, sequence, functor, reduceFunctor, options); + return future.result(); } /** - * Calls filterFunction once for each item in sequence. If filterFunction returns true for an item, that item is then passed to reduceFunction. In other words, the return value is the result of reduceFunction for each item where filterFunction returns true. - *

- * Note that while filterFunction is called concurrently, only one thread at a time will call reduceFunction. The order in which reduceFunction is called is undefined if reduceOptions is QtConcurrent::UnorderedReduce. If reduceOptions is QtConcurrent::OrderedReduce, reduceFunction is called in the order of the original sequence. + *

See QtConcurrent::blockingMappedReduced(QThreadPool*, Sequence, MappedFunctor, ReduceFunctor, QtConcurrent::ReduceOptions)

*/ @io.qt.QtUninvokable - public static QFuture filteredReduced(QThreadPool threadPool, java.util.Collection sequence, FilteredFunctor filteredFunctor, ReducedFunctor reducedFunctor, ReduceOption ... options) { - return filteredReduced(threadPool, sequence, filteredFunctor, reducedFunctor, new ReduceOptions(options)); + public static U blockingMappedReduced(QThreadPool threadPool, Collection sequence, MappedFunctor functor, ReduceFunctor reduceFunctor, ReduceOptions options) { + QFuture future = mappedReduced(threadPool, sequence, functor, reduceFunctor, options); + return future.result(); } /** - * Calls filterFunction once for each item in sequence. If filterFunction returns true for an item, that item is then passed to reduceFunction. In other words, the return value is the result of reduceFunction for each item where filterFunction returns true. - *

- * Note that while filterFunction is called concurrently, only one thread at a time will call reduceFunction. The order in which reduceFunction is called is undefined if reduceOptions is QtConcurrent::UnorderedReduce. If reduceOptions is QtConcurrent::OrderedReduce, reduceFunction is called in the order of the original sequence. + *

See QtConcurrent::blockingMappedReduced(QThreadPool*, Sequence, MappedFunctor, ReduceFunctor, InitialValueType, QtConcurrent::ReduceOptions)

*/ @io.qt.QtUninvokable - public static QFuture filteredReduced(QThreadPool threadPool, java.util.Collection sequence, FilteredFunctor filteredFunctor, ReducedFunctor reducedFunctor, ReduceOptions options) { - return _filteredReduced(threadPool, java.util.Objects.requireNonNull(sequence), java.util.Objects.requireNonNull(filteredFunctor), java.util.Objects.requireNonNull(reducedFunctor), options.value()); + public static U blockingMappedReduced(QThreadPool threadPool, Collection sequence, MappedFunctor functor, ReduceFunctor reduceFunctor, U initialValue) { + QFuture future = mappedReduced(threadPool, sequence, functor, reduceFunctor, initialValue); + return future.result(); } - + /** - * This is an overloaded method provided for convenience. It is the equivalent of calling blockingFilteredReduced(sequence, filteredFunctor, reducedFunctor, ReduceOption.UnorderedReduce, ReduceOption.SequentialReduce) + *

See QtConcurrent::blockingMappedReduced(QThreadPool*, Sequence, MappedFunctor, ReduceFunctor, InitialValueType, QtConcurrent::ReduceOptions)

*/ @io.qt.QtUninvokable - public static U blockingFilteredReduced(QThreadPool threadPool, java.util.Collection sequence, FilteredFunctor filteredFunctor, ReducedFunctor reducedFunctor) { - return blockingFilteredReduced(threadPool, sequence, filteredFunctor, reducedFunctor, ReduceOption.UnorderedReduce, ReduceOption.SequentialReduce); + public static U blockingMappedReduced(QThreadPool threadPool, Collection sequence, MappedFunctor functor, ReduceFunctor reduceFunctor, U initialValue, ReduceOption ... options) { + QFuture future = mappedReduced(threadPool, sequence, functor, reduceFunctor, initialValue, options); + return future.result(); } /** - * Calls filterFunction once for each item in sequence. If filterFunction returns true for an item, that item is then passed to reduceFunction. In other words, the return value is the result of reduceFunction for each item where filterFunction returns true. - *

- * Note that while filterFunction is called concurrently, only one thread at a time will call reduceFunction. The order in which reduceFunction is called is undefined if reduceOptions is QtConcurrent::UnorderedReduce. If reduceOptions is QtConcurrent::OrderedReduce, reduceFunction is called in the order of the original sequence. + *

See QtConcurrent::blockingMappedReduced(QThreadPool*, Sequence, MappedFunctor, ReduceFunctor, InitialValueType, QtConcurrent::ReduceOptions)

*/ @io.qt.QtUninvokable - public static U blockingFilteredReduced(QThreadPool threadPool, java.util.Collection sequence, FilteredFunctor filteredFunctor, ReducedFunctor reducedFunctor, ReduceOption ... options) { - return blockingFilteredReduced(threadPool, sequence, filteredFunctor, reducedFunctor, new ReduceOptions(options)); + public static U blockingMappedReduced(QThreadPool threadPool, Collection sequence, MappedFunctor functor, ReduceFunctor reduceFunctor, U initialValue, ReduceOptions options) { + QFuture future = mappedReduced(threadPool, sequence, functor, reduceFunctor, initialValue, options); + return future.result(); } /** - * Calls filterFunction once for each item in sequence. If filterFunction returns true for an item, that item is then passed to reduceFunction. In other words, the return value is the result of reduceFunction for each item where filterFunction returns true. - *

- * Note that while filterFunction is called concurrently, only one thread at a time will call reduceFunction. The order in which reduceFunction is called is undefined if reduceOptions is QtConcurrent::UnorderedReduce. If reduceOptions is QtConcurrent::OrderedReduce, reduceFunction is called in the order of the original sequence. + *

See QtConcurrent::blockingMappedReduced(Sequence, MappedFunctor, ReduceFunctor, InitialValueType, QtConcurrent::ReduceOptions)

*/ @io.qt.QtUninvokable - public static U blockingFilteredReduced(QThreadPool threadPool, java.util.Collection sequence, FilteredFunctor filteredFunctor, ReducedFunctor reducedFunctor, ReduceOptions options) { - return _blockingFilteredReduced(threadPool, java.util.Objects.requireNonNull(sequence), java.util.Objects.requireNonNull(filteredFunctor), java.util.Objects.requireNonNull(reducedFunctor), options.value()); + public static U blockingMappedReduced(Collection sequence, MappedFunctor functor, ReduceFunctor reduceFunctor, U initialValue) { + QFuture future = mappedReduced(sequence, functor, reduceFunctor, initialValue); + return future.result(); } - @FunctionalInterface - public interface RunnableWithPromise { - public void run(QPromise promise); + /** + *

See QtConcurrent::blockingMappedReduced(Sequence, MappedFunctor, ReduceFunctor, InitialValueType, QtConcurrent::ReduceOptions)

+ */ + @io.qt.QtUninvokable + public static U blockingMappedReduced(Collection sequence, MappedFunctor functor, ReduceFunctor reduceFunctor, U initialValue, ReduceOption ... options) { + QFuture future = mappedReduced(sequence, functor, reduceFunctor, initialValue, options); + return future.result(); } - @FunctionalInterface - public interface RunnableWithPromise1 { - public void run(QPromise promise, A a); + /** + *

See QtConcurrent::blockingMappedReduced(Sequence, MappedFunctor, ReduceFunctor, InitialValueType, QtConcurrent::ReduceOptions)

+ */ + @io.qt.QtUninvokable + public static U blockingMappedReduced(Collection sequence, MappedFunctor functor, ReduceFunctor reduceFunctor, U initialValue, ReduceOptions options) { + QFuture future = mappedReduced(sequence, functor, reduceFunctor, initialValue, options); + return future.result(); } - - @FunctionalInterface - public interface RunnableWithPromise2 { - public void run(QPromise promise, A a, B b); + + /** + *

See QtConcurrent::filter(QThreadPool*, Sequence, FilteredFunctor)

+ */ + @io.qt.QtUninvokable + public static QFuture filter(QThreadPool threadPool, Collection sequence, FilteredFunctor filteredFunctor){ + return filter(QtJambi_LibraryUtilities.internal.checkedNativeId(Objects.requireNonNull(threadPool)), Objects.requireNonNull(sequence), filteredFunctor); } - - @FunctionalInterface - public interface RunnableWithPromise3 { - public void run(QPromise promise, A a, B b, C c); + + /** + *

See QtConcurrent::filtered(QThreadPool*, Sequence, FilteredFunctor)

+ */ + @io.qt.QtUninvokable + public static QFuture filtered(QThreadPool threadPool, Collection sequence, FilteredFunctor filteredFunctor){ + return startFiltered(threadPool, sequence, filteredFunctor).startAsynchronously(); } - - @FunctionalInterface - public interface RunnableWithPromise4 { - public void run(QPromise promise, A a, B b, C c, D d); + + /** + *

See QtConcurrent::blockingFiltered(QThreadPool*, Sequence, FilteredFunctor)

+ */ + @io.qt.QtUninvokable + public static QList blockingFiltered(QThreadPool threadPool, Collection sequence, FilteredFunctor filteredFunctor){ + QFuture future = filtered(threadPool, sequence, filteredFunctor); + return future.results(); } - - @FunctionalInterface - public interface RunnableWithPromise5 { - public void run(QPromise promise, A a, B b, C c, D d, E e); + + /** + *

See QtConcurrent::blockingFilter(QThreadPool*, Sequence, FilteredFunctor)

+ */ + @io.qt.QtUninvokable + public static void blockingFilter(QThreadPool threadPool, Collection sequence, FilteredFunctor filteredFunctor){ + QFuture future = filter(threadPool, sequence, filteredFunctor); + future.waitForFinished(); + } + + /** + *

See QtConcurrent::filteredReduced(QThreadPool*, Sequence, FilteredFunctor, ReduceFunctor, QtConcurrent::ReduceOptions)

+ */ + @io.qt.QtUninvokable + public static QFuture filteredReduced(QThreadPool threadPool, Collection sequence, FilteredFunctor filteredFunctor, ReduceFunctor reduceFunctor) { + return filteredReduced(threadPool, sequence, filteredFunctor, reduceFunctor, ReduceOption.UnorderedReduce, ReduceOption.SequentialReduce); + } + + /** + *

See QtConcurrent::filteredReduced(QThreadPool*, Sequence, FilteredFunctor, ReduceFunctor, QtConcurrent::ReduceOptions)

+ */ + @io.qt.QtUninvokable + public static QFuture filteredReduced(QThreadPool threadPool, Collection sequence, FilteredFunctor filteredFunctor, ReduceFunctor reduceFunctor, ReduceOption ... options) { + return filteredReduced(threadPool, sequence, filteredFunctor, reduceFunctor, new ReduceOptions(options)); + } + + /** + *

See QtConcurrent::filteredReduced(QThreadPool*, Sequence, FilteredFunctor, ReduceFunctor, QtConcurrent::ReduceOptions)

+ */ + @io.qt.QtUninvokable + public static QFuture filteredReduced(QThreadPool threadPool, Collection sequence, FilteredFunctor filteredFunctor, ReduceFunctor reduceFunctor, ReduceOptions options) { + return startFilteredReduced(threadPool, sequence, filteredFunctor, reduceFunctor, options).startAsynchronously(); + } + + /** + *

See QtConcurrent::filteredReduced(QThreadPool*, Sequence, FilteredFunctor, ReduceFunctor, InitialValueType, QtConcurrent::ReduceOptions)

+ */ + @io.qt.QtUninvokable + public static QFuture filteredReduced(QThreadPool threadPool, Collection sequence, FilteredFunctor filteredFunctor, ReduceFunctor reduceFunctor, U initialValue) { + return filteredReduced(threadPool, sequence, filteredFunctor, reduceFunctor, initialValue, ReduceOption.UnorderedReduce, ReduceOption.SequentialReduce); + } + + /** + *

See QtConcurrent::filteredReduced(QThreadPool*, Sequence, FilteredFunctor, ReduceFunctor, InitialValueType, QtConcurrent::ReduceOptions)

+ */ + @io.qt.QtUninvokable + public static QFuture filteredReduced(QThreadPool threadPool, Collection sequence, FilteredFunctor filteredFunctor, ReduceFunctor reduceFunctor, U initialValue, ReduceOption ... options) { + return filteredReduced(threadPool, sequence, filteredFunctor, reduceFunctor, initialValue, new ReduceOptions(options)); + } + + /** + *

See QtConcurrent::filteredReduced(QThreadPool*, Sequence, FilteredFunctor, ReduceFunctor, InitialValueType, QtConcurrent::ReduceOptions)

+ */ + @io.qt.QtUninvokable + public static QFuture filteredReduced(QThreadPool threadPool, Collection sequence, FilteredFunctor filteredFunctor, ReduceFunctor reduceFunctor, U initialValue, ReduceOptions options) { + return startFilteredReduced(threadPool, sequence, filteredFunctor, reduceFunctor, initialValue, options).startAsynchronously(); + } + + /** + *

See QtConcurrent::filteredReduced(Sequence, FilteredFunctor, ReduceFunctor, InitialValueType, QtConcurrent::ReduceOptions)

+ */ + @io.qt.QtUninvokable + public static QFuture filteredReduced(Collection sequence, FilteredFunctor filteredFunctor, ReduceFunctor reduceFunctor, U initialValue) { + return filteredReduced(sequence, filteredFunctor, reduceFunctor, initialValue, ReduceOption.UnorderedReduce, ReduceOption.SequentialReduce); + } + + /** + *

See QtConcurrent::filteredReduced(Sequence, FilteredFunctor, ReduceFunctor, InitialValueType, QtConcurrent::ReduceOptions)

+ */ + @io.qt.QtUninvokable + public static QFuture filteredReduced(Collection sequence, FilteredFunctor filteredFunctor, ReduceFunctor reduceFunctor, U initialValue, ReduceOption ... options) { + return filteredReduced(sequence, filteredFunctor, reduceFunctor, initialValue, new ReduceOptions(options)); + } + + /** + *

See QtConcurrent::filteredReduced(Sequence, FilteredFunctor, ReduceFunctor, InitialValueType, QtConcurrent::ReduceOptions)

+ */ + @io.qt.QtUninvokable + public static QFuture filteredReduced(Collection sequence, FilteredFunctor filteredFunctor, ReduceFunctor reduceFunctor, U initialValue, ReduceOptions options) { + return startFilteredReduced(0, Objects.requireNonNull(sequence), Objects.requireNonNull(filteredFunctor), Objects.requireNonNull(reduceFunctor), initialValue, options.value()).startAsynchronously(); + } + + /** + *

See QtConcurrent::blockingFilteredReduced(QThreadPool*, Sequence, FilteredFunctor, ReduceFunctor, QtConcurrent::ReduceOptions)

+ */ + @io.qt.QtUninvokable + public static U blockingFilteredReduced(QThreadPool threadPool, Collection sequence, FilteredFunctor filteredFunctor, ReduceFunctor reduceFunctor) { + return filteredReduced(threadPool, sequence, filteredFunctor, reduceFunctor).result(); + } + + /** + *

See QtConcurrent::blockingFilteredReduced(QThreadPool*, Sequence, FilteredFunctor, ReduceFunctor, QtConcurrent::ReduceOptions)

+ */ + @io.qt.QtUninvokable + public static U blockingFilteredReduced(QThreadPool threadPool, Collection sequence, FilteredFunctor filteredFunctor, ReduceFunctor reduceFunctor, ReduceOption ... options) { + return filteredReduced(threadPool, sequence, filteredFunctor, reduceFunctor, options).result(); + } + + /** + *

See QtConcurrent::blockingFilteredReduced(QThreadPool*, Sequence, FilteredFunctor, ReduceFunctor, QtConcurrent::ReduceOptions)

+ */ + @io.qt.QtUninvokable + public static U blockingFilteredReduced(QThreadPool threadPool, Collection sequence, FilteredFunctor filteredFunctor, ReduceFunctor reduceFunctor, ReduceOptions options) { + return filteredReduced(threadPool, sequence, filteredFunctor, reduceFunctor, options).result(); + } + + /** + *

See QtConcurrent::blockingFilteredReduced(QThreadPool*, Sequence, FilteredFunctor, ReduceFunctor, InitialValueType, QtConcurrent::ReduceOptions)

+ */ + @io.qt.QtUninvokable + public static U blockingFilteredReduced(QThreadPool threadPool, Collection sequence, FilteredFunctor filteredFunctor, ReduceFunctor reduceFunctor, U initialValue) { + return filteredReduced(threadPool, sequence, filteredFunctor, reduceFunctor, initialValue).result(); + } + + /** + *

See QtConcurrent::blockingFilteredReduced(QThreadPool*, Sequence, FilteredFunctor, ReduceFunctor, InitialValueType, QtConcurrent::ReduceOptions)

+ */ + @io.qt.QtUninvokable + public static U blockingFilteredReduced(QThreadPool threadPool, Collection sequence, FilteredFunctor filteredFunctor, ReduceFunctor reduceFunctor, U initialValue, ReduceOption ... options) { + return filteredReduced(threadPool, sequence, filteredFunctor, reduceFunctor, initialValue, options).result(); + } + + /** + *

See QtConcurrent::blockingFilteredReduced(QThreadPool*, Sequence, FilteredFunctor, ReduceFunctor, InitialValueType, QtConcurrent::ReduceOptions)

+ */ + @io.qt.QtUninvokable + public static U blockingFilteredReduced(QThreadPool threadPool, Collection sequence, FilteredFunctor filteredFunctor, ReduceFunctor reduceFunctor, U initialValue, ReduceOptions options) { + return filteredReduced(threadPool, sequence, filteredFunctor, reduceFunctor, initialValue, options).result(); + } + + /** + *

See QtConcurrent::blockingFilteredReduced(Sequence, FilteredFunctor, ReduceFunctor, InitialValueType, QtConcurrent::ReduceOptions)

+ */ + @io.qt.QtUninvokable + public static U blockingFilteredReduced(Collection sequence, FilteredFunctor filteredFunctor, ReduceFunctor reduceFunctor, U initialValue) { + return filteredReduced(sequence, filteredFunctor, reduceFunctor, initialValue).result(); + } + + /** + *

See QtConcurrent::blockingFilteredReduced(Sequence, FilteredFunctor, ReduceFunctor, InitialValueType, QtConcurrent::ReduceOptions)

+ */ + @io.qt.QtUninvokable + public static U blockingFilteredReduced(Collection sequence, FilteredFunctor filteredFunctor, ReduceFunctor reduceFunctor, U initialValue, ReduceOption ... options) { + return filteredReduced(sequence, filteredFunctor, reduceFunctor, initialValue, options).result(); + } + + /** + *

See QtConcurrent::blockingFilteredReduced(Sequence, FilteredFunctor, ReduceFunctor, InitialValueType, QtConcurrent::ReduceOptions)

+ */ + @io.qt.QtUninvokable + public static U blockingFilteredReduced(Collection sequence, FilteredFunctor filteredFunctor, ReduceFunctor reduceFunctor, U initialValue, ReduceOptions options) { + return filteredReduced(sequence, filteredFunctor, reduceFunctor, initialValue, options).result(); + } + + @io.qt.QtUninvokable + public static ThreadEngineStarter startMap(QThreadPool threadPool, Collection sequence, MapFunctor functor) { + return startMap(QtJambi_LibraryUtilities.internal.checkedNativeId(Objects.requireNonNull(threadPool)), Objects.requireNonNull(sequence), Objects.requireNonNull(functor)); + } + + @io.qt.QtUninvokable + public static ThreadEngineStarter startMapped(QThreadPool threadPool, Collection sequence, MappedFunctor functor){ + return startMapped(QtJambi_LibraryUtilities.internal.checkedNativeId(Objects.requireNonNull(threadPool)), Objects.requireNonNull(sequence), Objects.requireNonNull(functor)); + } + + @io.qt.QtUninvokable + public static ThreadEngineStarter startMappedReduced(QThreadPool threadPool, Collection sequence, MappedFunctor functor, ReduceFunctor reduceFunctor) { + return startMappedReduced(threadPool, sequence, functor, reduceFunctor, computeDefaultResult(reduceFunctor), ReduceOption.UnorderedReduce, ReduceOption.SequentialReduce); + } + + @io.qt.QtUninvokable + public static ThreadEngineStarter startMappedReduced(QThreadPool threadPool, Collection sequence, MappedFunctor functor, ReduceFunctor reduceFunctor, ReduceOptions options) { + return startMappedReduced(QtJambi_LibraryUtilities.internal.checkedNativeId(Objects.requireNonNull(threadPool)), Objects.requireNonNull(sequence), Objects.requireNonNull(functor), Objects.requireNonNull(reduceFunctor), computeDefaultResult(reduceFunctor), options.value()); + } + + @io.qt.QtUninvokable + public static ThreadEngineStarter startMappedReduced(QThreadPool threadPool, Collection sequence, MappedFunctor functor, ReduceFunctor reduceFunctor, ReduceOption... options) { + return startMappedReduced(threadPool, sequence, functor, reduceFunctor, new ReduceOptions(options)); + } + + @io.qt.QtUninvokable + public static ThreadEngineStarter startMappedReduced(QThreadPool threadPool, Collection sequence, MappedFunctor functor, ReduceFunctor reduceFunctor, U initialValue) { + return startMappedReduced(threadPool, sequence, functor, reduceFunctor, initialValue, ReduceOption.UnorderedReduce, ReduceOption.SequentialReduce); + } + + @io.qt.QtUninvokable + public static ThreadEngineStarter startMappedReduced(QThreadPool threadPool, Collection sequence, MappedFunctor functor, ReduceFunctor reduceFunctor, U initialValue, ReduceOptions options) { + return startMappedReduced(QtJambi_LibraryUtilities.internal.checkedNativeId(Objects.requireNonNull(threadPool)), Objects.requireNonNull(sequence), Objects.requireNonNull(functor), Objects.requireNonNull(reduceFunctor), initialValue, options.value()); + } + + @io.qt.QtUninvokable + public static ThreadEngineStarter startMappedReduced(QThreadPool threadPool, Collection sequence, MappedFunctor functor, ReduceFunctor reduceFunctor, U initialValue, ReduceOption... options) { + return startMappedReduced(threadPool, sequence, functor, reduceFunctor, initialValue, new ReduceOptions(options)); + } + + @io.qt.QtUninvokable + public static ThreadEngineStarter startFilteredReduced(QThreadPool threadPool, Collection sequence, FilteredFunctor filteredFunctor, ReduceFunctor reduceFunctor) { + return startFilteredReduced(threadPool, sequence, filteredFunctor, reduceFunctor, ReduceOption.UnorderedReduce, ReduceOption.SequentialReduce); + } + + @io.qt.QtUninvokable + public static ThreadEngineStarter startFilteredReduced(QThreadPool threadPool, Collection sequence, FilteredFunctor filteredFunctor, ReduceFunctor reduceFunctor, ReduceOption ... options) { + return startFilteredReduced(threadPool, sequence, filteredFunctor, reduceFunctor, new ReduceOptions(options)); + } + + @io.qt.QtUninvokable + public static ThreadEngineStarter startFilteredReduced(QThreadPool threadPool, Collection sequence, FilteredFunctor filteredFunctor, ReduceFunctor reduceFunctor, ReduceOptions options) { + return startFilteredReduced(QtJambi_LibraryUtilities.internal.checkedNativeId(Objects.requireNonNull(threadPool)), Objects.requireNonNull(sequence), Objects.requireNonNull(filteredFunctor), Objects.requireNonNull(reduceFunctor), computeDefaultResult(reduceFunctor), options.value()); + } + + @io.qt.QtUninvokable + public static ThreadEngineStarter startFilteredReduced(QThreadPool threadPool, Collection sequence, FilteredFunctor filteredFunctor, ReduceFunctor reduceFunctor, U initialValue) { + return startFilteredReduced(threadPool, sequence, filteredFunctor, reduceFunctor, initialValue, ReduceOption.UnorderedReduce, ReduceOption.SequentialReduce); + } + + @io.qt.QtUninvokable + public static ThreadEngineStarter startFilteredReduced(QThreadPool threadPool, Collection sequence, FilteredFunctor filteredFunctor, ReduceFunctor reduceFunctor, U initialValue, ReduceOption ... options) { + return startFilteredReduced(threadPool, sequence, filteredFunctor, reduceFunctor, initialValue, new ReduceOptions(options)); + } + + @io.qt.QtUninvokable + public static ThreadEngineStarter startFilteredReduced(QThreadPool threadPool, Collection sequence, FilteredFunctor filteredFunctor, ReduceFunctor reduceFunctor, U initialValue, ReduceOptions options) { + return startFilteredReduced(QtJambi_LibraryUtilities.internal.checkedNativeId(Objects.requireNonNull(threadPool)), Objects.requireNonNull(sequence), Objects.requireNonNull(filteredFunctor), Objects.requireNonNull(reduceFunctor), initialValue, options.value()); + } + + @io.qt.QtUninvokable + public static ThreadEngineStarter startFiltered(QThreadPool threadPool, Collection sequence, FilteredFunctor filteredFunctor){ + return startFiltered(QtJambi_LibraryUtilities.internal.checkedNativeId(Objects.requireNonNull(threadPool)), Objects.requireNonNull(sequence), Objects.requireNonNull(filteredFunctor)); + } + + @FunctionalInterface + public interface RunnableWithPromise { + public void run(QPromise promise); + } + + @FunctionalInterface + public interface RunnableWithPromise1 { + public void run(QPromise promise, A a); + } + + @FunctionalInterface + public interface RunnableWithPromise2 { + public void run(QPromise promise, A a, B b); + } + + @FunctionalInterface + public interface RunnableWithPromise3 { + public void run(QPromise promise, A a, B b, C c); + } + + @FunctionalInterface + public interface RunnableWithPromise4 { + public void run(QPromise promise, A a, B b, C c, D d); + } + + @FunctionalInterface + public interface RunnableWithPromise5 { + public void run(QPromise promise, A a, B b, C c, D d, E e); } @FunctionalInterface @@ -1181,15 +1295,14 @@ public interface RunnableWithVoidPromise9 { } /** - * Executes the Callable using the QtConcurrent framework. + *

See QtConcurrent::run(Function, ...)

*/ public static QFuture run(RunnableWithPromise runnable) { return runWithPromise0(null, runnable); } /** - * Executes the Callable using the QtConcurrent framework. The thread is taken - * from the QThreadPool pool. + *

See QtConcurrent::run(QThreadPool*, Function, ...)

*/ public static QFuture run(QThreadPool threadPool, RunnableWithPromise runnable) { return runWithPromise0(threadPool, runnable); @@ -1198,170 +1311,161 @@ public static QFuture run(QThreadPool threadPool, RunnableWithPromise private native static QFuture runWithPromise0(QThreadPool threadPool, RunnableWithPromise runnable); /** - * Executes the Callable using the QtConcurrent framework. + *

See QtConcurrent::run(Function, ...)

*/ public static QFuture run(RunnableWithPromise1 runnable, A a) { - return runWithPromise1(null, java.util.Objects.requireNonNull(runnable), a); + return runWithPromise1(null, Objects.requireNonNull(runnable), a); } /** - * Executes the Callable using the QtConcurrent framework. The thread is taken - * from the QThreadPool pool. + *

See QtConcurrent::run(QThreadPool*, Function, ...)

*/ public static QFuture run(QThreadPool threadPool, RunnableWithPromise1 runnable, A a) { - return runWithPromise1(threadPool, java.util.Objects.requireNonNull(runnable), a); + return runWithPromise1(threadPool, Objects.requireNonNull(runnable), a); } private native static QFuture runWithPromise1(QThreadPool threadPool, RunnableWithPromise1 runnable, A a); /** - * Executes the Callable using the QtConcurrent framework. + *

See QtConcurrent::run(Function, ...)

*/ public static QFuture run(RunnableWithPromise2 runnable, A a, B b) { - return runWithPromise2(null, java.util.Objects.requireNonNull(runnable), a, b); + return runWithPromise2(null, Objects.requireNonNull(runnable), a, b); } /** - * Executes the Callable using the QtConcurrent framework. The thread is taken - * from the QThreadPool pool. + *

See QtConcurrent::run(QThreadPool*, Function, ...)

*/ public static QFuture run(QThreadPool threadPool, RunnableWithPromise2 runnable, A a, B b) { - return runWithPromise2(threadPool, java.util.Objects.requireNonNull(runnable), a, b); + return runWithPromise2(threadPool, Objects.requireNonNull(runnable), a, b); } private native static QFuture runWithPromise2(QThreadPool threadPool, RunnableWithPromise2 runnable, A a, B b); /** - * Executes the Callable using the QtConcurrent framework. + *

See QtConcurrent::run(Function, ...)

*/ public static QFuture run(RunnableWithPromise3 runnable, A a, B b, C c) { - return runWithPromise3(null, java.util.Objects.requireNonNull(runnable), a, b, c); + return runWithPromise3(null, Objects.requireNonNull(runnable), a, b, c); } /** - * Executes the Callable using the QtConcurrent framework. The thread is taken - * from the QThreadPool pool. + *

See QtConcurrent::run(QThreadPool*, Function, ...)

*/ public static QFuture run(QThreadPool threadPool, RunnableWithPromise3 runnable, A a, B b, C c) { - return runWithPromise3(threadPool, java.util.Objects.requireNonNull(runnable), a, b, c); + return runWithPromise3(threadPool, Objects.requireNonNull(runnable), a, b, c); } private native static QFuture runWithPromise3(QThreadPool threadPool, RunnableWithPromise3 runnable, A a, B b, C c); /** - * Executes the Callable using the QtConcurrent framework. + *

See QtConcurrent::run(Function, ...)

*/ public static QFuture run(RunnableWithPromise4 runnable, A a, B b, C c, D d) { - return runWithPromise4(null, java.util.Objects.requireNonNull(runnable), a, b, c, d); + return runWithPromise4(null, Objects.requireNonNull(runnable), a, b, c, d); } /** - * Executes the Callable using the QtConcurrent framework. The thread is taken - * from the QThreadPool pool. + *

See QtConcurrent::run(QThreadPool*, Function, ...)

*/ public static QFuture run(QThreadPool threadPool, RunnableWithPromise4 runnable, A a, B b, C c, D d) { - return runWithPromise4(threadPool, java.util.Objects.requireNonNull(runnable), a, b, c, d); + return runWithPromise4(threadPool, Objects.requireNonNull(runnable), a, b, c, d); } private native static QFuture runWithPromise4(QThreadPool threadPool, RunnableWithPromise4 runnable, A a, B b, C c, D d); /** - * Executes the Callable using the QtConcurrent framework. + *

See QtConcurrent::run(Function, ...)

*/ public static QFuture run(RunnableWithPromise5 runnable, A a, B b, C c, D d, E e) { - return runWithPromise5(null, java.util.Objects.requireNonNull(runnable), a, b, c, d, e); + return runWithPromise5(null, Objects.requireNonNull(runnable), a, b, c, d, e); } /** - * Executes the Callable using the QtConcurrent framework. The thread is taken - * from the QThreadPool pool. + *

See QtConcurrent::run(QThreadPool*, Function, ...)

*/ public static QFuture run(QThreadPool threadPool, RunnableWithPromise5 runnable, A a, B b, C c, D d, E e) { - return runWithPromise5(threadPool, java.util.Objects.requireNonNull(runnable), a, b, c, d, e); + return runWithPromise5(threadPool, Objects.requireNonNull(runnable), a, b, c, d, e); } private native static QFuture runWithPromise5(QThreadPool threadPool, RunnableWithPromise5 runnable, A a, B b, C c, D d, E e); /** - * Executes the Callable using the QtConcurrent framework. + *

See QtConcurrent::run(Function, ...)

*/ public static QFuture run(RunnableWithPromise6 runnable, A a, B b, C c, D d, E e, F f) { - return runWithPromise6(null, java.util.Objects.requireNonNull(runnable), a, b, c, d, e, f); + return runWithPromise6(null, Objects.requireNonNull(runnable), a, b, c, d, e, f); } /** - * Executes the Callable using the QtConcurrent framework. The thread is taken - * from the QThreadPool pool. + *

See QtConcurrent::run(QThreadPool*, Function, ...)

*/ public static QFuture run(QThreadPool threadPool, RunnableWithPromise6 runnable, A a, B b, C c, D d, E e, F f) { - return runWithPromise6(threadPool, java.util.Objects.requireNonNull(runnable), a, b, c, d, e, f); + return runWithPromise6(threadPool, Objects.requireNonNull(runnable), a, b, c, d, e, f); } private native static QFuture runWithPromise6(QThreadPool threadPool, RunnableWithPromise6 runnable, A a, B b, C c, D d, E e, F f); /** - * Executes the RunnableWithPromise using the QtConcurrent framework. + *

See QtConcurrent::run(Function, ...)

*/ public static QFuture run(RunnableWithPromise7 runnable, A a, B b, C c, D d, E e, F f, G g) { - return runWithPromise7(null, java.util.Objects.requireNonNull(runnable), a, b, c, d, e, f, g); + return runWithPromise7(null, Objects.requireNonNull(runnable), a, b, c, d, e, f, g); } /** - * Executes the Callable using the QtConcurrent framework. The thread is taken - * from the QThreadPool pool. + *

See QtConcurrent::run(QThreadPool*, Function, ...)

*/ public static QFuture run(QThreadPool threadPool, RunnableWithPromise7 runnable, A a, B b, C c, D d, E e, F f, G g) { - return runWithPromise7(threadPool, java.util.Objects.requireNonNull(runnable), a, b, c, d, e, f, g); + return runWithPromise7(threadPool, Objects.requireNonNull(runnable), a, b, c, d, e, f, g); } private native static QFuture runWithPromise7(QThreadPool threadPool, RunnableWithPromise7 runnable, A a, B b, C c, D d, E e, F f, G g); /** - * Executes the Callable using the QtConcurrent framework. + *

See QtConcurrent::run(Function, ...)

*/ public static QFuture run(RunnableWithPromise8 runnable, A a, B b, C c, D d, E e, F f, G g, H h) { - return runWithPromise8(null, java.util.Objects.requireNonNull(runnable), a, b, c, d, e, f, g, h); + return runWithPromise8(null, Objects.requireNonNull(runnable), a, b, c, d, e, f, g, h); } /** - * Executes the Callable using the QtConcurrent framework. The thread is taken - * from the QThreadPool pool. + *

See QtConcurrent::run(QThreadPool*, Function, ...)

*/ public static QFuture run(QThreadPool threadPool, RunnableWithPromise8 runnable, A a, B b, C c, D d, E e, F f, G g, H h) { - return runWithPromise8(threadPool, java.util.Objects.requireNonNull(runnable), a, b, c, d, e, f, g, h); + return runWithPromise8(threadPool, Objects.requireNonNull(runnable), a, b, c, d, e, f, g, h); } private native static QFuture runWithPromise8(QThreadPool threadPool, RunnableWithPromise8 runnable, A a, B b, C c, D d, E e, F f, G g, H h); /** - * Executes the Callable using the QtConcurrent framework. + *

See QtConcurrent::run(Function, ...)

*/ public static QFuture run(RunnableWithPromise9 runnable, A a, B b, C c, D d, E e, F f, G g, H h, I i) { - return runWithPromise9(null, java.util.Objects.requireNonNull(runnable), a, b, c, d, e, f, g, h, i); + return runWithPromise9(null, Objects.requireNonNull(runnable), a, b, c, d, e, f, g, h, i); } /** - * Executes the Callable using the QtConcurrent framework. The thread is taken - * from the QThreadPool pool. + *

See QtConcurrent::run(QThreadPool*, Function, ...)

*/ public static QFuture run(QThreadPool threadPool, RunnableWithPromise9 runnable, A a, B b, C c, D d, E e, F f, G g, H h, I i) { - return runWithPromise9(threadPool, java.util.Objects.requireNonNull(runnable), a, b, c, d, e, f, g, h, i); + return runWithPromise9(threadPool, Objects.requireNonNull(runnable), a, b, c, d, e, f, g, h, i); } private native static QFuture runWithPromise9(QThreadPool threadPool, @@ -1369,15 +1473,14 @@ private native static QFuture runWithPromise9( /** - * Executes the Runnable using the QtConcurrent framework. + *

See QtConcurrent::run(Function, ...)

*/ public static QFuture run(RunnableWithVoidPromise runnable) { return runWithPromiseVoid0(null, runnable); } /** - * Executes the Runnable using the QtConcurrent framework. The thread is taken - * from the QThreadPool pool. + *

See QtConcurrent::run(QThreadPool*, Function, ...)

*/ public static QFuture run(QThreadPool threadPool, RunnableWithVoidPromise runnable) { return runWithPromiseVoid0(threadPool, runnable); @@ -1386,176 +1489,171 @@ public static QFuture run(QThreadPool threadPool, RunnableWithVoidPromise private native static QFuture runWithPromiseVoid0(QThreadPool threadPool, RunnableWithVoidPromise runnable); /** - * Executes the Runnable using the QtConcurrent framework. + *

See QtConcurrent::run(Function, ...)

*/ public static QFuture run(RunnableWithVoidPromise1 runnable, A a) { - return runWithPromiseVoid1(null, java.util.Objects.requireNonNull(runnable), a); + return runWithPromiseVoid1(null, Objects.requireNonNull(runnable), a); } /** - * Executes the Runnable using the QtConcurrent framework. The thread is taken - * from the QThreadPool pool. + *

See QtConcurrent::run(QThreadPool*, Function, ...)

*/ public static QFuture run(QThreadPool threadPool, RunnableWithVoidPromise1 runnable, A a) { - return runWithPromiseVoid1(threadPool, java.util.Objects.requireNonNull(runnable), a); + return runWithPromiseVoid1(threadPool, Objects.requireNonNull(runnable), a); } private native static QFuture runWithPromiseVoid1(QThreadPool threadPool, RunnableWithVoidPromise1 runnable, A a); /** - * Executes the Runnable using the QtConcurrent framework. + *

See QtConcurrent::run(Function, ...)

*/ public static QFuture run(RunnableWithVoidPromise2 runnable, A a, B b) { - return runWithPromiseVoid2(null, java.util.Objects.requireNonNull(runnable), a, b); + return runWithPromiseVoid2(null, Objects.requireNonNull(runnable), a, b); } /** - * Executes the Runnable using the QtConcurrent framework. The thread is taken - * from the QThreadPool pool. + *

See QtConcurrent::run(QThreadPool*, Function, ...)

*/ public static QFuture run(QThreadPool threadPool, RunnableWithVoidPromise2 runnable, A a, B b) { - return runWithPromiseVoid2(threadPool, java.util.Objects.requireNonNull(runnable), a, b); + return runWithPromiseVoid2(threadPool, Objects.requireNonNull(runnable), a, b); } private native static QFuture runWithPromiseVoid2(QThreadPool threadPool, RunnableWithVoidPromise2 runnable, A a, B b); /** - * Executes the Runnable using the QtConcurrent framework. + *

See QtConcurrent::run(Function, ...)

*/ public static QFuture run(RunnableWithVoidPromise3 runnable, A a, B b, C c) { - return runWithPromiseVoid3(null, java.util.Objects.requireNonNull(runnable), a, b, c); + return runWithPromiseVoid3(null, Objects.requireNonNull(runnable), a, b, c); } /** - * Executes the Runnable using the QtConcurrent framework. The thread is taken - * from the QThreadPool pool. + *

See QtConcurrent::run(QThreadPool*, Function, ...)

*/ public static QFuture run(QThreadPool threadPool, RunnableWithVoidPromise3 runnable, A a, B b, C c) { - return runWithPromiseVoid3(threadPool, java.util.Objects.requireNonNull(runnable), a, b, c); + return runWithPromiseVoid3(threadPool, Objects.requireNonNull(runnable), a, b, c); } private native static QFuture runWithPromiseVoid3(QThreadPool threadPool, RunnableWithVoidPromise3 runnable, A a, B b, C c); /** - * Executes the Runnable using the QtConcurrent framework. + *

See QtConcurrent::run(Function, ...)

*/ public static QFuture run(RunnableWithVoidPromise4 runnable, A a, B b, C c, D d) { - return runWithPromiseVoid4(null, java.util.Objects.requireNonNull(runnable), a, b, c, d); + return runWithPromiseVoid4(null, Objects.requireNonNull(runnable), a, b, c, d); } /** - * Executes the Runnable using the QtConcurrent framework. The thread is taken - * from the QThreadPool pool. + *

See QtConcurrent::run(QThreadPool*, Function, ...)

*/ public static QFuture run(QThreadPool threadPool, RunnableWithVoidPromise4 runnable, A a, B b, C c, D d) { - return runWithPromiseVoid4(threadPool, java.util.Objects.requireNonNull(runnable), a, b, c, d); + return runWithPromiseVoid4(threadPool, Objects.requireNonNull(runnable), a, b, c, d); } private native static QFuture runWithPromiseVoid4(QThreadPool threadPool, RunnableWithVoidPromise4 runnable, A a, B b, C c, D d); /** - * Executes the Runnable using the QtConcurrent framework. + *

See QtConcurrent::run(Function, ...)

*/ public static QFuture run(RunnableWithVoidPromise5 runnable, A a, B b, C c, D d, E e) { - return runWithPromiseVoid5(null, java.util.Objects.requireNonNull(runnable), a, b, c, d, e); + return runWithPromiseVoid5(null, Objects.requireNonNull(runnable), a, b, c, d, e); } /** - * Executes the Runnable using the QtConcurrent framework. The thread is taken - * from the QThreadPool pool. + *

See QtConcurrent::run(QThreadPool*, Function, ...)

*/ public static QFuture run(QThreadPool threadPool, RunnableWithVoidPromise5 runnable, A a, B b, C c, D d, E e) { - return runWithPromiseVoid5(threadPool, java.util.Objects.requireNonNull(runnable), a, b, c, d, e); + return runWithPromiseVoid5(threadPool, Objects.requireNonNull(runnable), a, b, c, d, e); } private native static QFuture runWithPromiseVoid5(QThreadPool threadPool, RunnableWithVoidPromise5 runnable, A a, B b, C c, D d, E e); /** - * Executes the Runnable using the QtConcurrent framework. + *

See QtConcurrent::run(Function, ...)

*/ public static QFuture run(RunnableWithVoidPromise6 runnable, A a, B b, C c, D d, E e, F f) { - return runWithPromiseVoid6(null, java.util.Objects.requireNonNull(runnable), a, b, c, d, e, f); + return runWithPromiseVoid6(null, Objects.requireNonNull(runnable), a, b, c, d, e, f); } /** - * Executes the Runnable using the QtConcurrent framework. The thread is taken - * from the QThreadPool pool. + *

See QtConcurrent::run(QThreadPool*, Function, ...)

*/ public static QFuture run(QThreadPool threadPool, RunnableWithVoidPromise6 runnable, A a, B b, C c, D d, E e, F f) { - return runWithPromiseVoid6(threadPool, java.util.Objects.requireNonNull(runnable), a, b, c, d, e, f); + return runWithPromiseVoid6(threadPool, Objects.requireNonNull(runnable), a, b, c, d, e, f); } private native static QFuture runWithPromiseVoid6(QThreadPool threadPool, RunnableWithVoidPromise6 runnable, A a, B b, C c, D d, E e, F f); /** - * Executes the Runnable using the QtConcurrent framework. + *

See QtConcurrent::run(Function, ...)

*/ public static QFuture run(RunnableWithVoidPromise7 runnable, A a, B b, C c, D d, E e, F f, G g) { - return runWithPromiseVoid7(null, java.util.Objects.requireNonNull(runnable), a, b, c, d, e, f, g); + return runWithPromiseVoid7(null, Objects.requireNonNull(runnable), a, b, c, d, e, f, g); } /** - * Executes the Runnable using the QtConcurrent framework. The thread is taken - * from the QThreadPool pool. + *

See QtConcurrent::run(QThreadPool*, Function, ...)

*/ public static QFuture run(QThreadPool threadPool, RunnableWithVoidPromise7 runnable, A a, B b, C c, D d, E e, F f, G g) { - return runWithPromiseVoid7(threadPool, java.util.Objects.requireNonNull(runnable), a, b, c, d, e, f, g); + return runWithPromiseVoid7(threadPool, Objects.requireNonNull(runnable), a, b, c, d, e, f, g); } private native static QFuture runWithPromiseVoid7(QThreadPool threadPool, RunnableWithVoidPromise7 runnable, A a, B b, C c, D d, E e, F f, G g); /** - * Executes the Runnable using the QtConcurrent framework. + *

See QtConcurrent::run(Function, ...)

*/ public static QFuture run(RunnableWithVoidPromise8 runnable, A a, B b, C c, D d, E e, F f, G g, H h) { - return runWithPromiseVoid8(null, java.util.Objects.requireNonNull(runnable), a, b, c, d, e, f, g, h); + return runWithPromiseVoid8(null, Objects.requireNonNull(runnable), a, b, c, d, e, f, g, h); } /** - * Executes the Runnable using the QtConcurrent framework. The thread is taken - * from the QThreadPool pool. + *

See QtConcurrent::run(QThreadPool*, Function, ...)

*/ public static QFuture run(QThreadPool threadPool, RunnableWithVoidPromise8 runnable, A a, B b, C c, D d, E e, F f, G g, H h) { - return runWithPromiseVoid8(threadPool, java.util.Objects.requireNonNull(runnable), a, b, c, d, e, f, g, h); + return runWithPromiseVoid8(threadPool, Objects.requireNonNull(runnable), a, b, c, d, e, f, g, h); } private native static QFuture runWithPromiseVoid8(QThreadPool threadPool, RunnableWithVoidPromise8 runnable, A a, B b, C c, D d, E e, F f, G g, H h); /** - * Executes the Runnable using the QtConcurrent framework. + *

See QtConcurrent::run(Function, ...)

*/ public static QFuture run(RunnableWithVoidPromise9 runnable, A a, B b, C c, D d, E e, F f, G g, H h, I i) { - return runWithPromiseVoid9(null, java.util.Objects.requireNonNull(runnable), a, b, c, d, e, f, g, h, i); + return runWithPromiseVoid9(null, Objects.requireNonNull(runnable), a, b, c, d, e, f, g, h, i); } /** - * Executes the Runnable using the QtConcurrent framework. The thread is taken - * from the QThreadPool pool. + *

See QtConcurrent::run(QThreadPool*, Function, ...)

*/ public static QFuture run(QThreadPool threadPool, RunnableWithVoidPromise9 runnable, A a, B b, C c, D d, E e, F f, G g, H h, I i) { - return runWithPromiseVoid9(threadPool, java.util.Objects.requireNonNull(runnable), a, b, c, d, e, f, g, h, i); + return runWithPromiseVoid9(threadPool, Objects.requireNonNull(runnable), a, b, c, d, e, f, g, h, i); } private native static QFuture runWithPromiseVoid9(QThreadPool threadPool, RunnableWithVoidPromise9 runnable, A a, B b, C c, D d, E e, F f, G g, H h, I i); - public static abstract class QTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static abstract class QTaskBuilder{ QTaskBuilder(int priority, QThreadPool threadPool) { super(); this.priority = priority; @@ -1567,46 +1665,58 @@ public static abstract class QTaskBuilder{ final int priority() {return priority;} final QThreadPool threadPool() { return threadPool; } - public abstract void spawn(QtConcurrent.FutureResult result); - public QTaskBuilder withPriority(int newPriority) { - this.priority = newPriority; - return this; - } - public QTaskBuilder onThreadPool(QThreadPool newThreadPool) { - this.threadPool = java.util.Objects.requireNonNull(newThreadPool); - return this; - } - } - - public static abstract class QTaskBuilderVoid extends QTaskBuilder{ - QTaskBuilderVoid(int priority, QThreadPool threadPool) { - super(priority, threadPool); - } - public QFuture spawn() { + /** + *

See QtConcurrent::QTaskBuilder::spawn()

+ */ + public QFuture spawn() { throw new RuntimeException("Unable to spawn due to missing arguments."); } + + /** + *

See QtConcurrent::QTaskBuilder::spawn(QtConcurrent::FutureResult)

+ */ public final void spawn(QtConcurrent.FutureResult result) { spawn(); } + + /** + *

See QtConcurrent::QTaskBuilder::withPriority(int)

+ */ + public QTaskBuilder withPriority(int newPriority) { + this.priority = newPriority; + return this; + } + /** + *

See QtConcurrent::QTaskBuilder::onThreadPool(QThreadPool&)

+ */ + public QTaskBuilder onThreadPool(QThreadPool newThreadPool) { + this.threadPool = Objects.requireNonNull(newThreadPool); + return this; + } } - public static abstract class QTypedTaskBuilder extends QTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static abstract class QTypedTaskBuilder extends QTaskBuilder{ public QTypedTaskBuilder(int priority, QThreadPool threadPool) { super(priority, threadPool); } - public QFuture spawn() { - throw new RuntimeException("Unable to spawn due to missing arguments."); - } - public final void spawn(QtConcurrent.FutureResult result) { - spawn(); - } } + /** + *

See QtConcurrent::task(Task&&)

+ */ public static QTaskBuilderVoid0Arg0 task(Runnable runnable) { return new QTaskBuilderVoid0Arg0(0, null, runnable); } - public static class QTaskBuilderVoid0Arg0 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static class QTaskBuilderVoid0Arg0 extends QTaskBuilder{ QTaskBuilderVoid0Arg0(int newPriority, QThreadPool threadPool, Runnable runnable) { super(newPriority, threadPool); this.runnable = runnable; @@ -1625,6 +1735,9 @@ public QTaskBuilderVoid0Arg0 onThreadPool(QThreadPool newThreadPool) { return this; } + /** + *

See QtConcurrent::QTaskBuilder::spawn()

+ */ @Override public QFuture spawn() { return spawn(threadPool(), priority(), runnable); @@ -1633,11 +1746,18 @@ public QFuture spawn() { private native static QFuture spawn(QThreadPool threadPool, int priority, Runnable runnable); } + /** + *

See QtConcurrent::task(Task&&)

+ */ public static QTaskBuilderVoid1Arg0 task(Runnable1 runnable) { return new QTaskBuilderVoid1Arg0<>(0, null, runnable); } - public static final class QTaskBuilderVoid1Arg0 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTaskBuilderVoid1Arg0 extends QTaskBuilder{ private final Runnable1 runnable; QTaskBuilderVoid1Arg0(int priority, QThreadPool threadPool, Runnable1 runnable) { @@ -1645,6 +1765,9 @@ public static final class QTaskBuilderVoid1Arg0 extends QTaskBuilderVoid{ this.runnable = runnable; } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid1Arg1 withArguments(A a) { return new QTaskBuilderVoid1Arg1<>(priority(), threadPool(), runnable, a); } @@ -1662,7 +1785,11 @@ public QTaskBuilderVoid1Arg0 onThreadPool(QThreadPool newThreadPool) { } } - public static class QTaskBuilderVoid1Arg1 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static class QTaskBuilderVoid1Arg1 extends QTaskBuilder{ QTaskBuilderVoid1Arg1(int newPriority, QThreadPool threadPool, Runnable1 runnable, A a) { super(newPriority, threadPool); this.runnable = runnable; @@ -1683,6 +1810,9 @@ public QTaskBuilderVoid1Arg1 onThreadPool(QThreadPool newThreadPool) { return this; } + /** + *

See QtConcurrent::QTaskBuilder::spawn()

+ */ @Override public QFuture spawn() { return spawn(threadPool(), priority(), runnable, a); @@ -1692,11 +1822,18 @@ private native static QFuture spawn(QThreadPool threadPool, int priori Runnable1 runnable, A a); } + /** + *

See QtConcurrent::task(Task&&)

+ */ public static QTaskBuilderVoid2Arg0 task(Runnable2 runnable) { return new QTaskBuilderVoid2Arg0<>(0, null, runnable); } - public static final class QTaskBuilderVoid2Arg0 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTaskBuilderVoid2Arg0 extends QTaskBuilder{ private final Runnable2 runnable; QTaskBuilderVoid2Arg0(int priority, QThreadPool threadPool, Runnable2 runnable) { @@ -1704,10 +1841,16 @@ public static final class QTaskBuilderVoid2Arg0 extends QTaskBuilderVoid{ this.runnable = runnable; } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid2Arg1 withArguments(A a) { return new QTaskBuilderVoid2Arg1<>(priority(), threadPool(), runnable, a); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid2Arg2 withArguments(A a, B b) { return new QTaskBuilderVoid2Arg2<>(priority(), threadPool(), runnable, a, b); } @@ -1725,7 +1868,11 @@ public QTaskBuilderVoid2Arg0 onThreadPool(QThreadPool newThreadPool) { } } - public static class QTaskBuilderVoid2Arg1 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static class QTaskBuilderVoid2Arg1 extends QTaskBuilder{ QTaskBuilderVoid2Arg1(int newPriority, QThreadPool threadPool, Runnable2 runnable, A a) { super(newPriority, threadPool); this.runnable = runnable; @@ -1734,6 +1881,9 @@ public static class QTaskBuilderVoid2Arg1 extends QTaskBuilderVoid{ private final Runnable2 runnable; private final A a; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid2Arg2 withArguments(B b) { return new QTaskBuilderVoid2Arg2<>(priority(), threadPool(), runnable, a, b); } @@ -1751,7 +1901,11 @@ public QTaskBuilderVoid2Arg1 onThreadPool(QThreadPool newThreadPool) { } } - public static final class QTaskBuilderVoid2Arg2 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTaskBuilderVoid2Arg2 extends QTaskBuilder{ QTaskBuilderVoid2Arg2(int newPriority, QThreadPool threadPool, Runnable2 runnable, A a, B b) { super(newPriority, threadPool); this.runnable = runnable; @@ -1774,6 +1928,9 @@ public QTaskBuilderVoid2Arg2 onThreadPool(QThreadPool newThreadPool) { return this; } + /** + *

See QtConcurrent::QTaskBuilder::spawn()

+ */ @Override public QFuture spawn() { return spawn(threadPool(), priority(), runnable, a, b); @@ -1783,11 +1940,18 @@ private native static QFuture spawn(QThreadPool threadPool, int pri Runnable2 runnable, A a, B b); } + /** + *

See QtConcurrent::task(Task&&)

+ */ public static QTaskBuilderVoid3Arg0 task(Runnable3 runnable) { return new QTaskBuilderVoid3Arg0<>(0, null, runnable); } - public static final class QTaskBuilderVoid3Arg0 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTaskBuilderVoid3Arg0 extends QTaskBuilder{ private final Runnable3 runnable; QTaskBuilderVoid3Arg0(int priority, QThreadPool threadPool, Runnable3 runnable) { @@ -1795,14 +1959,23 @@ public static final class QTaskBuilderVoid3Arg0 extends QTaskBuilderVoi this.runnable = runnable; } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid3Arg1 withArguments(A a) { return new QTaskBuilderVoid3Arg1<>(priority(), threadPool(), runnable, a); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid3Arg2 withArguments(A a, B b) { return new QTaskBuilderVoid3Arg2<>(priority(), threadPool(), runnable, a, b); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid3Arg3 withArguments(A a, B b, C c) { return new QTaskBuilderVoid3Arg3<>(priority(), threadPool(), runnable, a, b, c); } @@ -1820,7 +1993,11 @@ public QTaskBuilderVoid3Arg0 onThreadPool(QThreadPool newThreadPool) { } } - public static class QTaskBuilderVoid3Arg1 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static class QTaskBuilderVoid3Arg1 extends QTaskBuilder{ QTaskBuilderVoid3Arg1(int newPriority, QThreadPool threadPool, Runnable3 runnable, A a) { super(newPriority, threadPool); this.runnable = runnable; @@ -1829,10 +2006,16 @@ public static class QTaskBuilderVoid3Arg1 extends QTaskBuilderVoid{ private final Runnable3 runnable; private final A a; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid3Arg2 withArguments(B b) { return new QTaskBuilderVoid3Arg2<>(priority(), threadPool(), runnable, a, b); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid3Arg3 withArguments(B b, C c) { return new QTaskBuilderVoid3Arg3<>(priority(), threadPool(), runnable, a, b, c); } @@ -1850,7 +2033,11 @@ public QTaskBuilderVoid3Arg1 onThreadPool(QThreadPool newThreadPool) { } } - public static final class QTaskBuilderVoid3Arg2 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTaskBuilderVoid3Arg2 extends QTaskBuilder{ QTaskBuilderVoid3Arg2(int newPriority, QThreadPool threadPool, Runnable3 runnable, A a, B b) { super(newPriority, threadPool); this.runnable = runnable; @@ -1861,6 +2048,9 @@ public static final class QTaskBuilderVoid3Arg2 extends QTaskBuilderVoi private final A a; private final B b; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid3Arg3 withArguments(C c) { return new QTaskBuilderVoid3Arg3<>(priority(), threadPool(), runnable, a, b, c); } @@ -1878,7 +2068,11 @@ public QTaskBuilderVoid3Arg2 onThreadPool(QThreadPool newThreadPool) { } } - public static final class QTaskBuilderVoid3Arg3 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTaskBuilderVoid3Arg3 extends QTaskBuilder{ QTaskBuilderVoid3Arg3(int newPriority, QThreadPool threadPool, Runnable3 runnable, A a, B b, C c) { super(newPriority, threadPool); this.runnable = runnable; @@ -1903,7 +2097,10 @@ public QTaskBuilderVoid3Arg3 onThreadPool(QThreadPool newThreadPool) { return this; } - @Override + /** + *

See QtConcurrent::QTaskBuilder::spawn()

+ */ + @Override public QFuture spawn() { return spawn(threadPool(), priority(), runnable, a, b, c); } @@ -1912,11 +2109,18 @@ private native static QFuture spawn(QThreadPool threadPool, int Runnable3 runnable, A a, B b, C c); } + /** + *

See QtConcurrent::task(Task&&)

+ */ public static QTaskBuilderVoid4Arg0 task(Runnable4 runnable) { return new QTaskBuilderVoid4Arg0<>(0, null, runnable); } - public static final class QTaskBuilderVoid4Arg0 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTaskBuilderVoid4Arg0 extends QTaskBuilder{ private final Runnable4 runnable; QTaskBuilderVoid4Arg0(int priority, QThreadPool threadPool, Runnable4 runnable) { @@ -1924,18 +2128,30 @@ public static final class QTaskBuilderVoid4Arg0 extends QTaskBuilder this.runnable = runnable; } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid4Arg1 withArguments(A a) { return new QTaskBuilderVoid4Arg1<>(priority(), threadPool(), runnable, a); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid4Arg2 withArguments(A a, B b) { return new QTaskBuilderVoid4Arg2<>(priority(), threadPool(), runnable, a, b); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid4Arg3 withArguments(A a, B b, C c) { return new QTaskBuilderVoid4Arg3<>(priority(), threadPool(), runnable, a, b, c); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid4Arg4 withArguments(A a, B b, C c, D d) { return new QTaskBuilderVoid4Arg4<>(priority(), threadPool(), runnable, a, b, c, d); } @@ -1953,7 +2169,11 @@ public QTaskBuilderVoid4Arg0 onThreadPool(QThreadPool newThreadPool) } } - public static class QTaskBuilderVoid4Arg1 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static class QTaskBuilderVoid4Arg1 extends QTaskBuilder{ QTaskBuilderVoid4Arg1(int newPriority, QThreadPool threadPool, Runnable4 runnable, A a) { super(newPriority, threadPool); this.runnable = runnable; @@ -1962,14 +2182,23 @@ public static class QTaskBuilderVoid4Arg1 extends QTaskBuilderVoid{ private final Runnable4 runnable; private final A a; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid4Arg2 withArguments(B b) { return new QTaskBuilderVoid4Arg2<>(priority(), threadPool(), runnable, a, b); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid4Arg3 withArguments(B b, C c) { return new QTaskBuilderVoid4Arg3<>(priority(), threadPool(), runnable, a, b, c); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid4Arg4 withArguments(B b, C c, D d) { return new QTaskBuilderVoid4Arg4<>(priority(), threadPool(), runnable, a, b, c, d); } @@ -1987,7 +2216,11 @@ public QTaskBuilderVoid4Arg1 onThreadPool(QThreadPool newThreadPool) } } - public static final class QTaskBuilderVoid4Arg2 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTaskBuilderVoid4Arg2 extends QTaskBuilder{ QTaskBuilderVoid4Arg2(int newPriority, QThreadPool threadPool, Runnable4 runnable, A a, B b) { super(newPriority, threadPool); this.runnable = runnable; @@ -1998,10 +2231,16 @@ public static final class QTaskBuilderVoid4Arg2 extends QTaskBuilder private final A a; private final B b; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid4Arg3 withArguments(C c) { return new QTaskBuilderVoid4Arg3<>(priority(), threadPool(), runnable, a, b, c); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid4Arg4 withArguments(C c, D d) { return new QTaskBuilderVoid4Arg4<>(priority(), threadPool(), runnable, a, b, c, d); } @@ -2019,7 +2258,11 @@ public QTaskBuilderVoid4Arg2 onThreadPool(QThreadPool newThreadPool) } } - public static final class QTaskBuilderVoid4Arg3 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTaskBuilderVoid4Arg3 extends QTaskBuilder{ QTaskBuilderVoid4Arg3(int newPriority, QThreadPool threadPool, Runnable4 runnable, A a, B b, C c) { super(newPriority, threadPool); this.runnable = runnable; @@ -2032,6 +2275,9 @@ public static final class QTaskBuilderVoid4Arg3 extends QTaskBuilder private final B b; private final C c; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid4Arg4 withArguments(D d) { return new QTaskBuilderVoid4Arg4<>(priority(), threadPool(), runnable, a, b, c, d); } @@ -2049,7 +2295,11 @@ public QTaskBuilderVoid4Arg3 onThreadPool(QThreadPool newThreadPool) } } - public static final class QTaskBuilderVoid4Arg4 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTaskBuilderVoid4Arg4 extends QTaskBuilder{ QTaskBuilderVoid4Arg4(int newPriority, QThreadPool threadPool, Runnable4 runnable, A a, B b, C c, D d) { super(newPriority, threadPool); this.runnable = runnable; @@ -2076,6 +2326,9 @@ public QTaskBuilderVoid4Arg4 onThreadPool(QThreadPool newThreadPool) return this; } + /** + *

See QtConcurrent::QTaskBuilder::spawn()

+ */ @Override public QFuture spawn() { return spawn(threadPool(), priority(), runnable, a, b, c, d); @@ -2085,11 +2338,18 @@ private native static QFuture spawn(QThreadPool threadPool, i Runnable4 runnable, A a, B b, C c, D d); } + /** + *

See QtConcurrent::task(Task&&)

+ */ public static QTaskBuilderVoid5Arg0 task(Runnable5 runnable) { return new QTaskBuilderVoid5Arg0<>(0, null, runnable); } - public static final class QTaskBuilderVoid5Arg0 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTaskBuilderVoid5Arg0 extends QTaskBuilder{ private final Runnable5 runnable; QTaskBuilderVoid5Arg0(int priority, QThreadPool threadPool, Runnable5 runnable) { @@ -2097,22 +2357,37 @@ public static final class QTaskBuilderVoid5Arg0 extends QTaskBuil this.runnable = runnable; } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid5Arg1 withArguments(A a) { return new QTaskBuilderVoid5Arg1<>(priority(), threadPool(), runnable, a); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid5Arg2 withArguments(A a, B b) { return new QTaskBuilderVoid5Arg2<>(priority(), threadPool(), runnable, a, b); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid5Arg3 withArguments(A a, B b, C c) { return new QTaskBuilderVoid5Arg3<>(priority(), threadPool(), runnable, a, b, c); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid5Arg4 withArguments(A a, B b, C c, D d) { return new QTaskBuilderVoid5Arg4<>(priority(), threadPool(), runnable, a, b, c, d); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid5Arg5 withArguments(A a, B b, C c, D d, E e) { return new QTaskBuilderVoid5Arg5<>(priority(), threadPool(), runnable, a, b, c, d, e); } @@ -2130,7 +2405,11 @@ public QTaskBuilderVoid5Arg0 onThreadPool(QThreadPool newThreadPo } } - public static final class QTaskBuilderVoid5Arg1 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTaskBuilderVoid5Arg1 extends QTaskBuilder{ QTaskBuilderVoid5Arg1(int newPriority, QThreadPool threadPool, Runnable5 runnable, A a) { super(newPriority, threadPool); this.runnable = runnable; @@ -2139,18 +2418,30 @@ public static final class QTaskBuilderVoid5Arg1 extends QTaskBuil private final Runnable5 runnable; private final A a; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid5Arg2 withArguments(B b) { return new QTaskBuilderVoid5Arg2<>(priority(), threadPool(), runnable, a, b); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid5Arg3 withArguments(B b, C c) { return new QTaskBuilderVoid5Arg3<>(priority(), threadPool(), runnable, a, b, c); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid5Arg4 withArguments(B b, C c, D d) { return new QTaskBuilderVoid5Arg4<>(priority(), threadPool(), runnable, a, b, c, d); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid5Arg5 withArguments(B b, C c, D d, E e) { return new QTaskBuilderVoid5Arg5<>(priority(), threadPool(), runnable, a, b, c, d, e); } @@ -2168,7 +2459,11 @@ public QTaskBuilderVoid5Arg1 onThreadPool(QThreadPool newThreadPo } } - public static final class QTaskBuilderVoid5Arg2 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTaskBuilderVoid5Arg2 extends QTaskBuilder{ QTaskBuilderVoid5Arg2(int newPriority, QThreadPool threadPool, Runnable5 runnable, A a, B b) { super(newPriority, threadPool); this.runnable = runnable; @@ -2179,14 +2474,23 @@ public static final class QTaskBuilderVoid5Arg2 extends QTaskBuil private final A a; private final B b; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid5Arg3 withArguments(C c) { return new QTaskBuilderVoid5Arg3<>(priority(), threadPool(), runnable, a, b, c); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid5Arg4 withArguments(C c, D d) { return new QTaskBuilderVoid5Arg4<>(priority(), threadPool(), runnable, a, b, c, d); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid5Arg5 withArguments(C c, D d, E e) { return new QTaskBuilderVoid5Arg5<>(priority(), threadPool(), runnable, a, b, c, d, e); } @@ -2204,7 +2508,11 @@ public QTaskBuilderVoid5Arg2 onThreadPool(QThreadPool newThreadPo } } - public static final class QTaskBuilderVoid5Arg3 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTaskBuilderVoid5Arg3 extends QTaskBuilder{ QTaskBuilderVoid5Arg3(int newPriority, QThreadPool threadPool, Runnable5 runnable, A a, B b, C c) { super(newPriority, threadPool); this.runnable = runnable; @@ -2217,10 +2525,16 @@ public static final class QTaskBuilderVoid5Arg3 extends QTaskBuil private final B b; private final C c; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid5Arg4 withArguments(D d) { return new QTaskBuilderVoid5Arg4<>(priority(), threadPool(), runnable, a, b, c, d); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid5Arg5 withArguments(D d, E e) { return new QTaskBuilderVoid5Arg5<>(priority(), threadPool(), runnable, a, b, c, d, e); } @@ -2238,7 +2552,11 @@ public QTaskBuilderVoid5Arg3 onThreadPool(QThreadPool newThreadPo } } - public static final class QTaskBuilderVoid5Arg4 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTaskBuilderVoid5Arg4 extends QTaskBuilder{ QTaskBuilderVoid5Arg4(int newPriority, QThreadPool threadPool, Runnable5 runnable, A a, B b, C c, D d) { super(newPriority, threadPool); this.runnable = runnable; @@ -2253,6 +2571,9 @@ public static final class QTaskBuilderVoid5Arg4 extends QTaskBuil private final C c; private final D d; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid5Arg5 withArguments(E e) { return new QTaskBuilderVoid5Arg5<>(priority(), threadPool(), runnable, a, b, c, d, e); } @@ -2270,7 +2591,11 @@ public QTaskBuilderVoid5Arg4 onThreadPool(QThreadPool newThreadPo } } - public static final class QTaskBuilderVoid5Arg5 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTaskBuilderVoid5Arg5 extends QTaskBuilder{ QTaskBuilderVoid5Arg5(int newPriority, QThreadPool threadPool, Runnable5 runnable, A a, B b, C c, D d, E e) { super(newPriority, threadPool); this.runnable = runnable; @@ -2299,6 +2624,9 @@ public QTaskBuilderVoid5Arg5 onThreadPool(QThreadPool newThreadPo return this; } + /** + *

See QtConcurrent::QTaskBuilder::spawn()

+ */ @Override public QFuture spawn() { return spawn(threadPool(), priority(), runnable, a, b, c, d, e); @@ -2308,11 +2636,18 @@ private native static QFuture spawn(QThreadPool threadPool Runnable5 runnable, A a, B b, C c, D d, E e); } + /** + *

See QtConcurrent::task(Task&&)

+ */ public static QTaskBuilderVoid6Arg0 task(Runnable6 runnable) { return new QTaskBuilderVoid6Arg0<>(0, null, runnable); } - public static final class QTaskBuilderVoid6Arg0 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTaskBuilderVoid6Arg0 extends QTaskBuilder{ private final Runnable6 runnable; QTaskBuilderVoid6Arg0(int priority, QThreadPool threadPool, Runnable6 runnable) { @@ -2320,26 +2655,44 @@ public static final class QTaskBuilderVoid6Arg0 extends QTaskB this.runnable = runnable; } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid6Arg1 withArguments(A a) { return new QTaskBuilderVoid6Arg1<>(priority(), threadPool(), runnable, a); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid6Arg2 withArguments(A a, B b) { return new QTaskBuilderVoid6Arg2<>(priority(), threadPool(), runnable, a, b); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid6Arg3 withArguments(A a, B b, C c) { return new QTaskBuilderVoid6Arg3<>(priority(), threadPool(), runnable, a, b, c); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid6Arg4 withArguments(A a, B b, C c, D d) { return new QTaskBuilderVoid6Arg4<>(priority(), threadPool(), runnable, a, b, c, d); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid6Arg5 withArguments(A a, B b, C c, D d, E e) { return new QTaskBuilderVoid6Arg5<>(priority(), threadPool(), runnable, a, b, c, d, e); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid6Arg6 withArguments(A a, B b, C c, D d, E e, F f) { return new QTaskBuilderVoid6Arg6<>(priority(), threadPool(), runnable, a, b, c, d, e, f); } @@ -2357,7 +2710,11 @@ public QTaskBuilderVoid6Arg0 onThreadPool(QThreadPool newThrea } } - public static final class QTaskBuilderVoid6Arg1 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTaskBuilderVoid6Arg1 extends QTaskBuilder{ QTaskBuilderVoid6Arg1(int newPriority, QThreadPool threadPool, Runnable6 runnable, A a) { super(newPriority, threadPool); this.runnable = runnable; @@ -2366,22 +2723,37 @@ public static final class QTaskBuilderVoid6Arg1 extends QTaskB private final Runnable6 runnable; private final A a; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid6Arg2 withArguments(B b) { return new QTaskBuilderVoid6Arg2<>(priority(), threadPool(), runnable, a, b); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid6Arg3 withArguments(B b, C c) { return new QTaskBuilderVoid6Arg3<>(priority(), threadPool(), runnable, a, b, c); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid6Arg4 withArguments(B b, C c, D d) { return new QTaskBuilderVoid6Arg4<>(priority(), threadPool(), runnable, a, b, c, d); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid6Arg5 withArguments(B b, C c, D d, E e) { return new QTaskBuilderVoid6Arg5<>(priority(), threadPool(), runnable, a, b, c, d, e); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid6Arg6 withArguments(B b, C c, D d, E e, F f) { return new QTaskBuilderVoid6Arg6<>(priority(), threadPool(), runnable, a, b, c, d, e, f); } @@ -2399,7 +2771,11 @@ public QTaskBuilderVoid6Arg1 onThreadPool(QThreadPool newThrea } } - public static final class QTaskBuilderVoid6Arg2 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTaskBuilderVoid6Arg2 extends QTaskBuilder{ QTaskBuilderVoid6Arg2(int newPriority, QThreadPool threadPool, Runnable6 runnable, A a, B b) { super(newPriority, threadPool); this.runnable = runnable; @@ -2410,18 +2786,30 @@ public static final class QTaskBuilderVoid6Arg2 extends QTaskB private final A a; private final B b; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid6Arg3 withArguments(C c) { return new QTaskBuilderVoid6Arg3<>(priority(), threadPool(), runnable, a, b, c); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid6Arg4 withArguments(C c, D d) { return new QTaskBuilderVoid6Arg4<>(priority(), threadPool(), runnable, a, b, c, d); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid6Arg5 withArguments(C c, D d, E e) { return new QTaskBuilderVoid6Arg5<>(priority(), threadPool(), runnable, a, b, c, d, e); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid6Arg6 withArguments(C c, D d, E e, F f) { return new QTaskBuilderVoid6Arg6<>(priority(), threadPool(), runnable, a, b, c, d, e, f); } @@ -2439,7 +2827,11 @@ public QTaskBuilderVoid6Arg2 onThreadPool(QThreadPool newThrea } } - public static final class QTaskBuilderVoid6Arg3 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTaskBuilderVoid6Arg3 extends QTaskBuilder{ QTaskBuilderVoid6Arg3(int newPriority, QThreadPool threadPool, Runnable6 runnable, A a, B b, C c) { super(newPriority, threadPool); this.runnable = runnable; @@ -2452,14 +2844,23 @@ public static final class QTaskBuilderVoid6Arg3 extends QTaskB private final B b; private final C c; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid6Arg4 withArguments(D d) { return new QTaskBuilderVoid6Arg4<>(priority(), threadPool(), runnable, a, b, c, d); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid6Arg5 withArguments(D d, E e) { return new QTaskBuilderVoid6Arg5<>(priority(), threadPool(), runnable, a, b, c, d, e); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid6Arg6 withArguments(D d, E e, F f) { return new QTaskBuilderVoid6Arg6<>(priority(), threadPool(), runnable, a, b, c, d, e, f); } @@ -2477,7 +2878,11 @@ public QTaskBuilderVoid6Arg3 onThreadPool(QThreadPool newThrea } } - public static final class QTaskBuilderVoid6Arg4 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTaskBuilderVoid6Arg4 extends QTaskBuilder{ QTaskBuilderVoid6Arg4(int newPriority, QThreadPool threadPool, Runnable6 runnable, A a, B b, C c, D d) { super(newPriority, threadPool); this.runnable = runnable; @@ -2492,10 +2897,16 @@ public static final class QTaskBuilderVoid6Arg4 extends QTaskB private final C c; private final D d; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid6Arg5 withArguments(E e) { return new QTaskBuilderVoid6Arg5<>(priority(), threadPool(), runnable, a, b, c, d, e); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid6Arg6 withArguments(E e, F f) { return new QTaskBuilderVoid6Arg6<>(priority(), threadPool(), runnable, a, b, c, d, e, f); } @@ -2513,7 +2924,11 @@ public QTaskBuilderVoid6Arg4 onThreadPool(QThreadPool newThrea } } - public static final class QTaskBuilderVoid6Arg5 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTaskBuilderVoid6Arg5 extends QTaskBuilder{ QTaskBuilderVoid6Arg5(int newPriority, QThreadPool threadPool, Runnable6 runnable, A a, B b, C c, D d, E e) { super(newPriority, threadPool); this.runnable = runnable; @@ -2530,6 +2945,9 @@ public static final class QTaskBuilderVoid6Arg5 extends QTaskB private final D d; private final E e; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid6Arg6 withArguments(F f) { return new QTaskBuilderVoid6Arg6<>(priority(), threadPool(), runnable, a, b, c, d, e, f); } @@ -2547,7 +2965,11 @@ public QTaskBuilderVoid6Arg5 onThreadPool(QThreadPool newThrea } } - public static final class QTaskBuilderVoid6Arg6 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTaskBuilderVoid6Arg6 extends QTaskBuilder{ QTaskBuilderVoid6Arg6(int newPriority, QThreadPool threadPool, Runnable6 runnable, A a, B b, C c, D d, E e, F f) { super(newPriority, threadPool); this.runnable = runnable; @@ -2578,6 +3000,9 @@ public QTaskBuilderVoid6Arg6 onThreadPool(QThreadPool newThrea return this; } + /** + *

See QtConcurrent::QTaskBuilder::spawn()

+ */ @Override public QFuture spawn() { return spawn(threadPool(), priority(), runnable, a, b, c, d, e, f); @@ -2587,11 +3012,18 @@ private native static QFuture spawn(QThreadPool threadP Runnable6 runnable, A a, B b, C c, D d, E e, F f); } + /** + *

See QtConcurrent::task(Task&&)

+ */ public static QTaskBuilderVoid7Arg0 task(Runnable7 runnable) { return new QTaskBuilderVoid7Arg0<>(0, null, runnable); } - public static final class QTaskBuilderVoid7Arg0 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTaskBuilderVoid7Arg0 extends QTaskBuilder{ private final Runnable7 runnable; QTaskBuilderVoid7Arg0(int priority, QThreadPool threadPool, Runnable7 runnable) { @@ -2599,30 +3031,51 @@ public static final class QTaskBuilderVoid7Arg0 extends QTa this.runnable = runnable; } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid7Arg1 withArguments(A a) { return new QTaskBuilderVoid7Arg1<>(priority(), threadPool(), runnable, a); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid7Arg2 withArguments(A a, B b) { return new QTaskBuilderVoid7Arg2<>(priority(), threadPool(), runnable, a, b); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid7Arg3 withArguments(A a, B b, C c) { return new QTaskBuilderVoid7Arg3<>(priority(), threadPool(), runnable, a, b, c); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid7Arg4 withArguments(A a, B b, C c, D d) { return new QTaskBuilderVoid7Arg4<>(priority(), threadPool(), runnable, a, b, c, d); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid7Arg5 withArguments(A a, B b, C c, D d, E e) { return new QTaskBuilderVoid7Arg5<>(priority(), threadPool(), runnable, a, b, c, d, e); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid7Arg6 withArguments(A a, B b, C c, D d, E e, F f) { return new QTaskBuilderVoid7Arg6<>(priority(), threadPool(), runnable, a, b, c, d, e, f); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid7Arg7 withArguments(A a, B b, C c, D d, E e, F f, G g) { return new QTaskBuilderVoid7Arg7<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g); } @@ -2640,7 +3093,11 @@ public QTaskBuilderVoid7Arg0 onThreadPool(QThreadPool newTh } } - public static final class QTaskBuilderVoid7Arg1 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTaskBuilderVoid7Arg1 extends QTaskBuilder{ QTaskBuilderVoid7Arg1(int newPriority, QThreadPool threadPool, Runnable7 runnable, A a) { super(newPriority, threadPool); this.runnable = runnable; @@ -2649,26 +3106,44 @@ public static final class QTaskBuilderVoid7Arg1 extends QTa private final Runnable7 runnable; private final A a; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid7Arg2 withArguments(B b) { return new QTaskBuilderVoid7Arg2<>(priority(), threadPool(), runnable, a, b); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid7Arg3 withArguments(B b, C c) { return new QTaskBuilderVoid7Arg3<>(priority(), threadPool(), runnable, a, b, c); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid7Arg4 withArguments(B b, C c, D d) { return new QTaskBuilderVoid7Arg4<>(priority(), threadPool(), runnable, a, b, c, d); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid7Arg5 withArguments(B b, C c, D d, E e) { return new QTaskBuilderVoid7Arg5<>(priority(), threadPool(), runnable, a, b, c, d, e); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid7Arg6 withArguments(B b, C c, D d, E e, F f) { return new QTaskBuilderVoid7Arg6<>(priority(), threadPool(), runnable, a, b, c, d, e, f); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid7Arg7 withArguments(B b, C c, D d, E e, F f, G g) { return new QTaskBuilderVoid7Arg7<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g); } @@ -2686,7 +3161,11 @@ public QTaskBuilderVoid7Arg1 onThreadPool(QThreadPool newTh } } - public static final class QTaskBuilderVoid7Arg2 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTaskBuilderVoid7Arg2 extends QTaskBuilder{ QTaskBuilderVoid7Arg2(int newPriority, QThreadPool threadPool, Runnable7 runnable, A a, B b) { super(newPriority, threadPool); this.runnable = runnable; @@ -2697,22 +3176,37 @@ public static final class QTaskBuilderVoid7Arg2 extends QTa private final A a; private final B b; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid7Arg3 withArguments(C c) { return new QTaskBuilderVoid7Arg3<>(priority(), threadPool(), runnable, a, b, c); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid7Arg4 withArguments(C c, D d) { return new QTaskBuilderVoid7Arg4<>(priority(), threadPool(), runnable, a, b, c, d); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid7Arg5 withArguments(C c, D d, E e) { return new QTaskBuilderVoid7Arg5<>(priority(), threadPool(), runnable, a, b, c, d, e); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid7Arg6 withArguments(C c, D d, E e, F f) { return new QTaskBuilderVoid7Arg6<>(priority(), threadPool(), runnable, a, b, c, d, e, f); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid7Arg7 withArguments(C c, D d, E e, F f, G g) { return new QTaskBuilderVoid7Arg7<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g); } @@ -2730,7 +3224,11 @@ public QTaskBuilderVoid7Arg2 onThreadPool(QThreadPool newTh } } - public static final class QTaskBuilderVoid7Arg3 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTaskBuilderVoid7Arg3 extends QTaskBuilder{ QTaskBuilderVoid7Arg3(int newPriority, QThreadPool threadPool, Runnable7 runnable, A a, B b, C c) { super(newPriority, threadPool); this.runnable = runnable; @@ -2743,18 +3241,30 @@ public static final class QTaskBuilderVoid7Arg3 extends QTa private final B b; private final C c; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid7Arg4 withArguments(D d) { return new QTaskBuilderVoid7Arg4<>(priority(), threadPool(), runnable, a, b, c, d); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid7Arg5 withArguments(D d, E e) { return new QTaskBuilderVoid7Arg5<>(priority(), threadPool(), runnable, a, b, c, d, e); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid7Arg6 withArguments(D d, E e, F f) { return new QTaskBuilderVoid7Arg6<>(priority(), threadPool(), runnable, a, b, c, d, e, f); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid7Arg7 withArguments(D d, E e, F f, G g) { return new QTaskBuilderVoid7Arg7<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g); } @@ -2772,7 +3282,11 @@ public QTaskBuilderVoid7Arg3 onThreadPool(QThreadPool newTh } } - public static final class QTaskBuilderVoid7Arg4 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTaskBuilderVoid7Arg4 extends QTaskBuilder{ QTaskBuilderVoid7Arg4(int newPriority, QThreadPool threadPool, Runnable7 runnable, A a, B b, C c, D d) { super(newPriority, threadPool); this.runnable = runnable; @@ -2787,14 +3301,23 @@ public static final class QTaskBuilderVoid7Arg4 extends QTa private final C c; private final D d; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid7Arg5 withArguments(E e) { return new QTaskBuilderVoid7Arg5<>(priority(), threadPool(), runnable, a, b, c, d, e); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid7Arg6 withArguments(E e, F f) { return new QTaskBuilderVoid7Arg6<>(priority(), threadPool(), runnable, a, b, c, d, e, f); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid7Arg7 withArguments(E e, F f, G g) { return new QTaskBuilderVoid7Arg7<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g); } @@ -2812,7 +3335,11 @@ public QTaskBuilderVoid7Arg4 onThreadPool(QThreadPool newTh } } - public static final class QTaskBuilderVoid7Arg5 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTaskBuilderVoid7Arg5 extends QTaskBuilder{ QTaskBuilderVoid7Arg5(int newPriority, QThreadPool threadPool, Runnable7 runnable, A a, B b, C c, D d, E e) { super(newPriority, threadPool); this.runnable = runnable; @@ -2829,10 +3356,16 @@ public static final class QTaskBuilderVoid7Arg5 extends QTa private final D d; private final E e; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid7Arg6 withArguments(F f) { return new QTaskBuilderVoid7Arg6<>(priority(), threadPool(), runnable, a, b, c, d, e, f); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid7Arg7 withArguments(F f, G g) { return new QTaskBuilderVoid7Arg7<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g); } @@ -2850,7 +3383,11 @@ public QTaskBuilderVoid7Arg5 onThreadPool(QThreadPool newTh } } - public static final class QTaskBuilderVoid7Arg6 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTaskBuilderVoid7Arg6 extends QTaskBuilder{ QTaskBuilderVoid7Arg6(int newPriority, QThreadPool threadPool, Runnable7 runnable, A a, B b, C c, D d, E e, F f) { super(newPriority, threadPool); this.runnable = runnable; @@ -2869,6 +3406,9 @@ public static final class QTaskBuilderVoid7Arg6 extends QTa private final E e; private final F f; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid7Arg7 withArguments(G g) { return new QTaskBuilderVoid7Arg7<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g); } @@ -2886,7 +3426,11 @@ public QTaskBuilderVoid7Arg6 onThreadPool(QThreadPool newTh } } - public static final class QTaskBuilderVoid7Arg7 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTaskBuilderVoid7Arg7 extends QTaskBuilder{ QTaskBuilderVoid7Arg7(int newPriority, QThreadPool threadPool, Runnable7 runnable, A a, B b, C c, D d, E e, F f, G g) { super(newPriority, threadPool); this.runnable = runnable; @@ -2919,6 +3463,9 @@ public QTaskBuilderVoid7Arg7 onThreadPool(QThreadPool newTh return this; } + /** + *

See QtConcurrent::QTaskBuilder::spawn()

+ */ @Override public QFuture spawn() { return spawn(threadPool(), priority(), runnable, a, b, c, d, e, f, g); @@ -2928,11 +3475,18 @@ private native static QFuture spawn(QThreadPool thre Runnable7 runnable, A a, B b, C c, D d, E e, F f, G g); } + /** + *

See QtConcurrent::task(Task&&)

+ */ public static QTaskBuilderVoid8Arg0 task(Runnable8 runnable) { return new QTaskBuilderVoid8Arg0<>(0, null, runnable); } - public static final class QTaskBuilderVoid8Arg0 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTaskBuilderVoid8Arg0 extends QTaskBuilder{ private final Runnable8 runnable; QTaskBuilderVoid8Arg0(int priority, QThreadPool threadPool, Runnable8 runnable) { @@ -2940,34 +3494,58 @@ public static final class QTaskBuilderVoid8Arg0 extends this.runnable = runnable; } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid8Arg1 withArguments(A a) { return new QTaskBuilderVoid8Arg1<>(priority(), threadPool(), runnable, a); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid8Arg2 withArguments(A a, B b) { return new QTaskBuilderVoid8Arg2<>(priority(), threadPool(), runnable, a, b); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid8Arg3 withArguments(A a, B b, C c) { return new QTaskBuilderVoid8Arg3<>(priority(), threadPool(), runnable, a, b, c); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid8Arg4 withArguments(A a, B b, C c, D d) { return new QTaskBuilderVoid8Arg4<>(priority(), threadPool(), runnable, a, b, c, d); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid8Arg5 withArguments(A a, B b, C c, D d, E e) { return new QTaskBuilderVoid8Arg5<>(priority(), threadPool(), runnable, a, b, c, d, e); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid8Arg6 withArguments(A a, B b, C c, D d, E e, F f) { return new QTaskBuilderVoid8Arg6<>(priority(), threadPool(), runnable, a, b, c, d, e, f); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid8Arg7 withArguments(A a, B b, C c, D d, E e, F f, G g) { return new QTaskBuilderVoid8Arg7<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid8Arg8 withArguments(A a, B b, C c, D d, E e, F f, G g, H h) { return new QTaskBuilderVoid8Arg8<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g, h); } @@ -2985,7 +3563,11 @@ public QTaskBuilderVoid8Arg0 onThreadPool(QThreadPool ne } } - public static final class QTaskBuilderVoid8Arg1 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTaskBuilderVoid8Arg1 extends QTaskBuilder{ QTaskBuilderVoid8Arg1(int newPriority, QThreadPool threadPool, Runnable8 runnable, A a) { super(newPriority, threadPool); this.runnable = runnable; @@ -2994,30 +3576,51 @@ public static final class QTaskBuilderVoid8Arg1 extends private final Runnable8 runnable; private final A a; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid8Arg2 withArguments(B b) { return new QTaskBuilderVoid8Arg2<>(priority(), threadPool(), runnable, a, b); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid8Arg3 withArguments(B b, C c) { return new QTaskBuilderVoid8Arg3<>(priority(), threadPool(), runnable, a, b, c); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid8Arg4 withArguments(B b, C c, D d) { return new QTaskBuilderVoid8Arg4<>(priority(), threadPool(), runnable, a, b, c, d); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid8Arg5 withArguments(B b, C c, D d, E e) { return new QTaskBuilderVoid8Arg5<>(priority(), threadPool(), runnable, a, b, c, d, e); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid8Arg6 withArguments(B b, C c, D d, E e, F f) { return new QTaskBuilderVoid8Arg6<>(priority(), threadPool(), runnable, a, b, c, d, e, f); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid8Arg7 withArguments(B b, C c, D d, E e, F f, G g) { return new QTaskBuilderVoid8Arg7<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid8Arg8 withArguments(B b, C c, D d, E e, F f, G g, H h) { return new QTaskBuilderVoid8Arg8<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g, h); } @@ -3035,8 +3638,12 @@ public QTaskBuilderVoid8Arg1 onThreadPool(QThreadPool ne } } - public static final class QTaskBuilderVoid8Arg2 extends QTaskBuilderVoid{ - QTaskBuilderVoid8Arg2(int newPriority, QThreadPool threadPool, Runnable8 runnable, A a, B b) { + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTaskBuilderVoid8Arg2 extends QTaskBuilder{ + QTaskBuilderVoid8Arg2(int newPriority, QThreadPool threadPool, Runnable8 runnable, A a, B b) { super(newPriority, threadPool); this.runnable = runnable; this.a = a; @@ -3046,26 +3653,44 @@ public static final class QTaskBuilderVoid8Arg2 extends private final A a; private final B b; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid8Arg3 withArguments(C c) { return new QTaskBuilderVoid8Arg3<>(priority(), threadPool(), runnable, a, b, c); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid8Arg4 withArguments(C c, D d) { return new QTaskBuilderVoid8Arg4<>(priority(), threadPool(), runnable, a, b, c, d); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid8Arg5 withArguments(C c, D d, E e) { return new QTaskBuilderVoid8Arg5<>(priority(), threadPool(), runnable, a, b, c, d, e); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid8Arg6 withArguments(C c, D d, E e, F f) { return new QTaskBuilderVoid8Arg6<>(priority(), threadPool(), runnable, a, b, c, d, e, f); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid8Arg7 withArguments(C c, D d, E e, F f, G g) { return new QTaskBuilderVoid8Arg7<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid8Arg8 withArguments(C c, D d, E e, F f, G g, H h) { return new QTaskBuilderVoid8Arg8<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g, h); } @@ -3083,7 +3708,11 @@ public QTaskBuilderVoid8Arg2 onThreadPool(QThreadPool ne } } - public static final class QTaskBuilderVoid8Arg3 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTaskBuilderVoid8Arg3 extends QTaskBuilder{ QTaskBuilderVoid8Arg3(int newPriority, QThreadPool threadPool, Runnable8 runnable, A a, B b, C c) { super(newPriority, threadPool); this.runnable = runnable; @@ -3096,22 +3725,37 @@ public static final class QTaskBuilderVoid8Arg3 extends private final B b; private final C c; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid8Arg4 withArguments(D d) { return new QTaskBuilderVoid8Arg4<>(priority(), threadPool(), runnable, a, b, c, d); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid8Arg5 withArguments(D d, E e) { return new QTaskBuilderVoid8Arg5<>(priority(), threadPool(), runnable, a, b, c, d, e); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid8Arg6 withArguments(D d, E e, F f) { return new QTaskBuilderVoid8Arg6<>(priority(), threadPool(), runnable, a, b, c, d, e, f); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid8Arg7 withArguments(D d, E e, F f, G g) { return new QTaskBuilderVoid8Arg7<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid8Arg8 withArguments(D d, E e, F f, G g, H h) { return new QTaskBuilderVoid8Arg8<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g, h); } @@ -3129,7 +3773,11 @@ public QTaskBuilderVoid8Arg3 onThreadPool(QThreadPool ne } } - public static final class QTaskBuilderVoid8Arg4 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTaskBuilderVoid8Arg4 extends QTaskBuilder{ QTaskBuilderVoid8Arg4(int newPriority, QThreadPool threadPool, Runnable8 runnable, A a, B b, C c, D d) { super(newPriority, threadPool); this.runnable = runnable; @@ -3144,18 +3792,30 @@ public static final class QTaskBuilderVoid8Arg4 extends private final C c; private final D d; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid8Arg5 withArguments(E e) { return new QTaskBuilderVoid8Arg5<>(priority(), threadPool(), runnable, a, b, c, d, e); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid8Arg6 withArguments(E e, F f) { return new QTaskBuilderVoid8Arg6<>(priority(), threadPool(), runnable, a, b, c, d, e, f); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid8Arg7 withArguments(E e, F f, G g) { return new QTaskBuilderVoid8Arg7<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid8Arg8 withArguments(E e, F f, G g, H h) { return new QTaskBuilderVoid8Arg8<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g, h); } @@ -3173,7 +3833,11 @@ public QTaskBuilderVoid8Arg4 onThreadPool(QThreadPool ne } } - public static final class QTaskBuilderVoid8Arg5 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTaskBuilderVoid8Arg5 extends QTaskBuilder{ QTaskBuilderVoid8Arg5(int newPriority, QThreadPool threadPool, Runnable8 runnable, A a, B b, C c, D d, E e) { super(newPriority, threadPool); this.runnable = runnable; @@ -3190,14 +3854,23 @@ public static final class QTaskBuilderVoid8Arg5 extends private final D d; private final E e; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid8Arg6 withArguments(F f) { return new QTaskBuilderVoid8Arg6<>(priority(), threadPool(), runnable, a, b, c, d, e, f); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid8Arg7 withArguments(F f, G g) { return new QTaskBuilderVoid8Arg7<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid8Arg8 withArguments(F f, G g, H h) { return new QTaskBuilderVoid8Arg8<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g, h); } @@ -3215,7 +3888,11 @@ public QTaskBuilderVoid8Arg5 onThreadPool(QThreadPool ne } } - public static final class QTaskBuilderVoid8Arg6 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTaskBuilderVoid8Arg6 extends QTaskBuilder{ QTaskBuilderVoid8Arg6(int newPriority, QThreadPool threadPool, Runnable8 runnable, A a, B b, C c, D d, E e, F f) { super(newPriority, threadPool); this.runnable = runnable; @@ -3234,10 +3911,16 @@ public static final class QTaskBuilderVoid8Arg6 extends private final E e; private final F f; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid8Arg7 withArguments(G g) { return new QTaskBuilderVoid8Arg7<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid8Arg8 withArguments(G g, H h) { return new QTaskBuilderVoid8Arg8<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g, h); } @@ -3255,7 +3938,11 @@ public QTaskBuilderVoid8Arg6 onThreadPool(QThreadPool ne } } - public static final class QTaskBuilderVoid8Arg7 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTaskBuilderVoid8Arg7 extends QTaskBuilder{ QTaskBuilderVoid8Arg7(int newPriority, QThreadPool threadPool, Runnable8 runnable, A a, B b, C c, D d, E e, F f, G g) { super(newPriority, threadPool); this.runnable = runnable; @@ -3276,6 +3963,9 @@ public static final class QTaskBuilderVoid8Arg7 extends private final F f; private final G g; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid8Arg8 withArguments(H h) { return new QTaskBuilderVoid8Arg8<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g, h); } @@ -3293,7 +3983,11 @@ public QTaskBuilderVoid8Arg7 onThreadPool(QThreadPool ne } } - public static final class QTaskBuilderVoid8Arg8 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTaskBuilderVoid8Arg8 extends QTaskBuilder{ QTaskBuilderVoid8Arg8(int newPriority, QThreadPool threadPool, Runnable8 runnable, A a, B b, C c, D d, E e, F f, G g, H h) { super(newPriority, threadPool); this.runnable = runnable; @@ -3327,6 +4021,10 @@ public QTaskBuilderVoid8Arg8 onThreadPool(QThreadPool ne super.onThreadPool(newThreadPool); return this; } + + /** + *

See QtConcurrent::QTaskBuilder::spawn()

+ */ @Override public QFuture spawn() { return spawn(threadPool(), priority(), runnable, a, b, c, d, e, f, g, h); @@ -3336,11 +4034,18 @@ private native static QFuture spawn(QThreadPool t Runnable8 runnable, A a, B b, C c, D d, E e, F f, G g, H h); } + /** + *

See QtConcurrent::task(Task&&)

+ */ public static QTaskBuilderVoid9Arg0 task(Runnable9 runnable) { return new QTaskBuilderVoid9Arg0<>(0, null, runnable); } - public static final class QTaskBuilderVoid9Arg0 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTaskBuilderVoid9Arg0 extends QTaskBuilder{ private final Runnable9 runnable; QTaskBuilderVoid9Arg0(int priority, QThreadPool threadPool, Runnable9 runnable) { @@ -3348,38 +4053,65 @@ public static final class QTaskBuilderVoid9Arg0 exten this.runnable = runnable; } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid9Arg1 withArguments(A a) { return new QTaskBuilderVoid9Arg1<>(priority(), threadPool(), runnable, a); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid9Arg2 withArguments(A a, B b) { return new QTaskBuilderVoid9Arg2<>(priority(), threadPool(), runnable, a, b); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid9Arg3 withArguments(A a, B b, C c) { return new QTaskBuilderVoid9Arg3<>(priority(), threadPool(), runnable, a, b, c); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid9Arg4 withArguments(A a, B b, C c, D d) { return new QTaskBuilderVoid9Arg4<>(priority(), threadPool(), runnable, a, b, c, d); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid9Arg5 withArguments(A a, B b, C c, D d, E e) { return new QTaskBuilderVoid9Arg5<>(priority(), threadPool(), runnable, a, b, c, d, e); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid9Arg6 withArguments(A a, B b, C c, D d, E e, F f) { return new QTaskBuilderVoid9Arg6<>(priority(), threadPool(), runnable, a, b, c, d, e, f); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid9Arg7 withArguments(A a, B b, C c, D d, E e, F f, G g) { return new QTaskBuilderVoid9Arg7<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid9Arg8 withArguments(A a, B b, C c, D d, E e, F f, G g, H h) { return new QTaskBuilderVoid9Arg8<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g, h); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid9Arg9 withArguments(A a, B b, C c, D d, E e, F f, G g, H h, I i) { return new QTaskBuilderVoid9Arg9<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g, h, i); } @@ -3397,7 +4129,11 @@ public QTaskBuilderVoid9Arg0 onThreadPool(QThreadPool } } - public static final class QTaskBuilderVoid9Arg1 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTaskBuilderVoid9Arg1 extends QTaskBuilder{ QTaskBuilderVoid9Arg1(int newPriority, QThreadPool threadPool, Runnable9 runnable, A a) { super(newPriority, threadPool); this.runnable = runnable; @@ -3406,34 +4142,58 @@ public static final class QTaskBuilderVoid9Arg1 exten private final Runnable9 runnable; private final A a; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid9Arg2 withArguments(B b) { return new QTaskBuilderVoid9Arg2<>(priority(), threadPool(), runnable, a, b); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid9Arg3 withArguments(B b, C c) { return new QTaskBuilderVoid9Arg3<>(priority(), threadPool(), runnable, a, b, c); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid9Arg4 withArguments(B b, C c, D d) { return new QTaskBuilderVoid9Arg4<>(priority(), threadPool(), runnable, a, b, c, d); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid9Arg5 withArguments(B b, C c, D d, E e) { return new QTaskBuilderVoid9Arg5<>(priority(), threadPool(), runnable, a, b, c, d, e); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid9Arg6 withArguments(B b, C c, D d, E e, F f) { return new QTaskBuilderVoid9Arg6<>(priority(), threadPool(), runnable, a, b, c, d, e, f); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid9Arg7 withArguments(B b, C c, D d, E e, F f, G g) { return new QTaskBuilderVoid9Arg7<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid9Arg8 withArguments(B b, C c, D d, E e, F f, G g, H h) { return new QTaskBuilderVoid9Arg8<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g, h); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid9Arg9 withArguments(B b, C c, D d, E e, F f, G g, H h, I i) { return new QTaskBuilderVoid9Arg9<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g, h, i); } @@ -3451,7 +4211,11 @@ public QTaskBuilderVoid9Arg1 onThreadPool(QThreadPool } } - public static final class QTaskBuilderVoid9Arg2 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTaskBuilderVoid9Arg2 extends QTaskBuilder{ QTaskBuilderVoid9Arg2(int newPriority, QThreadPool threadPool, Runnable9 runnable, A a, B b) { super(newPriority, threadPool); this.runnable = runnable; @@ -3462,30 +4226,51 @@ public static final class QTaskBuilderVoid9Arg2 exten private final A a; private final B b; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid9Arg3 withArguments(C c) { return new QTaskBuilderVoid9Arg3<>(priority(), threadPool(), runnable, a, b, c); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid9Arg4 withArguments(C c, D d) { return new QTaskBuilderVoid9Arg4<>(priority(), threadPool(), runnable, a, b, c, d); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid9Arg5 withArguments(C c, D d, E e) { return new QTaskBuilderVoid9Arg5<>(priority(), threadPool(), runnable, a, b, c, d, e); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid9Arg6 withArguments(C c, D d, E e, F f) { return new QTaskBuilderVoid9Arg6<>(priority(), threadPool(), runnable, a, b, c, d, e, f); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid9Arg7 withArguments(C c, D d, E e, F f, G g) { return new QTaskBuilderVoid9Arg7<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid9Arg8 withArguments(C c, D d, E e, F f, G g, H h) { return new QTaskBuilderVoid9Arg8<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g, h); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid9Arg9 withArguments(C c, D d, E e, F f, G g, H h, I i) { return new QTaskBuilderVoid9Arg9<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g, h, i); } @@ -3503,7 +4288,11 @@ public QTaskBuilderVoid9Arg2 onThreadPool(QThreadPool } } - public static final class QTaskBuilderVoid9Arg3 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTaskBuilderVoid9Arg3 extends QTaskBuilder{ QTaskBuilderVoid9Arg3(int newPriority, QThreadPool threadPool, Runnable9 runnable, A a, B b, C c) { super(newPriority, threadPool); this.runnable = runnable; @@ -3516,26 +4305,44 @@ public static final class QTaskBuilderVoid9Arg3 exten private final B b; private final C c; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid9Arg4 withArguments(D d) { return new QTaskBuilderVoid9Arg4<>(priority(), threadPool(), runnable, a, b, c, d); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid9Arg5 withArguments(D d, E e) { return new QTaskBuilderVoid9Arg5<>(priority(), threadPool(), runnable, a, b, c, d, e); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid9Arg6 withArguments(D d, E e, F f) { return new QTaskBuilderVoid9Arg6<>(priority(), threadPool(), runnable, a, b, c, d, e, f); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid9Arg7 withArguments(D d, E e, F f, G g) { return new QTaskBuilderVoid9Arg7<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid9Arg8 withArguments(D d, E e, F f, G g, H h) { return new QTaskBuilderVoid9Arg8<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g, h); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid9Arg9 withArguments(D d, E e, F f, G g, H h, I i) { return new QTaskBuilderVoid9Arg9<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g, h, i); } @@ -3553,7 +4360,11 @@ public QTaskBuilderVoid9Arg3 onThreadPool(QThreadPool } } - public static final class QTaskBuilderVoid9Arg4 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTaskBuilderVoid9Arg4 extends QTaskBuilder{ QTaskBuilderVoid9Arg4(int newPriority, QThreadPool threadPool, Runnable9 runnable, A a, B b, C c, D d) { super(newPriority, threadPool); this.runnable = runnable; @@ -3568,22 +4379,37 @@ public static final class QTaskBuilderVoid9Arg4 exten private final C c; private final D d; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid9Arg5 withArguments(E e) { return new QTaskBuilderVoid9Arg5<>(priority(), threadPool(), runnable, a, b, c, d, e); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid9Arg6 withArguments(E e, F f) { return new QTaskBuilderVoid9Arg6<>(priority(), threadPool(), runnable, a, b, c, d, e, f); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid9Arg7 withArguments(E e, F f, G g) { return new QTaskBuilderVoid9Arg7<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid9Arg8 withArguments(E e, F f, G g, H h) { return new QTaskBuilderVoid9Arg8<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g, h); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid9Arg9 withArguments(E e, F f, G g, H h, I i) { return new QTaskBuilderVoid9Arg9<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g, h, i); } @@ -3601,7 +4427,11 @@ public QTaskBuilderVoid9Arg4 onThreadPool(QThreadPool } } - public static final class QTaskBuilderVoid9Arg5 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTaskBuilderVoid9Arg5 extends QTaskBuilder{ QTaskBuilderVoid9Arg5(int newPriority, QThreadPool threadPool, Runnable9 runnable, A a, B b, C c, D d, E e) { super(newPriority, threadPool); this.runnable = runnable; @@ -3618,18 +4448,30 @@ public static final class QTaskBuilderVoid9Arg5 exten private final D d; private final E e; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid9Arg6 withArguments(F f) { return new QTaskBuilderVoid9Arg6<>(priority(), threadPool(), runnable, a, b, c, d, e, f); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid9Arg7 withArguments(F f, G g) { return new QTaskBuilderVoid9Arg7<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid9Arg8 withArguments(F f, G g, H h) { return new QTaskBuilderVoid9Arg8<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g, h); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid9Arg9 withArguments(F f, G g, H h, I i) { return new QTaskBuilderVoid9Arg9<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g, h, i); } @@ -3647,7 +4489,11 @@ public QTaskBuilderVoid9Arg5 onThreadPool(QThreadPool } } - public static final class QTaskBuilderVoid9Arg6 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTaskBuilderVoid9Arg6 extends QTaskBuilder{ QTaskBuilderVoid9Arg6(int newPriority, QThreadPool threadPool, Runnable9 runnable, A a, B b, C c, D d, E e, F f) { super(newPriority, threadPool); this.runnable = runnable; @@ -3666,14 +4512,23 @@ public static final class QTaskBuilderVoid9Arg6 exten private final E e; private final F f; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid9Arg7 withArguments(G g) { return new QTaskBuilderVoid9Arg7<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid9Arg8 withArguments(G g, H h) { return new QTaskBuilderVoid9Arg8<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g, h); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid9Arg9 withArguments(G g, H h, I i) { return new QTaskBuilderVoid9Arg9<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g, h, i); } @@ -3691,7 +4546,11 @@ public QTaskBuilderVoid9Arg6 onThreadPool(QThreadPool } } - public static final class QTaskBuilderVoid9Arg7 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTaskBuilderVoid9Arg7 extends QTaskBuilder{ QTaskBuilderVoid9Arg7(int newPriority, QThreadPool threadPool, Runnable9 runnable, A a, B b, C c, D d, E e, F f, G g) { super(newPriority, threadPool); this.runnable = runnable; @@ -3712,10 +4571,16 @@ public static final class QTaskBuilderVoid9Arg7 exten private final F f; private final G g; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid9Arg8 withArguments(H h) { return new QTaskBuilderVoid9Arg8<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g, h); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid9Arg9 withArguments(H h, I i) { return new QTaskBuilderVoid9Arg9<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g, h, i); } @@ -3733,7 +4598,11 @@ public QTaskBuilderVoid9Arg7 onThreadPool(QThreadPool } } - public static final class QTaskBuilderVoid9Arg8 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTaskBuilderVoid9Arg8 extends QTaskBuilder{ QTaskBuilderVoid9Arg8(int newPriority, QThreadPool threadPool, Runnable9 runnable, A a, B b, C c, D d, E e, F f, G g, H h) { super(newPriority, threadPool); this.runnable = runnable; @@ -3756,6 +4625,9 @@ public static final class QTaskBuilderVoid9Arg8 exten private final G g; private final H h; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTaskBuilderVoid9Arg9 withArguments(I i) { return new QTaskBuilderVoid9Arg9<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g, h, i); } @@ -3773,7 +4645,11 @@ public QTaskBuilderVoid9Arg8 onThreadPool(QThreadPool } } - public static final class QTaskBuilderVoid9Arg9 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTaskBuilderVoid9Arg9 extends QTaskBuilder{ QTaskBuilderVoid9Arg9(int newPriority, QThreadPool threadPool, Runnable9 runnable, A a, B b, C c, D d, E e, F f, G g, H h, I i) { super(newPriority, threadPool); this.runnable = runnable; @@ -3798,6 +4674,9 @@ public static final class QTaskBuilderVoid9Arg9 exten private final H h; private final I i; + /** + *

See QtConcurrent::QTaskBuilder::spawn()

+ */ @Override public QFuture spawn() { return spawn(threadPool(), priority(), runnable, a, b, c, d, e, f, g, h, i); @@ -3818,11 +4697,18 @@ private native static QFuture spawn(QThreadPoo Runnable9 runnable, A a, B b, C c, D d, E e, F f, G g, H h, I i); } + /** + *

See QtConcurrent::task(Task&&)

+ */ public static QTypedTaskBuilder0Arg0 task(java.util.concurrent.Callable callable) { return new QTypedTaskBuilder0Arg0<>(0, null, callable); } - public static class QTypedTaskBuilder0Arg0 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static class QTypedTaskBuilder0Arg0 extends QTaskBuilder{ QTypedTaskBuilder0Arg0(int newPriority, QThreadPool threadPool, java.util.concurrent.Callable callable) { super(newPriority, threadPool); this.callable = callable; @@ -3841,6 +4727,9 @@ public QTypedTaskBuilder0Arg0 onThreadPool(QThreadPool newThreadPool) { return this; } + /** + *

See QtConcurrent::QTaskBuilder::spawn()

+ */ @Override public QFuture spawn() { return spawn(threadPool(), priority(), callable); @@ -3849,11 +4738,18 @@ public QFuture spawn() { private native static QFuture spawn(QThreadPool threadPool, int priority, java.util.concurrent.Callable callable); } + /** + *

See QtConcurrent::task(Task&&)

+ */ public static QTypedTaskBuilder1Arg0 task(Callable1 callable) { return new QTypedTaskBuilder1Arg0<>(0, null, callable); } - public static final class QTypedTaskBuilder1Arg0 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTypedTaskBuilder1Arg0 extends QTaskBuilder{ private final Callable1 callable; QTypedTaskBuilder1Arg0(int priority, QThreadPool threadPool, Callable1 callable) { @@ -3861,6 +4757,9 @@ public static final class QTypedTaskBuilder1Arg0 extends QTypedTaskBuilder this.callable = callable; } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder1Arg1 withArguments(A a) { return new QTypedTaskBuilder1Arg1<>(priority(), threadPool(), callable, a); } @@ -3878,7 +4777,11 @@ public QTypedTaskBuilder1Arg0 onThreadPool(QThreadPool newThreadPool) { } } - public static class QTypedTaskBuilder1Arg1 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static class QTypedTaskBuilder1Arg1 extends QTaskBuilder{ QTypedTaskBuilder1Arg1(int newPriority, QThreadPool threadPool, Callable1 callable, A a) { super(newPriority, threadPool); this.callable = callable; @@ -3899,6 +4802,9 @@ public QTypedTaskBuilder1Arg1 onThreadPool(QThreadPool newThreadPool) { return this; } + /** + *

See QtConcurrent::QTaskBuilder::spawn()

+ */ @Override public QFuture spawn() { return spawn(threadPool(), priority(), callable, a); @@ -3908,11 +4814,18 @@ private native static QFuture spawn(QThreadPool threadPool, int priori Callable1 callable, A a); } + /** + *

See QtConcurrent::task(Task&&)

+ */ public static QTypedTaskBuilder2Arg0 task(Callable2 callable) { return new QTypedTaskBuilder2Arg0<>(0, null, callable); } - public static final class QTypedTaskBuilder2Arg0 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTypedTaskBuilder2Arg0 extends QTaskBuilder{ private final Callable2 callable; QTypedTaskBuilder2Arg0(int priority, QThreadPool threadPool, Callable2 callable) { @@ -3920,10 +4833,16 @@ public static final class QTypedTaskBuilder2Arg0 extends QTypedTaskBuil this.callable = callable; } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder2Arg1 withArguments(A a) { return new QTypedTaskBuilder2Arg1<>(priority(), threadPool(), callable, a); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder2Arg2 withArguments(A a, B b) { return new QTypedTaskBuilder2Arg2<>(priority(), threadPool(), callable, a, b); } @@ -3941,7 +4860,11 @@ public QTypedTaskBuilder2Arg0 onThreadPool(QThreadPool newThreadPool) { } } - public static class QTypedTaskBuilder2Arg1 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static class QTypedTaskBuilder2Arg1 extends QTaskBuilder{ QTypedTaskBuilder2Arg1(int newPriority, QThreadPool threadPool, Callable2 callable, A a) { super(newPriority, threadPool); this.callable = callable; @@ -3950,6 +4873,9 @@ public static class QTypedTaskBuilder2Arg1 extends QTypedTaskBuilder private final Callable2 callable; private final A a; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder2Arg2 withArguments(B b) { return new QTypedTaskBuilder2Arg2<>(priority(), threadPool(), callable, a, b); } @@ -3967,7 +4893,11 @@ public QTypedTaskBuilder2Arg1 onThreadPool(QThreadPool newThreadPool) { } } - public static final class QTypedTaskBuilder2Arg2 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTypedTaskBuilder2Arg2 extends QTaskBuilder{ QTypedTaskBuilder2Arg2(int newPriority, QThreadPool threadPool, Callable2 callable, A a, B b) { super(newPriority, threadPool); this.callable = callable; @@ -3990,6 +4920,9 @@ public QTypedTaskBuilder2Arg2 onThreadPool(QThreadPool newThreadPool) { return this; } + /** + *

See QtConcurrent::QTaskBuilder::spawn()

+ */ @Override public QFuture spawn() { return spawn(threadPool(), priority(), callable, a, b); @@ -3999,11 +4932,18 @@ private native static QFuture spawn(QThreadPool threadPool, int pri Callable2 callable, A a, B b); } + /** + *

See QtConcurrent::task(Task&&)

+ */ public static QTypedTaskBuilder3Arg0 task(Callable3 callable) { return new QTypedTaskBuilder3Arg0<>(0, null, callable); } - public static final class QTypedTaskBuilder3Arg0 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTypedTaskBuilder3Arg0 extends QTaskBuilder{ private final Callable3 callable; QTypedTaskBuilder3Arg0(int priority, QThreadPool threadPool, Callable3 callable) { @@ -4011,14 +4951,23 @@ public static final class QTypedTaskBuilder3Arg0 extends QTypedTaskB this.callable = callable; } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder3Arg1 withArguments(A a) { return new QTypedTaskBuilder3Arg1<>(priority(), threadPool(), callable, a); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder3Arg2 withArguments(A a, B b) { return new QTypedTaskBuilder3Arg2<>(priority(), threadPool(), callable, a, b); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder3Arg3 withArguments(A a, B b, C c) { return new QTypedTaskBuilder3Arg3<>(priority(), threadPool(), callable, a, b, c); } @@ -4036,7 +4985,11 @@ public QTypedTaskBuilder3Arg0 onThreadPool(QThreadPool newThreadPool } } - public static class QTypedTaskBuilder3Arg1 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static class QTypedTaskBuilder3Arg1 extends QTaskBuilder{ QTypedTaskBuilder3Arg1(int newPriority, QThreadPool threadPool, Callable3 callable, A a) { super(newPriority, threadPool); this.callable = callable; @@ -4045,10 +4998,16 @@ public static class QTypedTaskBuilder3Arg1 extends QTypedTaskBuilder private final Callable3 callable; private final A a; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder3Arg2 withArguments(B b) { return new QTypedTaskBuilder3Arg2<>(priority(), threadPool(), callable, a, b); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder3Arg3 withArguments(B b, C c) { return new QTypedTaskBuilder3Arg3<>(priority(), threadPool(), callable, a, b, c); } @@ -4066,7 +5025,11 @@ public QTypedTaskBuilder3Arg1 onThreadPool(QThreadPool newThreadPool } } - public static final class QTypedTaskBuilder3Arg2 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTypedTaskBuilder3Arg2 extends QTaskBuilder{ QTypedTaskBuilder3Arg2(int newPriority, QThreadPool threadPool, Callable3 callable, A a, B b) { super(newPriority, threadPool); this.callable = callable; @@ -4077,6 +5040,9 @@ public static final class QTypedTaskBuilder3Arg2 extends QTypedTaskB private final A a; private final B b; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder3Arg3 withArguments(C c) { return new QTypedTaskBuilder3Arg3<>(priority(), threadPool(), callable, a, b, c); } @@ -4094,7 +5060,11 @@ public QTypedTaskBuilder3Arg2 onThreadPool(QThreadPool newThreadPool } } - public static final class QTypedTaskBuilder3Arg3 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTypedTaskBuilder3Arg3 extends QTaskBuilder{ QTypedTaskBuilder3Arg3(int newPriority, QThreadPool threadPool, Callable3 callable, A a, B b, C c) { super(newPriority, threadPool); this.callable = callable; @@ -4119,6 +5089,9 @@ public QTypedTaskBuilder3Arg3 onThreadPool(QThreadPool newThreadPool return this; } + /** + *

See QtConcurrent::QTaskBuilder::spawn()

+ */ @Override public QFuture spawn() { return spawn(threadPool(), priority(), callable, a, b, c); @@ -4128,11 +5101,18 @@ private native static QFuture spawn(QThreadPool threadPool, int Callable3 callable, A a, B b, C c); } + /** + *

See QtConcurrent::task(Task&&)

+ */ public static QTypedTaskBuilder4Arg0 task(Callable4 callable) { return new QTypedTaskBuilder4Arg0<>(0, null, callable); } - public static final class QTypedTaskBuilder4Arg0 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTypedTaskBuilder4Arg0 extends QTaskBuilder{ private final Callable4 callable; QTypedTaskBuilder4Arg0(int priority, QThreadPool threadPool, Callable4 callable) { @@ -4140,18 +5120,30 @@ public static final class QTypedTaskBuilder4Arg0 extends QTypedTa this.callable = callable; } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder4Arg1 withArguments(A a) { return new QTypedTaskBuilder4Arg1<>(priority(), threadPool(), callable, a); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder4Arg2 withArguments(A a, B b) { return new QTypedTaskBuilder4Arg2<>(priority(), threadPool(), callable, a, b); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder4Arg3 withArguments(A a, B b, C c) { return new QTypedTaskBuilder4Arg3<>(priority(), threadPool(), callable, a, b, c); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder4Arg4 withArguments(A a, B b, C c, D d) { return new QTypedTaskBuilder4Arg4<>(priority(), threadPool(), callable, a, b, c, d); } @@ -4169,7 +5161,11 @@ public QTypedTaskBuilder4Arg0 onThreadPool(QThreadPool newThreadP } } - public static class QTypedTaskBuilder4Arg1 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static class QTypedTaskBuilder4Arg1 extends QTaskBuilder{ QTypedTaskBuilder4Arg1(int newPriority, QThreadPool threadPool, Callable4 callable, A a) { super(newPriority, threadPool); this.callable = callable; @@ -4178,14 +5174,23 @@ public static class QTypedTaskBuilder4Arg1 extends QTypedTaskBuil private final Callable4 callable; private final A a; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder4Arg2 withArguments(B b) { return new QTypedTaskBuilder4Arg2<>(priority(), threadPool(), callable, a, b); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder4Arg3 withArguments(B b, C c) { return new QTypedTaskBuilder4Arg3<>(priority(), threadPool(), callable, a, b, c); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder4Arg4 withArguments(B b, C c, D d) { return new QTypedTaskBuilder4Arg4<>(priority(), threadPool(), callable, a, b, c, d); } @@ -4203,7 +5208,11 @@ public QTypedTaskBuilder4Arg1 onThreadPool(QThreadPool newThreadP } } - public static final class QTypedTaskBuilder4Arg2 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTypedTaskBuilder4Arg2 extends QTaskBuilder{ QTypedTaskBuilder4Arg2(int newPriority, QThreadPool threadPool, Callable4 callable, A a, B b) { super(newPriority, threadPool); this.callable = callable; @@ -4214,10 +5223,16 @@ public static final class QTypedTaskBuilder4Arg2 extends QTypedTa private final A a; private final B b; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder4Arg3 withArguments(C c) { return new QTypedTaskBuilder4Arg3<>(priority(), threadPool(), callable, a, b, c); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder4Arg4 withArguments(C c, D d) { return new QTypedTaskBuilder4Arg4<>(priority(), threadPool(), callable, a, b, c, d); } @@ -4235,7 +5250,11 @@ public QTypedTaskBuilder4Arg2 onThreadPool(QThreadPool newThreadP } } - public static final class QTypedTaskBuilder4Arg3 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTypedTaskBuilder4Arg3 extends QTaskBuilder{ QTypedTaskBuilder4Arg3(int newPriority, QThreadPool threadPool, Callable4 callable, A a, B b, C c) { super(newPriority, threadPool); this.callable = callable; @@ -4248,6 +5267,9 @@ public static final class QTypedTaskBuilder4Arg3 extends QTypedTa private final B b; private final C c; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder4Arg4 withArguments(D d) { return new QTypedTaskBuilder4Arg4<>(priority(), threadPool(), callable, a, b, c, d); } @@ -4265,7 +5287,11 @@ public QTypedTaskBuilder4Arg3 onThreadPool(QThreadPool newThreadP } } - public static final class QTypedTaskBuilder4Arg4 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTypedTaskBuilder4Arg4 extends QTaskBuilder{ QTypedTaskBuilder4Arg4(int newPriority, QThreadPool threadPool, Callable4 callable, A a, B b, C c, D d) { super(newPriority, threadPool); this.callable = callable; @@ -4292,6 +5318,9 @@ public QTypedTaskBuilder4Arg4 onThreadPool(QThreadPool newThreadP return this; } + /** + *

See QtConcurrent::QTaskBuilder::spawn()

+ */ @Override public QFuture spawn() { return spawn(threadPool(), priority(), callable, a, b, c, d); @@ -4301,11 +5330,18 @@ private native static QFuture spawn(QThreadPool threadPool, i Callable4 callable, A a, B b, C c, D d); } + /** + *

See QtConcurrent::task(Task&&)

+ */ public static QTypedTaskBuilder5Arg0 task(Callable5 callable) { return new QTypedTaskBuilder5Arg0<>(0, null, callable); } - public static final class QTypedTaskBuilder5Arg0 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTypedTaskBuilder5Arg0 extends QTaskBuilder{ private final Callable5 callable; QTypedTaskBuilder5Arg0(int priority, QThreadPool threadPool, Callable5 callable) { @@ -4313,22 +5349,37 @@ public static final class QTypedTaskBuilder5Arg0 extends QType this.callable = callable; } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder5Arg1 withArguments(A a) { return new QTypedTaskBuilder5Arg1<>(priority(), threadPool(), callable, a); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder5Arg2 withArguments(A a, B b) { return new QTypedTaskBuilder5Arg2<>(priority(), threadPool(), callable, a, b); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder5Arg3 withArguments(A a, B b, C c) { return new QTypedTaskBuilder5Arg3<>(priority(), threadPool(), callable, a, b, c); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder5Arg4 withArguments(A a, B b, C c, D d) { return new QTypedTaskBuilder5Arg4<>(priority(), threadPool(), callable, a, b, c, d); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder5Arg5 withArguments(A a, B b, C c, D d, E e) { return new QTypedTaskBuilder5Arg5<>(priority(), threadPool(), callable, a, b, c, d, e); } @@ -4346,7 +5397,11 @@ public QTypedTaskBuilder5Arg0 onThreadPool(QThreadPool newThre } } - public static class QTypedTaskBuilder5Arg1 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static class QTypedTaskBuilder5Arg1 extends QTaskBuilder{ QTypedTaskBuilder5Arg1(int newPriority, QThreadPool threadPool, Callable5 callable, A a) { super(newPriority, threadPool); this.callable = callable; @@ -4355,18 +5410,30 @@ public static class QTypedTaskBuilder5Arg1 extends QTypedTaskB private final Callable5 callable; private final A a; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder5Arg2 withArguments(B b) { return new QTypedTaskBuilder5Arg2<>(priority(), threadPool(), callable, a, b); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder5Arg3 withArguments(B b, C c) { return new QTypedTaskBuilder5Arg3<>(priority(), threadPool(), callable, a, b, c); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder5Arg4 withArguments(B b, C c, D d) { return new QTypedTaskBuilder5Arg4<>(priority(), threadPool(), callable, a, b, c, d); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder5Arg5 withArguments(B b, C c, D d, E e) { return new QTypedTaskBuilder5Arg5<>(priority(), threadPool(), callable, a, b, c, d, e); } @@ -4384,7 +5451,11 @@ public QTypedTaskBuilder5Arg1 onThreadPool(QThreadPool newThre } } - public static final class QTypedTaskBuilder5Arg2 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTypedTaskBuilder5Arg2 extends QTaskBuilder{ QTypedTaskBuilder5Arg2(int newPriority, QThreadPool threadPool, Callable5 callable, A a, B b) { super(newPriority, threadPool); this.callable = callable; @@ -4395,14 +5466,23 @@ public static final class QTypedTaskBuilder5Arg2 extends QType private final A a; private final B b; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder5Arg3 withArguments(C c) { return new QTypedTaskBuilder5Arg3<>(priority(), threadPool(), callable, a, b, c); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder5Arg4 withArguments(C c, D d) { return new QTypedTaskBuilder5Arg4<>(priority(), threadPool(), callable, a, b, c, d); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder5Arg5 withArguments(C c, D d, E e) { return new QTypedTaskBuilder5Arg5<>(priority(), threadPool(), callable, a, b, c, d, e); } @@ -4420,7 +5500,11 @@ public QTypedTaskBuilder5Arg2 onThreadPool(QThreadPool newThre } } - public static final class QTypedTaskBuilder5Arg3 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTypedTaskBuilder5Arg3 extends QTaskBuilder{ QTypedTaskBuilder5Arg3(int newPriority, QThreadPool threadPool, Callable5 callable, A a, B b, C c) { super(newPriority, threadPool); this.callable = callable; @@ -4433,10 +5517,16 @@ public static final class QTypedTaskBuilder5Arg3 extends QType private final B b; private final C c; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder5Arg4 withArguments(D d) { return new QTypedTaskBuilder5Arg4<>(priority(), threadPool(), callable, a, b, c, d); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder5Arg5 withArguments(D d, E e) { return new QTypedTaskBuilder5Arg5<>(priority(), threadPool(), callable, a, b, c, d, e); } @@ -4454,7 +5544,11 @@ public QTypedTaskBuilder5Arg3 onThreadPool(QThreadPool newThre } } - public static final class QTypedTaskBuilder5Arg4 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTypedTaskBuilder5Arg4 extends QTaskBuilder{ QTypedTaskBuilder5Arg4(int newPriority, QThreadPool threadPool, Callable5 callable, A a, B b, C c, D d) { super(newPriority, threadPool); this.callable = callable; @@ -4469,6 +5563,9 @@ public static final class QTypedTaskBuilder5Arg4 extends QType private final C c; private final D d; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder5Arg5 withArguments(E e) { return new QTypedTaskBuilder5Arg5<>(priority(), threadPool(), callable, a, b, c, d, e); } @@ -4486,7 +5583,11 @@ public QTypedTaskBuilder5Arg4 onThreadPool(QThreadPool newThre } } - public static final class QTypedTaskBuilder5Arg5 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTypedTaskBuilder5Arg5 extends QTaskBuilder{ QTypedTaskBuilder5Arg5(int newPriority, QThreadPool threadPool, Callable5 callable, A a, B b, C c, D d, E e) { super(newPriority, threadPool); this.callable = callable; @@ -4515,6 +5616,9 @@ public QTypedTaskBuilder5Arg5 onThreadPool(QThreadPool newThre return this; } + /** + *

See QtConcurrent::QTaskBuilder::spawn()

+ */ @Override public QFuture spawn() { return spawn(threadPool(), priority(), callable, a, b, c, d, e); @@ -4524,11 +5628,18 @@ private native static QFuture spawn(QThreadPool threadPool Callable5 callable, A a, B b, C c, D d, E e); } + /** + *

See QtConcurrent::task(Task&&)

+ */ public static QTypedTaskBuilder6Arg0 task(Callable6 callable) { return new QTypedTaskBuilder6Arg0<>(0, null, callable); } - public static class QTypedTaskBuilder6Arg0 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static class QTypedTaskBuilder6Arg0 extends QTaskBuilder{ private final Callable6 callable; QTypedTaskBuilder6Arg0(int priority, QThreadPool threadPool, Callable6 callable) { @@ -4536,26 +5647,44 @@ public static class QTypedTaskBuilder6Arg0 extends QTypedTa this.callable = callable; } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder6Arg1 withArguments(A a) { return new QTypedTaskBuilder6Arg1<>(priority(), threadPool(), callable, a); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder6Arg2 withArguments(A a, B b) { return new QTypedTaskBuilder6Arg2<>(priority(), threadPool(), callable, a, b); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder6Arg3 withArguments(A a, B b, C c) { return new QTypedTaskBuilder6Arg3<>(priority(), threadPool(), callable, a, b, c); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder6Arg4 withArguments(A a, B b, C c, D d) { return new QTypedTaskBuilder6Arg4<>(priority(), threadPool(), callable, a, b, c, d); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder6Arg5 withArguments(A a, B b, C c, D d, E e) { return new QTypedTaskBuilder6Arg5<>(priority(), threadPool(), callable, a, b, c, d, e); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder6Arg6 withArguments(A a, B b, C c, D d, E e, F f) { return new QTypedTaskBuilder6Arg6<>(priority(), threadPool(), callable, a, b, c, d, e, f); } @@ -4573,7 +5702,11 @@ public QTypedTaskBuilder6Arg0 onThreadPool(QThreadPool newT } } - public static class QTypedTaskBuilder6Arg1 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static class QTypedTaskBuilder6Arg1 extends QTaskBuilder{ QTypedTaskBuilder6Arg1(int newPriority, QThreadPool threadPool, Callable6 callable, A a) { super(newPriority, threadPool); this.callable = callable; @@ -4582,22 +5715,37 @@ public static class QTypedTaskBuilder6Arg1 extends QTypedTa private final Callable6 callable; private final A a; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder6Arg2 withArguments(B b) { return new QTypedTaskBuilder6Arg2<>(priority(), threadPool(), callable, a, b); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder6Arg3 withArguments(B b, C c) { return new QTypedTaskBuilder6Arg3<>(priority(), threadPool(), callable, a, b, c); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder6Arg4 withArguments(B b, C c, D d) { return new QTypedTaskBuilder6Arg4<>(priority(), threadPool(), callable, a, b, c, d); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder6Arg5 withArguments(B b, C c, D d, E e) { return new QTypedTaskBuilder6Arg5<>(priority(), threadPool(), callable, a, b, c, d, e); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder6Arg6 withArguments(B b, C c, D d, E e, F f) { return new QTypedTaskBuilder6Arg6<>(priority(), threadPool(), callable, a, b, c, d, e, f); } @@ -4615,7 +5763,11 @@ public QTypedTaskBuilder6Arg1 onThreadPool(QThreadPool newT } } - public static final class QTypedTaskBuilder6Arg2 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTypedTaskBuilder6Arg2 extends QTaskBuilder{ QTypedTaskBuilder6Arg2(int newPriority, QThreadPool threadPool, Callable6 callable, A a, B b) { super(newPriority, threadPool); this.callable = callable; @@ -4626,18 +5778,30 @@ public static final class QTypedTaskBuilder6Arg2 extends QT private final A a; private final B b; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder6Arg3 withArguments(C c) { return new QTypedTaskBuilder6Arg3<>(priority(), threadPool(), callable, a, b, c); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder6Arg4 withArguments(C c, D d) { return new QTypedTaskBuilder6Arg4<>(priority(), threadPool(), callable, a, b, c, d); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder6Arg5 withArguments(C c, D d, E e) { return new QTypedTaskBuilder6Arg5<>(priority(), threadPool(), callable, a, b, c, d, e); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder6Arg6 withArguments(C c, D d, E e, F f) { return new QTypedTaskBuilder6Arg6<>(priority(), threadPool(), callable, a, b, c, d, e, f); } @@ -4655,7 +5819,11 @@ public QTypedTaskBuilder6Arg2 onThreadPool(QThreadPool newT } } - public static final class QTypedTaskBuilder6Arg3 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTypedTaskBuilder6Arg3 extends QTaskBuilder{ QTypedTaskBuilder6Arg3(int newPriority, QThreadPool threadPool, Callable6 callable, A a, B b, C c) { super(newPriority, threadPool); this.callable = callable; @@ -4668,14 +5836,23 @@ public static final class QTypedTaskBuilder6Arg3 extends QT private final B b; private final C c; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder6Arg4 withArguments(D d) { return new QTypedTaskBuilder6Arg4<>(priority(), threadPool(), callable, a, b, c, d); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder6Arg5 withArguments(D d, E e) { return new QTypedTaskBuilder6Arg5<>(priority(), threadPool(), callable, a, b, c, d, e); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder6Arg6 withArguments(D d, E e, F f) { return new QTypedTaskBuilder6Arg6<>(priority(), threadPool(), callable, a, b, c, d, e, f); } @@ -4693,7 +5870,11 @@ public QTypedTaskBuilder6Arg3 onThreadPool(QThreadPool newT } } - public static final class QTypedTaskBuilder6Arg4 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTypedTaskBuilder6Arg4 extends QTaskBuilder{ QTypedTaskBuilder6Arg4(int newPriority, QThreadPool threadPool, Callable6 callable, A a, B b, C c, D d) { super(newPriority, threadPool); this.callable = callable; @@ -4708,10 +5889,16 @@ public static final class QTypedTaskBuilder6Arg4 extends QT private final C c; private final D d; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder6Arg5 withArguments(E e) { return new QTypedTaskBuilder6Arg5<>(priority(), threadPool(), callable, a, b, c, d, e); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder6Arg6 withArguments(E e, F f) { return new QTypedTaskBuilder6Arg6<>(priority(), threadPool(), callable, a, b, c, d, e, f); } @@ -4729,7 +5916,11 @@ public QTypedTaskBuilder6Arg4 onThreadPool(QThreadPool newT } } - public static final class QTypedTaskBuilder6Arg5 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTypedTaskBuilder6Arg5 extends QTaskBuilder{ QTypedTaskBuilder6Arg5(int newPriority, QThreadPool threadPool, Callable6 callable, A a, B b, C c, D d, E e) { super(newPriority, threadPool); this.callable = callable; @@ -4746,6 +5937,9 @@ public static final class QTypedTaskBuilder6Arg5 extends QT private final D d; private final E e; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder6Arg6 withArguments(F f) { return new QTypedTaskBuilder6Arg6<>(priority(), threadPool(), callable, a, b, c, d, e, f); } @@ -4763,7 +5957,11 @@ public QTypedTaskBuilder6Arg5 onThreadPool(QThreadPool newT } } - public static final class QTypedTaskBuilder6Arg6 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTypedTaskBuilder6Arg6 extends QTaskBuilder{ QTypedTaskBuilder6Arg6(int newPriority, QThreadPool threadPool, Callable6 callable, A a, B b, C c, D d, E e, F f) { super(newPriority, threadPool); this.callable = callable; @@ -4794,6 +5992,9 @@ public QTypedTaskBuilder6Arg6 onThreadPool(QThreadPool newT return this; } + /** + *

See QtConcurrent::QTaskBuilder::spawn()

+ */ @Override public QFuture spawn() { return spawn(threadPool(), priority(), callable, a, b, c, d, e, f); @@ -4803,11 +6004,18 @@ private native static QFuture spawn(QThreadPool threadP Callable6 callable, A a, B b, C c, D d, E e, F f); } + /** + *

See QtConcurrent::task(Task&&)

+ */ public static QTypedTaskBuilder7Arg0 task(Callable7 callable) { return new QTypedTaskBuilder7Arg0<>(0, null, callable); } - public static class QTypedTaskBuilder7Arg0 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static class QTypedTaskBuilder7Arg0 extends QTaskBuilder{ private final Callable7 callable; QTypedTaskBuilder7Arg0(int priority, QThreadPool threadPool, Callable7 callable) { @@ -4815,30 +6023,51 @@ public static class QTypedTaskBuilder7Arg0 extends QType this.callable = callable; } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder7Arg1 withArguments(A a) { return new QTypedTaskBuilder7Arg1<>(priority(), threadPool(), callable, a); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder7Arg2 withArguments(A a, B b) { return new QTypedTaskBuilder7Arg2<>(priority(), threadPool(), callable, a, b); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder7Arg3 withArguments(A a, B b, C c) { return new QTypedTaskBuilder7Arg3<>(priority(), threadPool(), callable, a, b, c); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder7Arg4 withArguments(A a, B b, C c, D d) { return new QTypedTaskBuilder7Arg4<>(priority(), threadPool(), callable, a, b, c, d); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder7Arg5 withArguments(A a, B b, C c, D d, E e) { return new QTypedTaskBuilder7Arg5<>(priority(), threadPool(), callable, a, b, c, d, e); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder7Arg6 withArguments(A a, B b, C c, D d, E e, F f) { return new QTypedTaskBuilder7Arg6<>(priority(), threadPool(), callable, a, b, c, d, e, f); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder7Arg7 withArguments(A a, B b, C c, D d, E e, F f, G g) { return new QTypedTaskBuilder7Arg7<>(priority(), threadPool(), callable, a, b, c, d, e, f, g); } @@ -4856,7 +6085,11 @@ public QTypedTaskBuilder7Arg0 onThreadPool(QThreadPool n } } - public static class QTypedTaskBuilder7Arg1 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static class QTypedTaskBuilder7Arg1 extends QTaskBuilder{ QTypedTaskBuilder7Arg1(int newPriority, QThreadPool threadPool, Callable7 callable, A a) { super(newPriority, threadPool); this.callable = callable; @@ -4865,26 +6098,44 @@ public static class QTypedTaskBuilder7Arg1 extends QType private final Callable7 callable; private final A a; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder7Arg2 withArguments(B b) { return new QTypedTaskBuilder7Arg2<>(priority(), threadPool(), callable, a, b); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder7Arg3 withArguments(B b, C c) { return new QTypedTaskBuilder7Arg3<>(priority(), threadPool(), callable, a, b, c); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder7Arg4 withArguments(B b, C c, D d) { return new QTypedTaskBuilder7Arg4<>(priority(), threadPool(), callable, a, b, c, d); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder7Arg5 withArguments(B b, C c, D d, E e) { return new QTypedTaskBuilder7Arg5<>(priority(), threadPool(), callable, a, b, c, d, e); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder7Arg6 withArguments(B b, C c, D d, E e, F f) { return new QTypedTaskBuilder7Arg6<>(priority(), threadPool(), callable, a, b, c, d, e, f); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder7Arg7 withArguments(B b, C c, D d, E e, F f, G g) { return new QTypedTaskBuilder7Arg7<>(priority(), threadPool(), callable, a, b, c, d, e, f, g); } @@ -4902,7 +6153,11 @@ public QTypedTaskBuilder7Arg1 onThreadPool(QThreadPool n } } - public static final class QTypedTaskBuilder7Arg2 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTypedTaskBuilder7Arg2 extends QTaskBuilder{ QTypedTaskBuilder7Arg2(int newPriority, QThreadPool threadPool, Callable7 callable, A a, B b) { super(newPriority, threadPool); this.callable = callable; @@ -4913,22 +6168,37 @@ public static final class QTypedTaskBuilder7Arg2 extends private final A a; private final B b; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder7Arg3 withArguments(C c) { return new QTypedTaskBuilder7Arg3<>(priority(), threadPool(), callable, a, b, c); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder7Arg4 withArguments(C c, D d) { return new QTypedTaskBuilder7Arg4<>(priority(), threadPool(), callable, a, b, c, d); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder7Arg5 withArguments(C c, D d, E e) { return new QTypedTaskBuilder7Arg5<>(priority(), threadPool(), callable, a, b, c, d, e); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder7Arg6 withArguments(C c, D d, E e, F f) { return new QTypedTaskBuilder7Arg6<>(priority(), threadPool(), callable, a, b, c, d, e, f); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder7Arg7 withArguments(C c, D d, E e, F f, G g) { return new QTypedTaskBuilder7Arg7<>(priority(), threadPool(), callable, a, b, c, d, e, f, g); } @@ -4946,7 +6216,11 @@ public QTypedTaskBuilder7Arg2 onThreadPool(QThreadPool n } } - public static final class QTypedTaskBuilder7Arg3 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTypedTaskBuilder7Arg3 extends QTaskBuilder{ QTypedTaskBuilder7Arg3(int newPriority, QThreadPool threadPool, Callable7 callable, A a, B b, C c) { super(newPriority, threadPool); this.callable = callable; @@ -4959,18 +6233,30 @@ public static final class QTypedTaskBuilder7Arg3 extends private final B b; private final C c; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder7Arg4 withArguments(D d) { return new QTypedTaskBuilder7Arg4<>(priority(), threadPool(), callable, a, b, c, d); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder7Arg5 withArguments(D d, E e) { return new QTypedTaskBuilder7Arg5<>(priority(), threadPool(), callable, a, b, c, d, e); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder7Arg6 withArguments(D d, E e, F f) { return new QTypedTaskBuilder7Arg6<>(priority(), threadPool(), callable, a, b, c, d, e, f); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder7Arg7 withArguments(D d, E e, F f, G g) { return new QTypedTaskBuilder7Arg7<>(priority(), threadPool(), callable, a, b, c, d, e, f, g); } @@ -4988,7 +6274,11 @@ public QTypedTaskBuilder7Arg3 onThreadPool(QThreadPool n } } - public static final class QTypedTaskBuilder7Arg4 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTypedTaskBuilder7Arg4 extends QTaskBuilder{ QTypedTaskBuilder7Arg4(int newPriority, QThreadPool threadPool, Callable7 callable, A a, B b, C c, D d) { super(newPriority, threadPool); this.callable = callable; @@ -5003,14 +6293,23 @@ public static final class QTypedTaskBuilder7Arg4 extends private final C c; private final D d; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder7Arg5 withArguments(E e) { return new QTypedTaskBuilder7Arg5<>(priority(), threadPool(), callable, a, b, c, d, e); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder7Arg6 withArguments(E e, F f) { return new QTypedTaskBuilder7Arg6<>(priority(), threadPool(), callable, a, b, c, d, e, f); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder7Arg7 withArguments(E e, F f, G g) { return new QTypedTaskBuilder7Arg7<>(priority(), threadPool(), callable, a, b, c, d, e, f, g); } @@ -5028,7 +6327,11 @@ public QTypedTaskBuilder7Arg4 onThreadPool(QThreadPool n } } - public static final class QTypedTaskBuilder7Arg5 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTypedTaskBuilder7Arg5 extends QTaskBuilder{ QTypedTaskBuilder7Arg5(int newPriority, QThreadPool threadPool, Callable7 callable, A a, B b, C c, D d, E e) { super(newPriority, threadPool); this.callable = callable; @@ -5045,10 +6348,16 @@ public static final class QTypedTaskBuilder7Arg5 extends private final D d; private final E e; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder7Arg6 withArguments(F f) { return new QTypedTaskBuilder7Arg6<>(priority(), threadPool(), callable, a, b, c, d, e, f); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder7Arg7 withArguments(F f, G g) { return new QTypedTaskBuilder7Arg7<>(priority(), threadPool(), callable, a, b, c, d, e, f, g); } @@ -5066,7 +6375,11 @@ public QTypedTaskBuilder7Arg5 onThreadPool(QThreadPool n } } - public static final class QTypedTaskBuilder7Arg6 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTypedTaskBuilder7Arg6 extends QTaskBuilder{ QTypedTaskBuilder7Arg6(int newPriority, QThreadPool threadPool, Callable7 callable, A a, B b, C c, D d, E e, F f) { super(newPriority, threadPool); this.callable = callable; @@ -5085,6 +6398,9 @@ public static final class QTypedTaskBuilder7Arg6 extends private final E e; private final F f; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder7Arg7 withArguments(G g) { return new QTypedTaskBuilder7Arg7<>(priority(), threadPool(), callable, a, b, c, d, e, f, g); } @@ -5102,7 +6418,11 @@ public QTypedTaskBuilder7Arg6 onThreadPool(QThreadPool n } } - public static final class QTypedTaskBuilder7Arg7 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTypedTaskBuilder7Arg7 extends QTaskBuilder{ QTypedTaskBuilder7Arg7(int newPriority, QThreadPool threadPool, Callable7 callable, A a, B b, C c, D d, E e, F f, G g) { super(newPriority, threadPool); this.callable = callable; @@ -5135,6 +6455,9 @@ public QTypedTaskBuilder7Arg7 onThreadPool(QThreadPool n return this; } + /** + *

See QtConcurrent::QTaskBuilder::spawn()

+ */ @Override public QFuture spawn() { return spawn(threadPool(), priority(), callable, a, b, c, d, e, f, g); @@ -5144,11 +6467,18 @@ private native static QFuture spawn(QThreadPool thre Callable7 callable, A a, B b, C c, D d, E e, F f, G g); } + /** + *

See QtConcurrent::task(Task&&)

+ */ public static QTypedTaskBuilder8Arg0 task(Callable8 callable) { return new QTypedTaskBuilder8Arg0<>(0, null, callable); } - public static class QTypedTaskBuilder8Arg0 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static class QTypedTaskBuilder8Arg0 extends QTaskBuilder{ private final Callable8 callable; QTypedTaskBuilder8Arg0(int priority, QThreadPool threadPool, Callable8 callable) { @@ -5156,34 +6486,58 @@ public static class QTypedTaskBuilder8Arg0 extends QT this.callable = callable; } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder8Arg1 withArguments(A a) { return new QTypedTaskBuilder8Arg1<>(priority(), threadPool(), callable, a); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder8Arg2 withArguments(A a, B b) { return new QTypedTaskBuilder8Arg2<>(priority(), threadPool(), callable, a, b); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder8Arg3 withArguments(A a, B b, C c) { return new QTypedTaskBuilder8Arg3<>(priority(), threadPool(), callable, a, b, c); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder8Arg4 withArguments(A a, B b, C c, D d) { return new QTypedTaskBuilder8Arg4<>(priority(), threadPool(), callable, a, b, c, d); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder8Arg5 withArguments(A a, B b, C c, D d, E e) { return new QTypedTaskBuilder8Arg5<>(priority(), threadPool(), callable, a, b, c, d, e); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder8Arg6 withArguments(A a, B b, C c, D d, E e, F f) { return new QTypedTaskBuilder8Arg6<>(priority(), threadPool(), callable, a, b, c, d, e, f); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder8Arg7 withArguments(A a, B b, C c, D d, E e, F f, G g) { return new QTypedTaskBuilder8Arg7<>(priority(), threadPool(), callable, a, b, c, d, e, f, g); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder8Arg8 withArguments(A a, B b, C c, D d, E e, F f, G g, H h) { return new QTypedTaskBuilder8Arg8<>(priority(), threadPool(), callable, a, b, c, d, e, f, g, h); } @@ -5201,7 +6555,11 @@ public QTypedTaskBuilder8Arg0 onThreadPool(QThreadPoo } } - public static class QTypedTaskBuilder8Arg1 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static class QTypedTaskBuilder8Arg1 extends QTaskBuilder{ QTypedTaskBuilder8Arg1(int newPriority, QThreadPool threadPool, Callable8 callable, A a) { super(newPriority, threadPool); this.callable = callable; @@ -5210,30 +6568,51 @@ public static class QTypedTaskBuilder8Arg1 extends QT private final Callable8 callable; private final A a; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder8Arg2 withArguments(B b) { return new QTypedTaskBuilder8Arg2<>(priority(), threadPool(), callable, a, b); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder8Arg3 withArguments(B b, C c) { return new QTypedTaskBuilder8Arg3<>(priority(), threadPool(), callable, a, b, c); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder8Arg4 withArguments(B b, C c, D d) { return new QTypedTaskBuilder8Arg4<>(priority(), threadPool(), callable, a, b, c, d); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder8Arg5 withArguments(B b, C c, D d, E e) { return new QTypedTaskBuilder8Arg5<>(priority(), threadPool(), callable, a, b, c, d, e); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder8Arg6 withArguments(B b, C c, D d, E e, F f) { return new QTypedTaskBuilder8Arg6<>(priority(), threadPool(), callable, a, b, c, d, e, f); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder8Arg7 withArguments(B b, C c, D d, E e, F f, G g) { return new QTypedTaskBuilder8Arg7<>(priority(), threadPool(), callable, a, b, c, d, e, f, g); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder8Arg8 withArguments(B b, C c, D d, E e, F f, G g, H h) { return new QTypedTaskBuilder8Arg8<>(priority(), threadPool(), callable, a, b, c, d, e, f, g, h); } @@ -5251,7 +6630,11 @@ public QTypedTaskBuilder8Arg1 onThreadPool(QThreadPoo } } - public static final class QTypedTaskBuilder8Arg2 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTypedTaskBuilder8Arg2 extends QTaskBuilder{ QTypedTaskBuilder8Arg2(int newPriority, QThreadPool threadPool, Callable8 callable, A a, B b) { super(newPriority, threadPool); this.callable = callable; @@ -5262,26 +6645,44 @@ public static final class QTypedTaskBuilder8Arg2 exte private final A a; private final B b; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder8Arg3 withArguments(C c) { return new QTypedTaskBuilder8Arg3<>(priority(), threadPool(), callable, a, b, c); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder8Arg4 withArguments(C c, D d) { return new QTypedTaskBuilder8Arg4<>(priority(), threadPool(), callable, a, b, c, d); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder8Arg5 withArguments(C c, D d, E e) { return new QTypedTaskBuilder8Arg5<>(priority(), threadPool(), callable, a, b, c, d, e); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder8Arg6 withArguments(C c, D d, E e, F f) { return new QTypedTaskBuilder8Arg6<>(priority(), threadPool(), callable, a, b, c, d, e, f); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder8Arg7 withArguments(C c, D d, E e, F f, G g) { return new QTypedTaskBuilder8Arg7<>(priority(), threadPool(), callable, a, b, c, d, e, f, g); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder8Arg8 withArguments(C c, D d, E e, F f, G g, H h) { return new QTypedTaskBuilder8Arg8<>(priority(), threadPool(), callable, a, b, c, d, e, f, g, h); } @@ -5299,7 +6700,11 @@ public QTypedTaskBuilder8Arg2 onThreadPool(QThreadPoo } } - public static final class QTypedTaskBuilder8Arg3 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTypedTaskBuilder8Arg3 extends QTaskBuilder{ QTypedTaskBuilder8Arg3(int newPriority, QThreadPool threadPool, Callable8 callable, A a, B b, C c) { super(newPriority, threadPool); this.callable = callable; @@ -5312,22 +6717,37 @@ public static final class QTypedTaskBuilder8Arg3 exte private final B b; private final C c; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder8Arg4 withArguments(D d) { return new QTypedTaskBuilder8Arg4<>(priority(), threadPool(), callable, a, b, c, d); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder8Arg5 withArguments(D d, E e) { return new QTypedTaskBuilder8Arg5<>(priority(), threadPool(), callable, a, b, c, d, e); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder8Arg6 withArguments(D d, E e, F f) { return new QTypedTaskBuilder8Arg6<>(priority(), threadPool(), callable, a, b, c, d, e, f); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder8Arg7 withArguments(D d, E e, F f, G g) { return new QTypedTaskBuilder8Arg7<>(priority(), threadPool(), callable, a, b, c, d, e, f, g); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder8Arg8 withArguments(D d, E e, F f, G g, H h) { return new QTypedTaskBuilder8Arg8<>(priority(), threadPool(), callable, a, b, c, d, e, f, g, h); } @@ -5345,7 +6765,11 @@ public QTypedTaskBuilder8Arg3 onThreadPool(QThreadPoo } } - public static final class QTypedTaskBuilder8Arg4 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTypedTaskBuilder8Arg4 extends QTaskBuilder{ QTypedTaskBuilder8Arg4(int newPriority, QThreadPool threadPool, Callable8 callable, A a, B b, C c, D d) { super(newPriority, threadPool); this.callable = callable; @@ -5360,18 +6784,30 @@ public static final class QTypedTaskBuilder8Arg4 exte private final C c; private final D d; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder8Arg5 withArguments(E e) { return new QTypedTaskBuilder8Arg5<>(priority(), threadPool(), callable, a, b, c, d, e); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder8Arg6 withArguments(E e, F f) { return new QTypedTaskBuilder8Arg6<>(priority(), threadPool(), callable, a, b, c, d, e, f); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder8Arg7 withArguments(E e, F f, G g) { return new QTypedTaskBuilder8Arg7<>(priority(), threadPool(), callable, a, b, c, d, e, f, g); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder8Arg8 withArguments(E e, F f, G g, H h) { return new QTypedTaskBuilder8Arg8<>(priority(), threadPool(), callable, a, b, c, d, e, f, g, h); } @@ -5389,7 +6825,11 @@ public QTypedTaskBuilder8Arg4 onThreadPool(QThreadPoo } } - public static final class QTypedTaskBuilder8Arg5 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTypedTaskBuilder8Arg5 extends QTaskBuilder{ QTypedTaskBuilder8Arg5(int newPriority, QThreadPool threadPool, Callable8 callable, A a, B b, C c, D d, E e) { super(newPriority, threadPool); this.callable = callable; @@ -5406,14 +6846,23 @@ public static final class QTypedTaskBuilder8Arg5 exte private final D d; private final E e; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder8Arg6 withArguments(F f) { return new QTypedTaskBuilder8Arg6<>(priority(), threadPool(), callable, a, b, c, d, e, f); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder8Arg7 withArguments(F f, G g) { return new QTypedTaskBuilder8Arg7<>(priority(), threadPool(), callable, a, b, c, d, e, f, g); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder8Arg8 withArguments(F f, G g, H h) { return new QTypedTaskBuilder8Arg8<>(priority(), threadPool(), callable, a, b, c, d, e, f, g, h); } @@ -5431,7 +6880,11 @@ public QTypedTaskBuilder8Arg5 onThreadPool(QThreadPoo } } - public static final class QTypedTaskBuilder8Arg6 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTypedTaskBuilder8Arg6 extends QTaskBuilder{ QTypedTaskBuilder8Arg6(int newPriority, QThreadPool threadPool, Callable8 callable, A a, B b, C c, D d, E e, F f) { super(newPriority, threadPool); this.callable = callable; @@ -5450,10 +6903,16 @@ public static final class QTypedTaskBuilder8Arg6 exte private final E e; private final F f; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder8Arg7 withArguments(G g) { return new QTypedTaskBuilder8Arg7<>(priority(), threadPool(), callable, a, b, c, d, e, f, g); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder8Arg8 withArguments(G g, H h) { return new QTypedTaskBuilder8Arg8<>(priority(), threadPool(), callable, a, b, c, d, e, f, g, h); } @@ -5471,7 +6930,11 @@ public QTypedTaskBuilder8Arg6 onThreadPool(QThreadPoo } } - public static final class QTypedTaskBuilder8Arg7 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTypedTaskBuilder8Arg7 extends QTaskBuilder{ QTypedTaskBuilder8Arg7(int newPriority, QThreadPool threadPool, Callable8 callable, A a, B b, C c, D d, E e, F f, G g) { super(newPriority, threadPool); this.callable = callable; @@ -5492,6 +6955,9 @@ public static final class QTypedTaskBuilder8Arg7 exte private final F f; private final G g; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder8Arg8 withArguments(H h) { return new QTypedTaskBuilder8Arg8<>(priority(), threadPool(), callable, a, b, c, d, e, f, g, h); } @@ -5509,7 +6975,11 @@ public QTypedTaskBuilder8Arg7 onThreadPool(QThreadPoo } } - public static final class QTypedTaskBuilder8Arg8 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTypedTaskBuilder8Arg8 extends QTaskBuilder{ QTypedTaskBuilder8Arg8(int newPriority, QThreadPool threadPool, Callable8 callable, A a, B b, C c, D d, E e, F f, G g, H h) { super(newPriority, threadPool); this.callable = callable; @@ -5543,6 +7013,10 @@ public QTypedTaskBuilder8Arg8 onThreadPool(QThreadPoo super.onThreadPool(newThreadPool); return this; } + + /** + *

See QtConcurrent::QTaskBuilder::spawn()

+ */ @Override public QFuture spawn() { return spawn(threadPool(), priority(), callable, a, b, c, d, e, f, g, h); @@ -5552,11 +7026,18 @@ private native static QFuture spawn(QThreadPool t Callable8 callable, A a, B b, C c, D d, E e, F f, G g, H h); } + /** + *

See QtConcurrent::task(Task&&)

+ */ public static QTypedTaskBuilder9Arg0 task(Callable9 callable) { return new QTypedTaskBuilder9Arg0<>(0, null, callable); } - public static class QTypedTaskBuilder9Arg0 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static class QTypedTaskBuilder9Arg0 extends QTaskBuilder{ private final Callable9 callable; QTypedTaskBuilder9Arg0(int priority, QThreadPool threadPool, Callable9 callable) { @@ -5564,38 +7045,65 @@ public static class QTypedTaskBuilder9Arg0 extends this.callable = callable; } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder9Arg1 withArguments(A a) { return new QTypedTaskBuilder9Arg1<>(priority(), threadPool(), callable, a); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder9Arg2 withArguments(A a, B b) { return new QTypedTaskBuilder9Arg2<>(priority(), threadPool(), callable, a, b); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder9Arg3 withArguments(A a, B b, C c) { return new QTypedTaskBuilder9Arg3<>(priority(), threadPool(), callable, a, b, c); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder9Arg4 withArguments(A a, B b, C c, D d) { return new QTypedTaskBuilder9Arg4<>(priority(), threadPool(), callable, a, b, c, d); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder9Arg5 withArguments(A a, B b, C c, D d, E e) { return new QTypedTaskBuilder9Arg5<>(priority(), threadPool(), callable, a, b, c, d, e); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder9Arg6 withArguments(A a, B b, C c, D d, E e, F f) { return new QTypedTaskBuilder9Arg6<>(priority(), threadPool(), callable, a, b, c, d, e, f); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder9Arg7 withArguments(A a, B b, C c, D d, E e, F f, G g) { return new QTypedTaskBuilder9Arg7<>(priority(), threadPool(), callable, a, b, c, d, e, f, g); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder9Arg8 withArguments(A a, B b, C c, D d, E e, F f, G g, H h) { return new QTypedTaskBuilder9Arg8<>(priority(), threadPool(), callable, a, b, c, d, e, f, g, h); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder9Arg9 withArguments(A a, B b, C c, D d, E e, F f, G g, H h, I i) { return new QTypedTaskBuilder9Arg9<>(priority(), threadPool(), callable, a, b, c, d, e, f, g, h, i); } @@ -5613,7 +7121,11 @@ public QTypedTaskBuilder9Arg0 onThreadPool(QThread } } - public static class QTypedTaskBuilder9Arg1 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static class QTypedTaskBuilder9Arg1 extends QTaskBuilder{ QTypedTaskBuilder9Arg1(int newPriority, QThreadPool threadPool, Callable9 callable, A a) { super(newPriority, threadPool); this.callable = callable; @@ -5622,34 +7134,58 @@ public static class QTypedTaskBuilder9Arg1 extends private final Callable9 callable; private final A a; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder9Arg2 withArguments(B b) { return new QTypedTaskBuilder9Arg2<>(priority(), threadPool(), callable, a, b); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder9Arg3 withArguments(B b, C c) { return new QTypedTaskBuilder9Arg3<>(priority(), threadPool(), callable, a, b, c); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder9Arg4 withArguments(B b, C c, D d) { return new QTypedTaskBuilder9Arg4<>(priority(), threadPool(), callable, a, b, c, d); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder9Arg5 withArguments(B b, C c, D d, E e) { return new QTypedTaskBuilder9Arg5<>(priority(), threadPool(), callable, a, b, c, d, e); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder9Arg6 withArguments(B b, C c, D d, E e, F f) { return new QTypedTaskBuilder9Arg6<>(priority(), threadPool(), callable, a, b, c, d, e, f); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder9Arg7 withArguments(B b, C c, D d, E e, F f, G g) { return new QTypedTaskBuilder9Arg7<>(priority(), threadPool(), callable, a, b, c, d, e, f, g); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder9Arg8 withArguments(B b, C c, D d, E e, F f, G g, H h) { return new QTypedTaskBuilder9Arg8<>(priority(), threadPool(), callable, a, b, c, d, e, f, g, h); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder9Arg9 withArguments(B b, C c, D d, E e, F f, G g, H h, I i) { return new QTypedTaskBuilder9Arg9<>(priority(), threadPool(), callable, a, b, c, d, e, f, g, h, i); } @@ -5667,7 +7203,11 @@ public QTypedTaskBuilder9Arg1 onThreadPool(QThread } } - public static final class QTypedTaskBuilder9Arg2 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTypedTaskBuilder9Arg2 extends QTaskBuilder{ QTypedTaskBuilder9Arg2(int newPriority, QThreadPool threadPool, Callable9 callable, A a, B b) { super(newPriority, threadPool); this.callable = callable; @@ -5678,30 +7218,51 @@ public static final class QTypedTaskBuilder9Arg2 e private final A a; private final B b; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder9Arg3 withArguments(C c) { return new QTypedTaskBuilder9Arg3<>(priority(), threadPool(), callable, a, b, c); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder9Arg4 withArguments(C c, D d) { return new QTypedTaskBuilder9Arg4<>(priority(), threadPool(), callable, a, b, c, d); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder9Arg5 withArguments(C c, D d, E e) { return new QTypedTaskBuilder9Arg5<>(priority(), threadPool(), callable, a, b, c, d, e); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder9Arg6 withArguments(C c, D d, E e, F f) { return new QTypedTaskBuilder9Arg6<>(priority(), threadPool(), callable, a, b, c, d, e, f); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder9Arg7 withArguments(C c, D d, E e, F f, G g) { return new QTypedTaskBuilder9Arg7<>(priority(), threadPool(), callable, a, b, c, d, e, f, g); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder9Arg8 withArguments(C c, D d, E e, F f, G g, H h) { return new QTypedTaskBuilder9Arg8<>(priority(), threadPool(), callable, a, b, c, d, e, f, g, h); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder9Arg9 withArguments(C c, D d, E e, F f, G g, H h, I i) { return new QTypedTaskBuilder9Arg9<>(priority(), threadPool(), callable, a, b, c, d, e, f, g, h, i); } @@ -5719,7 +7280,11 @@ public QTypedTaskBuilder9Arg2 onThreadPool(QThread } } - public static final class QTypedTaskBuilder9Arg3 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTypedTaskBuilder9Arg3 extends QTaskBuilder{ QTypedTaskBuilder9Arg3(int newPriority, QThreadPool threadPool, Callable9 callable, A a, B b, C c) { super(newPriority, threadPool); this.callable = callable; @@ -5732,26 +7297,44 @@ public static final class QTypedTaskBuilder9Arg3 e private final B b; private final C c; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder9Arg4 withArguments(D d) { return new QTypedTaskBuilder9Arg4<>(priority(), threadPool(), callable, a, b, c, d); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder9Arg5 withArguments(D d, E e) { return new QTypedTaskBuilder9Arg5<>(priority(), threadPool(), callable, a, b, c, d, e); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder9Arg6 withArguments(D d, E e, F f) { return new QTypedTaskBuilder9Arg6<>(priority(), threadPool(), callable, a, b, c, d, e, f); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder9Arg7 withArguments(D d, E e, F f, G g) { return new QTypedTaskBuilder9Arg7<>(priority(), threadPool(), callable, a, b, c, d, e, f, g); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder9Arg8 withArguments(D d, E e, F f, G g, H h) { return new QTypedTaskBuilder9Arg8<>(priority(), threadPool(), callable, a, b, c, d, e, f, g, h); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder9Arg9 withArguments(D d, E e, F f, G g, H h, I i) { return new QTypedTaskBuilder9Arg9<>(priority(), threadPool(), callable, a, b, c, d, e, f, g, h, i); } @@ -5769,7 +7352,11 @@ public QTypedTaskBuilder9Arg3 onThreadPool(QThread } } - public static final class QTypedTaskBuilder9Arg4 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTypedTaskBuilder9Arg4 extends QTaskBuilder{ QTypedTaskBuilder9Arg4(int newPriority, QThreadPool threadPool, Callable9 callable, A a, B b, C c, D d) { super(newPriority, threadPool); this.callable = callable; @@ -5784,22 +7371,37 @@ public static final class QTypedTaskBuilder9Arg4 e private final C c; private final D d; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder9Arg5 withArguments(E e) { return new QTypedTaskBuilder9Arg5<>(priority(), threadPool(), callable, a, b, c, d, e); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder9Arg6 withArguments(E e, F f) { return new QTypedTaskBuilder9Arg6<>(priority(), threadPool(), callable, a, b, c, d, e, f); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder9Arg7 withArguments(E e, F f, G g) { return new QTypedTaskBuilder9Arg7<>(priority(), threadPool(), callable, a, b, c, d, e, f, g); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder9Arg8 withArguments(E e, F f, G g, H h) { return new QTypedTaskBuilder9Arg8<>(priority(), threadPool(), callable, a, b, c, d, e, f, g, h); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder9Arg9 withArguments(E e, F f, G g, H h, I i) { return new QTypedTaskBuilder9Arg9<>(priority(), threadPool(), callable, a, b, c, d, e, f, g, h, i); } @@ -5817,7 +7419,11 @@ public QTypedTaskBuilder9Arg4 onThreadPool(QThread } } - public static final class QTypedTaskBuilder9Arg5 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTypedTaskBuilder9Arg5 extends QTaskBuilder{ QTypedTaskBuilder9Arg5(int newPriority, QThreadPool threadPool, Callable9 callable, A a, B b, C c, D d, E e) { super(newPriority, threadPool); this.callable = callable; @@ -5834,18 +7440,30 @@ public static final class QTypedTaskBuilder9Arg5 e private final D d; private final E e; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder9Arg6 withArguments(F f) { return new QTypedTaskBuilder9Arg6<>(priority(), threadPool(), callable, a, b, c, d, e, f); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder9Arg7 withArguments(F f, G g) { return new QTypedTaskBuilder9Arg7<>(priority(), threadPool(), callable, a, b, c, d, e, f, g); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder9Arg8 withArguments(F f, G g, H h) { return new QTypedTaskBuilder9Arg8<>(priority(), threadPool(), callable, a, b, c, d, e, f, g, h); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder9Arg9 withArguments(F f, G g, H h, I i) { return new QTypedTaskBuilder9Arg9<>(priority(), threadPool(), callable, a, b, c, d, e, f, g, h, i); } @@ -5863,7 +7481,11 @@ public QTypedTaskBuilder9Arg5 onThreadPool(QThread } } - public static final class QTypedTaskBuilder9Arg6 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTypedTaskBuilder9Arg6 extends QTaskBuilder{ QTypedTaskBuilder9Arg6(int newPriority, QThreadPool threadPool, Callable9 callable, A a, B b, C c, D d, E e, F f) { super(newPriority, threadPool); this.callable = callable; @@ -5882,14 +7504,23 @@ public static final class QTypedTaskBuilder9Arg6 e private final E e; private final F f; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder9Arg7 withArguments(G g) { return new QTypedTaskBuilder9Arg7<>(priority(), threadPool(), callable, a, b, c, d, e, f, g); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder9Arg8 withArguments(G g, H h) { return new QTypedTaskBuilder9Arg8<>(priority(), threadPool(), callable, a, b, c, d, e, f, g, h); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder9Arg9 withArguments(G g, H h, I i) { return new QTypedTaskBuilder9Arg9<>(priority(), threadPool(), callable, a, b, c, d, e, f, g, h, i); } @@ -5907,7 +7538,11 @@ public QTypedTaskBuilder9Arg6 onThreadPool(QThread } } - public static final class QTypedTaskBuilder9Arg7 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTypedTaskBuilder9Arg7 extends QTaskBuilder{ QTypedTaskBuilder9Arg7(int newPriority, QThreadPool threadPool, Callable9 callable, A a, B b, C c, D d, E e, F f, G g) { super(newPriority, threadPool); this.callable = callable; @@ -5928,10 +7563,16 @@ public static final class QTypedTaskBuilder9Arg7 e private final F f; private final G g; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder9Arg8 withArguments(H h) { return new QTypedTaskBuilder9Arg8<>(priority(), threadPool(), callable, a, b, c, d, e, f, g, h); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder9Arg9 withArguments(H h, I i) { return new QTypedTaskBuilder9Arg9<>(priority(), threadPool(), callable, a, b, c, d, e, f, g, h, i); } @@ -5949,7 +7590,11 @@ public QTypedTaskBuilder9Arg7 onThreadPool(QThread } } - public static final class QTypedTaskBuilder9Arg8 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTypedTaskBuilder9Arg8 extends QTaskBuilder{ QTypedTaskBuilder9Arg8(int newPriority, QThreadPool threadPool, Callable9 callable, A a, B b, C c, D d, E e, F f, G g, H h) { super(newPriority, threadPool); this.callable = callable; @@ -5972,6 +7617,9 @@ public static final class QTypedTaskBuilder9Arg8 e private final G g; private final H h; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedTaskBuilder9Arg9 withArguments(I i) { return new QTypedTaskBuilder9Arg9<>(priority(), threadPool(), callable, a, b, c, d, e, f, g, h, i); } @@ -5989,7 +7637,11 @@ public QTypedTaskBuilder9Arg8 onThreadPool(QThread } } - public static final class QTypedTaskBuilder9Arg9 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTypedTaskBuilder9Arg9 extends QTaskBuilder{ QTypedTaskBuilder9Arg9(int newPriority, QThreadPool threadPool, Callable9 callable, A a, B b, C c, D d, E e, F f, G g, H h, I i) { super(newPriority, threadPool); this.callable = callable; @@ -6014,6 +7666,9 @@ public static final class QTypedTaskBuilder9Arg9 e private final H h; private final I i; + /** + *

See QtConcurrent::QTaskBuilder::spawn()

+ */ @Override public QFuture spawn() { return spawn(threadPool(), priority(), callable, a, b, c, d, e, f, g, h, i); @@ -6034,11 +7689,18 @@ private native static QFuture spawn(QThreadPoo Callable9 callable, A a, B b, C c, D d, E e, F f, G g, H h, I i); } + /** + *

See QtConcurrent::task(Task&&)

+ */ public static QPromiseTaskBuilderVoid0Arg0 task(RunnableWithVoidPromise runnable) { return new QPromiseTaskBuilderVoid0Arg0(0, null, runnable); } - public static class QPromiseTaskBuilderVoid0Arg0 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static class QPromiseTaskBuilderVoid0Arg0 extends QTaskBuilder{ QPromiseTaskBuilderVoid0Arg0(int newPriority, QThreadPool threadPool, RunnableWithVoidPromise runnable) { super(newPriority, threadPool); this.runnable = runnable; @@ -6057,6 +7719,9 @@ public QPromiseTaskBuilderVoid0Arg0 onThreadPool(QThreadPool newThreadPool) { return this; } + /** + *

See QtConcurrent::QTaskBuilder::spawn()

+ */ @Override public QFuture spawn() { return spawn(threadPool(), priority(), runnable); @@ -6065,11 +7730,18 @@ public QFuture spawn() { private native static QFuture spawn(QThreadPool threadPool, int priority, RunnableWithVoidPromise runnable); } + /** + *

See QtConcurrent::task(Task&&)

+ */ public static QPromiseTaskBuilderVoid1Arg0 task(RunnableWithVoidPromise1 runnable) { return new QPromiseTaskBuilderVoid1Arg0<>(0, null, runnable); } - public static final class QPromiseTaskBuilderVoid1Arg0 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QPromiseTaskBuilderVoid1Arg0 extends QTaskBuilder{ private final RunnableWithVoidPromise1 runnable; QPromiseTaskBuilderVoid1Arg0(int priority, QThreadPool threadPool, RunnableWithVoidPromise1 runnable) { @@ -6077,6 +7749,9 @@ public static final class QPromiseTaskBuilderVoid1Arg0 extends QTaskBuilderVo this.runnable = runnable; } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid1Arg1 withArguments(A a) { return new QPromiseTaskBuilderVoid1Arg1<>(priority(), threadPool(), runnable, a); } @@ -6094,7 +7769,11 @@ public QPromiseTaskBuilderVoid1Arg0 onThreadPool(QThreadPool newThreadPool) { } } - public static class QPromiseTaskBuilderVoid1Arg1 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static class QPromiseTaskBuilderVoid1Arg1 extends QTaskBuilder{ QPromiseTaskBuilderVoid1Arg1(int newPriority, QThreadPool threadPool, RunnableWithVoidPromise1 runnable, A a) { super(newPriority, threadPool); this.runnable = runnable; @@ -6115,6 +7794,9 @@ public QPromiseTaskBuilderVoid1Arg1 onThreadPool(QThreadPool newThreadPool) { return this; } + /** + *

See QtConcurrent::QTaskBuilder::spawn()

+ */ @Override public QFuture spawn() { return spawn(threadPool(), priority(), runnable, a); @@ -6124,11 +7806,18 @@ private native static QFuture spawn(QThreadPool threadPool, int priori RunnableWithVoidPromise1 runnable, A a); } + /** + *

See QtConcurrent::task(Task&&)

+ */ public static QPromiseTaskBuilderVoid2Arg0 task(RunnableWithVoidPromise2 runnable) { return new QPromiseTaskBuilderVoid2Arg0<>(0, null, runnable); } - public static final class QPromiseTaskBuilderVoid2Arg0 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QPromiseTaskBuilderVoid2Arg0 extends QTaskBuilder{ private final RunnableWithVoidPromise2 runnable; QPromiseTaskBuilderVoid2Arg0(int priority, QThreadPool threadPool, RunnableWithVoidPromise2 runnable) { @@ -6136,10 +7825,16 @@ public static final class QPromiseTaskBuilderVoid2Arg0 extends QTaskBuilde this.runnable = runnable; } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid2Arg1 withArguments(A a) { return new QPromiseTaskBuilderVoid2Arg1<>(priority(), threadPool(), runnable, a); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid2Arg2 withArguments(A a, B b) { return new QPromiseTaskBuilderVoid2Arg2<>(priority(), threadPool(), runnable, a, b); } @@ -6157,7 +7852,11 @@ public QPromiseTaskBuilderVoid2Arg0 onThreadPool(QThreadPool newThreadPool } } - public static class QPromiseTaskBuilderVoid2Arg1 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static class QPromiseTaskBuilderVoid2Arg1 extends QTaskBuilder{ QPromiseTaskBuilderVoid2Arg1(int newPriority, QThreadPool threadPool, RunnableWithVoidPromise2 runnable, A a) { super(newPriority, threadPool); this.runnable = runnable; @@ -6166,6 +7865,9 @@ public static class QPromiseTaskBuilderVoid2Arg1 extends QTaskBuilderVoid{ private final RunnableWithVoidPromise2 runnable; private final A a; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid2Arg2 withArguments(B b) { return new QPromiseTaskBuilderVoid2Arg2<>(priority(), threadPool(), runnable, a, b); } @@ -6183,7 +7885,11 @@ public QPromiseTaskBuilderVoid2Arg1 onThreadPool(QThreadPool newThreadPool } } - public static final class QPromiseTaskBuilderVoid2Arg2 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QPromiseTaskBuilderVoid2Arg2 extends QTaskBuilder{ QPromiseTaskBuilderVoid2Arg2(int newPriority, QThreadPool threadPool, RunnableWithVoidPromise2 runnable, A a, B b) { super(newPriority, threadPool); this.runnable = runnable; @@ -6206,6 +7912,9 @@ public QPromiseTaskBuilderVoid2Arg2 onThreadPool(QThreadPool newThreadPool return this; } + /** + *

See QtConcurrent::QTaskBuilder::spawn()

+ */ @Override public QFuture spawn() { return spawn(threadPool(), priority(), runnable, a, b); @@ -6215,11 +7924,18 @@ private native static QFuture spawn(QThreadPool threadPool, int pri RunnableWithVoidPromise2 runnable, A a, B b); } + /** + *

See QtConcurrent::task(Task&&)

+ */ public static QPromiseTaskBuilderVoid3Arg0 task(RunnableWithVoidPromise3 runnable) { return new QPromiseTaskBuilderVoid3Arg0<>(0, null, runnable); } - public static final class QPromiseTaskBuilderVoid3Arg0 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QPromiseTaskBuilderVoid3Arg0 extends QTaskBuilder{ private final RunnableWithVoidPromise3 runnable; QPromiseTaskBuilderVoid3Arg0(int priority, QThreadPool threadPool, RunnableWithVoidPromise3 runnable) { @@ -6227,14 +7943,23 @@ public static final class QPromiseTaskBuilderVoid3Arg0 extends QTaskBui this.runnable = runnable; } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid3Arg1 withArguments(A a) { return new QPromiseTaskBuilderVoid3Arg1<>(priority(), threadPool(), runnable, a); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid3Arg2 withArguments(A a, B b) { return new QPromiseTaskBuilderVoid3Arg2<>(priority(), threadPool(), runnable, a, b); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid3Arg3 withArguments(A a, B b, C c) { return new QPromiseTaskBuilderVoid3Arg3<>(priority(), threadPool(), runnable, a, b, c); } @@ -6252,7 +7977,11 @@ public QPromiseTaskBuilderVoid3Arg0 onThreadPool(QThreadPool newThreadP } } - public static class QPromiseTaskBuilderVoid3Arg1 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static class QPromiseTaskBuilderVoid3Arg1 extends QTaskBuilder{ QPromiseTaskBuilderVoid3Arg1(int newPriority, QThreadPool threadPool, RunnableWithVoidPromise3 runnable, A a) { super(newPriority, threadPool); this.runnable = runnable; @@ -6261,10 +7990,16 @@ public static class QPromiseTaskBuilderVoid3Arg1 extends QTaskBuilderVo private final RunnableWithVoidPromise3 runnable; private final A a; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid3Arg2 withArguments(B b) { return new QPromiseTaskBuilderVoid3Arg2<>(priority(), threadPool(), runnable, a, b); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid3Arg3 withArguments(B b, C c) { return new QPromiseTaskBuilderVoid3Arg3<>(priority(), threadPool(), runnable, a, b, c); } @@ -6282,7 +8017,11 @@ public QPromiseTaskBuilderVoid3Arg1 onThreadPool(QThreadPool newThreadP } } - public static final class QPromiseTaskBuilderVoid3Arg2 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QPromiseTaskBuilderVoid3Arg2 extends QTaskBuilder{ QPromiseTaskBuilderVoid3Arg2(int newPriority, QThreadPool threadPool, RunnableWithVoidPromise3 runnable, A a, B b) { super(newPriority, threadPool); this.runnable = runnable; @@ -6293,6 +8032,9 @@ public static final class QPromiseTaskBuilderVoid3Arg2 extends QTaskBui private final A a; private final B b; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid3Arg3 withArguments(C c) { return new QPromiseTaskBuilderVoid3Arg3<>(priority(), threadPool(), runnable, a, b, c); } @@ -6310,7 +8052,11 @@ public QPromiseTaskBuilderVoid3Arg2 onThreadPool(QThreadPool newThreadP } } - public static final class QPromiseTaskBuilderVoid3Arg3 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QPromiseTaskBuilderVoid3Arg3 extends QTaskBuilder{ QPromiseTaskBuilderVoid3Arg3(int newPriority, QThreadPool threadPool, RunnableWithVoidPromise3 runnable, A a, B b, C c) { super(newPriority, threadPool); this.runnable = runnable; @@ -6335,6 +8081,9 @@ public QPromiseTaskBuilderVoid3Arg3 onThreadPool(QThreadPool newThreadP return this; } + /** + *

See QtConcurrent::QTaskBuilder::spawn()

+ */ @Override public QFuture spawn() { return spawn(threadPool(), priority(), runnable, a, b, c); @@ -6344,11 +8093,18 @@ private native static QFuture spawn(QThreadPool threadPool, int RunnableWithVoidPromise3 runnable, A a, B b, C c); } + /** + *

See QtConcurrent::task(Task&&)

+ */ public static QPromiseTaskBuilderVoid4Arg0 task(RunnableWithVoidPromise4 runnable) { return new QPromiseTaskBuilderVoid4Arg0<>(0, null, runnable); } - public static final class QPromiseTaskBuilderVoid4Arg0 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QPromiseTaskBuilderVoid4Arg0 extends QTaskBuilder{ private final RunnableWithVoidPromise4 runnable; QPromiseTaskBuilderVoid4Arg0(int priority, QThreadPool threadPool, RunnableWithVoidPromise4 runnable) { @@ -6356,18 +8112,30 @@ public static final class QPromiseTaskBuilderVoid4Arg0 extends QTask this.runnable = runnable; } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid4Arg1 withArguments(A a) { return new QPromiseTaskBuilderVoid4Arg1<>(priority(), threadPool(), runnable, a); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid4Arg2 withArguments(A a, B b) { return new QPromiseTaskBuilderVoid4Arg2<>(priority(), threadPool(), runnable, a, b); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid4Arg3 withArguments(A a, B b, C c) { return new QPromiseTaskBuilderVoid4Arg3<>(priority(), threadPool(), runnable, a, b, c); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid4Arg4 withArguments(A a, B b, C c, D d) { return new QPromiseTaskBuilderVoid4Arg4<>(priority(), threadPool(), runnable, a, b, c, d); } @@ -6385,7 +8153,11 @@ public QPromiseTaskBuilderVoid4Arg0 onThreadPool(QThreadPool newThre } } - public static class QPromiseTaskBuilderVoid4Arg1 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static class QPromiseTaskBuilderVoid4Arg1 extends QTaskBuilder{ QPromiseTaskBuilderVoid4Arg1(int newPriority, QThreadPool threadPool, RunnableWithVoidPromise4 runnable, A a) { super(newPriority, threadPool); this.runnable = runnable; @@ -6394,14 +8166,23 @@ public static class QPromiseTaskBuilderVoid4Arg1 extends QTaskBuilde private final RunnableWithVoidPromise4 runnable; private final A a; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid4Arg2 withArguments(B b) { return new QPromiseTaskBuilderVoid4Arg2<>(priority(), threadPool(), runnable, a, b); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid4Arg3 withArguments(B b, C c) { return new QPromiseTaskBuilderVoid4Arg3<>(priority(), threadPool(), runnable, a, b, c); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid4Arg4 withArguments(B b, C c, D d) { return new QPromiseTaskBuilderVoid4Arg4<>(priority(), threadPool(), runnable, a, b, c, d); } @@ -6419,7 +8200,11 @@ public QPromiseTaskBuilderVoid4Arg1 onThreadPool(QThreadPool newThre } } - public static final class QPromiseTaskBuilderVoid4Arg2 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QPromiseTaskBuilderVoid4Arg2 extends QTaskBuilder{ QPromiseTaskBuilderVoid4Arg2(int newPriority, QThreadPool threadPool, RunnableWithVoidPromise4 runnable, A a, B b) { super(newPriority, threadPool); this.runnable = runnable; @@ -6430,10 +8215,16 @@ public static final class QPromiseTaskBuilderVoid4Arg2 extends QTask private final A a; private final B b; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid4Arg3 withArguments(C c) { return new QPromiseTaskBuilderVoid4Arg3<>(priority(), threadPool(), runnable, a, b, c); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid4Arg4 withArguments(C c, D d) { return new QPromiseTaskBuilderVoid4Arg4<>(priority(), threadPool(), runnable, a, b, c, d); } @@ -6451,7 +8242,11 @@ public QPromiseTaskBuilderVoid4Arg2 onThreadPool(QThreadPool newThre } } - public static final class QPromiseTaskBuilderVoid4Arg3 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QPromiseTaskBuilderVoid4Arg3 extends QTaskBuilder{ QPromiseTaskBuilderVoid4Arg3(int newPriority, QThreadPool threadPool, RunnableWithVoidPromise4 runnable, A a, B b, C c) { super(newPriority, threadPool); this.runnable = runnable; @@ -6464,6 +8259,9 @@ public static final class QPromiseTaskBuilderVoid4Arg3 extends QTask private final B b; private final C c; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid4Arg4 withArguments(D d) { return new QPromiseTaskBuilderVoid4Arg4<>(priority(), threadPool(), runnable, a, b, c, d); } @@ -6481,7 +8279,11 @@ public QPromiseTaskBuilderVoid4Arg3 onThreadPool(QThreadPool newThre } } - public static final class QPromiseTaskBuilderVoid4Arg4 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QPromiseTaskBuilderVoid4Arg4 extends QTaskBuilder{ QPromiseTaskBuilderVoid4Arg4(int newPriority, QThreadPool threadPool, RunnableWithVoidPromise4 runnable, A a, B b, C c, D d) { super(newPriority, threadPool); this.runnable = runnable; @@ -6508,6 +8310,9 @@ public QPromiseTaskBuilderVoid4Arg4 onThreadPool(QThreadPool newThre return this; } + /** + *

See QtConcurrent::QTaskBuilder::spawn()

+ */ @Override public QFuture spawn() { return spawn(threadPool(), priority(), runnable, a, b, c, d); @@ -6517,11 +8322,18 @@ private native static QFuture spawn(QThreadPool threadPool, i RunnableWithVoidPromise4 runnable, A a, B b, C c, D d); } + /** + *

See QtConcurrent::task(Task&&)

+ */ public static QPromiseTaskBuilderVoid5Arg0 task(RunnableWithVoidPromise5 runnable) { return new QPromiseTaskBuilderVoid5Arg0<>(0, null, runnable); } - public static final class QPromiseTaskBuilderVoid5Arg0 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QPromiseTaskBuilderVoid5Arg0 extends QTaskBuilder{ private final RunnableWithVoidPromise5 runnable; QPromiseTaskBuilderVoid5Arg0(int priority, QThreadPool threadPool, RunnableWithVoidPromise5 runnable) { @@ -6529,22 +8341,37 @@ public static final class QPromiseTaskBuilderVoid5Arg0 extends QT this.runnable = runnable; } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid5Arg1 withArguments(A a) { return new QPromiseTaskBuilderVoid5Arg1<>(priority(), threadPool(), runnable, a); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid5Arg2 withArguments(A a, B b) { return new QPromiseTaskBuilderVoid5Arg2<>(priority(), threadPool(), runnable, a, b); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid5Arg3 withArguments(A a, B b, C c) { return new QPromiseTaskBuilderVoid5Arg3<>(priority(), threadPool(), runnable, a, b, c); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid5Arg4 withArguments(A a, B b, C c, D d) { return new QPromiseTaskBuilderVoid5Arg4<>(priority(), threadPool(), runnable, a, b, c, d); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid5Arg5 withArguments(A a, B b, C c, D d, E e) { return new QPromiseTaskBuilderVoid5Arg5<>(priority(), threadPool(), runnable, a, b, c, d, e); } @@ -6562,7 +8389,11 @@ public QPromiseTaskBuilderVoid5Arg0 onThreadPool(QThreadPool newT } } - public static class QPromiseTaskBuilderVoid5Arg1 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static class QPromiseTaskBuilderVoid5Arg1 extends QTaskBuilder{ QPromiseTaskBuilderVoid5Arg1(int newPriority, QThreadPool threadPool, RunnableWithVoidPromise5 runnable, A a) { super(newPriority, threadPool); this.runnable = runnable; @@ -6571,19 +8402,31 @@ public static class QPromiseTaskBuilderVoid5Arg1 extends QTaskBui private final RunnableWithVoidPromise5 runnable; private final A a; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid5Arg2 withArguments(B b) { return new QPromiseTaskBuilderVoid5Arg2<>(priority(), threadPool(), runnable, a, b); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid5Arg3 withArguments(B b, C c) { return new QPromiseTaskBuilderVoid5Arg3<>(priority(), threadPool(), runnable, a, b, c); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid5Arg4 withArguments(B b, C c, D d) { return new QPromiseTaskBuilderVoid5Arg4<>(priority(), threadPool(), runnable, a, b, c, d); } - public QPromiseTaskBuilderVoid5Arg5 withArguments(B b, C c, D d, E e) { + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ + public QPromiseTaskBuilderVoid5Arg5 withArguments(B b, C c, D d, E e) { return new QPromiseTaskBuilderVoid5Arg5<>(priority(), threadPool(), runnable, a, b, c, d, e); } @@ -6600,7 +8443,11 @@ public QPromiseTaskBuilderVoid5Arg1 onThreadPool(QThreadPool newT } } - public static final class QPromiseTaskBuilderVoid5Arg2 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QPromiseTaskBuilderVoid5Arg2 extends QTaskBuilder{ QPromiseTaskBuilderVoid5Arg2(int newPriority, QThreadPool threadPool, RunnableWithVoidPromise5 runnable, A a, B b) { super(newPriority, threadPool); this.runnable = runnable; @@ -6611,14 +8458,23 @@ public static final class QPromiseTaskBuilderVoid5Arg2 extends QT private final A a; private final B b; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid5Arg3 withArguments(C c) { return new QPromiseTaskBuilderVoid5Arg3<>(priority(), threadPool(), runnable, a, b, c); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid5Arg4 withArguments(C c, D d) { return new QPromiseTaskBuilderVoid5Arg4<>(priority(), threadPool(), runnable, a, b, c, d); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid5Arg5 withArguments(C c, D d, E e) { return new QPromiseTaskBuilderVoid5Arg5<>(priority(), threadPool(), runnable, a, b, c, d, e); } @@ -6636,7 +8492,11 @@ public QPromiseTaskBuilderVoid5Arg2 onThreadPool(QThreadPool newT } } - public static final class QPromiseTaskBuilderVoid5Arg3 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QPromiseTaskBuilderVoid5Arg3 extends QTaskBuilder{ QPromiseTaskBuilderVoid5Arg3(int newPriority, QThreadPool threadPool, RunnableWithVoidPromise5 runnable, A a, B b, C c) { super(newPriority, threadPool); this.runnable = runnable; @@ -6649,10 +8509,16 @@ public static final class QPromiseTaskBuilderVoid5Arg3 extends QT private final B b; private final C c; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid5Arg4 withArguments(D d) { return new QPromiseTaskBuilderVoid5Arg4<>(priority(), threadPool(), runnable, a, b, c, d); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid5Arg5 withArguments(D d, E e) { return new QPromiseTaskBuilderVoid5Arg5<>(priority(), threadPool(), runnable, a, b, c, d, e); } @@ -6670,7 +8536,11 @@ public QPromiseTaskBuilderVoid5Arg3 onThreadPool(QThreadPool newT } } - public static final class QPromiseTaskBuilderVoid5Arg4 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QPromiseTaskBuilderVoid5Arg4 extends QTaskBuilder{ QPromiseTaskBuilderVoid5Arg4(int newPriority, QThreadPool threadPool, RunnableWithVoidPromise5 runnable, A a, B b, C c, D d) { super(newPriority, threadPool); this.runnable = runnable; @@ -6685,6 +8555,9 @@ public static final class QPromiseTaskBuilderVoid5Arg4 extends QT private final C c; private final D d; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid5Arg5 withArguments(E e) { return new QPromiseTaskBuilderVoid5Arg5<>(priority(), threadPool(), runnable, a, b, c, d, e); } @@ -6702,7 +8575,11 @@ public QPromiseTaskBuilderVoid5Arg4 onThreadPool(QThreadPool newT } } - public static final class QPromiseTaskBuilderVoid5Arg5 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QPromiseTaskBuilderVoid5Arg5 extends QTaskBuilder{ QPromiseTaskBuilderVoid5Arg5(int newPriority, QThreadPool threadPool, RunnableWithVoidPromise5 runnable, A a, B b, C c, D d, E e) { super(newPriority, threadPool); this.runnable = runnable; @@ -6731,6 +8608,9 @@ public QPromiseTaskBuilderVoid5Arg5 onThreadPool(QThreadPool newT return this; } + /** + *

See QtConcurrent::QTaskBuilder::spawn()

+ */ @Override public QFuture spawn() { return spawn(threadPool(), priority(), runnable, a, b, c, d, e); @@ -6740,11 +8620,18 @@ private native static QFuture spawn(QThreadPool threadPool RunnableWithVoidPromise5 runnable, A a, B b, C c, D d, E e); } + /** + *

See QtConcurrent::task(Task&&)

+ */ public static QPromiseTaskBuilderVoid6Arg0 task(RunnableWithVoidPromise6 runnable) { return new QPromiseTaskBuilderVoid6Arg0<>(0, null, runnable); } - public static class QPromiseTaskBuilderVoid6Arg0 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static class QPromiseTaskBuilderVoid6Arg0 extends QTaskBuilder{ private final RunnableWithVoidPromise6 runnable; QPromiseTaskBuilderVoid6Arg0(int priority, QThreadPool threadPool, RunnableWithVoidPromise6 runnable) { @@ -6752,26 +8639,44 @@ public static class QPromiseTaskBuilderVoid6Arg0 extends QTask this.runnable = runnable; } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid6Arg1 withArguments(A a) { return new QPromiseTaskBuilderVoid6Arg1<>(priority(), threadPool(), runnable, a); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid6Arg2 withArguments(A a, B b) { return new QPromiseTaskBuilderVoid6Arg2<>(priority(), threadPool(), runnable, a, b); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid6Arg3 withArguments(A a, B b, C c) { return new QPromiseTaskBuilderVoid6Arg3<>(priority(), threadPool(), runnable, a, b, c); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid6Arg4 withArguments(A a, B b, C c, D d) { return new QPromiseTaskBuilderVoid6Arg4<>(priority(), threadPool(), runnable, a, b, c, d); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid6Arg5 withArguments(A a, B b, C c, D d, E e) { return new QPromiseTaskBuilderVoid6Arg5<>(priority(), threadPool(), runnable, a, b, c, d, e); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid6Arg6 withArguments(A a, B b, C c, D d, E e, F f) { return new QPromiseTaskBuilderVoid6Arg6<>(priority(), threadPool(), runnable, a, b, c, d, e, f); } @@ -6789,7 +8694,11 @@ public QPromiseTaskBuilderVoid6Arg0 onThreadPool(QThreadPool n } } - public static class QPromiseTaskBuilderVoid6Arg1 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static class QPromiseTaskBuilderVoid6Arg1 extends QTaskBuilder{ QPromiseTaskBuilderVoid6Arg1(int newPriority, QThreadPool threadPool, RunnableWithVoidPromise6 runnable, A a) { super(newPriority, threadPool); this.runnable = runnable; @@ -6798,22 +8707,37 @@ public static class QPromiseTaskBuilderVoid6Arg1 extends QTask private final RunnableWithVoidPromise6 runnable; private final A a; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid6Arg2 withArguments(B b) { return new QPromiseTaskBuilderVoid6Arg2<>(priority(), threadPool(), runnable, a, b); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid6Arg3 withArguments(B b, C c) { return new QPromiseTaskBuilderVoid6Arg3<>(priority(), threadPool(), runnable, a, b, c); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid6Arg4 withArguments(B b, C c, D d) { return new QPromiseTaskBuilderVoid6Arg4<>(priority(), threadPool(), runnable, a, b, c, d); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid6Arg5 withArguments(B b, C c, D d, E e) { return new QPromiseTaskBuilderVoid6Arg5<>(priority(), threadPool(), runnable, a, b, c, d, e); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid6Arg6 withArguments(B b, C c, D d, E e, F f) { return new QPromiseTaskBuilderVoid6Arg6<>(priority(), threadPool(), runnable, a, b, c, d, e, f); } @@ -6831,7 +8755,11 @@ public QPromiseTaskBuilderVoid6Arg1 onThreadPool(QThreadPool n } } - public static final class QPromiseTaskBuilderVoid6Arg2 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QPromiseTaskBuilderVoid6Arg2 extends QTaskBuilder{ QPromiseTaskBuilderVoid6Arg2(int newPriority, QThreadPool threadPool, RunnableWithVoidPromise6 runnable, A a, B b) { super(newPriority, threadPool); this.runnable = runnable; @@ -6842,18 +8770,30 @@ public static final class QPromiseTaskBuilderVoid6Arg2 extends private final A a; private final B b; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid6Arg3 withArguments(C c) { return new QPromiseTaskBuilderVoid6Arg3<>(priority(), threadPool(), runnable, a, b, c); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid6Arg4 withArguments(C c, D d) { return new QPromiseTaskBuilderVoid6Arg4<>(priority(), threadPool(), runnable, a, b, c, d); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid6Arg5 withArguments(C c, D d, E e) { return new QPromiseTaskBuilderVoid6Arg5<>(priority(), threadPool(), runnable, a, b, c, d, e); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid6Arg6 withArguments(C c, D d, E e, F f) { return new QPromiseTaskBuilderVoid6Arg6<>(priority(), threadPool(), runnable, a, b, c, d, e, f); } @@ -6871,7 +8811,11 @@ public QPromiseTaskBuilderVoid6Arg2 onThreadPool(QThreadPool n } } - public static final class QPromiseTaskBuilderVoid6Arg3 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QPromiseTaskBuilderVoid6Arg3 extends QTaskBuilder{ QPromiseTaskBuilderVoid6Arg3(int newPriority, QThreadPool threadPool, RunnableWithVoidPromise6 runnable, A a, B b, C c) { super(newPriority, threadPool); this.runnable = runnable; @@ -6884,14 +8828,23 @@ public static final class QPromiseTaskBuilderVoid6Arg3 extends private final B b; private final C c; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid6Arg4 withArguments(D d) { return new QPromiseTaskBuilderVoid6Arg4<>(priority(), threadPool(), runnable, a, b, c, d); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid6Arg5 withArguments(D d, E e) { return new QPromiseTaskBuilderVoid6Arg5<>(priority(), threadPool(), runnable, a, b, c, d, e); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid6Arg6 withArguments(D d, E e, F f) { return new QPromiseTaskBuilderVoid6Arg6<>(priority(), threadPool(), runnable, a, b, c, d, e, f); } @@ -6909,7 +8862,11 @@ public QPromiseTaskBuilderVoid6Arg3 onThreadPool(QThreadPool n } } - public static final class QPromiseTaskBuilderVoid6Arg4 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QPromiseTaskBuilderVoid6Arg4 extends QTaskBuilder{ QPromiseTaskBuilderVoid6Arg4(int newPriority, QThreadPool threadPool, RunnableWithVoidPromise6 runnable, A a, B b, C c, D d) { super(newPriority, threadPool); this.runnable = runnable; @@ -6924,10 +8881,16 @@ public static final class QPromiseTaskBuilderVoid6Arg4 extends private final C c; private final D d; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid6Arg5 withArguments(E e) { return new QPromiseTaskBuilderVoid6Arg5<>(priority(), threadPool(), runnable, a, b, c, d, e); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid6Arg6 withArguments(E e, F f) { return new QPromiseTaskBuilderVoid6Arg6<>(priority(), threadPool(), runnable, a, b, c, d, e, f); } @@ -6945,7 +8908,11 @@ public QPromiseTaskBuilderVoid6Arg4 onThreadPool(QThreadPool n } } - public static final class QPromiseTaskBuilderVoid6Arg5 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QPromiseTaskBuilderVoid6Arg5 extends QTaskBuilder{ QPromiseTaskBuilderVoid6Arg5(int newPriority, QThreadPool threadPool, RunnableWithVoidPromise6 runnable, A a, B b, C c, D d, E e) { super(newPriority, threadPool); this.runnable = runnable; @@ -6962,6 +8929,9 @@ public static final class QPromiseTaskBuilderVoid6Arg5 extends private final D d; private final E e; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid6Arg6 withArguments(F f) { return new QPromiseTaskBuilderVoid6Arg6<>(priority(), threadPool(), runnable, a, b, c, d, e, f); } @@ -6979,7 +8949,11 @@ public QPromiseTaskBuilderVoid6Arg5 onThreadPool(QThreadPool n } } - public static final class QPromiseTaskBuilderVoid6Arg6 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QPromiseTaskBuilderVoid6Arg6 extends QTaskBuilder{ QPromiseTaskBuilderVoid6Arg6(int newPriority, QThreadPool threadPool, RunnableWithVoidPromise6 runnable, A a, B b, C c, D d, E e, F f) { super(newPriority, threadPool); this.runnable = runnable; @@ -7010,6 +8984,9 @@ public QPromiseTaskBuilderVoid6Arg6 onThreadPool(QThreadPool n return this; } + /** + *

See QtConcurrent::QTaskBuilder::spawn()

+ */ @Override public QFuture spawn() { return spawn(threadPool(), priority(), runnable, a, b, c, d, e, f); @@ -7019,11 +8996,18 @@ private native static QFuture spawn(QThreadPool threadP RunnableWithVoidPromise6 runnable, A a, B b, C c, D d, E e, F f); } + /** + *

See QtConcurrent::task(Task&&)

+ */ public static QPromiseTaskBuilderVoid7Arg0 task(RunnableWithVoidPromise7 runnable) { return new QPromiseTaskBuilderVoid7Arg0<>(0, null, runnable); } - public static class QPromiseTaskBuilderVoid7Arg0 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static class QPromiseTaskBuilderVoid7Arg0 extends QTaskBuilder{ private final RunnableWithVoidPromise7 runnable; QPromiseTaskBuilderVoid7Arg0(int priority, QThreadPool threadPool, RunnableWithVoidPromise7 runnable) { @@ -7031,30 +9015,51 @@ public static class QPromiseTaskBuilderVoid7Arg0 extends QT this.runnable = runnable; } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid7Arg1 withArguments(A a) { return new QPromiseTaskBuilderVoid7Arg1<>(priority(), threadPool(), runnable, a); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid7Arg2 withArguments(A a, B b) { return new QPromiseTaskBuilderVoid7Arg2<>(priority(), threadPool(), runnable, a, b); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid7Arg3 withArguments(A a, B b, C c) { return new QPromiseTaskBuilderVoid7Arg3<>(priority(), threadPool(), runnable, a, b, c); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid7Arg4 withArguments(A a, B b, C c, D d) { return new QPromiseTaskBuilderVoid7Arg4<>(priority(), threadPool(), runnable, a, b, c, d); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid7Arg5 withArguments(A a, B b, C c, D d, E e) { return new QPromiseTaskBuilderVoid7Arg5<>(priority(), threadPool(), runnable, a, b, c, d, e); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid7Arg6 withArguments(A a, B b, C c, D d, E e, F f) { return new QPromiseTaskBuilderVoid7Arg6<>(priority(), threadPool(), runnable, a, b, c, d, e, f); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid7Arg7 withArguments(A a, B b, C c, D d, E e, F f, G g) { return new QPromiseTaskBuilderVoid7Arg7<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g); } @@ -7072,7 +9077,11 @@ public QPromiseTaskBuilderVoid7Arg0 onThreadPool(QThreadPoo } } - public static class QPromiseTaskBuilderVoid7Arg1 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static class QPromiseTaskBuilderVoid7Arg1 extends QTaskBuilder{ QPromiseTaskBuilderVoid7Arg1(int newPriority, QThreadPool threadPool, RunnableWithVoidPromise7 runnable, A a) { super(newPriority, threadPool); this.runnable = runnable; @@ -7081,26 +9090,44 @@ public static class QPromiseTaskBuilderVoid7Arg1 extends QT private final RunnableWithVoidPromise7 runnable; private final A a; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid7Arg2 withArguments(B b) { return new QPromiseTaskBuilderVoid7Arg2<>(priority(), threadPool(), runnable, a, b); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid7Arg3 withArguments(B b, C c) { return new QPromiseTaskBuilderVoid7Arg3<>(priority(), threadPool(), runnable, a, b, c); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid7Arg4 withArguments(B b, C c, D d) { return new QPromiseTaskBuilderVoid7Arg4<>(priority(), threadPool(), runnable, a, b, c, d); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid7Arg5 withArguments(B b, C c, D d, E e) { return new QPromiseTaskBuilderVoid7Arg5<>(priority(), threadPool(), runnable, a, b, c, d, e); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid7Arg6 withArguments(B b, C c, D d, E e, F f) { return new QPromiseTaskBuilderVoid7Arg6<>(priority(), threadPool(), runnable, a, b, c, d, e, f); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid7Arg7 withArguments(B b, C c, D d, E e, F f, G g) { return new QPromiseTaskBuilderVoid7Arg7<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g); } @@ -7118,7 +9145,11 @@ public QPromiseTaskBuilderVoid7Arg1 onThreadPool(QThreadPoo } } - public static final class QPromiseTaskBuilderVoid7Arg2 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QPromiseTaskBuilderVoid7Arg2 extends QTaskBuilder{ QPromiseTaskBuilderVoid7Arg2(int newPriority, QThreadPool threadPool, RunnableWithVoidPromise7 runnable, A a, B b) { super(newPriority, threadPool); this.runnable = runnable; @@ -7129,22 +9160,37 @@ public static final class QPromiseTaskBuilderVoid7Arg2 exte private final A a; private final B b; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid7Arg3 withArguments(C c) { return new QPromiseTaskBuilderVoid7Arg3<>(priority(), threadPool(), runnable, a, b, c); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid7Arg4 withArguments(C c, D d) { return new QPromiseTaskBuilderVoid7Arg4<>(priority(), threadPool(), runnable, a, b, c, d); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid7Arg5 withArguments(C c, D d, E e) { return new QPromiseTaskBuilderVoid7Arg5<>(priority(), threadPool(), runnable, a, b, c, d, e); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid7Arg6 withArguments(C c, D d, E e, F f) { return new QPromiseTaskBuilderVoid7Arg6<>(priority(), threadPool(), runnable, a, b, c, d, e, f); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid7Arg7 withArguments(C c, D d, E e, F f, G g) { return new QPromiseTaskBuilderVoid7Arg7<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g); } @@ -7162,7 +9208,11 @@ public QPromiseTaskBuilderVoid7Arg2 onThreadPool(QThreadPoo } } - public static final class QPromiseTaskBuilderVoid7Arg3 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QPromiseTaskBuilderVoid7Arg3 extends QTaskBuilder{ QPromiseTaskBuilderVoid7Arg3(int newPriority, QThreadPool threadPool, RunnableWithVoidPromise7 runnable, A a, B b, C c) { super(newPriority, threadPool); this.runnable = runnable; @@ -7175,18 +9225,30 @@ public static final class QPromiseTaskBuilderVoid7Arg3 exte private final B b; private final C c; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid7Arg4 withArguments(D d) { return new QPromiseTaskBuilderVoid7Arg4<>(priority(), threadPool(), runnable, a, b, c, d); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid7Arg5 withArguments(D d, E e) { return new QPromiseTaskBuilderVoid7Arg5<>(priority(), threadPool(), runnable, a, b, c, d, e); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid7Arg6 withArguments(D d, E e, F f) { return new QPromiseTaskBuilderVoid7Arg6<>(priority(), threadPool(), runnable, a, b, c, d, e, f); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid7Arg7 withArguments(D d, E e, F f, G g) { return new QPromiseTaskBuilderVoid7Arg7<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g); } @@ -7204,7 +9266,11 @@ public QPromiseTaskBuilderVoid7Arg3 onThreadPool(QThreadPoo } } - public static final class QPromiseTaskBuilderVoid7Arg4 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QPromiseTaskBuilderVoid7Arg4 extends QTaskBuilder{ QPromiseTaskBuilderVoid7Arg4(int newPriority, QThreadPool threadPool, RunnableWithVoidPromise7 runnable, A a, B b, C c, D d) { super(newPriority, threadPool); this.runnable = runnable; @@ -7219,14 +9285,23 @@ public static final class QPromiseTaskBuilderVoid7Arg4 exte private final C c; private final D d; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid7Arg5 withArguments(E e) { return new QPromiseTaskBuilderVoid7Arg5<>(priority(), threadPool(), runnable, a, b, c, d, e); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid7Arg6 withArguments(E e, F f) { return new QPromiseTaskBuilderVoid7Arg6<>(priority(), threadPool(), runnable, a, b, c, d, e, f); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid7Arg7 withArguments(E e, F f, G g) { return new QPromiseTaskBuilderVoid7Arg7<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g); } @@ -7244,7 +9319,11 @@ public QPromiseTaskBuilderVoid7Arg4 onThreadPool(QThreadPoo } } - public static final class QPromiseTaskBuilderVoid7Arg5 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QPromiseTaskBuilderVoid7Arg5 extends QTaskBuilder{ QPromiseTaskBuilderVoid7Arg5(int newPriority, QThreadPool threadPool, RunnableWithVoidPromise7 runnable, A a, B b, C c, D d, E e) { super(newPriority, threadPool); this.runnable = runnable; @@ -7261,10 +9340,16 @@ public static final class QPromiseTaskBuilderVoid7Arg5 exte private final D d; private final E e; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid7Arg6 withArguments(F f) { return new QPromiseTaskBuilderVoid7Arg6<>(priority(), threadPool(), runnable, a, b, c, d, e, f); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid7Arg7 withArguments(F f, G g) { return new QPromiseTaskBuilderVoid7Arg7<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g); } @@ -7282,7 +9367,11 @@ public QPromiseTaskBuilderVoid7Arg5 onThreadPool(QThreadPoo } } - public static final class QPromiseTaskBuilderVoid7Arg6 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QPromiseTaskBuilderVoid7Arg6 extends QTaskBuilder{ QPromiseTaskBuilderVoid7Arg6(int newPriority, QThreadPool threadPool, RunnableWithVoidPromise7 runnable, A a, B b, C c, D d, E e, F f) { super(newPriority, threadPool); this.runnable = runnable; @@ -7301,6 +9390,9 @@ public static final class QPromiseTaskBuilderVoid7Arg6 exte private final E e; private final F f; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid7Arg7 withArguments(G g) { return new QPromiseTaskBuilderVoid7Arg7<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g); } @@ -7318,7 +9410,11 @@ public QPromiseTaskBuilderVoid7Arg6 onThreadPool(QThreadPoo } } - public static final class QPromiseTaskBuilderVoid7Arg7 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QPromiseTaskBuilderVoid7Arg7 extends QTaskBuilder{ QPromiseTaskBuilderVoid7Arg7(int newPriority, QThreadPool threadPool, RunnableWithVoidPromise7 runnable, A a, B b, C c, D d, E e, F f, G g) { super(newPriority, threadPool); this.runnable = runnable; @@ -7351,6 +9447,9 @@ public QPromiseTaskBuilderVoid7Arg7 onThreadPool(QThreadPoo return this; } + /** + *

See QtConcurrent::QTaskBuilder::spawn()

+ */ @Override public QFuture spawn() { return spawn(threadPool(), priority(), runnable, a, b, c, d, e, f, g); @@ -7360,11 +9459,18 @@ private native static QFuture spawn(QThreadPool thre RunnableWithVoidPromise7 runnable, A a, B b, C c, D d, E e, F f, G g); } + /** + *

See QtConcurrent::task(Task&&)

+ */ public static QPromiseTaskBuilderVoid8Arg0 task(RunnableWithVoidPromise8 runnable) { return new QPromiseTaskBuilderVoid8Arg0<>(0, null, runnable); } - public static class QPromiseTaskBuilderVoid8Arg0 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static class QPromiseTaskBuilderVoid8Arg0 extends QTaskBuilder{ private final RunnableWithVoidPromise8 runnable; QPromiseTaskBuilderVoid8Arg0(int priority, QThreadPool threadPool, RunnableWithVoidPromise8 runnable) { @@ -7372,34 +9478,58 @@ public static class QPromiseTaskBuilderVoid8Arg0 extends this.runnable = runnable; } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid8Arg1 withArguments(A a) { return new QPromiseTaskBuilderVoid8Arg1<>(priority(), threadPool(), runnable, a); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid8Arg2 withArguments(A a, B b) { return new QPromiseTaskBuilderVoid8Arg2<>(priority(), threadPool(), runnable, a, b); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid8Arg3 withArguments(A a, B b, C c) { return new QPromiseTaskBuilderVoid8Arg3<>(priority(), threadPool(), runnable, a, b, c); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid8Arg4 withArguments(A a, B b, C c, D d) { return new QPromiseTaskBuilderVoid8Arg4<>(priority(), threadPool(), runnable, a, b, c, d); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid8Arg5 withArguments(A a, B b, C c, D d, E e) { return new QPromiseTaskBuilderVoid8Arg5<>(priority(), threadPool(), runnable, a, b, c, d, e); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid8Arg6 withArguments(A a, B b, C c, D d, E e, F f) { return new QPromiseTaskBuilderVoid8Arg6<>(priority(), threadPool(), runnable, a, b, c, d, e, f); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid8Arg7 withArguments(A a, B b, C c, D d, E e, F f, G g) { return new QPromiseTaskBuilderVoid8Arg7<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid8Arg8 withArguments(A a, B b, C c, D d, E e, F f, G g, H h) { return new QPromiseTaskBuilderVoid8Arg8<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g, h); } @@ -7417,7 +9547,11 @@ public QPromiseTaskBuilderVoid8Arg0 onThreadPool(QThread } } - public static class QPromiseTaskBuilderVoid8Arg1 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static class QPromiseTaskBuilderVoid8Arg1 extends QTaskBuilder{ QPromiseTaskBuilderVoid8Arg1(int newPriority, QThreadPool threadPool, RunnableWithVoidPromise8 runnable, A a) { super(newPriority, threadPool); this.runnable = runnable; @@ -7426,30 +9560,51 @@ public static class QPromiseTaskBuilderVoid8Arg1 extends private final RunnableWithVoidPromise8 runnable; private final A a; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid8Arg2 withArguments(B b) { return new QPromiseTaskBuilderVoid8Arg2<>(priority(), threadPool(), runnable, a, b); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid8Arg3 withArguments(B b, C c) { return new QPromiseTaskBuilderVoid8Arg3<>(priority(), threadPool(), runnable, a, b, c); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid8Arg4 withArguments(B b, C c, D d) { return new QPromiseTaskBuilderVoid8Arg4<>(priority(), threadPool(), runnable, a, b, c, d); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid8Arg5 withArguments(B b, C c, D d, E e) { return new QPromiseTaskBuilderVoid8Arg5<>(priority(), threadPool(), runnable, a, b, c, d, e); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid8Arg6 withArguments(B b, C c, D d, E e, F f) { return new QPromiseTaskBuilderVoid8Arg6<>(priority(), threadPool(), runnable, a, b, c, d, e, f); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid8Arg7 withArguments(B b, C c, D d, E e, F f, G g) { return new QPromiseTaskBuilderVoid8Arg7<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid8Arg8 withArguments(B b, C c, D d, E e, F f, G g, H h) { return new QPromiseTaskBuilderVoid8Arg8<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g, h); } @@ -7467,7 +9622,11 @@ public QPromiseTaskBuilderVoid8Arg1 onThreadPool(QThread } } - public static final class QPromiseTaskBuilderVoid8Arg2 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QPromiseTaskBuilderVoid8Arg2 extends QTaskBuilder{ QPromiseTaskBuilderVoid8Arg2(int newPriority, QThreadPool threadPool, RunnableWithVoidPromise8 runnable, A a, B b) { super(newPriority, threadPool); this.runnable = runnable; @@ -7478,26 +9637,44 @@ public static final class QPromiseTaskBuilderVoid8Arg2 e private final A a; private final B b; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid8Arg3 withArguments(C c) { return new QPromiseTaskBuilderVoid8Arg3<>(priority(), threadPool(), runnable, a, b, c); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid8Arg4 withArguments(C c, D d) { return new QPromiseTaskBuilderVoid8Arg4<>(priority(), threadPool(), runnable, a, b, c, d); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid8Arg5 withArguments(C c, D d, E e) { return new QPromiseTaskBuilderVoid8Arg5<>(priority(), threadPool(), runnable, a, b, c, d, e); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid8Arg6 withArguments(C c, D d, E e, F f) { return new QPromiseTaskBuilderVoid8Arg6<>(priority(), threadPool(), runnable, a, b, c, d, e, f); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid8Arg7 withArguments(C c, D d, E e, F f, G g) { return new QPromiseTaskBuilderVoid8Arg7<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid8Arg8 withArguments(C c, D d, E e, F f, G g, H h) { return new QPromiseTaskBuilderVoid8Arg8<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g, h); } @@ -7515,7 +9692,11 @@ public QPromiseTaskBuilderVoid8Arg2 onThreadPool(QThread } } - public static final class QPromiseTaskBuilderVoid8Arg3 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QPromiseTaskBuilderVoid8Arg3 extends QTaskBuilder{ QPromiseTaskBuilderVoid8Arg3(int newPriority, QThreadPool threadPool, RunnableWithVoidPromise8 runnable, A a, B b, C c) { super(newPriority, threadPool); this.runnable = runnable; @@ -7528,22 +9709,37 @@ public static final class QPromiseTaskBuilderVoid8Arg3 e private final B b; private final C c; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid8Arg4 withArguments(D d) { return new QPromiseTaskBuilderVoid8Arg4<>(priority(), threadPool(), runnable, a, b, c, d); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid8Arg5 withArguments(D d, E e) { return new QPromiseTaskBuilderVoid8Arg5<>(priority(), threadPool(), runnable, a, b, c, d, e); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid8Arg6 withArguments(D d, E e, F f) { return new QPromiseTaskBuilderVoid8Arg6<>(priority(), threadPool(), runnable, a, b, c, d, e, f); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid8Arg7 withArguments(D d, E e, F f, G g) { return new QPromiseTaskBuilderVoid8Arg7<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid8Arg8 withArguments(D d, E e, F f, G g, H h) { return new QPromiseTaskBuilderVoid8Arg8<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g, h); } @@ -7561,7 +9757,11 @@ public QPromiseTaskBuilderVoid8Arg3 onThreadPool(QThread } } - public static final class QPromiseTaskBuilderVoid8Arg4 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QPromiseTaskBuilderVoid8Arg4 extends QTaskBuilder{ QPromiseTaskBuilderVoid8Arg4(int newPriority, QThreadPool threadPool, RunnableWithVoidPromise8 runnable, A a, B b, C c, D d) { super(newPriority, threadPool); this.runnable = runnable; @@ -7576,18 +9776,30 @@ public static final class QPromiseTaskBuilderVoid8Arg4 e private final C c; private final D d; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid8Arg5 withArguments(E e) { return new QPromiseTaskBuilderVoid8Arg5<>(priority(), threadPool(), runnable, a, b, c, d, e); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid8Arg6 withArguments(E e, F f) { return new QPromiseTaskBuilderVoid8Arg6<>(priority(), threadPool(), runnable, a, b, c, d, e, f); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid8Arg7 withArguments(E e, F f, G g) { return new QPromiseTaskBuilderVoid8Arg7<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid8Arg8 withArguments(E e, F f, G g, H h) { return new QPromiseTaskBuilderVoid8Arg8<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g, h); } @@ -7605,7 +9817,11 @@ public QPromiseTaskBuilderVoid8Arg4 onThreadPool(QThread } } - public static final class QPromiseTaskBuilderVoid8Arg5 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QPromiseTaskBuilderVoid8Arg5 extends QTaskBuilder{ QPromiseTaskBuilderVoid8Arg5(int newPriority, QThreadPool threadPool, RunnableWithVoidPromise8 runnable, A a, B b, C c, D d, E e) { super(newPriority, threadPool); this.runnable = runnable; @@ -7622,14 +9838,23 @@ public static final class QPromiseTaskBuilderVoid8Arg5 e private final D d; private final E e; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid8Arg6 withArguments(F f) { return new QPromiseTaskBuilderVoid8Arg6<>(priority(), threadPool(), runnable, a, b, c, d, e, f); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid8Arg7 withArguments(F f, G g) { return new QPromiseTaskBuilderVoid8Arg7<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid8Arg8 withArguments(F f, G g, H h) { return new QPromiseTaskBuilderVoid8Arg8<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g, h); } @@ -7647,7 +9872,11 @@ public QPromiseTaskBuilderVoid8Arg5 onThreadPool(QThread } } - public static final class QPromiseTaskBuilderVoid8Arg6 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QPromiseTaskBuilderVoid8Arg6 extends QTaskBuilder{ QPromiseTaskBuilderVoid8Arg6(int newPriority, QThreadPool threadPool, RunnableWithVoidPromise8 runnable, A a, B b, C c, D d, E e, F f) { super(newPriority, threadPool); this.runnable = runnable; @@ -7666,10 +9895,16 @@ public static final class QPromiseTaskBuilderVoid8Arg6 e private final E e; private final F f; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid8Arg7 withArguments(G g) { return new QPromiseTaskBuilderVoid8Arg7<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid8Arg8 withArguments(G g, H h) { return new QPromiseTaskBuilderVoid8Arg8<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g, h); } @@ -7687,7 +9922,11 @@ public QPromiseTaskBuilderVoid8Arg6 onThreadPool(QThread } } - public static final class QPromiseTaskBuilderVoid8Arg7 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QPromiseTaskBuilderVoid8Arg7 extends QTaskBuilder{ QPromiseTaskBuilderVoid8Arg7(int newPriority, QThreadPool threadPool, RunnableWithVoidPromise8 runnable, A a, B b, C c, D d, E e, F f, G g) { super(newPriority, threadPool); this.runnable = runnable; @@ -7708,6 +9947,9 @@ public static final class QPromiseTaskBuilderVoid8Arg7 e private final F f; private final G g; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid8Arg8 withArguments(H h) { return new QPromiseTaskBuilderVoid8Arg8<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g, h); } @@ -7725,7 +9967,11 @@ public QPromiseTaskBuilderVoid8Arg7 onThreadPool(QThread } } - public static final class QPromiseTaskBuilderVoid8Arg8 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QPromiseTaskBuilderVoid8Arg8 extends QTaskBuilder{ QPromiseTaskBuilderVoid8Arg8(int newPriority, QThreadPool threadPool, RunnableWithVoidPromise8 runnable, A a, B b, C c, D d, E e, F f, G g, H h) { super(newPriority, threadPool); this.runnable = runnable; @@ -7759,6 +10005,10 @@ public QPromiseTaskBuilderVoid8Arg8 onThreadPool(QThread super.onThreadPool(newThreadPool); return this; } + + /** + *

See QtConcurrent::QTaskBuilder::spawn()

+ */ @Override public QFuture spawn() { return spawn(threadPool(), priority(), runnable, a, b, c, d, e, f, g, h); @@ -7768,11 +10018,18 @@ private native static QFuture spawn(QThreadPool t RunnableWithVoidPromise8 runnable, A a, B b, C c, D d, E e, F f, G g, H h); } + /** + *

See QtConcurrent::task(Task&&)

+ */ public static QPromiseTaskBuilderVoid9Arg0 task(RunnableWithVoidPromise9 runnable) { return new QPromiseTaskBuilderVoid9Arg0<>(0, null, runnable); } - public static class QPromiseTaskBuilderVoid9Arg0 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static class QPromiseTaskBuilderVoid9Arg0 extends QTaskBuilder{ private final RunnableWithVoidPromise9 runnable; QPromiseTaskBuilderVoid9Arg0(int priority, QThreadPool threadPool, RunnableWithVoidPromise9 runnable) { @@ -7780,38 +10037,65 @@ public static class QPromiseTaskBuilderVoid9Arg0 exte this.runnable = runnable; } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid9Arg1 withArguments(A a) { return new QPromiseTaskBuilderVoid9Arg1<>(priority(), threadPool(), runnable, a); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid9Arg2 withArguments(A a, B b) { return new QPromiseTaskBuilderVoid9Arg2<>(priority(), threadPool(), runnable, a, b); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid9Arg3 withArguments(A a, B b, C c) { return new QPromiseTaskBuilderVoid9Arg3<>(priority(), threadPool(), runnable, a, b, c); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid9Arg4 withArguments(A a, B b, C c, D d) { return new QPromiseTaskBuilderVoid9Arg4<>(priority(), threadPool(), runnable, a, b, c, d); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid9Arg5 withArguments(A a, B b, C c, D d, E e) { return new QPromiseTaskBuilderVoid9Arg5<>(priority(), threadPool(), runnable, a, b, c, d, e); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid9Arg6 withArguments(A a, B b, C c, D d, E e, F f) { return new QPromiseTaskBuilderVoid9Arg6<>(priority(), threadPool(), runnable, a, b, c, d, e, f); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid9Arg7 withArguments(A a, B b, C c, D d, E e, F f, G g) { return new QPromiseTaskBuilderVoid9Arg7<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid9Arg8 withArguments(A a, B b, C c, D d, E e, F f, G g, H h) { return new QPromiseTaskBuilderVoid9Arg8<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g, h); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid9Arg9 withArguments(A a, B b, C c, D d, E e, F f, G g, H h, I i) { return new QPromiseTaskBuilderVoid9Arg9<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g, h, i); } @@ -7829,7 +10113,11 @@ public QPromiseTaskBuilderVoid9Arg0 onThreadPool(QThr } } - public static class QPromiseTaskBuilderVoid9Arg1 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static class QPromiseTaskBuilderVoid9Arg1 extends QTaskBuilder{ QPromiseTaskBuilderVoid9Arg1(int newPriority, QThreadPool threadPool, RunnableWithVoidPromise9 runnable, A a) { super(newPriority, threadPool); this.runnable = runnable; @@ -7838,34 +10126,58 @@ public static class QPromiseTaskBuilderVoid9Arg1 exte private final RunnableWithVoidPromise9 runnable; private final A a; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid9Arg2 withArguments(B b) { return new QPromiseTaskBuilderVoid9Arg2<>(priority(), threadPool(), runnable, a, b); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid9Arg3 withArguments(B b, C c) { return new QPromiseTaskBuilderVoid9Arg3<>(priority(), threadPool(), runnable, a, b, c); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid9Arg4 withArguments(B b, C c, D d) { return new QPromiseTaskBuilderVoid9Arg4<>(priority(), threadPool(), runnable, a, b, c, d); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid9Arg5 withArguments(B b, C c, D d, E e) { return new QPromiseTaskBuilderVoid9Arg5<>(priority(), threadPool(), runnable, a, b, c, d, e); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid9Arg6 withArguments(B b, C c, D d, E e, F f) { return new QPromiseTaskBuilderVoid9Arg6<>(priority(), threadPool(), runnable, a, b, c, d, e, f); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid9Arg7 withArguments(B b, C c, D d, E e, F f, G g) { return new QPromiseTaskBuilderVoid9Arg7<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid9Arg8 withArguments(B b, C c, D d, E e, F f, G g, H h) { return new QPromiseTaskBuilderVoid9Arg8<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g, h); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid9Arg9 withArguments(B b, C c, D d, E e, F f, G g, H h, I i) { return new QPromiseTaskBuilderVoid9Arg9<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g, h, i); } @@ -7883,7 +10195,11 @@ public QPromiseTaskBuilderVoid9Arg1 onThreadPool(QThr } } - public static final class QPromiseTaskBuilderVoid9Arg2 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QPromiseTaskBuilderVoid9Arg2 extends QTaskBuilder{ QPromiseTaskBuilderVoid9Arg2(int newPriority, QThreadPool threadPool, RunnableWithVoidPromise9 runnable, A a, B b) { super(newPriority, threadPool); this.runnable = runnable; @@ -7894,30 +10210,51 @@ public static final class QPromiseTaskBuilderVoid9Arg2See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid9Arg3 withArguments(C c) { return new QPromiseTaskBuilderVoid9Arg3<>(priority(), threadPool(), runnable, a, b, c); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid9Arg4 withArguments(C c, D d) { return new QPromiseTaskBuilderVoid9Arg4<>(priority(), threadPool(), runnable, a, b, c, d); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid9Arg5 withArguments(C c, D d, E e) { return new QPromiseTaskBuilderVoid9Arg5<>(priority(), threadPool(), runnable, a, b, c, d, e); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid9Arg6 withArguments(C c, D d, E e, F f) { return new QPromiseTaskBuilderVoid9Arg6<>(priority(), threadPool(), runnable, a, b, c, d, e, f); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid9Arg7 withArguments(C c, D d, E e, F f, G g) { return new QPromiseTaskBuilderVoid9Arg7<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid9Arg8 withArguments(C c, D d, E e, F f, G g, H h) { return new QPromiseTaskBuilderVoid9Arg8<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g, h); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid9Arg9 withArguments(C c, D d, E e, F f, G g, H h, I i) { return new QPromiseTaskBuilderVoid9Arg9<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g, h, i); } @@ -7935,7 +10272,11 @@ public QPromiseTaskBuilderVoid9Arg2 onThreadPool(QThr } } - public static final class QPromiseTaskBuilderVoid9Arg3 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QPromiseTaskBuilderVoid9Arg3 extends QTaskBuilder{ QPromiseTaskBuilderVoid9Arg3(int newPriority, QThreadPool threadPool, RunnableWithVoidPromise9 runnable, A a, B b, C c) { super(newPriority, threadPool); this.runnable = runnable; @@ -7948,26 +10289,44 @@ public static final class QPromiseTaskBuilderVoid9Arg3See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid9Arg4 withArguments(D d) { return new QPromiseTaskBuilderVoid9Arg4<>(priority(), threadPool(), runnable, a, b, c, d); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid9Arg5 withArguments(D d, E e) { return new QPromiseTaskBuilderVoid9Arg5<>(priority(), threadPool(), runnable, a, b, c, d, e); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid9Arg6 withArguments(D d, E e, F f) { return new QPromiseTaskBuilderVoid9Arg6<>(priority(), threadPool(), runnable, a, b, c, d, e, f); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid9Arg7 withArguments(D d, E e, F f, G g) { return new QPromiseTaskBuilderVoid9Arg7<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid9Arg8 withArguments(D d, E e, F f, G g, H h) { return new QPromiseTaskBuilderVoid9Arg8<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g, h); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid9Arg9 withArguments(D d, E e, F f, G g, H h, I i) { return new QPromiseTaskBuilderVoid9Arg9<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g, h, i); } @@ -7985,7 +10344,11 @@ public QPromiseTaskBuilderVoid9Arg3 onThreadPool(QThr } } - public static final class QPromiseTaskBuilderVoid9Arg4 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QPromiseTaskBuilderVoid9Arg4 extends QTaskBuilder{ QPromiseTaskBuilderVoid9Arg4(int newPriority, QThreadPool threadPool, RunnableWithVoidPromise9 runnable, A a, B b, C c, D d) { super(newPriority, threadPool); this.runnable = runnable; @@ -8000,22 +10363,37 @@ public static final class QPromiseTaskBuilderVoid9Arg4See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid9Arg5 withArguments(E e) { return new QPromiseTaskBuilderVoid9Arg5<>(priority(), threadPool(), runnable, a, b, c, d, e); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid9Arg6 withArguments(E e, F f) { return new QPromiseTaskBuilderVoid9Arg6<>(priority(), threadPool(), runnable, a, b, c, d, e, f); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid9Arg7 withArguments(E e, F f, G g) { return new QPromiseTaskBuilderVoid9Arg7<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid9Arg8 withArguments(E e, F f, G g, H h) { return new QPromiseTaskBuilderVoid9Arg8<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g, h); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid9Arg9 withArguments(E e, F f, G g, H h, I i) { return new QPromiseTaskBuilderVoid9Arg9<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g, h, i); } @@ -8033,7 +10411,11 @@ public QPromiseTaskBuilderVoid9Arg4 onThreadPool(QThr } } - public static final class QPromiseTaskBuilderVoid9Arg5 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QPromiseTaskBuilderVoid9Arg5 extends QTaskBuilder{ QPromiseTaskBuilderVoid9Arg5(int newPriority, QThreadPool threadPool, RunnableWithVoidPromise9 runnable, A a, B b, C c, D d, E e) { super(newPriority, threadPool); this.runnable = runnable; @@ -8050,18 +10432,30 @@ public static final class QPromiseTaskBuilderVoid9Arg5See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid9Arg6 withArguments(F f) { return new QPromiseTaskBuilderVoid9Arg6<>(priority(), threadPool(), runnable, a, b, c, d, e, f); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid9Arg7 withArguments(F f, G g) { return new QPromiseTaskBuilderVoid9Arg7<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid9Arg8 withArguments(F f, G g, H h) { return new QPromiseTaskBuilderVoid9Arg8<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g, h); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid9Arg9 withArguments(F f, G g, H h, I i) { return new QPromiseTaskBuilderVoid9Arg9<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g, h, i); } @@ -8079,7 +10473,11 @@ public QPromiseTaskBuilderVoid9Arg5 onThreadPool(QThr } } - public static final class QPromiseTaskBuilderVoid9Arg6 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QPromiseTaskBuilderVoid9Arg6 extends QTaskBuilder{ QPromiseTaskBuilderVoid9Arg6(int newPriority, QThreadPool threadPool, RunnableWithVoidPromise9 runnable, A a, B b, C c, D d, E e, F f) { super(newPriority, threadPool); this.runnable = runnable; @@ -8098,14 +10496,23 @@ public static final class QPromiseTaskBuilderVoid9Arg6See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid9Arg7 withArguments(G g) { return new QPromiseTaskBuilderVoid9Arg7<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid9Arg8 withArguments(G g, H h) { return new QPromiseTaskBuilderVoid9Arg8<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g, h); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid9Arg9 withArguments(G g, H h, I i) { return new QPromiseTaskBuilderVoid9Arg9<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g, h, i); } @@ -8123,7 +10530,11 @@ public QPromiseTaskBuilderVoid9Arg6 onThreadPool(QThr } } - public static final class QPromiseTaskBuilderVoid9Arg7 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QPromiseTaskBuilderVoid9Arg7 extends QTaskBuilder{ QPromiseTaskBuilderVoid9Arg7(int newPriority, QThreadPool threadPool, RunnableWithVoidPromise9 runnable, A a, B b, C c, D d, E e, F f, G g) { super(newPriority, threadPool); this.runnable = runnable; @@ -8144,10 +10555,16 @@ public static final class QPromiseTaskBuilderVoid9Arg7See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid9Arg8 withArguments(H h) { return new QPromiseTaskBuilderVoid9Arg8<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g, h); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid9Arg9 withArguments(H h, I i) { return new QPromiseTaskBuilderVoid9Arg9<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g, h, i); } @@ -8165,7 +10582,11 @@ public QPromiseTaskBuilderVoid9Arg7 onThreadPool(QThr } } - public static final class QPromiseTaskBuilderVoid9Arg8 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QPromiseTaskBuilderVoid9Arg8 extends QTaskBuilder{ QPromiseTaskBuilderVoid9Arg8(int newPriority, QThreadPool threadPool, RunnableWithVoidPromise9 runnable, A a, B b, C c, D d, E e, F f, G g, H h) { super(newPriority, threadPool); this.runnable = runnable; @@ -8188,6 +10609,9 @@ public static final class QPromiseTaskBuilderVoid9Arg8See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QPromiseTaskBuilderVoid9Arg9 withArguments(I i) { return new QPromiseTaskBuilderVoid9Arg9<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g, h, i); } @@ -8205,7 +10629,11 @@ public QPromiseTaskBuilderVoid9Arg8 onThreadPool(QThr } } - public static final class QPromiseTaskBuilderVoid9Arg9 extends QTaskBuilderVoid{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QPromiseTaskBuilderVoid9Arg9 extends QTaskBuilder{ QPromiseTaskBuilderVoid9Arg9(int newPriority, QThreadPool threadPool, RunnableWithVoidPromise9 runnable, A a, B b, C c, D d, E e, F f, G g, H h, I i) { super(newPriority, threadPool); this.runnable = runnable; @@ -8230,6 +10658,9 @@ public static final class QPromiseTaskBuilderVoid9Arg9See QtConcurrent::QTaskBuilder::spawn()

+ */ @Override public QFuture spawn() { return spawn(threadPool(), priority(), runnable, a, b, c, d, e, f, g, h, i); @@ -8250,11 +10681,18 @@ private native static QFuture spawn(QThreadPoo RunnableWithVoidPromise9 runnable, A a, B b, C c, D d, E e, F f, G g, H h, I i); } + /** + *

See QtConcurrent::task(Task&&)

+ */ public static QTypedPromiseTaskBuilder0Arg0 task(RunnableWithPromise callable) { return new QTypedPromiseTaskBuilder0Arg0<>(0, null, callable); } - public static class QTypedPromiseTaskBuilder0Arg0 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static class QTypedPromiseTaskBuilder0Arg0 extends QTaskBuilder{ QTypedPromiseTaskBuilder0Arg0(int newPriority, QThreadPool threadPool, RunnableWithPromise runnable) { super(newPriority, threadPool); this.runnable = runnable; @@ -8273,6 +10711,9 @@ public QTypedPromiseTaskBuilder0Arg0 onThreadPool(QThreadPool newThreadPool) return this; } + /** + *

See QtConcurrent::QTaskBuilder::spawn()

+ */ @Override public QFuture spawn() { return spawn(threadPool(), priority(), runnable); @@ -8281,11 +10722,18 @@ public QFuture spawn() { private native static QFuture spawn(QThreadPool threadPool, int priority, RunnableWithPromise runnable); } + /** + *

See QtConcurrent::task(Task&&)

+ */ public static QTypedPromiseTaskBuilder1Arg0 task(RunnableWithPromise1 runnable) { return new QTypedPromiseTaskBuilder1Arg0<>(0, null, runnable); } - public static final class QTypedPromiseTaskBuilder1Arg0 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTypedPromiseTaskBuilder1Arg0 extends QTaskBuilder{ private final RunnableWithPromise1 runnable; QTypedPromiseTaskBuilder1Arg0(int priority, QThreadPool threadPool, RunnableWithPromise1 runnable) { @@ -8293,6 +10741,9 @@ public static final class QTypedPromiseTaskBuilder1Arg0 extends QTypedTask this.runnable = runnable; } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder1Arg1 withArguments(A a) { return new QTypedPromiseTaskBuilder1Arg1<>(priority(), threadPool(), runnable, a); } @@ -8310,7 +10761,11 @@ public QTypedPromiseTaskBuilder1Arg0 onThreadPool(QThreadPool newThreadPoo } } - public static class QTypedPromiseTaskBuilder1Arg1 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static class QTypedPromiseTaskBuilder1Arg1 extends QTaskBuilder{ QTypedPromiseTaskBuilder1Arg1(int newPriority, QThreadPool threadPool, RunnableWithPromise1 runnable, A a) { super(newPriority, threadPool); this.runnable = runnable; @@ -8331,6 +10786,9 @@ public QTypedPromiseTaskBuilder1Arg1 onThreadPool(QThreadPool newThreadPoo return this; } + /** + *

See QtConcurrent::QTaskBuilder::spawn()

+ */ @Override public QFuture spawn() { return spawn(threadPool(), priority(), runnable, a); @@ -8340,11 +10798,18 @@ private native static QFuture spawn(QThreadPool threadPool, int priori RunnableWithPromise1 runnable, A a); } + /** + *

See QtConcurrent::task(Task&&)

+ */ public static QTypedPromiseTaskBuilder2Arg0 task(RunnableWithPromise2 runnable) { return new QTypedPromiseTaskBuilder2Arg0<>(0, null, runnable); } - public static final class QTypedPromiseTaskBuilder2Arg0 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTypedPromiseTaskBuilder2Arg0 extends QTaskBuilder{ private final RunnableWithPromise2 runnable; QTypedPromiseTaskBuilder2Arg0(int priority, QThreadPool threadPool, RunnableWithPromise2 runnable) { @@ -8352,10 +10817,16 @@ public static final class QTypedPromiseTaskBuilder2Arg0 extends QTypedT this.runnable = runnable; } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder2Arg1 withArguments(A a) { return new QTypedPromiseTaskBuilder2Arg1<>(priority(), threadPool(), runnable, a); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder2Arg2 withArguments(A a, B b) { return new QTypedPromiseTaskBuilder2Arg2<>(priority(), threadPool(), runnable, a, b); } @@ -8373,7 +10844,11 @@ public QTypedPromiseTaskBuilder2Arg0 onThreadPool(QThreadPool newThread } } - public static class QTypedPromiseTaskBuilder2Arg1 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static class QTypedPromiseTaskBuilder2Arg1 extends QTaskBuilder{ QTypedPromiseTaskBuilder2Arg1(int newPriority, QThreadPool threadPool, RunnableWithPromise2 runnable, A a) { super(newPriority, threadPool); this.runnable = runnable; @@ -8382,6 +10857,9 @@ public static class QTypedPromiseTaskBuilder2Arg1 extends QTypedTaskBui private final RunnableWithPromise2 runnable; private final A a; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder2Arg2 withArguments(B b) { return new QTypedPromiseTaskBuilder2Arg2<>(priority(), threadPool(), runnable, a, b); } @@ -8399,7 +10877,11 @@ public QTypedPromiseTaskBuilder2Arg1 onThreadPool(QThreadPool newThread } } - public static final class QTypedPromiseTaskBuilder2Arg2 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTypedPromiseTaskBuilder2Arg2 extends QTaskBuilder{ QTypedPromiseTaskBuilder2Arg2(int newPriority, QThreadPool threadPool, RunnableWithPromise2 runnable, A a, B b) { super(newPriority, threadPool); this.runnable = runnable; @@ -8422,6 +10904,9 @@ public QTypedPromiseTaskBuilder2Arg2 onThreadPool(QThreadPool newThread return this; } + /** + *

See QtConcurrent::QTaskBuilder::spawn()

+ */ @Override public QFuture spawn() { return spawn(threadPool(), priority(), runnable, a, b); @@ -8431,11 +10916,18 @@ private native static QFuture spawn(QThreadPool threadPool, int pri RunnableWithPromise2 runnable, A a, B b); } + /** + *

See QtConcurrent::task(Task&&)

+ */ public static QTypedPromiseTaskBuilder3Arg0 task(RunnableWithPromise3 runnable) { return new QTypedPromiseTaskBuilder3Arg0<>(0, null, runnable); } - public static final class QTypedPromiseTaskBuilder3Arg0 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTypedPromiseTaskBuilder3Arg0 extends QTaskBuilder{ private final RunnableWithPromise3 runnable; QTypedPromiseTaskBuilder3Arg0(int priority, QThreadPool threadPool, RunnableWithPromise3 runnable) { @@ -8443,14 +10935,23 @@ public static final class QTypedPromiseTaskBuilder3Arg0 extends QTyp this.runnable = runnable; } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder3Arg1 withArguments(A a) { return new QTypedPromiseTaskBuilder3Arg1<>(priority(), threadPool(), runnable, a); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder3Arg2 withArguments(A a, B b) { return new QTypedPromiseTaskBuilder3Arg2<>(priority(), threadPool(), runnable, a, b); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder3Arg3 withArguments(A a, B b, C c) { return new QTypedPromiseTaskBuilder3Arg3<>(priority(), threadPool(), runnable, a, b, c); } @@ -8468,7 +10969,11 @@ public QTypedPromiseTaskBuilder3Arg0 onThreadPool(QThreadPool newThr } } - public static class QTypedPromiseTaskBuilder3Arg1 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static class QTypedPromiseTaskBuilder3Arg1 extends QTaskBuilder{ QTypedPromiseTaskBuilder3Arg1(int newPriority, QThreadPool threadPool, RunnableWithPromise3 runnable, A a) { super(newPriority, threadPool); this.runnable = runnable; @@ -8477,10 +10982,16 @@ public static class QTypedPromiseTaskBuilder3Arg1 extends QTypedTask private final RunnableWithPromise3 runnable; private final A a; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder3Arg2 withArguments(B b) { return new QTypedPromiseTaskBuilder3Arg2<>(priority(), threadPool(), runnable, a, b); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder3Arg3 withArguments(B b, C c) { return new QTypedPromiseTaskBuilder3Arg3<>(priority(), threadPool(), runnable, a, b, c); } @@ -8498,7 +11009,11 @@ public QTypedPromiseTaskBuilder3Arg1 onThreadPool(QThreadPool newThr } } - public static final class QTypedPromiseTaskBuilder3Arg2 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTypedPromiseTaskBuilder3Arg2 extends QTaskBuilder{ QTypedPromiseTaskBuilder3Arg2(int newPriority, QThreadPool threadPool, RunnableWithPromise3 runnable, A a, B b) { super(newPriority, threadPool); this.runnable = runnable; @@ -8509,6 +11024,9 @@ public static final class QTypedPromiseTaskBuilder3Arg2 extends QTyp private final A a; private final B b; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder3Arg3 withArguments(C c) { return new QTypedPromiseTaskBuilder3Arg3<>(priority(), threadPool(), runnable, a, b, c); } @@ -8526,7 +11044,11 @@ public QTypedPromiseTaskBuilder3Arg2 onThreadPool(QThreadPool newThr } } - public static final class QTypedPromiseTaskBuilder3Arg3 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTypedPromiseTaskBuilder3Arg3 extends QTaskBuilder{ QTypedPromiseTaskBuilder3Arg3(int newPriority, QThreadPool threadPool, RunnableWithPromise3 runnable, A a, B b, C c) { super(newPriority, threadPool); this.runnable = runnable; @@ -8551,6 +11073,9 @@ public QTypedPromiseTaskBuilder3Arg3 onThreadPool(QThreadPool newThr return this; } + /** + *

See QtConcurrent::QTaskBuilder::spawn()

+ */ @Override public QFuture spawn() { return spawn(threadPool(), priority(), runnable, a, b, c); @@ -8560,11 +11085,18 @@ private native static QFuture spawn(QThreadPool threadPool, int RunnableWithPromise3 runnable, A a, B b, C c); } + /** + *

See QtConcurrent::task(Task&&)

+ */ public static QTypedPromiseTaskBuilder4Arg0 task(RunnableWithPromise4 runnable) { return new QTypedPromiseTaskBuilder4Arg0<>(0, null, runnable); } - public static final class QTypedPromiseTaskBuilder4Arg0 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTypedPromiseTaskBuilder4Arg0 extends QTaskBuilder{ private final RunnableWithPromise4 runnable; QTypedPromiseTaskBuilder4Arg0(int priority, QThreadPool threadPool, RunnableWithPromise4 runnable) { @@ -8572,18 +11104,30 @@ public static final class QTypedPromiseTaskBuilder4Arg0 extends Q this.runnable = runnable; } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder4Arg1 withArguments(A a) { return new QTypedPromiseTaskBuilder4Arg1<>(priority(), threadPool(), runnable, a); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder4Arg2 withArguments(A a, B b) { return new QTypedPromiseTaskBuilder4Arg2<>(priority(), threadPool(), runnable, a, b); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder4Arg3 withArguments(A a, B b, C c) { return new QTypedPromiseTaskBuilder4Arg3<>(priority(), threadPool(), runnable, a, b, c); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder4Arg4 withArguments(A a, B b, C c, D d) { return new QTypedPromiseTaskBuilder4Arg4<>(priority(), threadPool(), runnable, a, b, c, d); } @@ -8601,7 +11145,11 @@ public QTypedPromiseTaskBuilder4Arg0 onThreadPool(QThreadPool new } } - public static class QTypedPromiseTaskBuilder4Arg1 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static class QTypedPromiseTaskBuilder4Arg1 extends QTaskBuilder{ QTypedPromiseTaskBuilder4Arg1(int newPriority, QThreadPool threadPool, RunnableWithPromise4 runnable, A a) { super(newPriority, threadPool); this.runnable = runnable; @@ -8610,14 +11158,23 @@ public static class QTypedPromiseTaskBuilder4Arg1 extends QTypedT private final RunnableWithPromise4 runnable; private final A a; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder4Arg2 withArguments(B b) { return new QTypedPromiseTaskBuilder4Arg2<>(priority(), threadPool(), runnable, a, b); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder4Arg3 withArguments(B b, C c) { return new QTypedPromiseTaskBuilder4Arg3<>(priority(), threadPool(), runnable, a, b, c); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder4Arg4 withArguments(B b, C c, D d) { return new QTypedPromiseTaskBuilder4Arg4<>(priority(), threadPool(), runnable, a, b, c, d); } @@ -8635,7 +11192,11 @@ public QTypedPromiseTaskBuilder4Arg1 onThreadPool(QThreadPool new } } - public static final class QTypedPromiseTaskBuilder4Arg2 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTypedPromiseTaskBuilder4Arg2 extends QTaskBuilder{ QTypedPromiseTaskBuilder4Arg2(int newPriority, QThreadPool threadPool, RunnableWithPromise4 runnable, A a, B b) { super(newPriority, threadPool); this.runnable = runnable; @@ -8646,10 +11207,16 @@ public static final class QTypedPromiseTaskBuilder4Arg2 extends Q private final A a; private final B b; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder4Arg3 withArguments(C c) { return new QTypedPromiseTaskBuilder4Arg3<>(priority(), threadPool(), runnable, a, b, c); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder4Arg4 withArguments(C c, D d) { return new QTypedPromiseTaskBuilder4Arg4<>(priority(), threadPool(), runnable, a, b, c, d); } @@ -8667,7 +11234,11 @@ public QTypedPromiseTaskBuilder4Arg2 onThreadPool(QThreadPool new } } - public static final class QTypedPromiseTaskBuilder4Arg3 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTypedPromiseTaskBuilder4Arg3 extends QTaskBuilder{ QTypedPromiseTaskBuilder4Arg3(int newPriority, QThreadPool threadPool, RunnableWithPromise4 runnable, A a, B b, C c) { super(newPriority, threadPool); this.runnable = runnable; @@ -8680,6 +11251,9 @@ public static final class QTypedPromiseTaskBuilder4Arg3 extends Q private final B b; private final C c; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder4Arg4 withArguments(D d) { return new QTypedPromiseTaskBuilder4Arg4<>(priority(), threadPool(), runnable, a, b, c, d); } @@ -8697,7 +11271,11 @@ public QTypedPromiseTaskBuilder4Arg3 onThreadPool(QThreadPool new } } - public static final class QTypedPromiseTaskBuilder4Arg4 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTypedPromiseTaskBuilder4Arg4 extends QTaskBuilder{ QTypedPromiseTaskBuilder4Arg4(int newPriority, QThreadPool threadPool, RunnableWithPromise4 runnable, A a, B b, C c, D d) { super(newPriority, threadPool); this.runnable = runnable; @@ -8724,6 +11302,9 @@ public QTypedPromiseTaskBuilder4Arg4 onThreadPool(QThreadPool new return this; } + /** + *

See QtConcurrent::QTaskBuilder::spawn()

+ */ @Override public QFuture spawn() { return spawn(threadPool(), priority(), runnable, a, b, c, d); @@ -8733,11 +11314,18 @@ private native static QFuture spawn(QThreadPool threadPool, i RunnableWithPromise4 runnable, A a, B b, C c, D d); } + /** + *

See QtConcurrent::task(Task&&)

+ */ public static QTypedPromiseTaskBuilder5Arg0 task(RunnableWithPromise5 runnable) { return new QTypedPromiseTaskBuilder5Arg0<>(0, null, runnable); } - public static final class QTypedPromiseTaskBuilder5Arg0 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTypedPromiseTaskBuilder5Arg0 extends QTaskBuilder{ private final RunnableWithPromise5 runnable; QTypedPromiseTaskBuilder5Arg0(int priority, QThreadPool threadPool, RunnableWithPromise5 runnable) { @@ -8745,22 +11333,37 @@ public static final class QTypedPromiseTaskBuilder5Arg0 extend this.runnable = runnable; } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder5Arg1 withArguments(A a) { return new QTypedPromiseTaskBuilder5Arg1<>(priority(), threadPool(), runnable, a); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder5Arg2 withArguments(A a, B b) { return new QTypedPromiseTaskBuilder5Arg2<>(priority(), threadPool(), runnable, a, b); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder5Arg3 withArguments(A a, B b, C c) { return new QTypedPromiseTaskBuilder5Arg3<>(priority(), threadPool(), runnable, a, b, c); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder5Arg4 withArguments(A a, B b, C c, D d) { return new QTypedPromiseTaskBuilder5Arg4<>(priority(), threadPool(), runnable, a, b, c, d); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder5Arg5 withArguments(A a, B b, C c, D d, E e) { return new QTypedPromiseTaskBuilder5Arg5<>(priority(), threadPool(), runnable, a, b, c, d, e); } @@ -8778,7 +11381,11 @@ public QTypedPromiseTaskBuilder5Arg0 onThreadPool(QThreadPool } } - public static class QTypedPromiseTaskBuilder5Arg1 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static class QTypedPromiseTaskBuilder5Arg1 extends QTaskBuilder{ QTypedPromiseTaskBuilder5Arg1(int newPriority, QThreadPool threadPool, RunnableWithPromise5 runnable, A a) { super(newPriority, threadPool); this.runnable = runnable; @@ -8787,18 +11394,30 @@ public static class QTypedPromiseTaskBuilder5Arg1 extends QTyp private final RunnableWithPromise5 runnable; private final A a; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder5Arg2 withArguments(B b) { return new QTypedPromiseTaskBuilder5Arg2<>(priority(), threadPool(), runnable, a, b); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder5Arg3 withArguments(B b, C c) { return new QTypedPromiseTaskBuilder5Arg3<>(priority(), threadPool(), runnable, a, b, c); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder5Arg4 withArguments(B b, C c, D d) { return new QTypedPromiseTaskBuilder5Arg4<>(priority(), threadPool(), runnable, a, b, c, d); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder5Arg5 withArguments(B b, C c, D d, E e) { return new QTypedPromiseTaskBuilder5Arg5<>(priority(), threadPool(), runnable, a, b, c, d, e); } @@ -8816,7 +11435,11 @@ public QTypedPromiseTaskBuilder5Arg1 onThreadPool(QThreadPool } } - public static final class QTypedPromiseTaskBuilder5Arg2 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTypedPromiseTaskBuilder5Arg2 extends QTaskBuilder{ QTypedPromiseTaskBuilder5Arg2(int newPriority, QThreadPool threadPool, RunnableWithPromise5 runnable, A a, B b) { super(newPriority, threadPool); this.runnable = runnable; @@ -8827,14 +11450,23 @@ public static final class QTypedPromiseTaskBuilder5Arg2 extend private final A a; private final B b; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder5Arg3 withArguments(C c) { return new QTypedPromiseTaskBuilder5Arg3<>(priority(), threadPool(), runnable, a, b, c); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder5Arg4 withArguments(C c, D d) { return new QTypedPromiseTaskBuilder5Arg4<>(priority(), threadPool(), runnable, a, b, c, d); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder5Arg5 withArguments(C c, D d, E e) { return new QTypedPromiseTaskBuilder5Arg5<>(priority(), threadPool(), runnable, a, b, c, d, e); } @@ -8852,7 +11484,11 @@ public QTypedPromiseTaskBuilder5Arg2 onThreadPool(QThreadPool } } - public static final class QTypedPromiseTaskBuilder5Arg3 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTypedPromiseTaskBuilder5Arg3 extends QTaskBuilder{ QTypedPromiseTaskBuilder5Arg3(int newPriority, QThreadPool threadPool, RunnableWithPromise5 runnable, A a, B b, C c) { super(newPriority, threadPool); this.runnable = runnable; @@ -8865,10 +11501,16 @@ public static final class QTypedPromiseTaskBuilder5Arg3 extend private final B b; private final C c; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder5Arg4 withArguments(D d) { return new QTypedPromiseTaskBuilder5Arg4<>(priority(), threadPool(), runnable, a, b, c, d); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder5Arg5 withArguments(D d, E e) { return new QTypedPromiseTaskBuilder5Arg5<>(priority(), threadPool(), runnable, a, b, c, d, e); } @@ -8886,7 +11528,11 @@ public QTypedPromiseTaskBuilder5Arg3 onThreadPool(QThreadPool } } - public static final class QTypedPromiseTaskBuilder5Arg4 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTypedPromiseTaskBuilder5Arg4 extends QTaskBuilder{ QTypedPromiseTaskBuilder5Arg4(int newPriority, QThreadPool threadPool, RunnableWithPromise5 runnable, A a, B b, C c, D d) { super(newPriority, threadPool); this.runnable = runnable; @@ -8901,6 +11547,9 @@ public static final class QTypedPromiseTaskBuilder5Arg4 extend private final C c; private final D d; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder5Arg5 withArguments(E e) { return new QTypedPromiseTaskBuilder5Arg5<>(priority(), threadPool(), runnable, a, b, c, d, e); } @@ -8918,7 +11567,11 @@ public QTypedPromiseTaskBuilder5Arg4 onThreadPool(QThreadPool } } - public static final class QTypedPromiseTaskBuilder5Arg5 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTypedPromiseTaskBuilder5Arg5 extends QTaskBuilder{ QTypedPromiseTaskBuilder5Arg5(int newPriority, QThreadPool threadPool, RunnableWithPromise5 runnable, A a, B b, C c, D d, E e) { super(newPriority, threadPool); this.runnable = runnable; @@ -8947,6 +11600,9 @@ public QTypedPromiseTaskBuilder5Arg5 onThreadPool(QThreadPool return this; } + /** + *

See QtConcurrent::QTaskBuilder::spawn()

+ */ @Override public QFuture spawn() { return spawn(threadPool(), priority(), runnable, a, b, c, d, e); @@ -8956,11 +11612,18 @@ private native static QFuture spawn(QThreadPool threadPool RunnableWithPromise5 runnable, A a, B b, C c, D d, E e); } + /** + *

See QtConcurrent::task(Task&&)

+ */ public static QTypedPromiseTaskBuilder6Arg0 task(RunnableWithPromise6 runnable) { return new QTypedPromiseTaskBuilder6Arg0<>(0, null, runnable); } - public static class QTypedPromiseTaskBuilder6Arg0 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static class QTypedPromiseTaskBuilder6Arg0 extends QTaskBuilder{ private final RunnableWithPromise6 runnable; QTypedPromiseTaskBuilder6Arg0(int priority, QThreadPool threadPool, RunnableWithPromise6 runnable) { @@ -8968,26 +11631,44 @@ public static class QTypedPromiseTaskBuilder6Arg0 extends Q this.runnable = runnable; } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder6Arg1 withArguments(A a) { return new QTypedPromiseTaskBuilder6Arg1<>(priority(), threadPool(), runnable, a); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder6Arg2 withArguments(A a, B b) { return new QTypedPromiseTaskBuilder6Arg2<>(priority(), threadPool(), runnable, a, b); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder6Arg3 withArguments(A a, B b, C c) { return new QTypedPromiseTaskBuilder6Arg3<>(priority(), threadPool(), runnable, a, b, c); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder6Arg4 withArguments(A a, B b, C c, D d) { return new QTypedPromiseTaskBuilder6Arg4<>(priority(), threadPool(), runnable, a, b, c, d); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder6Arg5 withArguments(A a, B b, C c, D d, E e) { return new QTypedPromiseTaskBuilder6Arg5<>(priority(), threadPool(), runnable, a, b, c, d, e); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder6Arg6 withArguments(A a, B b, C c, D d, E e, F f) { return new QTypedPromiseTaskBuilder6Arg6<>(priority(), threadPool(), runnable, a, b, c, d, e, f); } @@ -9005,7 +11686,11 @@ public QTypedPromiseTaskBuilder6Arg0 onThreadPool(QThreadPo } } - public static class QTypedPromiseTaskBuilder6Arg1 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static class QTypedPromiseTaskBuilder6Arg1 extends QTaskBuilder{ QTypedPromiseTaskBuilder6Arg1(int newPriority, QThreadPool threadPool, RunnableWithPromise6 runnable, A a) { super(newPriority, threadPool); this.runnable = runnable; @@ -9014,22 +11699,37 @@ public static class QTypedPromiseTaskBuilder6Arg1 extends Q private final RunnableWithPromise6 runnable; private final A a; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder6Arg2 withArguments(B b) { return new QTypedPromiseTaskBuilder6Arg2<>(priority(), threadPool(), runnable, a, b); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder6Arg3 withArguments(B b, C c) { return new QTypedPromiseTaskBuilder6Arg3<>(priority(), threadPool(), runnable, a, b, c); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder6Arg4 withArguments(B b, C c, D d) { return new QTypedPromiseTaskBuilder6Arg4<>(priority(), threadPool(), runnable, a, b, c, d); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder6Arg5 withArguments(B b, C c, D d, E e) { return new QTypedPromiseTaskBuilder6Arg5<>(priority(), threadPool(), runnable, a, b, c, d, e); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder6Arg6 withArguments(B b, C c, D d, E e, F f) { return new QTypedPromiseTaskBuilder6Arg6<>(priority(), threadPool(), runnable, a, b, c, d, e, f); } @@ -9047,7 +11747,11 @@ public QTypedPromiseTaskBuilder6Arg1 onThreadPool(QThreadPo } } - public static final class QTypedPromiseTaskBuilder6Arg2 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTypedPromiseTaskBuilder6Arg2 extends QTaskBuilder{ QTypedPromiseTaskBuilder6Arg2(int newPriority, QThreadPool threadPool, RunnableWithPromise6 runnable, A a, B b) { super(newPriority, threadPool); this.runnable = runnable; @@ -9058,18 +11762,30 @@ public static final class QTypedPromiseTaskBuilder6Arg2 ext private final A a; private final B b; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder6Arg3 withArguments(C c) { return new QTypedPromiseTaskBuilder6Arg3<>(priority(), threadPool(), runnable, a, b, c); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder6Arg4 withArguments(C c, D d) { return new QTypedPromiseTaskBuilder6Arg4<>(priority(), threadPool(), runnable, a, b, c, d); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder6Arg5 withArguments(C c, D d, E e) { return new QTypedPromiseTaskBuilder6Arg5<>(priority(), threadPool(), runnable, a, b, c, d, e); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder6Arg6 withArguments(C c, D d, E e, F f) { return new QTypedPromiseTaskBuilder6Arg6<>(priority(), threadPool(), runnable, a, b, c, d, e, f); } @@ -9087,7 +11803,11 @@ public QTypedPromiseTaskBuilder6Arg2 onThreadPool(QThreadPo } } - public static final class QTypedPromiseTaskBuilder6Arg3 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTypedPromiseTaskBuilder6Arg3 extends QTaskBuilder{ QTypedPromiseTaskBuilder6Arg3(int newPriority, QThreadPool threadPool, RunnableWithPromise6 runnable, A a, B b, C c) { super(newPriority, threadPool); this.runnable = runnable; @@ -9100,14 +11820,23 @@ public static final class QTypedPromiseTaskBuilder6Arg3 ext private final B b; private final C c; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder6Arg4 withArguments(D d) { return new QTypedPromiseTaskBuilder6Arg4<>(priority(), threadPool(), runnable, a, b, c, d); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder6Arg5 withArguments(D d, E e) { return new QTypedPromiseTaskBuilder6Arg5<>(priority(), threadPool(), runnable, a, b, c, d, e); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder6Arg6 withArguments(D d, E e, F f) { return new QTypedPromiseTaskBuilder6Arg6<>(priority(), threadPool(), runnable, a, b, c, d, e, f); } @@ -9125,7 +11854,11 @@ public QTypedPromiseTaskBuilder6Arg3 onThreadPool(QThreadPo } } - public static final class QTypedPromiseTaskBuilder6Arg4 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTypedPromiseTaskBuilder6Arg4 extends QTaskBuilder{ QTypedPromiseTaskBuilder6Arg4(int newPriority, QThreadPool threadPool, RunnableWithPromise6 runnable, A a, B b, C c, D d) { super(newPriority, threadPool); this.runnable = runnable; @@ -9140,10 +11873,16 @@ public static final class QTypedPromiseTaskBuilder6Arg4 ext private final C c; private final D d; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder6Arg5 withArguments(E e) { return new QTypedPromiseTaskBuilder6Arg5<>(priority(), threadPool(), runnable, a, b, c, d, e); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder6Arg6 withArguments(E e, F f) { return new QTypedPromiseTaskBuilder6Arg6<>(priority(), threadPool(), runnable, a, b, c, d, e, f); } @@ -9161,7 +11900,11 @@ public QTypedPromiseTaskBuilder6Arg4 onThreadPool(QThreadPo } } - public static final class QTypedPromiseTaskBuilder6Arg5 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTypedPromiseTaskBuilder6Arg5 extends QTaskBuilder{ QTypedPromiseTaskBuilder6Arg5(int newPriority, QThreadPool threadPool, RunnableWithPromise6 runnable, A a, B b, C c, D d, E e) { super(newPriority, threadPool); this.runnable = runnable; @@ -9178,6 +11921,9 @@ public static final class QTypedPromiseTaskBuilder6Arg5 ext private final D d; private final E e; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder6Arg6 withArguments(F f) { return new QTypedPromiseTaskBuilder6Arg6<>(priority(), threadPool(), runnable, a, b, c, d, e, f); } @@ -9195,7 +11941,11 @@ public QTypedPromiseTaskBuilder6Arg5 onThreadPool(QThreadPo } } - public static final class QTypedPromiseTaskBuilder6Arg6 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTypedPromiseTaskBuilder6Arg6 extends QTaskBuilder{ QTypedPromiseTaskBuilder6Arg6(int newPriority, QThreadPool threadPool, RunnableWithPromise6 runnable, A a, B b, C c, D d, E e, F f) { super(newPriority, threadPool); this.runnable = runnable; @@ -9226,6 +11976,9 @@ public QTypedPromiseTaskBuilder6Arg6 onThreadPool(QThreadPo return this; } + /** + *

See QtConcurrent::QTaskBuilder::spawn()

+ */ @Override public QFuture spawn() { return spawn(threadPool(), priority(), runnable, a, b, c, d, e, f); @@ -9235,11 +11988,18 @@ private native static QFuture spawn(QThreadPool threadP RunnableWithPromise6 runnable, A a, B b, C c, D d, E e, F f); } + /** + *

See QtConcurrent::task(Task&&)

+ */ public static QTypedPromiseTaskBuilder7Arg0 task(RunnableWithPromise7 runnable) { return new QTypedPromiseTaskBuilder7Arg0<>(0, null, runnable); } - public static class QTypedPromiseTaskBuilder7Arg0 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static class QTypedPromiseTaskBuilder7Arg0 extends QTaskBuilder{ private final RunnableWithPromise7 runnable; QTypedPromiseTaskBuilder7Arg0(int priority, QThreadPool threadPool, RunnableWithPromise7 runnable) { @@ -9247,30 +12007,51 @@ public static class QTypedPromiseTaskBuilder7Arg0 extend this.runnable = runnable; } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder7Arg1 withArguments(A a) { return new QTypedPromiseTaskBuilder7Arg1<>(priority(), threadPool(), runnable, a); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder7Arg2 withArguments(A a, B b) { return new QTypedPromiseTaskBuilder7Arg2<>(priority(), threadPool(), runnable, a, b); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder7Arg3 withArguments(A a, B b, C c) { return new QTypedPromiseTaskBuilder7Arg3<>(priority(), threadPool(), runnable, a, b, c); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder7Arg4 withArguments(A a, B b, C c, D d) { return new QTypedPromiseTaskBuilder7Arg4<>(priority(), threadPool(), runnable, a, b, c, d); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder7Arg5 withArguments(A a, B b, C c, D d, E e) { return new QTypedPromiseTaskBuilder7Arg5<>(priority(), threadPool(), runnable, a, b, c, d, e); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder7Arg6 withArguments(A a, B b, C c, D d, E e, F f) { return new QTypedPromiseTaskBuilder7Arg6<>(priority(), threadPool(), runnable, a, b, c, d, e, f); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder7Arg7 withArguments(A a, B b, C c, D d, E e, F f, G g) { return new QTypedPromiseTaskBuilder7Arg7<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g); } @@ -9288,7 +12069,11 @@ public QTypedPromiseTaskBuilder7Arg0 onThreadPool(QThrea } } - public static class QTypedPromiseTaskBuilder7Arg1 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static class QTypedPromiseTaskBuilder7Arg1 extends QTaskBuilder{ QTypedPromiseTaskBuilder7Arg1(int newPriority, QThreadPool threadPool, RunnableWithPromise7 runnable, A a) { super(newPriority, threadPool); this.runnable = runnable; @@ -9297,26 +12082,44 @@ public static class QTypedPromiseTaskBuilder7Arg1 extend private final RunnableWithPromise7 runnable; private final A a; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder7Arg2 withArguments(B b) { return new QTypedPromiseTaskBuilder7Arg2<>(priority(), threadPool(), runnable, a, b); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder7Arg3 withArguments(B b, C c) { return new QTypedPromiseTaskBuilder7Arg3<>(priority(), threadPool(), runnable, a, b, c); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder7Arg4 withArguments(B b, C c, D d) { return new QTypedPromiseTaskBuilder7Arg4<>(priority(), threadPool(), runnable, a, b, c, d); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder7Arg5 withArguments(B b, C c, D d, E e) { return new QTypedPromiseTaskBuilder7Arg5<>(priority(), threadPool(), runnable, a, b, c, d, e); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder7Arg6 withArguments(B b, C c, D d, E e, F f) { return new QTypedPromiseTaskBuilder7Arg6<>(priority(), threadPool(), runnable, a, b, c, d, e, f); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder7Arg7 withArguments(B b, C c, D d, E e, F f, G g) { return new QTypedPromiseTaskBuilder7Arg7<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g); } @@ -9334,7 +12137,11 @@ public QTypedPromiseTaskBuilder7Arg1 onThreadPool(QThrea } } - public static final class QTypedPromiseTaskBuilder7Arg2 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTypedPromiseTaskBuilder7Arg2 extends QTaskBuilder{ QTypedPromiseTaskBuilder7Arg2(int newPriority, QThreadPool threadPool, RunnableWithPromise7 runnable, A a, B b) { super(newPriority, threadPool); this.runnable = runnable; @@ -9345,22 +12152,37 @@ public static final class QTypedPromiseTaskBuilder7Arg2 private final A a; private final B b; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder7Arg3 withArguments(C c) { return new QTypedPromiseTaskBuilder7Arg3<>(priority(), threadPool(), runnable, a, b, c); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder7Arg4 withArguments(C c, D d) { return new QTypedPromiseTaskBuilder7Arg4<>(priority(), threadPool(), runnable, a, b, c, d); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder7Arg5 withArguments(C c, D d, E e) { return new QTypedPromiseTaskBuilder7Arg5<>(priority(), threadPool(), runnable, a, b, c, d, e); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder7Arg6 withArguments(C c, D d, E e, F f) { return new QTypedPromiseTaskBuilder7Arg6<>(priority(), threadPool(), runnable, a, b, c, d, e, f); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder7Arg7 withArguments(C c, D d, E e, F f, G g) { return new QTypedPromiseTaskBuilder7Arg7<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g); } @@ -9378,7 +12200,11 @@ public QTypedPromiseTaskBuilder7Arg2 onThreadPool(QThrea } } - public static final class QTypedPromiseTaskBuilder7Arg3 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTypedPromiseTaskBuilder7Arg3 extends QTaskBuilder{ QTypedPromiseTaskBuilder7Arg3(int newPriority, QThreadPool threadPool, RunnableWithPromise7 runnable, A a, B b, C c) { super(newPriority, threadPool); this.runnable = runnable; @@ -9391,18 +12217,30 @@ public static final class QTypedPromiseTaskBuilder7Arg3 private final B b; private final C c; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder7Arg4 withArguments(D d) { return new QTypedPromiseTaskBuilder7Arg4<>(priority(), threadPool(), runnable, a, b, c, d); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder7Arg5 withArguments(D d, E e) { return new QTypedPromiseTaskBuilder7Arg5<>(priority(), threadPool(), runnable, a, b, c, d, e); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder7Arg6 withArguments(D d, E e, F f) { return new QTypedPromiseTaskBuilder7Arg6<>(priority(), threadPool(), runnable, a, b, c, d, e, f); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder7Arg7 withArguments(D d, E e, F f, G g) { return new QTypedPromiseTaskBuilder7Arg7<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g); } @@ -9420,7 +12258,11 @@ public QTypedPromiseTaskBuilder7Arg3 onThreadPool(QThrea } } - public static final class QTypedPromiseTaskBuilder7Arg4 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTypedPromiseTaskBuilder7Arg4 extends QTaskBuilder{ QTypedPromiseTaskBuilder7Arg4(int newPriority, QThreadPool threadPool, RunnableWithPromise7 runnable, A a, B b, C c, D d) { super(newPriority, threadPool); this.runnable = runnable; @@ -9435,14 +12277,23 @@ public static final class QTypedPromiseTaskBuilder7Arg4 private final C c; private final D d; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder7Arg5 withArguments(E e) { return new QTypedPromiseTaskBuilder7Arg5<>(priority(), threadPool(), runnable, a, b, c, d, e); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder7Arg6 withArguments(E e, F f) { return new QTypedPromiseTaskBuilder7Arg6<>(priority(), threadPool(), runnable, a, b, c, d, e, f); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder7Arg7 withArguments(E e, F f, G g) { return new QTypedPromiseTaskBuilder7Arg7<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g); } @@ -9460,7 +12311,11 @@ public QTypedPromiseTaskBuilder7Arg4 onThreadPool(QThrea } } - public static final class QTypedPromiseTaskBuilder7Arg5 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTypedPromiseTaskBuilder7Arg5 extends QTaskBuilder{ QTypedPromiseTaskBuilder7Arg5(int newPriority, QThreadPool threadPool, RunnableWithPromise7 runnable, A a, B b, C c, D d, E e) { super(newPriority, threadPool); this.runnable = runnable; @@ -9477,10 +12332,16 @@ public static final class QTypedPromiseTaskBuilder7Arg5 private final D d; private final E e; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder7Arg6 withArguments(F f) { return new QTypedPromiseTaskBuilder7Arg6<>(priority(), threadPool(), runnable, a, b, c, d, e, f); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder7Arg7 withArguments(F f, G g) { return new QTypedPromiseTaskBuilder7Arg7<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g); } @@ -9498,7 +12359,11 @@ public QTypedPromiseTaskBuilder7Arg5 onThreadPool(QThrea } } - public static final class QTypedPromiseTaskBuilder7Arg6 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTypedPromiseTaskBuilder7Arg6 extends QTaskBuilder{ QTypedPromiseTaskBuilder7Arg6(int newPriority, QThreadPool threadPool, RunnableWithPromise7 runnable, A a, B b, C c, D d, E e, F f) { super(newPriority, threadPool); this.runnable = runnable; @@ -9517,6 +12382,9 @@ public static final class QTypedPromiseTaskBuilder7Arg6 private final E e; private final F f; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder7Arg7 withArguments(G g) { return new QTypedPromiseTaskBuilder7Arg7<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g); } @@ -9534,7 +12402,11 @@ public QTypedPromiseTaskBuilder7Arg6 onThreadPool(QThrea } } - public static final class QTypedPromiseTaskBuilder7Arg7 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTypedPromiseTaskBuilder7Arg7 extends QTaskBuilder{ QTypedPromiseTaskBuilder7Arg7(int newPriority, QThreadPool threadPool, RunnableWithPromise7 runnable, A a, B b, C c, D d, E e, F f, G g) { super(newPriority, threadPool); this.runnable = runnable; @@ -9567,6 +12439,9 @@ public QTypedPromiseTaskBuilder7Arg7 onThreadPool(QThrea return this; } + /** + *

See QtConcurrent::QTaskBuilder::spawn()

+ */ @Override public QFuture spawn() { return spawn(threadPool(), priority(), runnable, a, b, c, d, e, f, g); @@ -9576,11 +12451,18 @@ private native static QFuture spawn(QThreadPool thre RunnableWithPromise7 runnable, A a, B b, C c, D d, E e, F f, G g); } + /** + *

See QtConcurrent::task(Task&&)

+ */ public static QTypedPromiseTaskBuilder8Arg0 task(RunnableWithPromise8 runnable) { return new QTypedPromiseTaskBuilder8Arg0<>(0, null, runnable); } - public static class QTypedPromiseTaskBuilder8Arg0 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static class QTypedPromiseTaskBuilder8Arg0 extends QTaskBuilder{ private final RunnableWithPromise8 runnable; QTypedPromiseTaskBuilder8Arg0(int priority, QThreadPool threadPool, RunnableWithPromise8 runnable) { @@ -9588,34 +12470,58 @@ public static class QTypedPromiseTaskBuilder8Arg0 ext this.runnable = runnable; } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder8Arg1 withArguments(A a) { return new QTypedPromiseTaskBuilder8Arg1<>(priority(), threadPool(), runnable, a); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder8Arg2 withArguments(A a, B b) { return new QTypedPromiseTaskBuilder8Arg2<>(priority(), threadPool(), runnable, a, b); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder8Arg3 withArguments(A a, B b, C c) { return new QTypedPromiseTaskBuilder8Arg3<>(priority(), threadPool(), runnable, a, b, c); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder8Arg4 withArguments(A a, B b, C c, D d) { return new QTypedPromiseTaskBuilder8Arg4<>(priority(), threadPool(), runnable, a, b, c, d); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder8Arg5 withArguments(A a, B b, C c, D d, E e) { return new QTypedPromiseTaskBuilder8Arg5<>(priority(), threadPool(), runnable, a, b, c, d, e); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder8Arg6 withArguments(A a, B b, C c, D d, E e, F f) { return new QTypedPromiseTaskBuilder8Arg6<>(priority(), threadPool(), runnable, a, b, c, d, e, f); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder8Arg7 withArguments(A a, B b, C c, D d, E e, F f, G g) { return new QTypedPromiseTaskBuilder8Arg7<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder8Arg8 withArguments(A a, B b, C c, D d, E e, F f, G g, H h) { return new QTypedPromiseTaskBuilder8Arg8<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g, h); } @@ -9633,7 +12539,11 @@ public QTypedPromiseTaskBuilder8Arg0 onThreadPool(QTh } } - public static class QTypedPromiseTaskBuilder8Arg1 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static class QTypedPromiseTaskBuilder8Arg1 extends QTaskBuilder{ QTypedPromiseTaskBuilder8Arg1(int newPriority, QThreadPool threadPool, RunnableWithPromise8 runnable, A a) { super(newPriority, threadPool); this.runnable = runnable; @@ -9642,30 +12552,51 @@ public static class QTypedPromiseTaskBuilder8Arg1 ext private final RunnableWithPromise8 runnable; private final A a; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder8Arg2 withArguments(B b) { return new QTypedPromiseTaskBuilder8Arg2<>(priority(), threadPool(), runnable, a, b); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder8Arg3 withArguments(B b, C c) { return new QTypedPromiseTaskBuilder8Arg3<>(priority(), threadPool(), runnable, a, b, c); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder8Arg4 withArguments(B b, C c, D d) { return new QTypedPromiseTaskBuilder8Arg4<>(priority(), threadPool(), runnable, a, b, c, d); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder8Arg5 withArguments(B b, C c, D d, E e) { return new QTypedPromiseTaskBuilder8Arg5<>(priority(), threadPool(), runnable, a, b, c, d, e); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder8Arg6 withArguments(B b, C c, D d, E e, F f) { return new QTypedPromiseTaskBuilder8Arg6<>(priority(), threadPool(), runnable, a, b, c, d, e, f); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder8Arg7 withArguments(B b, C c, D d, E e, F f, G g) { return new QTypedPromiseTaskBuilder8Arg7<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder8Arg8 withArguments(B b, C c, D d, E e, F f, G g, H h) { return new QTypedPromiseTaskBuilder8Arg8<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g, h); } @@ -9683,7 +12614,11 @@ public QTypedPromiseTaskBuilder8Arg1 onThreadPool(QTh } } - public static final class QTypedPromiseTaskBuilder8Arg2 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTypedPromiseTaskBuilder8Arg2 extends QTaskBuilder{ QTypedPromiseTaskBuilder8Arg2(int newPriority, QThreadPool threadPool, RunnableWithPromise8 runnable, A a, B b) { super(newPriority, threadPool); this.runnable = runnable; @@ -9694,26 +12629,44 @@ public static final class QTypedPromiseTaskBuilder8Arg2See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder8Arg3 withArguments(C c) { return new QTypedPromiseTaskBuilder8Arg3<>(priority(), threadPool(), runnable, a, b, c); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder8Arg4 withArguments(C c, D d) { return new QTypedPromiseTaskBuilder8Arg4<>(priority(), threadPool(), runnable, a, b, c, d); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder8Arg5 withArguments(C c, D d, E e) { return new QTypedPromiseTaskBuilder8Arg5<>(priority(), threadPool(), runnable, a, b, c, d, e); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder8Arg6 withArguments(C c, D d, E e, F f) { return new QTypedPromiseTaskBuilder8Arg6<>(priority(), threadPool(), runnable, a, b, c, d, e, f); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder8Arg7 withArguments(C c, D d, E e, F f, G g) { return new QTypedPromiseTaskBuilder8Arg7<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder8Arg8 withArguments(C c, D d, E e, F f, G g, H h) { return new QTypedPromiseTaskBuilder8Arg8<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g, h); } @@ -9731,7 +12684,11 @@ public QTypedPromiseTaskBuilder8Arg2 onThreadPool(QTh } } - public static final class QTypedPromiseTaskBuilder8Arg3 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTypedPromiseTaskBuilder8Arg3 extends QTaskBuilder{ QTypedPromiseTaskBuilder8Arg3(int newPriority, QThreadPool threadPool, RunnableWithPromise8 runnable, A a, B b, C c) { super(newPriority, threadPool); this.runnable = runnable; @@ -9744,22 +12701,37 @@ public static final class QTypedPromiseTaskBuilder8Arg3See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder8Arg4 withArguments(D d) { return new QTypedPromiseTaskBuilder8Arg4<>(priority(), threadPool(), runnable, a, b, c, d); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder8Arg5 withArguments(D d, E e) { return new QTypedPromiseTaskBuilder8Arg5<>(priority(), threadPool(), runnable, a, b, c, d, e); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder8Arg6 withArguments(D d, E e, F f) { return new QTypedPromiseTaskBuilder8Arg6<>(priority(), threadPool(), runnable, a, b, c, d, e, f); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder8Arg7 withArguments(D d, E e, F f, G g) { return new QTypedPromiseTaskBuilder8Arg7<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder8Arg8 withArguments(D d, E e, F f, G g, H h) { return new QTypedPromiseTaskBuilder8Arg8<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g, h); } @@ -9777,7 +12749,11 @@ public QTypedPromiseTaskBuilder8Arg3 onThreadPool(QTh } } - public static final class QTypedPromiseTaskBuilder8Arg4 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTypedPromiseTaskBuilder8Arg4 extends QTaskBuilder{ QTypedPromiseTaskBuilder8Arg4(int newPriority, QThreadPool threadPool, RunnableWithPromise8 runnable, A a, B b, C c, D d) { super(newPriority, threadPool); this.runnable = runnable; @@ -9792,18 +12768,30 @@ public static final class QTypedPromiseTaskBuilder8Arg4See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder8Arg5 withArguments(E e) { return new QTypedPromiseTaskBuilder8Arg5<>(priority(), threadPool(), runnable, a, b, c, d, e); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder8Arg6 withArguments(E e, F f) { return new QTypedPromiseTaskBuilder8Arg6<>(priority(), threadPool(), runnable, a, b, c, d, e, f); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder8Arg7 withArguments(E e, F f, G g) { return new QTypedPromiseTaskBuilder8Arg7<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder8Arg8 withArguments(E e, F f, G g, H h) { return new QTypedPromiseTaskBuilder8Arg8<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g, h); } @@ -9821,7 +12809,11 @@ public QTypedPromiseTaskBuilder8Arg4 onThreadPool(QTh } } - public static final class QTypedPromiseTaskBuilder8Arg5 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTypedPromiseTaskBuilder8Arg5 extends QTaskBuilder{ QTypedPromiseTaskBuilder8Arg5(int newPriority, QThreadPool threadPool, RunnableWithPromise8 runnable, A a, B b, C c, D d, E e) { super(newPriority, threadPool); this.runnable = runnable; @@ -9838,14 +12830,23 @@ public static final class QTypedPromiseTaskBuilder8Arg5See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder8Arg6 withArguments(F f) { return new QTypedPromiseTaskBuilder8Arg6<>(priority(), threadPool(), runnable, a, b, c, d, e, f); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder8Arg7 withArguments(F f, G g) { return new QTypedPromiseTaskBuilder8Arg7<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder8Arg8 withArguments(F f, G g, H h) { return new QTypedPromiseTaskBuilder8Arg8<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g, h); } @@ -9863,7 +12864,11 @@ public QTypedPromiseTaskBuilder8Arg5 onThreadPool(QTh } } - public static final class QTypedPromiseTaskBuilder8Arg6 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTypedPromiseTaskBuilder8Arg6 extends QTaskBuilder{ QTypedPromiseTaskBuilder8Arg6(int newPriority, QThreadPool threadPool, RunnableWithPromise8 runnable, A a, B b, C c, D d, E e, F f) { super(newPriority, threadPool); this.runnable = runnable; @@ -9882,10 +12887,16 @@ public static final class QTypedPromiseTaskBuilder8Arg6See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder8Arg7 withArguments(G g) { return new QTypedPromiseTaskBuilder8Arg7<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder8Arg8 withArguments(G g, H h) { return new QTypedPromiseTaskBuilder8Arg8<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g, h); } @@ -9903,7 +12914,11 @@ public QTypedPromiseTaskBuilder8Arg6 onThreadPool(QTh } } - public static final class QTypedPromiseTaskBuilder8Arg7 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTypedPromiseTaskBuilder8Arg7 extends QTaskBuilder{ QTypedPromiseTaskBuilder8Arg7(int newPriority, QThreadPool threadPool, RunnableWithPromise8 runnable, A a, B b, C c, D d, E e, F f, G g) { super(newPriority, threadPool); this.runnable = runnable; @@ -9924,6 +12939,9 @@ public static final class QTypedPromiseTaskBuilder8Arg7See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder8Arg8 withArguments(H h) { return new QTypedPromiseTaskBuilder8Arg8<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g, h); } @@ -9941,7 +12959,11 @@ public QTypedPromiseTaskBuilder8Arg7 onThreadPool(QTh } } - public static final class QTypedPromiseTaskBuilder8Arg8 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTypedPromiseTaskBuilder8Arg8 extends QTaskBuilder{ QTypedPromiseTaskBuilder8Arg8(int newPriority, QThreadPool threadPool, RunnableWithPromise8 runnable, A a, B b, C c, D d, E e, F f, G g, H h) { super(newPriority, threadPool); this.runnable = runnable; @@ -9975,6 +12997,10 @@ public QTypedPromiseTaskBuilder8Arg8 onThreadPool(QTh super.onThreadPool(newThreadPool); return this; } + + /** + *

See QtConcurrent::QTaskBuilder::spawn()

+ */ @Override public QFuture spawn() { return spawn(threadPool(), priority(), runnable, a, b, c, d, e, f, g, h); @@ -9984,11 +13010,18 @@ private native static QFuture spawn(QThreadPool t RunnableWithPromise8 runnable, A a, B b, C c, D d, E e, F f, G g, H h); } + /** + *

See QtConcurrent::task(Task&&)

+ */ public static QTypedPromiseTaskBuilder9Arg0 task(RunnableWithPromise9 runnable) { return new QTypedPromiseTaskBuilder9Arg0<>(0, null, runnable); } - public static class QTypedPromiseTaskBuilder9Arg0 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static class QTypedPromiseTaskBuilder9Arg0 extends QTaskBuilder{ private final RunnableWithPromise9 runnable; QTypedPromiseTaskBuilder9Arg0(int priority, QThreadPool threadPool, RunnableWithPromise9 runnable) { @@ -9996,38 +13029,65 @@ public static class QTypedPromiseTaskBuilder9Arg0 this.runnable = runnable; } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder9Arg1 withArguments(A a) { return new QTypedPromiseTaskBuilder9Arg1<>(priority(), threadPool(), runnable, a); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder9Arg2 withArguments(A a, B b) { return new QTypedPromiseTaskBuilder9Arg2<>(priority(), threadPool(), runnable, a, b); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder9Arg3 withArguments(A a, B b, C c) { return new QTypedPromiseTaskBuilder9Arg3<>(priority(), threadPool(), runnable, a, b, c); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder9Arg4 withArguments(A a, B b, C c, D d) { return new QTypedPromiseTaskBuilder9Arg4<>(priority(), threadPool(), runnable, a, b, c, d); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder9Arg5 withArguments(A a, B b, C c, D d, E e) { return new QTypedPromiseTaskBuilder9Arg5<>(priority(), threadPool(), runnable, a, b, c, d, e); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder9Arg6 withArguments(A a, B b, C c, D d, E e, F f) { return new QTypedPromiseTaskBuilder9Arg6<>(priority(), threadPool(), runnable, a, b, c, d, e, f); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder9Arg7 withArguments(A a, B b, C c, D d, E e, F f, G g) { return new QTypedPromiseTaskBuilder9Arg7<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder9Arg8 withArguments(A a, B b, C c, D d, E e, F f, G g, H h) { return new QTypedPromiseTaskBuilder9Arg8<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g, h); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder9Arg9 withArguments(A a, B b, C c, D d, E e, F f, G g, H h, I i) { return new QTypedPromiseTaskBuilder9Arg9<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g, h, i); } @@ -10045,7 +13105,11 @@ public QTypedPromiseTaskBuilder9Arg0 onThreadPool( } } - public static class QTypedPromiseTaskBuilder9Arg1 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static class QTypedPromiseTaskBuilder9Arg1 extends QTaskBuilder{ QTypedPromiseTaskBuilder9Arg1(int newPriority, QThreadPool threadPool, RunnableWithPromise9 runnable, A a) { super(newPriority, threadPool); this.runnable = runnable; @@ -10054,34 +13118,58 @@ public static class QTypedPromiseTaskBuilder9Arg1 private final RunnableWithPromise9 runnable; private final A a; + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder9Arg2 withArguments(B b) { return new QTypedPromiseTaskBuilder9Arg2<>(priority(), threadPool(), runnable, a, b); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder9Arg3 withArguments(B b, C c) { return new QTypedPromiseTaskBuilder9Arg3<>(priority(), threadPool(), runnable, a, b, c); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder9Arg4 withArguments(B b, C c, D d) { return new QTypedPromiseTaskBuilder9Arg4<>(priority(), threadPool(), runnable, a, b, c, d); } - public QTypedPromiseTaskBuilder9Arg5 withArguments(B b, C c, D d, E e) { + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ + public QTypedPromiseTaskBuilder9Arg5 withArguments(B b, C c, D d, E e) { return new QTypedPromiseTaskBuilder9Arg5<>(priority(), threadPool(), runnable, a, b, c, d, e); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder9Arg6 withArguments(B b, C c, D d, E e, F f) { return new QTypedPromiseTaskBuilder9Arg6<>(priority(), threadPool(), runnable, a, b, c, d, e, f); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder9Arg7 withArguments(B b, C c, D d, E e, F f, G g) { return new QTypedPromiseTaskBuilder9Arg7<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder9Arg8 withArguments(B b, C c, D d, E e, F f, G g, H h) { return new QTypedPromiseTaskBuilder9Arg8<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g, h); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder9Arg9 withArguments(B b, C c, D d, E e, F f, G g, H h, I i) { return new QTypedPromiseTaskBuilder9Arg9<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g, h, i); } @@ -10099,7 +13187,11 @@ public QTypedPromiseTaskBuilder9Arg1 onThreadPool( } } - public static final class QTypedPromiseTaskBuilder9Arg2 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTypedPromiseTaskBuilder9Arg2 extends QTaskBuilder{ QTypedPromiseTaskBuilder9Arg2(int newPriority, QThreadPool threadPool, RunnableWithPromise9 runnable, A a, B b) { super(newPriority, threadPool); this.runnable = runnable; @@ -10110,30 +13202,51 @@ public static final class QTypedPromiseTaskBuilder9Arg2See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder9Arg3 withArguments(C c) { return new QTypedPromiseTaskBuilder9Arg3<>(priority(), threadPool(), runnable, a, b, c); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder9Arg4 withArguments(C c, D d) { return new QTypedPromiseTaskBuilder9Arg4<>(priority(), threadPool(), runnable, a, b, c, d); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder9Arg5 withArguments(C c, D d, E e) { return new QTypedPromiseTaskBuilder9Arg5<>(priority(), threadPool(), runnable, a, b, c, d, e); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder9Arg6 withArguments(C c, D d, E e, F f) { return new QTypedPromiseTaskBuilder9Arg6<>(priority(), threadPool(), runnable, a, b, c, d, e, f); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder9Arg7 withArguments(C c, D d, E e, F f, G g) { return new QTypedPromiseTaskBuilder9Arg7<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder9Arg8 withArguments(C c, D d, E e, F f, G g, H h) { return new QTypedPromiseTaskBuilder9Arg8<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g, h); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder9Arg9 withArguments(C c, D d, E e, F f, G g, H h, I i) { return new QTypedPromiseTaskBuilder9Arg9<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g, h, i); } @@ -10151,7 +13264,11 @@ public QTypedPromiseTaskBuilder9Arg2 onThreadPool( } } - public static final class QTypedPromiseTaskBuilder9Arg3 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTypedPromiseTaskBuilder9Arg3 extends QTaskBuilder{ QTypedPromiseTaskBuilder9Arg3(int newPriority, QThreadPool threadPool, RunnableWithPromise9 runnable, A a, B b, C c) { super(newPriority, threadPool); this.runnable = runnable; @@ -10164,26 +13281,44 @@ public static final class QTypedPromiseTaskBuilder9Arg3See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder9Arg4 withArguments(D d) { return new QTypedPromiseTaskBuilder9Arg4<>(priority(), threadPool(), runnable, a, b, c, d); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder9Arg5 withArguments(D d, E e) { return new QTypedPromiseTaskBuilder9Arg5<>(priority(), threadPool(), runnable, a, b, c, d, e); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder9Arg6 withArguments(D d, E e, F f) { return new QTypedPromiseTaskBuilder9Arg6<>(priority(), threadPool(), runnable, a, b, c, d, e, f); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder9Arg7 withArguments(D d, E e, F f, G g) { return new QTypedPromiseTaskBuilder9Arg7<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder9Arg8 withArguments(D d, E e, F f, G g, H h) { return new QTypedPromiseTaskBuilder9Arg8<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g, h); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder9Arg9 withArguments(D d, E e, F f, G g, H h, I i) { return new QTypedPromiseTaskBuilder9Arg9<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g, h, i); } @@ -10201,7 +13336,11 @@ public QTypedPromiseTaskBuilder9Arg3 onThreadPool( } } - public static final class QTypedPromiseTaskBuilder9Arg4 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTypedPromiseTaskBuilder9Arg4 extends QTaskBuilder{ QTypedPromiseTaskBuilder9Arg4(int newPriority, QThreadPool threadPool, RunnableWithPromise9 runnable, A a, B b, C c, D d) { super(newPriority, threadPool); this.runnable = runnable; @@ -10216,22 +13355,37 @@ public static final class QTypedPromiseTaskBuilder9Arg4See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder9Arg5 withArguments(E e) { return new QTypedPromiseTaskBuilder9Arg5<>(priority(), threadPool(), runnable, a, b, c, d, e); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder9Arg6 withArguments(E e, F f) { return new QTypedPromiseTaskBuilder9Arg6<>(priority(), threadPool(), runnable, a, b, c, d, e, f); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder9Arg7 withArguments(E e, F f, G g) { return new QTypedPromiseTaskBuilder9Arg7<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder9Arg8 withArguments(E e, F f, G g, H h) { return new QTypedPromiseTaskBuilder9Arg8<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g, h); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder9Arg9 withArguments(E e, F f, G g, H h, I i) { return new QTypedPromiseTaskBuilder9Arg9<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g, h, i); } @@ -10249,7 +13403,11 @@ public QTypedPromiseTaskBuilder9Arg4 onThreadPool( } } - public static final class QTypedPromiseTaskBuilder9Arg5 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTypedPromiseTaskBuilder9Arg5 extends QTaskBuilder{ QTypedPromiseTaskBuilder9Arg5(int newPriority, QThreadPool threadPool, RunnableWithPromise9 runnable, A a, B b, C c, D d, E e) { super(newPriority, threadPool); this.runnable = runnable; @@ -10266,18 +13424,30 @@ public static final class QTypedPromiseTaskBuilder9Arg5See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder9Arg6 withArguments(F f) { return new QTypedPromiseTaskBuilder9Arg6<>(priority(), threadPool(), runnable, a, b, c, d, e, f); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder9Arg7 withArguments(F f, G g) { return new QTypedPromiseTaskBuilder9Arg7<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder9Arg8 withArguments(F f, G g, H h) { return new QTypedPromiseTaskBuilder9Arg8<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g, h); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder9Arg9 withArguments(F f, G g, H h, I i) { return new QTypedPromiseTaskBuilder9Arg9<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g, h, i); } @@ -10295,7 +13465,11 @@ public QTypedPromiseTaskBuilder9Arg5 onThreadPool( } } - public static final class QTypedPromiseTaskBuilder9Arg6 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTypedPromiseTaskBuilder9Arg6 extends QTaskBuilder{ QTypedPromiseTaskBuilder9Arg6(int newPriority, QThreadPool threadPool, RunnableWithPromise9 runnable, A a, B b, C c, D d, E e, F f) { super(newPriority, threadPool); this.runnable = runnable; @@ -10314,14 +13488,23 @@ public static final class QTypedPromiseTaskBuilder9Arg6See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder9Arg7 withArguments(G g) { return new QTypedPromiseTaskBuilder9Arg7<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder9Arg8 withArguments(G g, H h) { return new QTypedPromiseTaskBuilder9Arg8<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g, h); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder9Arg9 withArguments(G g, H h, I i) { return new QTypedPromiseTaskBuilder9Arg9<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g, h, i); } @@ -10339,7 +13522,11 @@ public QTypedPromiseTaskBuilder9Arg6 onThreadPool( } } - public static final class QTypedPromiseTaskBuilder9Arg7 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTypedPromiseTaskBuilder9Arg7 extends QTaskBuilder{ QTypedPromiseTaskBuilder9Arg7(int newPriority, QThreadPool threadPool, RunnableWithPromise9 runnable, A a, B b, C c, D d, E e, F f, G g) { super(newPriority, threadPool); this.runnable = runnable; @@ -10360,10 +13547,16 @@ public static final class QTypedPromiseTaskBuilder9Arg7See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder9Arg8 withArguments(H h) { return new QTypedPromiseTaskBuilder9Arg8<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g, h); } + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder9Arg9 withArguments(H h, I i) { return new QTypedPromiseTaskBuilder9Arg9<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g, h, i); } @@ -10381,7 +13574,11 @@ public QTypedPromiseTaskBuilder9Arg7 onThreadPool( } } - public static final class QTypedPromiseTaskBuilder9Arg8 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTypedPromiseTaskBuilder9Arg8 extends QTaskBuilder{ QTypedPromiseTaskBuilder9Arg8(int newPriority, QThreadPool threadPool, RunnableWithPromise9 runnable, A a, B b, C c, D d, E e, F f, G g, H h) { super(newPriority, threadPool); this.runnable = runnable; @@ -10404,6 +13601,12 @@ public static final class QTypedPromiseTaskBuilder9Arg8See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ + /** + *

See QtConcurrent::QTaskBuilder::withArguments(ExtraArgs &&...)

+ */ public QTypedPromiseTaskBuilder9Arg9 withArguments(I i) { return new QTypedPromiseTaskBuilder9Arg9<>(priority(), threadPool(), runnable, a, b, c, d, e, f, g, h, i); } @@ -10421,7 +13624,11 @@ public QTypedPromiseTaskBuilder9Arg8 onThreadPool( } } - public static final class QTypedPromiseTaskBuilder9Arg9 extends QTypedTaskBuilder{ + /** + * The QTaskBuilder class is used for adjusting task parameters. + *

Java wrapper for Qt's class QtConcurrent::QTaskBuilder

+ */ + public static final class QTypedPromiseTaskBuilder9Arg9 extends QTaskBuilder{ QTypedPromiseTaskBuilder9Arg9(int newPriority, QThreadPool threadPool, RunnableWithPromise9 runnable, A a, B b, C c, D d, E e, F f, G g, H h, I i) { super(newPriority, threadPool); this.runnable = runnable; @@ -10446,6 +13653,9 @@ public static final class QTypedPromiseTaskBuilder9Arg9See QtConcurrent::QTaskBuilder::spawn()

+ */ @Override public QFuture spawn() { return spawn(threadPool(), priority(), runnable, a, b, c, d, e, f, g, h, i); @@ -10465,7 +13675,792 @@ public QTypedPromiseTaskBuilder9Arg9 onThreadPool( private native static QFuture spawn(QThreadPool threadPool, int priority, RunnableWithPromise9 runnable, A a, B b, C c, D d, E e, F f, G g, H h, I i); } +}// class + + +class QtConcurrent_DISMISS__ extends QtConcurrent { + + static class ThreadEngine extends ThreadEngineBase + { + ThreadEngine(QThreadPool pool) { + super(pool); + Objects.requireNonNull(pool); + } + + @io.qt.QtUninvokable + T result() { return null; } + + @SuppressWarnings("unchecked") + @io.qt.QtUninvokable + final QFutureInterface futureInterfaceTyped() + { + return (QFutureInterface)futureInterface(); + } + + // Runs the user algorithm using a single thread. + @io.qt.QtUninvokable + final T startSingleThreaded() + { + super._startSingleThreaded(); + return result(); + } + + // Runs the user algorithm using multiple threads. + // Does not block, returns a future. + @io.qt.QtUninvokable + final QFuture startAsynchronously() + { + QFutureInterface futureInterface = new QFutureInterface<>(); + setFutureInterface(futureInterface); + + // reportStart() must be called before starting threads, otherwise the + // user algorithm might finish while reportStart() is running, which + // is very bad. + futureInterface.reportStarted(); + QFuture future = new QFuture(futureInterface); + start(); + + acquireBarrierSemaphore(); + threadPool().start(this); + return future; + } + + @io.qt.QtPrivateOverride + @io.qt.QtUninvokable + final void asynchronousFinish() + { + finish(); + QFutureInterface futureInterface = futureInterfaceTyped(); + futureInterface.reportFinished(result()); + setFutureInterface(null); + futureInterface.dispose(); + dispose(); + } + + @io.qt.QtUninvokable + final void reportResult(T _result) { + reportResult(_result, -1); + } + + @io.qt.QtUninvokable + final void reportResult(T _result, int index) + { + QFutureInterface futureInterface = futureInterfaceTyped(); + if (futureInterface!=null) + futureInterface.reportResult(_result, index); + } + + @io.qt.QtUninvokable + final void reportResults(Collection _result) { + reportResults(_result, -1, -1); + } + + @io.qt.QtUninvokable + final void reportResults(Collection _result, int index) { + reportResults(_result, index, -1); + } + + @io.qt.QtUninvokable + final void reportResults(Collection _result, int index, int count) + { + QFutureInterface futureInterface = futureInterfaceTyped(); + if (futureInterface!=null) + futureInterface.reportResults(_result, index, count); + } + } + + public static final class ThreadEngineStarter { + ThreadEngineStarter(ThreadEngine _threadEngine){ + threadEngine = Objects.requireNonNull(_threadEngine); + } + + public final QFuture startAsynchronously(){ + return threadEngine.startAsynchronously(); + } + + private ThreadEngine threadEngine; + } + + static class IterateKernel extends ThreadEngine{ + IterateKernel(QThreadPool pool, Collection collection) + { + super(pool); + this.collection = collection; + this.iterationCount = collection instanceof List ? this.collection.size() : 0; + this.forIteration = collection instanceof List; + this.progressReportingEnabled = true; + } + + boolean runIteration(M value, int index, Object[] values) { return false; } + boolean runIterations(List collection, int index, int count, Object[] values) { return false; } + + @Override + public void start() + { + progressReportingEnabled = isProgressReportingEnabled(); + if (progressReportingEnabled && iterationCount > 0) + setProgressRange(0, iterationCount); + } + @Override + public boolean shouldStartThread() + { + if (forIteration) + return (currentIndex.get() < iterationCount) && !this.shouldThrottleThread(); + else // whileIteration + return (iteratorThreads.get() == 0); + } + + @Override + public final ThreadFunctionResult threadFunction() + { + if (forIteration) + return forThreadFunction(); + else // whileIteration + return whileThreadFunction(); + } + + final ThreadFunctionResult forThreadFunction() + { + BlockSizeManager blockSizeManager = new BlockSizeManager(threadPool(), iterationCount); + ResultReporter resultReporter = createResultsReporter(); + + for(;;) { + if (this.isCanceled()) + break; + + final int currentBlockSize = blockSizeManager.blockSize(); + + if (currentIndex.get() >= iterationCount) + break; + + // Atomically reserve a block of iterationCount for this thread. + final int beginIndex = currentIndex.getAndAdd(currentBlockSize); + final int endIndex = Math.min(beginIndex + currentBlockSize, iterationCount); + + if (beginIndex >= endIndex) { + // No more work + break; + } + + this.waitForResume(); // (only waits if the qfuture is paused.) + + if (shouldStartThread()) + this.startThread(); + + final int finalBlockSize = endIndex - beginIndex; // block size adjusted for possible end-of-range + resultReporter.reserveSpace(finalBlockSize); + + // Call user code with the current iteration range. + blockSizeManager.timeBeforeUser(); + final boolean resultsAvailable = this.runIterations((List)collection, beginIndex, endIndex, resultReporter.getPointer()); + blockSizeManager.timeAfterUser(); + + if (resultsAvailable) + resultReporter.reportResults(beginIndex); + + // Report progress if progress reporting enabled. + if (progressReportingEnabled) { + completed.getAndAdd(finalBlockSize); + this.setProgressValue(this.completed.get()); + } + + if (this.shouldThrottleThread()) + return ThreadFunctionResult.ThrottleThread; + } + return ThreadFunctionResult.ThreadFinished; + } + + final ThreadFunctionResult whileThreadFunction() + { + if (iteratorThreads.compareAndSet(0, 1) == false) + return ThreadFunctionResult.ThreadFinished; + + ResultReporter resultReporter = createResultsReporter(); + resultReporter.reserveSpace(1); + + for(M value : collection) { + // The following two lines breaks support for input iterators according to + // the sgi docs: dereferencing prev after calling ++current is not allowed + // on input iterators. (prev is dereferenced inside user.runIteration()) + int index = currentIndex.getAndAdd(1); + if(index>collection.size()) + break; + iteratorThreads.compareAndSet(1, 0); + + this.waitForResume(); // (only waits if the qfuture is paused.) + + if (shouldStartThread()) + this.startThread(); + + final boolean resultAavailable = this.runIteration(value, index, resultReporter.getPointer()); + if (resultAavailable) + resultReporter.reportResults(index); + + if (this.shouldThrottleThread()) + return ThreadFunctionResult.ThrottleThread; + + if (iteratorThreads.compareAndSet(0, 1) == false) + return ThreadFunctionResult.ThreadFinished; + } + + return ThreadFunctionResult.ThreadFinished; + } + + private ResultReporter createResultsReporter() + { + return new ResultReporter<>(this, defaultValue); + } + + public Collection collection; + public AtomicInteger currentIndex; + public AtomicInteger iteratorThreads; + public AtomicInteger completed; + public final int iterationCount; + public final boolean forIteration; + public boolean progressReportingEnabled; + public T defaultValue; + } + + static final class ResultReporter + { + ResultReporter(ThreadEngine _threadEngine, T _defaultValue) + { + this.threadEngine = _threadEngine; + this.defaultValue = _defaultValue; + } + + void reserveSpace(int resultCount) + { + currentResultCount = resultCount; + resizeList(Math.max(resultCount, vector.length)); + } + + @SuppressWarnings({ "unchecked", "rawtypes" }) + void reportResults(int begin) + { + final int useVectorThreshold = 4; // Tunable parameter. + if (currentResultCount > useVectorThreshold) { + resizeList(currentResultCount); + threadEngine.reportResults((Collection)(Collection)Arrays.asList(vector), begin); + } else { + for (int i = 0; i < currentResultCount; ++i) + threadEngine.reportResult((T)vector[i], begin + i); + } + } + + Object[] getPointer() + { + return vector; + } + + public int currentResultCount; + public ThreadEngine threadEngine; + public Object[] vector = new Object[0]; + + private void resizeList(int size) + { + int oldSize = vector.length; + vector = Arrays.copyOf(vector, size); + for(int i=oldSize; i extends IterateKernel + { + MapKernel(QThreadPool pool, Collection collection, MapFunctor map) { + super(pool, collection); + this.map = map; + } + + private final MapFunctor map; + + @Override + boolean runIteration(T value, int index, Object[] values) { + map.map(value); + return false; + } + + @Override + boolean runIterations(List collection, int index, int count, Object[] values) { + for (; index < count; index++) { + runIteration(collection.get(index), index, values); + } + return false; + } + } + + static final class MapEachKernel extends IterateKernel + { + MapEachKernel(QThreadPool pool, Collection collection, MappedFunctor map) { + super(pool, collection); + this.map = map; + } + + private final MappedFunctor map; + + @Override + boolean runIteration(T value, int index, Object[] values) { + values[index] = map.map(value); + return true; + } + + @Override + boolean runIterations(List collection, int index, int count, Object[] values) { + for (; index < count; index++) { + runIteration(collection.get(index), index, values); + } + return true; + } + } + + static final class IntermediateResults + { + IntermediateResults(int begin, int end) { + this.begin = begin; + this.end = end; + this.vector = new ArrayList<>(); + } + IntermediateResults(int begin, int end, List vector) { + this.begin = begin; + this.end = end; + this.vector = vector; + } + public final int begin, end; + public final List vector; + } + + private final static int ReduceQueueStartLimit = 20; + private final static int ReduceQueueThrottleLimit = 30; + + static final class ReduceKernel + { + ReduceKernel(QThreadPool pool, ReduceOptions reduceOptions) { + this.reduceOptions = reduceOptions; + this.threadCount = pool.maxThreadCount(); + } + + private final ReduceOptions reduceOptions; + + private final QMutex mutex = new QMutex(); + private int progress, resultsMapSize; + private final int threadCount; + private final Map> resultsMap = new TreeMap<>(); + + private final boolean canReduce(int begin) { + return ((reduceOptions.testFlag(ReduceOption.UnorderedReduce) + && progress == 0) + || (reduceOptions.testFlag(ReduceOption.OrderedReduce) + && progress == begin)); + } + + private U reduceResult(ReduceFunctor reduce, + U r, + IntermediateResults result) { + for (int i = 0; i < result.vector.size(); ++i) { + r = reduce.reduce(r, result.vector.get(i)); + } + return r; + } + + private U reduceResults(ReduceFunctor reduce, + U r, + Map> resultsMap){ + for(IntermediateResults results : resultsMap.values()) { + r = reduceResult(reduce, r, results); + } + return r; + } + + U runReduce(ReduceFunctor reduce, + U r, + IntermediateResults result) { + mutex.lock(); + try { + if (!canReduce(result.begin)) { + ++resultsMapSize; + resultsMap.put(result.begin, result); + return r; + } + if (reduceOptions.testFlag(ReduceOption.UnorderedReduce)) { + progress = -1; + mutex.unlock(); + try { + reduceResult(reduce, r, result); + }finally { + mutex.lock(); + } + while (!resultsMap.isEmpty()) { + Map> resultsMapCopy = new TreeMap<>(resultsMap); + resultsMap.clear(); + + mutex.unlock(); + try { + reduceResults(reduce, r, resultsMapCopy); + }finally { + mutex.lock(); + } + + resultsMapSize -= resultsMapCopy.size(); + } + progress = 0; + }else { + // reduce this result + mutex.unlock(); + try { + reduceResult(reduce, r, result); + }finally { + mutex.lock(); + } + + // OrderedReduce + progress += result.end - result.begin; + + // reduce as many other results as possible + for(Map.Entry> entry : new HashSet<>(resultsMap.entrySet())) { + if(entry.getValue().begin != progress) + break; + mutex.unlock(); + try { + r = reduceResult(reduce, r, entry.getValue()); + }finally { + mutex.lock(); + } + + --resultsMapSize; + progress += entry.getValue().end - entry.getValue().begin; + resultsMap.remove(entry.getKey()); + } + } + }finally { + mutex.unlock(); + } + return r; + } + + // final reduction + U finish(ReduceFunctor reduce, U r) + { + return reduceResults(reduce, r, resultsMap); + } + + boolean shouldThrottle() + { + mutex.lock(); + try { + return (resultsMapSize > (ReduceQueueThrottleLimit * threadCount)); + }finally { + mutex.unlock(); + } + } + + boolean shouldStartThread() + { + mutex.lock(); + try { + return (resultsMapSize <= (ReduceQueueStartLimit * threadCount)); + }finally { + mutex.unlock(); + } + } + } + + static final class MappedReducedKernel extends IterateKernel + { + MappedReducedKernel(QThreadPool pool, Collection collection, MappedFunctor map, ReduceFunctor reduce, ReduceOptions reduceOptions) { + super(pool, collection); + this.map = map; + this.reduce = reduce; + super.defaultValue = reduce.defaultResult(); + this.reducedResult = super.defaultValue; + this.reducer = new ReduceKernel<>(pool, reduceOptions); + } + + private U reducedResult; + private final MappedFunctor map; + private final ReduceFunctor reduce; + private final ReduceKernel reducer; + + @Override + boolean runIteration(T value, int index, Object[] values) { + IntermediateResults results = new IntermediateResults<>(index, index + 1); + results.vector.add(map.map(value)); + reducedResult = reducer.runReduce(reduce, reducedResult, results); + return false; + } + + @Override + boolean runIterations(List collection, int index, int count, Object[] values) { + IntermediateResults results = new IntermediateResults<>(index, index + count); + for (; index < count; index++) { + results.vector.add(map.map(collection.get(index))); + } + reducedResult = reducer.runReduce(reduce, reducedResult, results); + return false; + } + + @Override + protected void finish() + { + reducedResult = reducer.finish(reduce, reducedResult); + } + + @Override + protected boolean shouldThrottleThread() + { + return super.shouldThrottleThread() || reducer.shouldThrottle(); + } + + @Override + public boolean shouldStartThread() + { + return super.shouldStartThread() && reducer.shouldStartThread(); + } + + @Override + protected U result() + { + return reducedResult; + } + } + + static final class FilteredReducedKernel extends IterateKernel{ + private U reducedResult; + private final FilteredFunctor keep; + private final ReduceFunctor reduce; + private final ReduceKernel reducer; + + FilteredReducedKernel(QThreadPool pool, Collection sequence, FilteredFunctor keep, ReduceFunctor reduce, ReduceOptions options) { + super(pool, sequence); + this.keep = keep; + this.reduce = reduce; + super.defaultValue = reduce.defaultResult(); + this.reducedResult = super.defaultValue; + this.reducer = new ReduceKernel<>(pool, options); + } + + @Override + boolean runIteration(T value, int index, Object[] values) { + IntermediateResults results = new IntermediateResults<>(index, index+1); + if(keep.filter(value)) + results.vector.add(value); + reducedResult = reducer.runReduce(reduce, reducedResult, results); + return false; + } + + @Override + boolean runIterations(List collection, int index, int count, Object[] values) { + IntermediateResults results = new IntermediateResults<>(index, count); + for (; index < count; ++index) { + T value = collection.get(index); + if(keep.filter(value)) + results.vector.add(value); + } + reducedResult = reducer.runReduce(reduce, reducedResult, results); + return false; + } + + @Override + public boolean shouldStartThread() { + return super.shouldStartThread() && reducer.shouldStartThread(); + } + + @Override + U result() { + return reducedResult; + } + + @Override + protected void finish() { + reducedResult = reducer.finish(reduce, reducedResult); + } + + @Override + protected boolean shouldThrottleThread() { + return super.shouldThrottleThread() || reducer.shouldThrottle(); + } + } + + static final class FilteredEachKernel extends IterateKernel{ + private final FilteredFunctor keep; + + FilteredEachKernel(QThreadPool pool, Collection sequence, FilteredFunctor keep) { + super(pool, sequence); + this.keep = keep; + } + + @Override + public void start() + { + QFutureInterfaceBase futureInterface = this.futureInterface(); + if (futureInterface!=null) + futureInterface.setFilterMode(true); + super.start(); + } + + @Override + boolean runIteration(T value, int index, Object[] values) { + if (keep.filter(value)) + reportResult(value, index); + else + reportResult(null, index); + return false; + } + + @Override + boolean runIterations(List collection, int index, int count, Object[] values) { + IntermediateResults results = new IntermediateResults<>(index, count); + + for (; index < count; ++index) { + T value = collection.get(index); + if (keep.filter(value)) + results.vector.add(value); + } + + reportResults(results.vector, index, count); + return false; + } + } + + static final class FilterKernel extends IterateKernel{ + private final Collection sequence; + private Collection reducedResult = new ArrayList<>(); + private final FilteredFunctor keep; + private final ReduceFunctor,T> reduce; + private final ReduceKernel,T> reducer; + + FilterKernel(QThreadPool pool, Collection sequence, FilteredFunctor keep, ReduceFunctor, T> reduce, ReduceOptions options) { + super(pool, sequence); + this.sequence = sequence; + this.keep = keep; + this.reduce = reduce; + this.reducer = new ReduceKernel<>(pool, options); + } + + @Override + boolean runIteration(T value, int index, Object[] values) { + IntermediateResults results = new IntermediateResults<>(index, index + 1); + if (keep.filter(value)) + results.vector.add(value); + reducedResult = reducer.runReduce(reduce, reducedResult, results); + return false; + } + + @Override + boolean runIterations(List collection, int index, int count, Object[] values) { + IntermediateResults results = new IntermediateResults<>(index, count); + for (; index < count; ++index) { + T value = collection.get(index); + if (keep.filter(value)) + results.vector.add(value); + } + reducedResult = reducer.runReduce(reduce, reducedResult, results); + return false; + } + + @Override + public boolean shouldStartThread() { + return super.shouldStartThread() && reducer.shouldStartThread(); + } + + @Override + protected boolean shouldThrottleThread() { + return super.shouldThrottleThread() || reducer.shouldThrottle(); + } + + @Override + protected void finish() { + reducedResult = reducer.finish(reduce, reducedResult); + sequence.clear(); + sequence.addAll(reducedResult); + } + } + + /** + * Calls function once for each item in sequence. The function is passed a reference to the item, so that any modifications done to the item will appear in sequence. + */ + public static ThreadEngineStarter startMap(QThreadPool threadPool, Collection sequence, MapFunctor functor) { + return new ThreadEngineStarter<>(new MapKernel<>(Objects.requireNonNull(threadPool), Objects.requireNonNull(sequence), Objects.requireNonNull(functor))); + } + + /** + * Calls function once for each item in sequence and returns a future with each mapped item as a result. You can QFutureIterator to iterate through the results. + * + */ + @io.qt.QtUninvokable + public static ThreadEngineStarter startMapped(QThreadPool threadPool, Collection sequence, MappedFunctor functor){ + return new ThreadEngineStarter<>(new MapEachKernel<>(Objects.requireNonNull(threadPool), Objects.requireNonNull(sequence), Objects.requireNonNull(functor))); + } + + /** + * Calls mapFunction once for each item in sequence. The return value of each mapFunction is passed to reduceFunction. + *

+ * Note that while mapFunction is called concurrently, only one thread at a time will call reduceFunction. The order in which reduceFunction is called is determined by reduceOptions. + * + */ + @io.qt.QtUninvokable + public static ThreadEngineStarter startMappedReduced(QThreadPool threadPool, Collection sequence, MappedFunctor functor, ReduceFunctor reduceFunctor, ReduceOptions options) { + return new ThreadEngineStarter<>(new MappedReducedKernel<>(Objects.requireNonNull(threadPool), Objects.requireNonNull(sequence), Objects.requireNonNull(functor), Objects.requireNonNull(reduceFunctor), options)); + } + + /** + * Calls mapFunction once for each item in sequence. The return value of each mapFunction is passed to reduceFunction. + *

+ * Note that while mapFunction is called concurrently, only one thread at a time will call reduceFunction. The order in which reduceFunction is called is determined by reduceOptions. + * + */ + @io.qt.QtUninvokable + public static ThreadEngineStarter startMappedReduced(QThreadPool threadPool, Collection sequence, MappedFunctor functor, ReduceFunctor reduceFunctor, ReduceOption... options) { + return startMappedReduced(threadPool, sequence, functor, reduceFunctor, new ReduceOptions(options)); + } + + /** + * Calls filterFunction once for each item in sequence. If filterFunction returns true for an item, that item is then passed to reduceFunction. In other words, the return value is the result of reduceFunction for each item where filterFunction returns true. + *

+ * Note that while filterFunction is called concurrently, only one thread at a time will call reduceFunction. The order in which reduceFunction is called is undefined if reduceOptions is QtConcurrent::UnorderedReduce. If reduceOptions is QtConcurrent::OrderedReduce, reduceFunction is called in the order of the original sequence. + */ + @io.qt.QtUninvokable + public static ThreadEngineStarter startFilteredReduced(QThreadPool threadPool, Collection sequence, FilteredFunctor filteredFunctor, ReduceFunctor reduceFunctor, ReduceOption ... options) { + return startFilteredReduced(threadPool, sequence, filteredFunctor, reduceFunctor, new ReduceOptions(options)); + } + + /** + * Calls filterFunction once for each item in sequence. If filterFunction returns true for an item, that item is then passed to reduceFunction. In other words, the return value is the result of reduceFunction for each item where filterFunction returns true. + *

+ * Note that while filterFunction is called concurrently, only one thread at a time will call reduceFunction. The order in which reduceFunction is called is undefined if reduceOptions is QtConcurrent::UnorderedReduce. If reduceOptions is QtConcurrent::OrderedReduce, reduceFunction is called in the order of the original sequence. + */ + @io.qt.QtUninvokable + public static ThreadEngineStarter startFilteredReduced(QThreadPool threadPool, Collection sequence, FilteredFunctor filteredFunctor, ReduceFunctor reduceFunctor, ReduceOptions options) { + return new ThreadEngineStarter<>(new FilteredReducedKernel<>(Objects.requireNonNull(threadPool), Objects.requireNonNull(sequence), Objects.requireNonNull(filteredFunctor), Objects.requireNonNull(reduceFunctor), options)); + } + + /** + * Calls filterFunctor's filter() method once for each item in sequence and returns a new Sequence of kept items. If filterFunction returns true, a copy of the item is put in the new Sequence. Otherwise, the item will not appear in the new Sequence. + */ + @io.qt.QtUninvokable + public static ThreadEngineStarter startFiltered(QThreadPool threadPool, Collection sequence, FilteredFunctor filteredFunctor){ + return new ThreadEngineStarter<>(new FilteredEachKernel<>(Objects.requireNonNull(threadPool), Objects.requireNonNull(sequence), Objects.requireNonNull(filteredFunctor))); + } + + /** + * Calls filterFunctor's filter() method once for each item in sequence and returns a new Sequence of kept items. If filterFunction returns true, a copy of the item is put in the new Sequence. Otherwise, the item will not appear in the new Sequence. + */ + @io.qt.QtUninvokable + static ThreadEngineStarter filterInternal(QThreadPool threadPool, Collection sequence, FilteredFunctor filteredFunctor, ReduceFunctor, T> reduceFunctor){ + return new ThreadEngineStarter<>(new FilterKernel<>(Objects.requireNonNull(threadPool), Objects.requireNonNull(sequence), Objects.requireNonNull(filteredFunctor), Objects.requireNonNull(reduceFunctor), new ReduceOptions())); + } + + private static class PushBackWrapper implements ReduceFunctor, T>{ + @Override + public Collection reduce(Collection result, T intermediate) { + result.add(intermediate); + return result; + } + } }// class diff --git a/generator/typesystem/java/typesystem_core-java.java b/generator/typesystem/java/typesystem_core-java.java index f3d6365b..54cd12d2 100644 --- a/generator/typesystem/java/typesystem_core-java.java +++ b/generator/typesystem/java/typesystem_core-java.java @@ -50,54 +50,54 @@ class QtJambi_LibraryUtilities_2_{ java.io.File coreLib = NativeLibraryManager.loadQtCore(); try{ java.io.File qtjambiLib = NativeLibraryManager.loadQtJambiLibrary(); - if(NativeLibraryManager.operatingSystem!=NativeLibraryManager.OperatingSystem.Android) { - java.util.List paths = new java.util.ArrayList<>(); - String path; - switch(NativeLibraryManager.operatingSystem) { - case MacOSX: - path = io.qt.QtUtilities.getenv("DYLD_LIBRARY_PATH"); - String path2 = io.qt.QtUtilities.getenv("DYLD_FRAMEWORK_PATH"); - java.util.List paths2 = new java.util.ArrayList<>(); - paths2.add(qtjambiLib.getParentFile().getAbsolutePath()); - if(path2!=null && !path2.isEmpty()) { - for(String p : path2.split("\\"+java.io.File.pathSeparator)) { - if(!paths2.contains(p)) - paths2.add(p); - } - } - path2 = String.join(java.io.File.pathSeparator, paths2); - io.qt.QtUtilities.putenv("DYLD_FRAMEWORK_PATH", path2); - break; - case Windows: - path = io.qt.QtUtilities.getenv("PATH"); - break; - default: - path = io.qt.QtUtilities.getenv("LD_LIBRARY_PATH"); - break; - } - if(NativeLibraryManager.operatingSystem!=NativeLibraryManager.OperatingSystem.MacOSX) - paths.add(coreLib.getParentFile().getAbsolutePath()); - if(!paths.contains(qtjambiLib.getParentFile().getAbsolutePath())) - paths.add(qtjambiLib.getParentFile().getAbsolutePath()); - if(path!=null && !path.isEmpty()) { - for(String p : path.split("\\"+java.io.File.pathSeparator)) { - if(!paths.contains(p)) - paths.add(p); - } - } - path = String.join(java.io.File.pathSeparator, paths); - switch(NativeLibraryManager.operatingSystem) { - case MacOSX: - io.qt.QtUtilities.putenv("DYLD_LIBRARY_PATH", path); - break; - case Windows: - io.qt.QtUtilities.putenv("PATH", path); - break; - default: - io.qt.QtUtilities.putenv("LD_LIBRARY_PATH", path); - break; - } - } + if(NativeLibraryManager.operatingSystem!=NativeLibraryManager.OperatingSystem.Android) { + java.util.List paths = new java.util.ArrayList<>(); + String path; + switch(NativeLibraryManager.operatingSystem) { + case MacOSX: + path = io.qt.QtUtilities.getenv("DYLD_LIBRARY_PATH"); + String path2 = io.qt.QtUtilities.getenv("DYLD_FRAMEWORK_PATH"); + java.util.List paths2 = new java.util.ArrayList<>(); + paths2.add(qtjambiLib.getParentFile().getAbsolutePath()); + if(path2!=null && !path2.isEmpty()) { + for(String p : path2.split("\\"+java.io.File.pathSeparator)) { + if(!paths2.contains(p)) + paths2.add(p); + } + } + path2 = String.join(java.io.File.pathSeparator, paths2); + io.qt.QtUtilities.putenv("DYLD_FRAMEWORK_PATH", path2); + break; + case Windows: + path = io.qt.QtUtilities.getenv("PATH"); + break; + default: + path = io.qt.QtUtilities.getenv("LD_LIBRARY_PATH"); + break; + } + if(NativeLibraryManager.operatingSystem!=NativeLibraryManager.OperatingSystem.MacOSX) + paths.add(coreLib.getParentFile().getAbsolutePath()); + if(!paths.contains(qtjambiLib.getParentFile().getAbsolutePath())) + paths.add(qtjambiLib.getParentFile().getAbsolutePath()); + if(path!=null && !path.isEmpty()) { + for(String p : path.split("\\"+java.io.File.pathSeparator)) { + if(!paths.contains(p)) + paths.add(p); + } + } + path = String.join(java.io.File.pathSeparator, paths); + switch(NativeLibraryManager.operatingSystem) { + case MacOSX: + io.qt.QtUtilities.putenv("DYLD_LIBRARY_PATH", path); + break; + case Windows: + io.qt.QtUtilities.putenv("PATH", path); + break; + default: + io.qt.QtUtilities.putenv("LD_LIBRARY_PATH", path); + break; + } + } } catch(UnsatisfiedLinkError t) { switch(NativeLibraryManager.operatingSystem) { case MacOSX: @@ -202,6 +202,7 @@ private static String classToScope(Class cls) { * * @param source the source text to translate. * @return translated version of the source text. + * @see QObject::tr(const char *, const char *, int) */ public static String tr(String source) { String scope = classToScope(QtJambi_LibraryUtilities.internal.callerClassProvider().get()); @@ -217,6 +218,7 @@ public static String tr(String source) { * @param source the source text to translate. * @param comment helps the translator translate the source text. * @return translated version of the source text. + * @see QObject::tr(const char *, const char *, int) */ public static String tr(String source, String comment) { String scope = classToScope(QtJambi_LibraryUtilities.internal.callerClassProvider().get()); @@ -234,303 +236,13 @@ public static String tr(String source, String comment) { * @param comment helps the translator translate the source text. * @param count in source %n will be substituted by count. * @return translated version of the source text. + * @see QObject::tr(const char *, const char *, int) */ public static String tr(String source, String comment, int count) { String scope = classToScope(QtJambi_LibraryUtilities.internal.callerClassProvider().get()); return QCoreApplication.translate(scope, source, comment, count); } - /** - *

Overloaded function for {@link #findChild(Class)} - * with cl = QObject.class.

- * @return found child - */ - @io.qt.QtUninvokable - public final QObject findChild() { - return findChild(QObject.class); - } - - /** - *

Overloaded function for {@link #findChild(Class,String)} - * with cl = QObject.class.

- * @return found child - */ - @io.qt.QtUninvokable - public final QObject findChild(String name) { - return findChild(QObject.class, name); - } - - /** - *

Overloaded function for {@link #findChild(Class,String,Qt.FindChildOptions)} - * with cl = QObject.class.

- * @return found child - */ - @io.qt.QtUninvokable - public final QObject findChild(String name, Qt.FindChildOption... options) { - return findChild(QObject.class, name, new Qt.FindChildOptions(options)); - } - - /** - *

Overloaded function for {@link #findChild(Class,String,Qt.FindChildOptions)} - * with cl = QObject.class.

- * @return found child - */ - @io.qt.QtUninvokable - public final QObject findChild(String name, Qt.FindChildOptions options) { - return findChild(QObject.class, name, options); - } - - /** - *

Overloaded function for {@link #findChild(Class,String,Qt.FindChildOptions)}

- *

with:

    - *
  • name = null
  • - *
  • options = FindChildrenRecursively
  • - *
- * @param type of child - * @param cl type of child - * @return found child - */ - @io.qt.QtUninvokable - public final T findChild(Class < T > cl) { - return findChild(cl, (String)null, new Qt.FindChildOptions(Qt.FindChildOption.FindChildrenRecursively)); - } - - /** - *

Overloaded function for {@link #findChild(Class,String,Qt.FindChildOptions)} - * with: options = FindChildrenRecursively.

- * @param type of child - * @param cl type of child - * @param name name of child - * @return found child - */ - @io.qt.QtUninvokable - public final T findChild(Class < T > cl, String name) { - return findChild(cl, name, new Qt.FindChildOptions(Qt.FindChildOption.FindChildrenRecursively)); - } - - /** - *

Overloaded function for {@link #findChild(Class,String,Qt.FindChildOptions)}.

- * @param type of child - * @param cl type of child - * @param name name of child - * @param options search options - * @return found child - */ - @io.qt.QtUninvokable - public final T findChild(Class < T > cl, String name, Qt.FindChildOption... options) { - return findChild(cl, name, new Qt.FindChildOptions(options)); - } - - /** - *

Returns the child of this object that instane of cl and - * that is called name, or null if there is no such object. - * Omitting the name argument causes all object names to be matched. - * The search is performed recursively, unless options specifies the - * option FindDirectChildrenOnly.

- * - *

If there is more than one child matching the search, the most - * direct ancestor is returned. If there are several direct - * ancestors, it is undefined which one will be returned. In that - * case, {@link #findChildren()} should be used.

- * - *

This example returns a child QPushButton of parentWidget - * named "button1", even if the button isn't a direct child of - * the parent:

- *

- * QPushButton button = parentWidget.findChild(QPushButton.class, "button1"); - *

- *

This example returns a QListWidget child of parentWidget:

- *

- * QListWidget list = parentWidget.findChild(QListWidget.class); - *

- *

This example returns a child QPushButton of parentWidget - * (its direct parent) named "button1":

- *

- * QPushButton button = parentWidget.findChild(QPushButton.class, "button1", Qt.FindChildOption.FindDirectChildrenOnly); - *

- *

This example returns a QListWidget child of parentWidget, - * its direct parent:

- *

- * QListWidget list = parentWidget.findChild(QListWidget.class, null, Qt.FindChildOption.FindDirectChildrenOnly); - *

- * @param type of child - * @param cl type of child - * @param name name of child - * @param options search options - * @return found child - * @see #findChildren() - */ - @io.qt.QtUninvokable - public final T findChild(Class < T > cl, String name, Qt.FindChildOptions options) { - return findChild(java.util.Objects.requireNonNull(cl), QMetaObject.forType(cl).metaObjectPointer, name, options.value()); - } - - @io.qt.QtUninvokable - private native final T findChild(Class < T > cl, long metaObjectPointer, String name, int options); - - /** - *

Overloaded function for {@link #findChildren(Class)} - * with cl = QObject.class.

- * @return found children - */ - @io.qt.QtUninvokable - public final QList findChildren() { - return findChildren(QObject.class, (String)null, new Qt.FindChildOptions(Qt.FindChildOption.FindChildrenRecursively)); - } - - /** - *

Overloaded function for {@link #findChildren(Class,String)} - * with cl = QObject.class.

- * @return found children - */ - @io.qt.QtUninvokable - public final QList findChildren(String name) { - return findChildren(QObject.class, name, new Qt.FindChildOptions(Qt.FindChildOption.FindChildrenRecursively)); - } - - /** - *

Overloaded function for {@link #findChildren(Class,String,Qt.FindChildOptions)} - * with cl = QObject.class.

- * @return found children - */ - @io.qt.QtUninvokable - public final QList findChildren(String name, Qt.FindChildOption... options) { - return findChildren(QObject.class, name, new Qt.FindChildOptions(options)); - } - - /** - *

Overloaded function for {@link #findChildren(Class,String,Qt.FindChildOptions)} - * with cl = QObject.class.

- * @return found children - */ - @io.qt.QtUninvokable - public final QList findChildren(String name, Qt.FindChildOptions options) { - return findChildren(QObject.class, name, options); - } - - /** - *

Overloaded function for {@link #findChildren(Class,String,Qt.FindChildOptions)}

- *

with:

    - *
  • name = null
  • - *
  • options = FindChildrenRecursively
  • - *
- * @param type of children - * @param cl type of children - * @return found children - */ - @io.qt.QtUninvokable - public final QList findChildren(Class < T > cl) { - return findChildren(cl, (String)null, new Qt.FindChildOptions(Qt.FindChildOption.FindChildrenRecursively)); - } - - /** - *

Overloaded function for {@link #findChildren(Class,String,Qt.FindChildOptions)} - * with: options = FindChildrenRecursively.

- * @param type of children - * @param cl type of children - * @param name name of children - * @return found children - */ - @io.qt.QtUninvokable - public final QList findChildren(Class < T > cl, String name) { - return findChildren(cl, name, new Qt.FindChildOptions(Qt.FindChildOption.FindChildrenRecursively)); - } - - /** - *

Overloaded function for {@link #findChildren(Class,String,Qt.FindChildOptions)}.

- * @param type of children - * @param cl type of children - * @param name name of children - * @param options search options - * @return found children - */ - @io.qt.QtUninvokable - public final QList findChildren(Class < T > cl, String name, Qt.FindChildOption... options) { - return findChildren(cl, name, new Qt.FindChildOptions(options)); - } - - /** - *

Returns all children of this object with the given name that are - * instance of cl, or an empty list if there are no such objects. - * Omitting the name argument causes all object names to be matched. - * The search is performed recursively, unless options specifies the - * option FindDirectChildrenOnly.

- * - *

The following example shows how to find a list of child QWidgets of - * the specified parentWidget named widgetname:

- *

- * List<QWidget> widgets = parentWidget.findChildren(QWidget.class, "widgetname"); - *

- *

This example returns all QPushButtons that are children of parentWidget:

- *

- * List<QPushButton> allPButtons = parentWidget.findChildren(QPushButton.class); - *

- *

This example returns all QPushButtons that are immediate children of parentWidget:

- *

- * List<QPushButton> childButtons = parentWidget.findChildren(QPushButton.class, null, Qt.FindChildOption.FindDirectChildrenOnly); - *

- * @param type of children - * @param cl type of children - * @param name name of children - * @param options search options - * @return found children - * @see #findChild() - */ - @io.qt.QtUninvokable - public final QList findChildren(Class < T > cl, String name, Qt.FindChildOptions options){ - return findChildrenString(QMetaObject.forType(java.util.Objects.requireNonNull(cl)).metaObjectPointer, name, options.value()); - } - - @io.qt.QtUninvokable - private native final QList findChildrenString(long metaObjectPointer, String name, int options); - - /** - *

Overloaded function for {@link #findChildren(Class,QRegularExpression,Qt.FindChildOptions)} - * with: options = FindChildrenRecursively.

- * @param type of children - * @param cl type of children - * @param re regular expression - * @return found children - */ - @io.qt.QtUninvokable - public final QList findChildren(Class < T > cl, QRegularExpression re) { - return findChildren(cl, re, new Qt.FindChildOptions(Qt.FindChildOption.FindChildrenRecursively)); - } - - /** - *

Overloaded function for {@link #findChildren(Class,QRegularExpression,Qt.FindChildOptions)}.

- * @param type of children - * @param cl type of children - * @param re regular expression - * @param options search options - * @return found children - */ - @io.qt.QtUninvokable - public final QList findChildren(Class < T > cl, QRegularExpression re, Qt.FindChildOption... options) { - return findChildren(cl, re, new Qt.FindChildOptions(options)); - } - - /** - *

This function overloads {@link #findChildren()}.

- *

Returns the children of this object that are instance of cl - * and that have names matching the regular expression re, - * or an empty list if there are no such objects. - * The search is performed recursively, unless options specifies the option FindDirectChildrenOnly.

- * @param type of children - * @param cl type of children - * @param re regular expression - * @param options search options - * @return found children - * @see #findChildren() - */ - @io.qt.QtUninvokable - public final QList findChildren(Class < T > cl, QRegularExpression re, Qt.FindChildOptions options){ - return findChildrenQRegularExpression(QMetaObject.forType(java.util.Objects.requireNonNull(cl)).metaObjectPointer, re, options.value()); - } - - @io.qt.QtUninvokable - private native final QList findChildrenQRegularExpression(long metaObjectPointer, QRegularExpression re, int options); - /** * Declare and instantiate a field of this class in your * QObject subclass to declare a signal that takes no @@ -6183,6 +5895,7 @@ protected final int receivers(io.qt.core.QMetaObject.AbstractSignal signalObject class QObject_6__ extends QObject { + private static Runnable MIGHT_HAVE_SIGNAL = ()->{}; private static Runnable NO_SIGNAL = ()->{}; private static QMetaMethod findNotifySignalByBindables(QObject object, java.lang.reflect.Field reflectedField, QUntypedPropertyData property) { @@ -6279,8 +5992,8 @@ boolean setValueBypassingBindings(QProperty property, Object val) { private final QMetaType metaType; } - private final static class SignalPropertyCore extends PropertyCore{ - public SignalPropertyCore(QMetaType metaType, int methodIndex, long metaObjectId) { + private final static class Signal0PropertyCore extends PropertyCore{ + public Signal0PropertyCore(QMetaType metaType, int methodIndex, long metaObjectId) { super(metaType); this.methodIndex = methodIndex; this.metaObjectId = metaObjectId; @@ -6295,6 +6008,22 @@ void emitSignal(QProperty property) { private final long metaObjectId; } + private final static class Signal1PropertyCore extends PropertyCore{ + public Signal1PropertyCore(QMetaType metaType, int methodIndex, long metaObjectId) { + super(metaType); + this.methodIndex = methodIndex; + this.metaObjectId = metaObjectId; + } + void emitSignal(QProperty property) { + try { + QMetaObject.AbstractSignal.emitNativeSignal(java.util.Objects.requireNonNull(property.owner()), methodIndex, metaObjectId, property.getValueBypassingBindings()); + }catch(QNoNativeResourcesException e){} + } + boolean hasSignal(QProperty property) { return true; } + private final int methodIndex; + private final long metaObjectId; + } + private static class RCPropertyCore extends PropertyCore{ @SuppressWarnings("unused") private Object __rcValue; @@ -6310,8 +6039,8 @@ final boolean setValueBypassingBindings(QProperty property, Object val) { } } - private final static class RCSignalPropertyCore extends RCPropertyCore{ - public RCSignalPropertyCore(QMetaType metaType, int methodIndex, long metaObjectId) { + private final static class RCSignal0PropertyCore extends RCPropertyCore{ + public RCSignal0PropertyCore(QMetaType metaType, int methodIndex, long metaObjectId) { super(metaType); this.methodIndex = methodIndex; this.metaObjectId = metaObjectId; @@ -6326,6 +6055,22 @@ void emitSignal(QProperty property) { private final long metaObjectId; } + private final static class RCSignal1PropertyCore extends RCPropertyCore{ + public RCSignal1PropertyCore(QMetaType metaType, int methodIndex, long metaObjectId) { + super(metaType); + this.methodIndex = methodIndex; + this.metaObjectId = metaObjectId; + } + void emitSignal(QProperty property) { + try { + QMetaObject.AbstractSignal.emitNativeSignal(java.util.Objects.requireNonNull(property.owner()), methodIndex, metaObjectId, property.getValueBypassingBindings()); + }catch(QNoNativeResourcesException e){} + } + boolean hasSignal(QProperty property) { return true; } + private final int methodIndex; + private final long metaObjectId; + } + private static class InitializingPropertyCore extends AbstractPropertyCore{ QMetaType valueMetaType(QProperty property) { initialize(property); @@ -6344,10 +6089,18 @@ final void initialize(QProperty property, T val) { property.core = new PropertyCore<>(result.metaType); } }else { - if(result.metaType.flags().isSet(QMetaType.TypeFlag.IsPointer) || result.metaType.name().contains("*")) { - property.core = new RCSignalPropertyCore<>(result.metaType, result.notifySignal.methodIndex(), result.notifySignal.enclosingMetaObject().metaObjectPointer); + if(result.notifySignal.parameterCount()==0) { + if(result.metaType.flags().isSet(QMetaType.TypeFlag.IsPointer) || result.metaType.name().contains("*")) { + property.core = new RCSignal0PropertyCore<>(result.metaType, result.notifySignal.methodIndex(), result.notifySignal.enclosingMetaObject().metaObjectPointer); + }else { + property.core = new Signal0PropertyCore<>(result.metaType, result.notifySignal.methodIndex(), result.notifySignal.enclosingMetaObject().metaObjectPointer); + } }else { - property.core = new SignalPropertyCore<>(result.metaType, result.notifySignal.methodIndex(), result.notifySignal.enclosingMetaObject().metaObjectPointer); + if(result.metaType.flags().isSet(QMetaType.TypeFlag.IsPointer) || result.metaType.name().contains("*")) { + property.core = new RCSignal1PropertyCore<>(result.metaType, result.notifySignal.methodIndex(), result.notifySignal.enclosingMetaObject().metaObjectPointer); + }else { + property.core = new Signal1PropertyCore<>(result.metaType, result.notifySignal.methodIndex(), result.notifySignal.enclosingMetaObject().metaObjectPointer); + } } } io.qt.core.QProperty.initialize_native(property, result.metaType, val); @@ -6356,10 +6109,18 @@ final void initialize(QProperty property, T val) { io.qt.core.QProperty.initialize_native(property, result.metaType, val); QMetaMethod notifySignal = findNotifySignalByBindables(property.owner(), result.reflectedField, property); if(notifySignal!=null) { - if(result.metaType.flags().isSet(QMetaType.TypeFlag.IsPointer) || result.metaType.name().contains("*")) { - property.core = new RCSignalPropertyCore<>(result.metaType, notifySignal.methodIndex(), result.notifySignal.enclosingMetaObject().metaObjectPointer); + if(notifySignal.parameterCount()==0) { + if(result.metaType.flags().isSet(QMetaType.TypeFlag.IsPointer) || result.metaType.name().contains("*")) { + property.core = new RCSignal0PropertyCore<>(result.metaType, notifySignal.methodIndex(), result.notifySignal.enclosingMetaObject().metaObjectPointer); + }else { + property.core = new Signal0PropertyCore<>(result.metaType, notifySignal.methodIndex(), result.notifySignal.enclosingMetaObject().metaObjectPointer); + } }else { - property.core = new SignalPropertyCore<>(result.metaType, notifySignal.methodIndex(), result.notifySignal.enclosingMetaObject().metaObjectPointer); + if(result.metaType.flags().isSet(QMetaType.TypeFlag.IsPointer) || result.metaType.name().contains("*")) { + property.core = new RCSignal1PropertyCore<>(result.metaType, notifySignal.methodIndex(), result.notifySignal.enclosingMetaObject().metaObjectPointer); + }else { + property.core = new Signal1PropertyCore<>(result.metaType, notifySignal.methodIndex(), result.notifySignal.enclosingMetaObject().metaObjectPointer); + } } } } @@ -6415,7 +6176,7 @@ void initialize(QProperty property) { /** *

The QProperty class enables automatic property bindings. - * The Java type QProperty corresponds to the C++ type QObjectBindableProperty.

+ * The Java type QProperty corresponds to the C++ type QObjectBindableProperty.

*

It is only allowed to use QProperty as final-declared member variable of a QObject subtype.

*

Example:

* @@ -6558,9 +6319,6 @@ public T value() public void setValue(T newValue) { QMetaType valueMetaType = core.valueMetaType(this); - if(newValue!=null && !QVariant.canConvert(newValue, valueMetaType)) - throw new ClassCastException("Cannot cast value to "+valueMetaType.name()); - if(newValue==null && !valueMetaType.flags().isSet(QMetaType.TypeFlag.IsPointer)) newValue = (T)valueMetaType.create(); QPropertyBindingData bd = bindingStorage().bindingData(this); @@ -6625,24 +6383,24 @@ public boolean setBinding(QUntypedPropertyBinding newBinding) @QtUninvokable public QPropertyBinding setBinding(QtUtilities.Supplier functor) { - try { - QPropertyBinding.setPendingMetaType(this::valueMetaType); - return setBinding(new QPropertyBinding<>(functor)); - }finally { - QPropertyBinding.setPendingMetaType(null); - } + try { + QPropertyBinding.setPendingMetaType(this::valueMetaType); + return setBinding(new QPropertyBinding<>(functor)); + }finally { + QPropertyBinding.setPendingMetaType(null); + } } @QtUninvokable private QPropertyBinding makeBinding() { core.initialize(this); - try { - QPropertyBinding.setPendingMetaType(this::valueMetaType); - return new QPropertyBinding<>(this::value); - }finally { - QPropertyBinding.setPendingMetaType(null); - } + try { + QPropertyBinding.setPendingMetaType(this::valueMetaType); + return new QPropertyBinding<>(this::value); + }finally { + QPropertyBinding.setPendingMetaType(null); + } } /** @@ -6801,7 +6559,10 @@ public QBooleanProperty(boolean initialValue) { */ public QBooleanProperty(QBooleanPropertyBinding binding) { super(); + Runnable signal = this.signal; + this.signal = MIGHT_HAVE_SIGNAL; bindingData().setBinding(binding, this); + this.signal = signal; } /** @@ -6810,8 +6571,12 @@ public QBooleanProperty(QBooleanPropertyBinding binding) { */ public QBooleanProperty(QPropertyBinding<@QtPrimitiveType Boolean> binding) { super(); - if(io.qt.core.QBooleanProperty.checkType(binding.valueMetaType())) - bindingData().setBinding(binding, this); + if(io.qt.core.QBooleanProperty.checkType(binding.valueMetaType())){ + Runnable signal = this.signal; + this.signal = MIGHT_HAVE_SIGNAL; + bindingData().setBinding(binding, this); + this.signal = signal; + } } /** @@ -7082,7 +6847,10 @@ public QByteProperty(byte initialValue) { */ public QByteProperty(QBytePropertyBinding binding) { super(); + Runnable signal = this.signal; + this.signal = MIGHT_HAVE_SIGNAL; bindingData().setBinding(binding, this); + this.signal = signal; } /** @@ -7091,8 +6859,12 @@ public QByteProperty(QBytePropertyBinding binding) { */ public QByteProperty(QPropertyBinding<@QtPrimitiveType Byte> binding) { super(); - if(io.qt.core.QByteProperty.checkType(binding.valueMetaType())) - bindingData().setBinding(binding, this); + if(io.qt.core.QByteProperty.checkType(binding.valueMetaType())){ + Runnable signal = this.signal; + this.signal = MIGHT_HAVE_SIGNAL; + bindingData().setBinding(binding, this); + this.signal = signal; + } } /** @@ -7363,7 +7135,10 @@ public QShortProperty(short initialValue) { */ public QShortProperty(QShortPropertyBinding binding) { super(); + Runnable signal = this.signal; + this.signal = MIGHT_HAVE_SIGNAL; bindingData().setBinding(binding, this); + this.signal = signal; } /** @@ -7372,8 +7147,12 @@ public QShortProperty(QShortPropertyBinding binding) { */ public QShortProperty(QPropertyBinding<@QtPrimitiveType Short> binding) { super(); - if(io.qt.core.QShortProperty.checkType(binding.valueMetaType())) - bindingData().setBinding(binding, this); + if(io.qt.core.QShortProperty.checkType(binding.valueMetaType())){ + Runnable signal = this.signal; + this.signal = MIGHT_HAVE_SIGNAL; + bindingData().setBinding(binding, this); + this.signal = signal; + } } /** @@ -7646,7 +7425,10 @@ public QIntProperty(int initialValue) { */ public QIntProperty(QIntPropertyBinding binding) { super(); - bindingData().setBinding(binding, this); + Runnable signal = this.signal; + this.signal = MIGHT_HAVE_SIGNAL; + bindingData().setBinding(binding, this); + this.signal = signal; } /** @@ -7655,8 +7437,12 @@ public QIntProperty(QIntPropertyBinding binding) { */ public QIntProperty(QPropertyBinding<@QtPrimitiveType Integer> binding) { super(); - if(io.qt.core.QIntProperty.checkType(binding.valueMetaType())) - bindingData().setBinding(binding, this); + if(io.qt.core.QIntProperty.checkType(binding.valueMetaType())){ + Runnable signal = this.signal; + this.signal = MIGHT_HAVE_SIGNAL; + bindingData().setBinding(binding, this); + this.signal = signal; + } } /** @@ -7927,7 +7713,10 @@ public QLongProperty(long initialValue) { */ public QLongProperty(QLongPropertyBinding binding) { super(); - bindingData().setBinding(binding, this); + Runnable signal = this.signal; + this.signal = MIGHT_HAVE_SIGNAL; + bindingData().setBinding(binding, this); + this.signal = signal; } /** @@ -7936,8 +7725,12 @@ public QLongProperty(QLongPropertyBinding binding) { */ public QLongProperty(QPropertyBinding<@QtPrimitiveType Long> binding) { super(); - if(io.qt.core.QLongProperty.checkType(binding.valueMetaType())) - bindingData().setBinding(binding, this); + if(io.qt.core.QLongProperty.checkType(binding.valueMetaType())){ + Runnable signal = this.signal; + this.signal = MIGHT_HAVE_SIGNAL; + bindingData().setBinding(binding, this); + this.signal = signal; + } } /** @@ -8208,7 +8001,10 @@ public QFloatProperty(float initialValue) { */ public QFloatProperty(QFloatPropertyBinding binding) { super(); - bindingData().setBinding(binding, this); + Runnable signal = this.signal; + this.signal = MIGHT_HAVE_SIGNAL; + bindingData().setBinding(binding, this); + this.signal = signal; } /** @@ -8217,8 +8013,12 @@ public QFloatProperty(QFloatPropertyBinding binding) { */ public QFloatProperty(QPropertyBinding<@QtPrimitiveType Float> binding) { super(); - if(io.qt.core.QFloatProperty.checkType(binding.valueMetaType())) - bindingData().setBinding(binding, this); + if(io.qt.core.QFloatProperty.checkType(binding.valueMetaType())){ + Runnable signal = this.signal; + this.signal = MIGHT_HAVE_SIGNAL; + bindingData().setBinding(binding, this); + this.signal = signal; + } } /** @@ -8489,7 +8289,10 @@ public QDoubleProperty(double initialValue) { */ public QDoubleProperty(QDoublePropertyBinding binding) { super(); - bindingData().setBinding(binding, this); + Runnable signal = this.signal; + this.signal = MIGHT_HAVE_SIGNAL; + bindingData().setBinding(binding, this); + this.signal = signal; } /** @@ -8498,8 +8301,12 @@ public QDoubleProperty(QDoublePropertyBinding binding) { */ public QDoubleProperty(QPropertyBinding<@QtPrimitiveType Double> binding) { super(); - if(io.qt.core.QDoubleProperty.checkType(binding.valueMetaType())) - bindingData().setBinding(binding, this); + if(io.qt.core.QDoubleProperty.checkType(binding.valueMetaType())){ + Runnable signal = this.signal; + this.signal = MIGHT_HAVE_SIGNAL; + bindingData().setBinding(binding, this); + this.signal = signal; + } } /** @@ -8770,7 +8577,10 @@ public QCharProperty(char initialValue) { */ public QCharProperty(QCharPropertyBinding binding) { super(); - bindingData().setBinding(binding, this); + Runnable signal = this.signal; + this.signal = MIGHT_HAVE_SIGNAL; + bindingData().setBinding(binding, this); + this.signal = signal; } /** @@ -8779,8 +8589,12 @@ public QCharProperty(QCharPropertyBinding binding) { */ public QCharProperty(QPropertyBinding<@QtPrimitiveType Character> binding) { super(); - if(io.qt.core.QCharProperty.checkType(binding.valueMetaType())) - bindingData().setBinding(binding, this); + if(io.qt.core.QCharProperty.checkType(binding.valueMetaType())){ + Runnable signal = this.signal; + this.signal = MIGHT_HAVE_SIGNAL; + bindingData().setBinding(binding, this); + this.signal = signal; + } } /** @@ -9456,62 +9270,6 @@ public final QMetaType valueMetaType() { } }// class - -class QObject_5__ extends QObject { - /** - *

This function overloads {@link #findChildren()}.

- *

Returns the children of this object that are instance of cl - * and that have names matching the regular expression regExp, - * or an empty list if there are no such objects. - * The search is performed recursively, unless options specifies the option FindDirectChildrenOnly.

- * @deprecated Use {@link #findChildren(Class, QRegularExpression, Qt.FindChildOptions)} instead. - * @param type of children - * @param cl type of children - * @param regExp regular expression - * @param options search options - * @return found children - * @see #findChildren() - */ - @Deprecated - @io.qt.QtUninvokable - public final QList findChildren(Class < T > cl, QRegExp regExp, Qt.FindChildOptions options){ - return findChildrenQRegExp(QMetaObject.forType(java.util.Objects.requireNonNull(cl)).metaObjectPointer, regExp, options.value()); - } - - @io.qt.QtUninvokable - private native final QList findChildrenQRegExp(long metaObjectPointer, QRegExp regExp, int options); - - /** - *

Overloaded function for {@link #findChildren(Class,QRegExp,Qt.FindChildOptions)}.

- * @deprecated Use {@link #findChildren(Class, QRegularExpression, Qt.FindChildOptions)} instead. - * @param type of children - * @param cl type of children - * @param regExp regular expression - * @return found children - */ - @Deprecated - @io.qt.QtUninvokable - public final QList findChildren(Class < T > cl, QRegExp regExp) { - return findChildren(cl, regExp, new Qt.FindChildOptions(Qt.FindChildOption.FindChildrenRecursively)); - } - - /** - *

Overloaded function for {@link #findChildren(Class,QRegExp,Qt.FindChildOptions)} - * with: options = FindChildrenRecursively.

- * @deprecated Use {@link #findChildren(Class, QRegularExpression, Qt.FindChildOptions)} instead. - * @param type of children - * @param cl type of children - * @param regExp regular expression - * @param options search options - * @return found children - */ - @Deprecated - @io.qt.QtUninvokable - public final QList findChildren(Class < T > cl, QRegExp regExp, Qt.FindChildOption... options) { - return findChildren(cl, regExp, new Qt.FindChildOptions(options)); - } - -}// class class QSignalTransition___{ @@ -9667,76 +9425,51 @@ public FormattingOption[] flags() { } } - @io.qt.QtUninvokable - public final java.lang.String toDisplayString() { - return toDisplayString(ComponentFormattingOption.PrettyDecoded.value()); - } - + /** + *

See QUrl::toDisplayString(QUrl::FormattingOptions)const

+ */ @io.qt.QtUninvokable public final java.lang.String toDisplayString(FormattingOption... options) { - return toDisplayString(new FormattingOptions(options).value()); - } - - @io.qt.QtUninvokable - public final java.lang.String toDisplayString(FormattingOptions options) { - return toDisplayString(options.value()); + return toDisplayString(new FormattingOptions(options)); } - @io.qt.QtUninvokable - public final java.lang.String toString(FormattingOptions options) { - return toString(options.value()); - } - + /** + *

See QUrl::toString(QUrl::FormattingOptions)const

+ */ @io.qt.QtUninvokable public final java.lang.String toString(FormattingOption... options) { - return toString(new FormattingOptions(options).value()); + return toString(new FormattingOptions(options)); } - @io.qt.QtUninvokable - public final java.lang.String toString() { - return toString(ComponentFormattingOption.PrettyDecoded.value()); - } - - @io.qt.QtUninvokable - public final java.lang.String url() { - return url(ComponentFormattingOption.PrettyDecoded.value()); - } - - @io.qt.QtUninvokable - public final java.lang.String url(FormattingOptions options) { - return url(options.value()); - } - + /** + *

See QUrl::url(QUrl::FormattingOptions)const

+ */ @io.qt.QtUninvokable public final java.lang.String url(FormattingOption... options) { - return url(new FormattingOptions(options).value()); + return url(new FormattingOptions(options)); } - @io.qt.QtUninvokable - public final io.qt.core.QByteArray toEncoded() { - return toEncoded(ComponentFormattingOption.PrettyDecoded.value()); - } - + /** + *

See QUrl::toEncoded(QUrl::FormattingOptions)const

+ */ @io.qt.QtUninvokable public final io.qt.core.QByteArray toEncoded(FormattingOption... options) { - return toEncoded(new FormattingOptions(options).value()); - } - - @io.qt.QtUninvokable - public final io.qt.core.QByteArray toEncoded(FormattingOptions options) { - return toEncoded(options.value()); - } - - public static QStringList toStringList(java.util.Collection uris, FormattingOptions options){ - return toStringList(uris, options.value()); + return toEncoded(new FormattingOptions(options)); } - public static QStringList toStringList(java.util.Collection uris, FormattingOption... options){ - return toStringList(uris, new FormattingOptions(options).value()); + /** + *

See QUrl::toStringList(QList<QUrl>,QUrl::FormattingOptions)

+ */ + public static QStringList toStringList(java.util.Collection uris, FormattingOption... options){ + return toStringList(uris, new FormattingOptions(options)); } - public static QStringList toStringList(java.util.Collection uris){ - return toStringList(uris, ComponentFormattingOption.PrettyDecoded.value()); + /** + *

See QUrl::adjusted(QUrl::FormattingOptions)const

+ */ + @io.qt.QtUninvokable + public final io.qt.core.QUrl adjusted(io.qt.core.QUrl.FormattingOption... options){ + return adjusted(new FormattingOptions(options)); } /** @@ -9749,37 +9482,46 @@ public static io.qt.core.QUrl fromClassPath(java.lang.String classpath){ }// class abstract class QAbstractItemModel___ extends QAbstractItemModel { - - @io.qt.QtUninvokable - public final boolean setData(int row, int col, Object value) { - return setData(QtJambi_LibraryUtilities.internal.nativeId(this), row, col, value, io.qt.core.Qt.ItemDataRole.DisplayRole); - } - - @io.qt.QtUninvokable - public final boolean setData(int row, int col, Object value, int role) { - return setData(QtJambi_LibraryUtilities.internal.nativeId(this), row, col, value, role); - } - - @io.qt.QtUninvokable - private native final boolean setData(long nativeId, int row, int col, Object value, int role); - @io.qt.QtUninvokable - public final Object data(int row, int col) { - return data(QtJambi_LibraryUtilities.internal.nativeId(this), row, col, Qt.ItemDataRole.DisplayRole); - } - - @io.qt.QtUninvokable - public final Object data(int row, int col, int role) { - return data(QtJambi_LibraryUtilities.internal.nativeId(this), row, col, role); - } - - @io.qt.QtUninvokable - private native final Object data(long nativeId, int row, int col, int role); + /** + *

See QAbstractItemModel::setData(QModelIndex,QVariant,int)

+ */ + @io.qt.QtUninvokable + public final boolean setData(int row, int col, Object value) { + return setData(this.index(row, col), value, io.qt.core.Qt.ItemDataRole.DisplayRole); + } + + /** + *

See QAbstractItemModel::setData(QModelIndex,QVariant,int)

+ */ + @io.qt.QtUninvokable + public final boolean setData(int row, int col, Object value, int role) { + return setData(this.index(row, col), value, role); + } - @io.qt.QtUninvokable - protected final io.qt.core.QModelIndex createIndex(int row, int column){ - return createIndex(row, column, 0); - } + /** + *

See QAbstractItemModel::data(QModelIndex,int)const

+ */ + @io.qt.QtUninvokable + public final Object data(int row, int col) { + return data(this.index(row, col), Qt.ItemDataRole.DisplayRole); + } + + /** + *

See QAbstractItemModel::data(QModelIndex,int)

+ */ + @io.qt.QtUninvokable + public final Object data(int row, int col, int role) { + return data(this.index(row, col), role); + } + + /** + *

See QAbstractItemModel::createIndex(int,int,quintptr)

+ */ + @io.qt.QtUninvokable + protected final io.qt.core.QModelIndex createIndex(int row, int column){ + return createIndex(row, column, 0); + } }// class class QTimer___ extends QTimer { @@ -9853,6 +9595,7 @@ protected void timerEvent(QTimerEvent e) { * time interval is msec milliseconds. * * @see #start() + * @see QTimer::singleShot(int,const QObject*,const char *) */ public static void singleShot(int msec, QObject obj, String method) { singleShot(msec, defaultTypeFor(msec), obj, method); @@ -9872,6 +9615,7 @@ public static void singleShot(int msec, QObject obj, String method) { * * @see #start() * @since 5.4 + * @see QTimer::singleShot(int,const QObject*,Functor) */ public static void singleShot(int msec, QObject context, QMetaObject.Slot0 slot) { singleShot(msec, defaultTypeFor(msec), context, slot); @@ -9888,6 +9632,7 @@ public static void singleShot(int msec, QObject context, QMetaObject.Slot0 slot) * accuracy of the timer. * * @see #start() + * @see QTimer::singleShot(int,Qt::TimerType,const QObject*,const char *) */ public static void singleShot(int msec, Qt.TimerType timeType, QObject obj, String method) { new QSingleShotTimer(msec, timeType, obj, method); @@ -9904,6 +9649,7 @@ public static void singleShot(int msec, Qt.TimerType timeType, QObject obj, Stri * * @see #start() * @since 5.4 + * @see QTimer::singleShot(int,Qt::TimerType,PointerToMemberFunction) */ public static void singleShot(int msec, QMetaObject.Slot0 slot) { singleShot(msec, defaultTypeFor(msec), null, slot); @@ -9921,6 +9667,7 @@ public static void singleShot(int msec, QMetaObject.Slot0 slot) { * * @see #start() * @since 5.4 + * @see QTimer::singleShot(int,Qt::TimerType,PointerToMemberFunction) */ public static void singleShot(int msec, Qt.TimerType timeType, QMetaObject.Slot0 slot) { singleShot(msec, timeType, null, slot); @@ -9942,6 +9689,7 @@ public static void singleShot(int msec, Qt.TimerType timeType, QMetaObject.Slot0 * * @see #start() * @since 5.4 + * @see QTimer::singleShot(int,Qt::TimerType,const QObject*,Functor) */ public static void singleShot(int msec, Qt.TimerType timeType, QObject context, QMetaObject.Slot0 slot) { new QSingleShotTimer(msec, timeType, context, slot); @@ -10045,6 +9793,7 @@ public static T initialize(String applicationName, /** * Destroys the QCoreApplication instance and purges Qt. + * @see ~QCoreApplication() */ @io.qt.QtUninvokable public static void shutdown() { @@ -10131,6 +9880,7 @@ public static void addPreRoutine(Runnable startUpFunction) { /** * Adds a post-routine to be executed when deleting QCoreApplication. + * @see qAddPostRoutine(QtCleanUpFunction) * @see shutdown() */ @io.qt.QtUninvokable @@ -10140,6 +9890,7 @@ public static void addPostRoutine(Runnable cleanUpFunction) { /** * Removes a previously added post-routine. + * @see qRemovePostRoutine(QtCleanUpFunction) * @see addPostRoutine(Runnable) * @see shutdown() */ @@ -10208,6 +9959,9 @@ public QXmlStreamAttributes(java.util.Collection }// class class autoclosedelete { + /** + * {@inheritDoc} + */ @Override public void close(){ dispose(); @@ -10215,14 +9969,14 @@ public void close(){ }// class class QDebug___ extends QDebug { - - /** - * {@inheritDoc} - */ - @Override - public QDebug append(CharSequence csq, int start, int end) { - return append(csq==null ? "null" : csq.subSequence(start, end)); - } + + /** + * {@inheritDoc} + */ + @Override + public QDebug append(CharSequence csq, int start, int end) { + return append(csq==null ? "null" : csq.subSequence(start, end)); + } /** *

See Qt::endl

@@ -10568,6 +10322,9 @@ public final io.qt.core.QDebug append(java.lang.Object obj){ }// class class QTextStream___ extends QTextStream { + /** + *

See QTextStream::string() const

+ */ public final CharSequence string() { QIODevice device = device_private(); if(device instanceof StringDevice) { @@ -10576,17 +10333,17 @@ public final CharSequence string() { } return null; } - - /** - * {@inheritDoc} - */ - @Override - public QTextStream append(CharSequence csq, int start, int end) { - return append(csq==null ? "null" : csq.subSequence(start, end)); - } /** - *

See QTextStream::device()const

+ * {@inheritDoc} + */ + @Override + public QTextStream append(CharSequence csq, int start, int end) { + return append(csq==null ? "null" : csq.subSequence(start, end)); + } + + /** + *

See QTextStream::device()const

*/ @io.qt.QtUninvokable public final io.qt.core.QIODevice device(){ @@ -10596,53 +10353,89 @@ public final io.qt.core.QIODevice device(){ return __qt_return_value; } + /** + *

See QTextStream::setString(QString *, QIODeviceBase::OpenMode)

+ */ @SuppressWarnings("hiding") public void setString(String string, io.qt.core.QIODevice.OpenModeFlag ... openMode) { setString(string, new io.qt.core.QIODevice.OpenMode(openMode)); } + /** + *

See QTextStream::setString(QString *, QIODeviceBase::OpenMode)

+ */ @SuppressWarnings("hiding") public void setString(String string) { setString(string, new io.qt.core.QIODevice.OpenMode(4)); } + /** + *

See QTextStream::setString(QString *, QIODeviceBase::OpenMode)

+ */ @SuppressWarnings("hiding") public void setString(String string, io.qt.core.QIODevice.OpenMode openMode) { flush(); setDevice(new StringDevice(java.util.Objects.requireNonNull(string, "Argument 'string': null not expected."), openMode)); } + /** + *

See QTextStream::setString(QString *, QIODeviceBase::OpenMode)

+ */ public void setString(String string, io.qt.core.QIODevice.OpenModeFlag ... openMode) { setString(string, new io.qt.core.QIODevice.OpenMode(openMode)); } + /** + *

See QTextStream::setString(QString *, QIODeviceBase::OpenMode)

+ */ public void setString(String string) { setString(string, new io.qt.core.QIODevice.OpenMode(4)); } + /** + *

See QTextStream::setString(QString *, QIODeviceBase::OpenMode)

+ */ public void setString(String string, io.qt.core.QIODevice.OpenMode openMode) { setString(string==null ? new StringBuilder() : new StringBuilder(string), openMode); } + /** + *

See QTextStream::QTextStream(QString *, QIODeviceBase::OpenMode)

+ */ @SuppressWarnings("hiding") public QTextStream(String string, io.qt.core.QIODevice.OpenModeFlag ... openMode) { this(string, new io.qt.core.QIODevice.OpenMode(openMode)); } + /** + *

See QTextStream::QTextStream(QString *, QIODeviceBase::OpenMode)

+ */ @SuppressWarnings("hiding") public QTextStream(String string) { this(string, new io.qt.core.QIODevice.OpenMode(3)); } + /** + *

See QTextStream::QTextStream(QString *, QIODeviceBase::OpenMode)

+ */ @SuppressWarnings("hiding") public QTextStream(String string, io.qt.core.QIODevice.OpenMode openMode){ this(new StringDevice(java.util.Objects.requireNonNull(string, "Argument 'string': null not expected."), openMode)); } + /** + *

See QTextStream::QTextStream(QString *, QIODeviceBase::OpenMode)

+ */ public QTextStream(String string, io.qt.core.QIODevice.OpenModeFlag ... openMode) { this(string, new io.qt.core.QIODevice.OpenMode(openMode)); } + /** + *

See QTextStream::QTextStream(QString *, QIODeviceBase::OpenMode)

+ */ public QTextStream(String string) { this(string, new io.qt.core.QIODevice.OpenMode(3)); } + /** + *

See QTextStream::QTextStream(QString *, QIODeviceBase::OpenMode)

+ */ public QTextStream(String string, io.qt.core.QIODevice.OpenMode openMode){ this(string==null ? new StringBuilder() : new StringBuilder(string), openMode); } @@ -10712,51 +10505,81 @@ public boolean seek(long pos) { } } + /** + *

See QTextStream::operator<<

+ */ @io.qt.QtUninvokable public final QTextStream append(java.lang.String s){ return writeString(s); } - - @io.qt.QtUninvokable + + /** + *

See QTextStream::operator<<

+ */ + @io.qt.QtUninvokable public final QTextStream append(java.lang.CharSequence s){ return writeString(s); } + /** + *

See QTextStream::operator<<

+ */ @io.qt.QtUninvokable public final QTextStream append(double v){ return writeDouble(v); } + /** + *

See QTextStream::operator<<

+ */ @io.qt.QtUninvokable public final QTextStream append(byte v){ return writeByte(v); } + /** + *

See QTextStream::operator<<

+ */ @io.qt.QtUninvokable public final QTextStream append(io.qt.core.QByteArray v){ return writeBytes(v); } + /** + *

See QTextStream::operator<<

+ */ @io.qt.QtUninvokable public final QTextStream append(char v){ return writeChar(v); } + /** + *

See QTextStream::operator<<

+ */ @io.qt.QtUninvokable public final QTextStream append(float v){ return writeFloat(v); } + /** + *

See QTextStream::operator<<

+ */ @io.qt.QtUninvokable public final QTextStream append(int v){ return writeInt(v); } + /** + *

See QTextStream::operator<<

+ */ @io.qt.QtUninvokable public final QTextStream append(long v){ return writeLong(v); } + /** + *

See QTextStream::operator<<

+ */ @io.qt.QtUninvokable public final QTextStream append(short v){ return writeShort(v); @@ -11136,21 +10959,35 @@ private Week(int weekNumber, int yearNumber){ class QByteArray_5_12__ extends QByteArray { + /** + *

Overloaded function for {@link #compare(byte[], io.qt.core.Qt.CaseSensitivity)} + * with cs = io.qt.core.Qt.CaseSensitivity.CaseSensitive.

+ */ @io.qt.QtUninvokable public final int compare(byte[] b) { return compare(new QByteArray(b)); } + /** + *

See QByteArray::compare(const char*,Qt::CaseSensitivity)const

+ */ @io.qt.QtUninvokable public final int compare(byte[] b, io.qt.core.Qt.CaseSensitivity cs) { return compare(new QByteArray(b), cs); } + /** + *

Overloaded function for {@link #compare(String, io.qt.core.Qt.CaseSensitivity)} + * with cs = io.qt.core.Qt.CaseSensitivity.CaseSensitive.

+ */ @io.qt.QtUninvokable public final int compare(String str) { return compare(new QByteArray(str)); } + /** + *

See QByteArray::compare(const char*,Qt::CaseSensitivity)const

+ */ @io.qt.QtUninvokable public final int compare(String str, io.qt.core.Qt.CaseSensitivity cs) { return compare(new QByteArray(str), cs); @@ -11174,22 +11011,60 @@ private FromBase64Result(QByteArray decoded, int decodingStatus) { class QByteArray___ extends QByteArray { + /** + *

See QByteArray(const char *)

+ */ public QByteArray(byte data[]) { this(java.nio.ByteBuffer.wrap(data), data.length); } + /** + *

See QByteArray::prepend(const char *)

+ */ @io.qt.QtUninvokable public final QByteArray prepend(byte[] data) { - this.prepend(java.nio.ByteBuffer.wrap(data), data.length); - return this; + return this.prepend(java.nio.ByteBuffer.wrap(data), data.length); + } + + /** + *

See QByteArray::append(const char *)

+ */ + @io.qt.QtUninvokable + public final io.qt.core.QByteArray append(byte[] a){ + return append(java.nio.ByteBuffer.wrap(a), a.length); + } + + /** + *

See QByteArray::operator=(const char*)

+ */ + @io.qt.QtUninvokable + public final io.qt.core.QByteArray set(byte[] data){ + return set(java.nio.ByteBuffer.wrap(data)); + } + + /** + *

See QByteArray::operator=(const char*)

+ */ + @io.qt.QtUninvokable + public final io.qt.core.QByteArray set(String data){ + return set(new QByteArray(data)); } + /** + *

See QByteArrayList::join()

+ */ @io.qt.QtUninvokable public native static QByteArray join(java.util.Collection stringList); + /** + *

See QByteArrayList::join(char)

+ */ @io.qt.QtUninvokable public native static QByteArray join(java.util.Collection stringList, byte sep); + /** + *

See QByteArrayList::join(QByteArray)

+ */ @io.qt.QtUninvokable public native static QByteArray join(java.util.Collection stringList, QByteArray sep); @@ -11197,79 +11072,157 @@ public final QByteArray prepend(byte[] data) { class QByteArray_5__ extends QByteArray { + /** + *

See QByteArray::QByteArray(const char*)

+ */ public QByteArray(String s) { this(); append(s); } + /** + *

See QByteArray::QByteArray(const char*,int)

+ */ public QByteArray(byte data[], int size) { this(java.nio.ByteBuffer.wrap(data), size==-1 ? data.length : Math.min(size, data.length)); } + + /** + *

See QByteArray::prepend(const char *,int)

+ */ + @io.qt.QtUninvokable + public final QByteArray prepend(byte[] data, int size) { + return this.prepend(java.nio.ByteBuffer.wrap(data), size==-1 ? data.length : Math.min(size, data.length)); + } + + /** + *

See QByteArray::append(const char *,int)

+ */ + @io.qt.QtUninvokable + public final io.qt.core.QByteArray append(byte[] a, int size){ + return append(java.nio.ByteBuffer.wrap(a), size==-1 ? a.length : Math.min(size, a.length)); + } + /** + *

See QByteArray::count(const char*)const

+ */ @io.qt.QtUninvokable public final int count(byte data[]) { return count(java.nio.ByteBuffer.wrap(data)); } + /** + *

See QByteArray::contains(const char*)const

+ */ @io.qt.QtUninvokable public final boolean contains(byte data[]) { return contains(java.nio.ByteBuffer.wrap(data)); } + /** + *

See QByteArray::startsWith(const char*)const

+ */ @io.qt.QtUninvokable public final boolean startsWith(String str) { return startsWith(new QByteArray(str)); } + /** + *

See QByteArray::contains(const char*)const

+ */ @io.qt.QtUninvokable public final boolean contains(String str) { return contains(new QByteArray(str)); } + /** + *

See QByteArray::contains(const char*)const

+ */ @io.qt.QtUninvokable public final int count(String str) { return count(new QByteArray(str)); } + /** + *

See QByteArray::endsWith(const char*)const

+ */ @io.qt.QtUninvokable public final boolean endsWith(String str) { return endsWith(new QByteArray(str)); } + /** + *

See QByteArray::prepend(const char*)

+ */ @io.qt.QtUninvokable public final QByteArray prepend(String str) { return prepend(new QByteArray(str)); } + /** + *

See QByteArray::replace(int,int,const char*)

+ */ @io.qt.QtUninvokable public final QByteArray replace(int index, int len, byte[] data) { this.replace(index, len, java.nio.ByteBuffer.wrap(data), data.length); return this; } + /** + *

See QByteArray::insert(int,const char*)

+ */ @io.qt.QtUninvokable public final QByteArray insert(int i, byte[] data) { this.insert(i, java.nio.ByteBuffer.wrap(data), data.length); return this; } + /** + *

See QByteArray::replace(QByteArray,const char*)

+ */ @io.qt.QtUninvokable public final QByteArray replace(QByteArray before, String after) { return replace(before, new QByteArray(after)); } + + /** + *

See QByteArray::replace(const char*,QByteArray)

+ */ + @io.qt.QtUninvokable + public final QByteArray replace(byte[] before, QByteArray after) { + return replace(new QByteArray(before), after); + } + + /** + *

See QByteArray::replace(QByteArray,const char*)

+ */ + @io.qt.QtUninvokable + public final QByteArray replace(QByteArray before, byte[] after) { + return replace(before, new QByteArray(after)); + } + /** + *

See QByteArray::replace(const char*,const char*)

+ */ @io.qt.QtUninvokable public final QByteArray replace(String before, String after) { return replace(new QByteArray(before), new QByteArray(after)); } - + + /** + *

See QByteArray::replace(const char*,const char*)

+ */ + @io.qt.QtUninvokable + public final QByteArray replace(byte[] before, byte[] after) { + return replace(new QByteArray(before), new QByteArray(after)); + } }// class class QByteArray_6__ extends QByteArray { private static byte[] getBytes(String s) { - if(s==null) - return new byte[0]; + if(s==null) + return new byte[0]; try { return s.getBytes("UTF-8"); } catch (java.io.UnsupportedEncodingException e) { @@ -11277,225 +11230,412 @@ private static byte[] getBytes(String s) { } } + /** + *

See QByteArray::QByteArray(const char*)

+ */ public QByteArray(String s) { this(getBytes(s)); } + /** + *

See QByteArray::QByteArray(const char*,qsizetype)

+ */ public QByteArray(byte data[], long size) { this(java.nio.ByteBuffer.wrap(data), size==-1 ? data.length : Math.min(size, data.length)); } + /** + *

See QByteArray::prepend(const char *,qsizetype)

+ */ + @io.qt.QtUninvokable + public final QByteArray prepend(byte[] data, long size) { + return this.prepend(java.nio.ByteBuffer.wrap(data), size==-1 ? data.length : Math.min(size, data.length)); + } + + /** + *

See QByteArray::append(const char *,qsizetype)

+ */ + @io.qt.QtUninvokable + public final io.qt.core.QByteArray append(byte[] a, long size){ + return append(java.nio.ByteBuffer.wrap(a), size==-1 ? a.length : Math.min(size, a.length)); + } + + /** + *

See QByteArray::contains(const char*)const

+ */ @io.qt.QtUninvokable public final boolean contains(String str) { return contains(new QByteArrayView(str)); } + /** + *

See QByteArray::count(const char*)const

+ */ @io.qt.QtUninvokable public final long count(String str) { return count(new QByteArrayView(str)); } + /** + *

See QByteArray::endsWith(const char*)const

+ */ @io.qt.QtUninvokable public final boolean endsWith(String str) { return endsWith(new QByteArrayView(str)); } + /** + *

See QByteArray::endsWith(const char*)const

+ */ @io.qt.QtUninvokable public final boolean endsWith(byte[] str) { return endsWith(new QByteArrayView(str)); } + /** + *

See QByteArray::endsWith(const char*)const

+ */ @io.qt.QtUninvokable public final boolean endsWith(java.nio.ByteBuffer str) { return endsWith(new QByteArrayView(str)); } + /** + *

See QByteArray::prepend(const char*)

+ */ @io.qt.QtUninvokable public final QByteArray prepend(String str) { return prepend(getBytes(str)); } + /** + *

See QByteArray::startsWith(const char*)const

+ */ @io.qt.QtUninvokable public final boolean startsWith(String str) { return startsWith(new QByteArrayView(str)); } + /** + *

See QByteArray::startsWith(const char*)const

+ */ @io.qt.QtUninvokable public final boolean startsWith(byte[] str) { return startsWith(new QByteArrayView(str)); } + /** + *

See QByteArray::startsWith(const char*)const

+ */ @io.qt.QtUninvokable public final boolean startsWith(java.nio.ByteBuffer str) { return startsWith(new QByteArrayView(str)); } - @io.qt.QtUninvokable - public final io.qt.core.QByteArray append(byte[] a){ - return append(java.nio.ByteBuffer.wrap(a), a.length); - } - + /** + *

See QByteArray::append(const char*)

+ */ @io.qt.QtUninvokable public final io.qt.core.QByteArray append(String a){ return append(getBytes(a)); } + /** + *

See QByteArray::compare(const char*, Qt::CaseSensitivity)const

+ */ @io.qt.QtUninvokable public final int compare(String str) { return compare(str, io.qt.core.Qt.CaseSensitivity.CaseSensitive); } + /** + *

See QByteArray::compare(const char*, Qt::CaseSensitivity)const

+ */ @io.qt.QtUninvokable public final int compare(String str, io.qt.core.Qt.CaseSensitivity cs) { return compare(new QByteArrayView(str), cs); } + /** + *

See QByteArray::count(const char*)const

+ */ @io.qt.QtUninvokable public final long count(byte data[]) { return count(new QByteArrayView(data)); } + /** + *

See QByteArray::contains(const char*)const

+ */ @io.qt.QtUninvokable public final boolean contains(byte data[]) { return contains(new QByteArrayView(data)); } + /** + *

See QByteArray::compare(const char*, Qt::CaseSensitivity)const

+ */ @io.qt.QtUninvokable public final int compare(byte[] b) { return compare(b, io.qt.core.Qt.CaseSensitivity.CaseSensitive); } + /** + *

See QByteArray::compare(const char*, Qt::CaseSensitivity)const

+ */ @io.qt.QtUninvokable public final int compare(byte[] b, io.qt.core.Qt.CaseSensitivity cs) { return compare(new QByteArrayView(b), cs); } + /** + *

See QByteArray::count(const char*)const

+ */ @io.qt.QtUninvokable public final long count(java.nio.ByteBuffer data) { return count(new QByteArrayView(data)); } + /** + *

See QByteArray::contains(const char*)const

+ */ @io.qt.QtUninvokable public final boolean contains(java.nio.ByteBuffer data) { return contains(new QByteArrayView(data)); } + /** + *

See QByteArray::compare(const char*, Qt::CaseSensitivity)const

+ */ @io.qt.QtUninvokable public final int compare(java.nio.ByteBuffer b) { return compare(b, io.qt.core.Qt.CaseSensitivity.CaseSensitive); } + /** + *

See QByteArray::compare(const char*, Qt::CaseSensitivity)const

+ */ @io.qt.QtUninvokable public final int compare(java.nio.ByteBuffer b, io.qt.core.Qt.CaseSensitivity cs) { return compare(new QByteArrayView(b), cs); } + /** + *

See QByteArray::indexOf(const char*)const

+ */ @io.qt.QtUninvokable public final long indexOf(String strg) { return indexOf(strg, (int)0); } + /** + *

See QByteArray::indexOf(const char*,qsizetype)const

+ */ @io.qt.QtUninvokable public final long indexOf(String strg, long from){ return indexOf(new io.qt.core.QByteArrayView(strg), from); } + /** + *

See QByteArray::indexOf(const char*)const

+ */ @io.qt.QtUninvokable public final long indexOf(byte[] other) { return indexOf(other, (int)0); } + /** + *

See QByteArray::indexOf(const char*,qsizetype)const

+ */ @io.qt.QtUninvokable public final long indexOf(byte[] other, long from){ return indexOf(new io.qt.core.QByteArrayView(other), from); } + /** + *

See QByteArray::indexOf(const char*)const

+ */ @io.qt.QtUninvokable public final long indexOf(java.nio.ByteBuffer other) { return indexOf(other, (int)0); } + /** + *

See QByteArray::indexOf(const char*,qsizetype)const

+ */ @io.qt.QtUninvokable public final long indexOf(java.nio.ByteBuffer other, long from){ return indexOf(new io.qt.core.QByteArrayView(other), from); } + /** + *

See QByteArray::indexOf(QByteArray)const

+ */ @io.qt.QtUninvokable public final long indexOf(QByteArray other) { return indexOf(other, (long)0); } + /** + *

See QByteArray::indexOf(QByteArray,qsizetype)const

+ */ @io.qt.QtUninvokable public final long indexOf(QByteArray other, long from){ return indexOf(new io.qt.core.QByteArrayView(other), from); } - @io.qt.QtUninvokable + /** + *

See QByteArray::lastIndexOf(const char*)const

+ */ + @io.qt.QtUninvokable public final long lastIndexOf(String strg) { return lastIndexOf(strg, (long)0); } + /** + *

See QByteArray::lastIndexOf(const char*,qsizetype)const

+ */ @io.qt.QtUninvokable public final long lastIndexOf(String strg, long from){ return lastIndexOf(new io.qt.core.QByteArrayView(strg), from); } + /** + *

See QByteArray::lastIndexOf(const char*)const

+ */ @io.qt.QtUninvokable public final long lastIndexOf(byte[] other) { return lastIndexOf(other, (long)0); } + /** + *

See QByteArray::lastIndexOf(const char*,qsizetype)const

+ */ @io.qt.QtUninvokable public final long lastIndexOf(byte[] other, long from){ return lastIndexOf(new io.qt.core.QByteArrayView(other), from); } + /** + *

See QByteArray::lastIndexOf(const char*)const

+ */ @io.qt.QtUninvokable public final long lastIndexOf(java.nio.ByteBuffer other) { return lastIndexOf(other, (long)0); } + /** + *

See QByteArray::lastIndexOf(const char*,qsizetype)const

+ */ @io.qt.QtUninvokable public final long lastIndexOf(java.nio.ByteBuffer other, long from){ return lastIndexOf(new io.qt.core.QByteArrayView(other), from); } + /** + *

See QByteArray::lastIndexOf(QByteArray)const

+ */ @io.qt.QtUninvokable public final long lastIndexOf(QByteArray other) { return lastIndexOf(other, (long)0); } + /** + *

See QByteArray::lastIndexOf(QByteArray,qsizetype)const

+ */ @io.qt.QtUninvokable public final long lastIndexOf(QByteArray other, long from){ return lastIndexOf(new io.qt.core.QByteArrayView(other), from); } + /** + *

See QByteArray::replace(qsizetype,qsizetype,QByteArrayView)

+ */ @io.qt.QtUninvokable public final QByteArray replace(long index, long len, byte[] data) { this.replace(index, len, java.nio.ByteBuffer.wrap(data), data.length); return this; } + /** + *

See QByteArray::insert(qsizetype,QByteArrayView)

+ */ @io.qt.QtUninvokable public final QByteArray insert(long i, byte[] data) { this.insert(i, java.nio.ByteBuffer.wrap(data), data.length); return this; } + /** + *

See QByteArray::replace(QByteArrayView,QByteArrayView)

+ */ + @io.qt.QtUninvokable + public final QByteArray replace(QByteArray before, byte[] after) { + return replace(new QByteArrayView(before), new QByteArrayView(after)); + } + + /** + *

See QByteArray::replace(QByteArrayView,QByteArrayView)

+ */ @io.qt.QtUninvokable public final QByteArray replace(QByteArray before, String after) { return replace(new QByteArrayView(before), new QByteArrayView(after)); } + + /** + *

See QByteArray::replace(QByteArrayView,QByteArrayView)

+ */ + @io.qt.QtUninvokable + public final QByteArray replace(byte[] before, String after) { + return replace(new QByteArrayView(before), new QByteArrayView(after)); + } + + /** + *

See QByteArray::replace(QByteArrayView,QByteArrayView)

+ */ + @io.qt.QtUninvokable + public final QByteArray replace(byte[] before, QByteArray after) { + return replace(new QByteArrayView(before), new QByteArrayView(after)); + } + + /** + *

See QByteArray::replace(QByteArrayView,QByteArrayView)

+ */ + @io.qt.QtUninvokable + public final QByteArray replace(String before, QByteArray after) { + return replace(new QByteArrayView(before), new QByteArrayView(after)); + } + + /** + *

See QByteArray::replace(QByteArrayView,QByteArrayView)

+ */ + @io.qt.QtUninvokable + public final QByteArray replace(String before, byte[] after) { + return replace(new QByteArrayView(before), new QByteArrayView(after)); + } + /** + *

See QByteArray::replace(QByteArrayView,QByteArrayView)

+ */ @io.qt.QtUninvokable public final QByteArray replace(String before, String after) { return replace(new QByteArrayView(before), new QByteArrayView(after)); } +}// class +class QByteArray_63__ extends QByteArray { + /** + *

See QByteArrayList::join(QByteArrayView)

+ */ + @io.qt.QtUninvokable + public native static QByteArray join(java.util.Collection stringList, QByteArrayView sep); }// class class QByteArrayView___ extends QByteArray { + /** + *

See QByteArrayView::QByteArrayView(const char*)

+ */ public QByteArrayView(byte[] data){ super((QPrivateConstructor)null); Long[] pointerOut = {null}; @@ -11503,12 +11643,15 @@ public QByteArrayView(byte[] data){ if(pointerOut[0]!=null) { long pointer = pointerOut[0]; purgeTask = ()->purgeBytes(pointer); - io.qt.QtUtilities.getSignalOnDispose(this).connect(purgeTask::run); + io.qt.QtUtilities.getSignalOnDispose(this).connect(purgeTask::run); } } private native static void initialize_native(QByteArrayView instance, byte[] data, Long[] pointerOut); private native static void purgeBytes(long pointer); + /** + *

See QByteArrayView::QByteArrayView(const char*)

+ */ public QByteArrayView(String data){ super((QPrivateConstructor)null); Long[] pointerOut = {null}; @@ -11516,12 +11659,15 @@ public QByteArrayView(String data){ if(pointerOut[0]!=null) { long pointer = pointerOut[0]; purgeTask = ()->purgeString(pointer); - io.qt.QtUtilities.getSignalOnDispose(this).connect(purgeTask::run); + io.qt.QtUtilities.getSignalOnDispose(this).connect(purgeTask::run); } } private native static void initialize_native(QByteArrayView instance, String data, Long[] pointerOut); private native static void purgeString(long pointer); + /** + *

See QByteArrayView::QByteArrayView(const char*)

+ */ public QByteArrayView(java.nio.ByteBuffer data){ super((QPrivateConstructor)null); if(data.isDirect()) { @@ -11542,6 +11688,9 @@ public QByteArrayView(java.nio.ByteBuffer data){ private native static void initialize_native(QByteArrayView instance, java.nio.Buffer data, Long[] pointerOut); private native static void purgeBuffer(long pointer); + /** + *

See QByteArrayView::QByteArrayView(QByteArray)

+ */ public QByteArrayView(QByteArray data){ super((QPrivateConstructor)null); if(data!=null) { @@ -11556,201 +11705,321 @@ public QByteArrayView(QByteArray data){ private Runnable purgeTask; + /** + *

See QByteArrayView::compare(QByteArray,Qt::CaseSensitivity)const

+ */ @io.qt.QtUninvokable public final int compare(io.qt.core.QByteArray a){ - return compare(new io.qt.core.QByteArrayView(a)); + return compare(new io.qt.core.QByteArrayView(a)); } + /** + *

See QByteArrayView::compare(QByteArray,Qt::CaseSensitivity)const

+ */ @io.qt.QtUninvokable public final int compare(io.qt.core.QByteArray a, io.qt.core.Qt.CaseSensitivity cs){ - return compare(new io.qt.core.QByteArrayView(a), cs); + return compare(new io.qt.core.QByteArrayView(a), cs); } + /** + *

See QByteArrayView::compare(const char*,Qt::CaseSensitivity)const

+ */ @io.qt.QtUninvokable public final int compare(byte[] a){ - return compare(new io.qt.core.QByteArrayView(a)); + return compare(new io.qt.core.QByteArrayView(a)); } + /** + *

See QByteArrayView::compare(const char*,Qt::CaseSensitivity)const

+ */ @io.qt.QtUninvokable public final int compare(byte[] a, io.qt.core.Qt.CaseSensitivity cs){ - return compare(new io.qt.core.QByteArrayView(a), cs); + return compare(new io.qt.core.QByteArrayView(a), cs); } + /** + *

See QByteArrayView::compare(const char*,Qt::CaseSensitivity)const

+ */ @io.qt.QtUninvokable public final int compare(java.nio.ByteBuffer a){ - return compare(new io.qt.core.QByteArrayView(a)); + return compare(new io.qt.core.QByteArrayView(a)); } + /** + *

See QByteArrayView::compare(const char*,Qt::CaseSensitivity)const

+ */ @io.qt.QtUninvokable public final int compare(java.nio.ByteBuffer a, io.qt.core.Qt.CaseSensitivity cs){ - return compare(new io.qt.core.QByteArrayView(a), cs); + return compare(new io.qt.core.QByteArrayView(a), cs); } + /** + *

See QByteArrayView::compare(const char*,Qt::CaseSensitivity)const

+ */ @io.qt.QtUninvokable public final int compare(String a){ - return compare(new io.qt.core.QByteArrayView(a)); + return compare(new io.qt.core.QByteArrayView(a)); } + /** + *

See QByteArrayView::compare(const char*,Qt::CaseSensitivity)const

+ */ @io.qt.QtUninvokable public final int compare(String a, io.qt.core.Qt.CaseSensitivity cs){ - return compare(new io.qt.core.QByteArrayView(a), cs); + return compare(new io.qt.core.QByteArrayView(a), cs); } + /** + *

See QByteArrayView::contains(QByteArray)const

+ */ @io.qt.QtUninvokable public final boolean contains(io.qt.core.QByteArray a){ return contains(new io.qt.core.QByteArrayView(a)); } + /** + *

See QByteArrayView::contains(const char*)const

+ */ @io.qt.QtUninvokable public final boolean contains(byte[] a){ return contains(new io.qt.core.QByteArrayView(a)); } + /** + *

See QByteArrayView::contains(const char*)const

+ */ @io.qt.QtUninvokable public final boolean contains(String a){ return contains(new io.qt.core.QByteArrayView(a)); } + /** + *

See QByteArrayView::contains(const char*)const

+ */ @io.qt.QtUninvokable public final boolean contains(java.nio.ByteBuffer a){ return contains(new io.qt.core.QByteArrayView(a)); } + /** + *

See QByteArrayView::QtUninvokable(QByteArray)const

+ */ @io.qt.QtUninvokable public final boolean endsWith(io.qt.core.QByteArray a){ return endsWith(new io.qt.core.QByteArrayView(a)); } + /** + *

See QByteArrayView::endsWith(const char*)const

+ */ @io.qt.QtUninvokable public final boolean endsWith(byte[] a){ return endsWith(new io.qt.core.QByteArrayView(a)); } + /** + *

See QByteArrayView::endsWith(const char*)const

+ */ @io.qt.QtUninvokable public final boolean endsWith(String a){ return endsWith(new io.qt.core.QByteArrayView(a)); } + /** + *

See QByteArrayView::endsWith(const char*)const

+ */ @io.qt.QtUninvokable public final boolean endsWith(java.nio.ByteBuffer a){ return endsWith(new io.qt.core.QByteArrayView(a)); } + /** + *

See QByteArrayView::startsWith(QByteArray)const

+ */ @io.qt.QtUninvokable public final boolean startsWith(io.qt.core.QByteArray a){ return startsWith(new io.qt.core.QByteArrayView(a)); } + /** + *

See QByteArrayView::startsWith(const char*)const

+ */ @io.qt.QtUninvokable public final boolean startsWith(byte[] a){ return startsWith(new io.qt.core.QByteArrayView(a)); } + /** + *

See QByteArrayView::startsWith(const char*)const

+ */ @io.qt.QtUninvokable public final boolean startsWith(String a){ return startsWith(new io.qt.core.QByteArrayView(a)); } + /** + *

See QByteArrayView::startsWith(const char*)const

+ */ @io.qt.QtUninvokable public final boolean startsWith(java.nio.ByteBuffer a){ return startsWith(new io.qt.core.QByteArrayView(a)); } + /** + *

See QByteArrayView::count(QByteArray)const

+ */ @io.qt.QtUninvokable public final long count(io.qt.core.QByteArray a){ return count(new io.qt.core.QByteArrayView(a)); } + /** + *

See QByteArrayView::count(const char*)const

+ */ @io.qt.QtUninvokable public final long count(byte[] a){ return count(new io.qt.core.QByteArrayView(a)); } + /** + *

See QByteArrayView::count(const char*)const

+ */ @io.qt.QtUninvokable public final long count(String a){ return count(new io.qt.core.QByteArrayView(a)); } + /** + *

See QByteArrayView::count(const char*)const

+ */ @io.qt.QtUninvokable public final long count(java.nio.ByteBuffer a){ return count(new io.qt.core.QByteArrayView(a)); } + /** + *

See QByteArrayView::indexOf(QByteArray)const

+ */ @io.qt.QtUninvokable public final long indexOf(io.qt.core.QByteArray a){ return indexOf(new io.qt.core.QByteArrayView(a)); } + /** + *

See QByteArrayView::indexOf(const char*)const

+ */ @io.qt.QtUninvokable public final long indexOf(byte[] a){ return indexOf(new io.qt.core.QByteArrayView(a)); } + /** + *

See QByteArrayView::indexOf(const char*)const

+ */ @io.qt.QtUninvokable public final long indexOf(String a){ return indexOf(new io.qt.core.QByteArrayView(a)); } + /** + *

See QByteArrayView::indexOf(const char*)const

+ */ @io.qt.QtUninvokable public final long indexOf(java.nio.ByteBuffer a){ return indexOf(new io.qt.core.QByteArrayView(a)); } + /** + *

See QByteArrayView::indexOf(QByteArray,qsizetype)const

+ */ @io.qt.QtUninvokable public final long indexOf(io.qt.core.QByteArray a, long from){ return indexOf(new io.qt.core.QByteArrayView(a), from); } + /** + *

See QByteArrayView::indexOf(const char*,qsizetype)const

+ */ @io.qt.QtUninvokable public final long indexOf(byte[] a, long from){ return indexOf(new io.qt.core.QByteArrayView(a), from); } + /** + *

See QByteArrayView::indexOf(const char*,qsizetype)const

+ */ @io.qt.QtUninvokable public final long indexOf(String a, long from){ return indexOf(new io.qt.core.QByteArrayView(a), from); } + /** + *

See QByteArrayView::indexOf(const char*,qsizetype)const

+ */ @io.qt.QtUninvokable public final long indexOf(java.nio.ByteBuffer a, long from){ return indexOf(new io.qt.core.QByteArrayView(a), from); } + /** + *

See QByteArrayView::lastIndexOf(QByteArray)const

+ */ @io.qt.QtUninvokable public final long lastIndexOf(io.qt.core.QByteArray a){ return lastIndexOf(new io.qt.core.QByteArrayView(a)); } + /** + *

See QByteArrayView::lastIndexOf(const char*)const

+ */ @io.qt.QtUninvokable public final long lastIndexOf(byte[] a){ return lastIndexOf(new io.qt.core.QByteArrayView(a)); } + /** + *

See QByteArrayView::lastIndexOf(const char*)const

+ */ @io.qt.QtUninvokable public final long lastIndexOf(String a){ return lastIndexOf(new io.qt.core.QByteArrayView(a)); } + /** + *

See QByteArrayView::lastIndexOf(const char*)const

+ */ @io.qt.QtUninvokable public final long lastIndexOf(java.nio.ByteBuffer a){ return lastIndexOf(new io.qt.core.QByteArrayView(a)); } + /** + *

See QByteArrayView::lastIndexOf(QByteArray,qsizetype)const

+ */ @io.qt.QtUninvokable public final long lastIndexOf(io.qt.core.QByteArray a, long from){ return lastIndexOf(new io.qt.core.QByteArrayView(a), from); } + /** + *

See QByteArrayView::lastIndexOf(const char*,qsizetype)const

+ */ @io.qt.QtUninvokable public final long lastIndexOf(byte[] a, long from){ return lastIndexOf(new io.qt.core.QByteArrayView(a), from); } + /** + *

See QByteArrayView::lastIndexOf(const char*,qsizetype)const

+ */ @io.qt.QtUninvokable public final long lastIndexOf(String a, long from){ return lastIndexOf(new io.qt.core.QByteArrayView(a), from); } + /** + *

See QByteArrayView::lastIndexOf(const char*,qsizetype)const

+ */ @io.qt.QtUninvokable public final long lastIndexOf(java.nio.ByteBuffer a, long from){ return lastIndexOf(new io.qt.core.QByteArrayView(a), from); @@ -11759,50 +12028,86 @@ public final long lastIndexOf(java.nio.ByteBuffer a, long from){ class QStringConverter___{ + /** + *

See QStringConverter::encodingForData(QByteArrayView,char16_t)

+ */ public static java.util.Optional encodingForHtml(io.qt.core.QByteArray data){ return encodingForHtml(new io.qt.core.QByteArrayView(data)); } + /** + *

See QStringConverter::encodingForData(QByteArrayView,char16_t)

+ */ public static java.util.Optional encodingForData(io.qt.core.QByteArray data){ return encodingForData(new io.qt.core.QByteArrayView(data)); } + /** + *

See QStringConverter::encodingForData(QByteArrayView,char16_t)

+ */ public static java.util.Optional encodingForData(io.qt.core.QByteArray data, char expectedFirstCharacter){ return encodingForData(new io.qt.core.QByteArrayView(data), expectedFirstCharacter); } + /** + *

See QStringConverter::encodingForHtml(QByteArrayView)

+ */ public static java.util.Optional encodingForHtml(byte[] data){ return encodingForHtml(new io.qt.core.QByteArrayView(data)); } + /** + *

See QStringConverter::encodingForData(QByteArrayView,char16_t)

+ */ public static java.util.Optional encodingForData(byte[] data){ return encodingForData(new io.qt.core.QByteArrayView(data)); } + /** + *

See QStringConverter::encodingForData(QByteArrayView,char16_t)

+ */ public static java.util.Optional encodingForData(byte[] data, char expectedFirstCharacter){ return encodingForData(new io.qt.core.QByteArrayView(data), expectedFirstCharacter); } + /** + *

See QStringConverter::encodingForHtml(QByteArrayView)

+ */ public static java.util.Optional encodingForHtml(String data){ return encodingForHtml(new io.qt.core.QByteArrayView(data)); } + /** + *

See QStringConverter::encodingForData(QByteArrayView,char16_t)

+ */ public static java.util.Optional encodingForData(String data){ return encodingForData(new io.qt.core.QByteArrayView(data)); } + /** + *

See QStringConverter::encodingForData(QByteArrayView,char16_t)

+ */ public static java.util.Optional encodingForData(String data, char expectedFirstCharacter){ return encodingForData(new io.qt.core.QByteArrayView(data), expectedFirstCharacter); } + /** + *

See QStringConverter::encodingForHtml(QByteArrayView)

+ */ public static java.util.Optional encodingForHtml(java.nio.ByteBuffer data){ return encodingForHtml(new io.qt.core.QByteArrayView(data)); } + /** + *

See QStringConverter::encodingForData(QByteArrayView,char16_t)

+ */ public static java.util.Optional encodingForData(java.nio.ByteBuffer data){ return encodingForData(new io.qt.core.QByteArrayView(data)); } + /** + *

See QStringConverter::encodingForData(QByteArrayView,char16_t)

+ */ public static java.util.Optional encodingForData(java.nio.ByteBuffer data, char expectedFirstCharacter){ return encodingForData(new io.qt.core.QByteArrayView(data), expectedFirstCharacter); } @@ -11811,18 +12116,30 @@ public static java.util.Optional encodingF class QUuid_63__{ + /** + *

See QUuid::fromRfc4122(QByteArrayView)

+ */ public static io.qt.core.QUuid fromRfc4122(io.qt.core.QByteArray data){ return fromRfc4122(new io.qt.core.QByteArrayView(data)); } + /** + *

See QUuid::fromRfc4122(QByteArrayView)

+ */ public static io.qt.core.QUuid fromRfc4122(byte[] data){ return fromRfc4122(new io.qt.core.QByteArrayView(data)); } + /** + *

See QUuid::fromRfc4122(QByteArrayView)

+ */ public static io.qt.core.QUuid fromRfc4122(String data){ return fromRfc4122(new io.qt.core.QByteArrayView(data)); } + /** + *

See QUuid::fromRfc4122(QByteArrayView)

+ */ public static io.qt.core.QUuid fromRfc4122(java.nio.ByteBuffer data){ return fromRfc4122(new io.qt.core.QByteArrayView(data)); } @@ -11830,8 +12147,18 @@ public static io.qt.core.QUuid fromRfc4122(java.nio.ByteBuffer data){ }// class class QIODevice_prefix__ extends QIODevice { + /** + * Creates QIODevice from direct buffer. The new I/O device is not open. + * @param buffer + * @return new new QIODevice or null if no direct buffer + */ public native static QIODevice fromDirectBuffer(java.nio.Buffer buffer); + /** + * Creates a new open QIODevice for reading from given InputStream + * @param stream + * @return new open read-only QIODevice + */ public static QIODevice fromInputStream(java.io.InputStream stream) { return new QIODevice() { { @@ -11945,6 +12272,11 @@ protected int readData(byte[] data) { }; } + /** + * Creates a new open QIODevice for writing to given InputStream + * @param stream + * @return new open write-only QIODevice + */ public static QIODevice fromOutputStream(java.io.OutputStream stream) { return new QIODevice() { { @@ -12046,15 +12378,6 @@ protected int readData(byte[] data) { } }// class -class QIODevice_cpp__{ -}// class - -class QTextCodec___ extends QTextCodec { -}// class - -class QBuffer___ extends QBuffer { -}// class - class QCalendar___ extends QCalendar { public static final int Unspecified = unspecified(); private static native int unspecified(); @@ -12099,6 +12422,9 @@ class QFutureInterfaceBase___ { class QtFuture___ { + /** + *

See QtFuture::connect(Sender *, Signal)

+ */ @io.qt.QtUninvokable public static QFuture connect(QMetaObject.AbstractPrivateSignal0 signal) { if(signal.containingObject() instanceof QObject) { @@ -12122,6 +12448,9 @@ public static QFuture connect(QMetaObject.AbstractPrivateSignal0 signal) { return null; } + /** + *

See QtFuture::connect(Sender *, Signal)

+ */ @io.qt.QtUninvokable public static QFuture connect(QMetaObject.AbstractPrivateSignal1 signal) { if(signal.containingObject() instanceof QObject) { @@ -12146,6 +12475,9 @@ public static QFuture connect(QMetaObject.AbstractPrivateSignal1 signa return null; } + /** + *

See QtFuture::connect(Sender *, Signal)

+ */ @io.qt.QtUninvokable public static QFuture> connect(QMetaObject.AbstractPrivateSignal2 signal) { if(signal.containingObject() instanceof QObject) { @@ -12170,6 +12502,9 @@ public static QFuture> connect(QMetaObject.AbstractPrivateSigna return null; } + /** + *

See QtFuture::connect(Sender *, Signal)

+ */ @io.qt.QtUninvokable public static QFuture connect(QMetaObject.AbstractPrivateSignal3 signal) { if(signal.containingObject() instanceof QObject) { @@ -12194,6 +12529,9 @@ public static QFuture connect(QMetaObject.AbstractPrivateSigna return null; } + /** + *

See QtFuture::connect(Sender *, Signal)

+ */ @io.qt.QtUninvokable public static QFuture connect(QMetaObject.AbstractPrivateSignal4 signal) { if(signal.containingObject() instanceof QObject) { @@ -12218,6 +12556,9 @@ public static QFuture connect(QMetaObject.AbstractPrivateSig return null; } + /** + *

See QtFuture::connect(Sender *, Signal)

+ */ @io.qt.QtUninvokable public static QFuture connect(QMetaObject.AbstractPrivateSignal5 signal) { if(signal.containingObject() instanceof QObject) { @@ -12242,6 +12583,9 @@ public static QFuture connect(QMetaObject.AbstractPrivateS return null; } + /** + *

See QtFuture::connect(Sender *, Signal)

+ */ @io.qt.QtUninvokable public static QFuture connect(QMetaObject.AbstractPrivateSignal6 signal) { if(signal.containingObject() instanceof QObject) { @@ -12266,6 +12610,9 @@ public static QFuture connect(QMetaObject.AbstractPrivat return null; } + /** + *

See QtFuture::connect(Sender *, Signal)

+ */ @io.qt.QtUninvokable public static QFuture connect(QMetaObject.AbstractPrivateSignal7 signal) { if(signal.containingObject() instanceof QObject) { @@ -12290,6 +12637,9 @@ public static QFuture connect(QMetaObject.AbstractPriv return null; } + /** + *

See QtFuture::connect(Sender *, Signal)

+ */ @io.qt.QtUninvokable public static QFuture connect(QMetaObject.AbstractPrivateSignal8 signal) { if(signal.containingObject() instanceof QObject) { @@ -12314,6 +12664,9 @@ public static QFuture connect(QMetaObject.AbstractPr return null; } + /** + *

See QtFuture::connect(Sender *, Signal)

+ */ @io.qt.QtUninvokable public static QFuture connect(QMetaObject.AbstractPrivateSignal9 signal) { if(signal.containingObject() instanceof QObject) { @@ -12341,6 +12694,22 @@ public static QFuture connect(QMetaObject.Abstract }// class class QtFuture_6_1__ { + /** + *

See QtFuture::makeReadyFuture(T)

+ */ + @io.qt.QtUninvokable + public static QFuture makeReadyFuture(T value) + { + QFutureInterface promise = new QFutureInterface<>(); + promise.reportStarted(); + promise.reportResult(value); + promise.reportFinished(); + return promise.future(); + } + + /** + *

See QtFuture::makeReadyFuture(QList<T>)

+ */ @io.qt.QtUninvokable public static QFuture makeReadyFuture(java.util.Collection values) { @@ -12351,6 +12720,9 @@ public static QFuture makeReadyFuture(java.util.Collection values) return promise.future(); } + /** + *

See QtFuture::makeReadyFuture()

+ */ @io.qt.QtUninvokable public static QFuture makeReadyFuture() { @@ -12360,6 +12732,9 @@ public static QFuture makeReadyFuture() return promise.future(); } + /** + *

See QtFuture::makeExceptionalFuture(QException)

+ */ @io.qt.QtUninvokable public static QFuture makeExceptionalFuture(Throwable exception) { @@ -12372,6 +12747,9 @@ public static QFuture makeExceptionalFuture(Throwable exception) }// class class QtFuture_6_3__ { + /** + *

See QtFuture::whenAny(Futures)

+ */ @io.qt.QtUninvokable public static QFuture> whenAny(QFuture... futures) { if(futures==null || futures.length==0) @@ -12390,6 +12768,9 @@ public static QFuture> whenAny(QFuture... futures) { return promise.future(); } + /** + *

See QtFuture::whenAny(Futures)

+ */ @io.qt.QtUninvokable public static QFuture> whenAny(java.util.Collection> futures) { if(futures==null || futures.size()==0) @@ -12408,6 +12789,9 @@ public static QFuture> whenAny(java.util.Collection> futur return promise.future(); } + /** + *

See QtFuture::whenAll(Futures)

+ */ @io.qt.QtUninvokable public static QFuture>> whenAll(QFuture... futures) { if(futures==null || futures.length==0) @@ -12431,6 +12815,9 @@ public static QFuture>> whenAll(QFuture... futures) { return promise.future(); } + /** + *

See QtFuture::whenAll(Futures)

+ */ @io.qt.QtUninvokable public static QFuture>> whenAll(java.util.Collection> futures) { if(futures==null || futures.size()==0) @@ -12455,10 +12842,6 @@ public static QFuture>> whenAll(java.util.Collection } }// class -class QXmlStreamWriter___ extends QXmlStreamWriter { -}// class - - class QJsonDocument___{ /** @@ -12554,16 +12937,82 @@ public final void setPropertyName(String propertyName) { }// class +class QMetaType_5__ extends QMetaType { + private static int metaTypeIdByName(java.lang.String typeName) {return type(typeName);} + + public static QMetaType fromObject(Object obj) { + if(obj==null) + return new QMetaType(QMetaType.Type.Nullptr); + Class objClass = io.qt.internal.QtJambiInternal.getClass(obj); + if(objClass==QList.class) { + return QMetaType.fromType(QList.class, ((QList)obj).elementMetaType()); + }else if(objClass==QLinkedList.class) { + return QMetaType.fromType(QLinkedList.class, ((QLinkedList)obj).elementMetaType()); + }else if(objClass==QVector.class) { + return QMetaType.fromType(QVector.class, ((QVector)obj).elementMetaType()); + }else if(objClass==QQueue.class) { + return QMetaType.fromType(QQueue.class, ((QQueue)obj).elementMetaType()); + }else if(objClass==QStack.class) { + return QMetaType.fromType(QStack.class, ((QStack)obj).elementMetaType()); + }else if(objClass==QSet.class) { + return QMetaType.fromType(QSet.class, ((QSet)obj).elementMetaType()); + }else if(objClass==QMultiMap.class) { + return QMetaType.fromType(QMultiMap.class, ((QMultiMap)obj).keyMetaType(), ((QMultiMap)obj).valueMetaType()); + }else if(objClass==QMap.class) { + return QMetaType.fromType(QMap.class, ((QMap)obj).keyMetaType(), ((QMap)obj).valueMetaType()); + }else if(objClass==QMultiHash.class) { + return QMetaType.fromType(QMultiHash.class, ((QMultiHash)obj).keyMetaType(), ((QMultiHash)obj).valueMetaType()); + }else if(objClass==QHash.class) { + return QMetaType.fromType(QHash.class, ((QHash)obj).keyMetaType(), ((QHash)obj).valueMetaType()); + } + return QMetaType.fromType(objClass); + } +}// class + class QMetaType_6__ extends QMetaType { - + private static int metaTypeIdByName(java.lang.String typeName) {return fromName(typeName).id();} + + public static QMetaType fromObject(Object obj) { + if(obj==null) + return new QMetaType(QMetaType.Type.Nullptr); + Class objClass = io.qt.internal.QtJambiInternal.getClass(obj); + if(objClass==QList.class) { + return QMetaType.fromType(QList.class, ((QList)obj).elementMetaType()); + }else if(objClass==QQueue.class) { + return QMetaType.fromType(QQueue.class, ((QQueue)obj).elementMetaType()); + }else if(objClass==QStack.class) { + return QMetaType.fromType(QStack.class, ((QStack)obj).elementMetaType()); + }else if(objClass==QSet.class) { + return QMetaType.fromType(QSet.class, ((QSet)obj).elementMetaType()); + }else if(objClass==QMultiMap.class) { + return QMetaType.fromType(QMultiMap.class, ((QMultiMap)obj).keyMetaType(), ((QMultiMap)obj).valueMetaType()); + }else if(objClass==QMap.class) { + return QMetaType.fromType(QMap.class, ((QMap)obj).keyMetaType(), ((QMap)obj).valueMetaType()); + }else if(objClass==QMultiHash.class) { + return QMetaType.fromType(QMultiHash.class, ((QMultiHash)obj).keyMetaType(), ((QMultiHash)obj).valueMetaType()); + }else if(objClass==QHash.class) { + return QMetaType.fromType(QHash.class, ((QHash)obj).keyMetaType(), ((QHash)obj).valueMetaType()); + } + return QMetaType.fromType(objClass); + } + + /** + *

See QMetaType::fromName(const char*)

+ */ public static io.qt.core.QMetaType fromName(String name){ return fromName(new io.qt.core.QByteArrayView(name)); } + /** + *

See QMetaType::fromName(QByteArray)

+ */ public static io.qt.core.QMetaType fromName(QByteArray name){ return fromName(new io.qt.core.QByteArrayView(name)); } + /** + *

See QMetaType::fromName(const char*)

+ */ public static io.qt.core.QMetaType fromName(byte[] name){ return fromName(new io.qt.core.QByteArrayView(name)); } @@ -12581,105 +13030,29 @@ public QMetaType(QMetaType.Type type){ } /** - *

Overloaded function for {@link #create(Object)} - * with copy = null.

- * @return new instance + * Returns the type name associated with this QMetaType as {@link String}. + * @return type name */ - public final Object create() { - return io.qt.internal.QtJambiInternal.createMetaType(id(), javaType(), null); + @Override + @io.qt.QtUninvokable + public final String toString() { + return ""+name(); } /** - *

Returns a copy of copy, assuming it is of the type that this QMetaType instance was created for.

- *

If copy is null, creates a default constructed instance.

- *

See QMetaType::create(int, const void *)

- * @param copy - * @return new instance + * @deprecated Use {@link #qRegisterMetaType(Class, QMetaType...)} instead. */ - public final Object create(Object copy) { - return io.qt.internal.QtJambiInternal.createMetaType(id(), javaType(), copy); - } - - /** - * Returns the type name associated with this QMetaType as {@link String}. - * @return type name - */ - @Override - @io.qt.QtUninvokable - public final String toString() { - return ""+name(); - } - - /** - *

Returns the QMetaType corresponding to the given class.

- *

If the class has never been registered as meta type UnknownType is returned.

- *

If given class is generic (e.g. {@link io.qt.core.QList}, {@link io.qt.core.QPair}, {@link io.qt.core.QMap}) - * specify the template instantiations to be used in the registered template type.

- *

See QMetaMethod::fromType<T>()

- * @param clazz the class to be registered - * @param instantiations optional instantiations for generics (templates) - * @return meta type ID - */ - public static QMetaType fromType(Class clazz, QMetaType... instantiations){ - return new QMetaType(registerMetaType(clazz, instantiations)); + @Deprecated + public static int registerMetaType(Class clazz, QMetaType... instantiations){ + return qRegisterMetaType(clazz, instantiations); } /** - *

Registers the given class as meta type. Returns the internal ID used by QMetaType.

- *

After a type has been registered, you can create and destroy objects of that type dynamically at run-time.

- *

If given class is generic (e.g. {@link io.qt.core.QList}, {@link io.qt.core.QPair}, {@link io.qt.core.QMap}) - * specify the template instantiations to be used in the registered template type.

- *

See qRegisterMetaType<T>()

- * @param clazz the class to be registered - * @param instantiations optional instantiations for generics (templates) - * @return meta type ID + * @deprecated Use {@link #qMetaTypeId(Class, QMetaType...)} instead. */ - public static int registerMetaType(Class clazz, QMetaType... instantiations){ - int registeredId = metaTypeId(clazz, instantiations); - if(registeredId!=0) - return registeredId; - Object[] typeParameters = clazz.getTypeParameters(); - if(typeParameters.length>0) { - if(typeParameters.length!=instantiations.length) { - throw new IllegalArgumentException("Number of instantiations does not correspond to number of type parameters."); - } - if(QList.class.isAssignableFrom(clazz)) { - if(instantiations[0].id()==Type.QString.value()) { - return Type.QStringList.value(); - }else if(instantiations[0].id()==Type.QByteArray.value()) { - return Type.QByteArrayList.value(); - }else{ - if(instantiations[0].id()==Type.QVariant.value()) { - return Type.QVariantList.value(); - } - } - }else if(QMap.class.isAssignableFrom(clazz)) { - if(instantiations[0].id()==Type.QString.value()) { - if(instantiations[1].id()==Type.QVariant.value()) { - return Type.QVariantMap.value(); - } - } - } - else if(QHash.class.isAssignableFrom(clazz)) { - if(instantiations[0].id()==Type.QString.value()) { - if(instantiations[1].id()==Type.QVariant.value()) { - return Type.QVariantHash.value(); - } - } - } - int[] _instantiations = new int[instantiations.length]; - for (int i = 0; i < _instantiations.length; i++) { - _instantiations[i] = instantiations[i].id(); - if(_instantiations[i]==0) - throw new IllegalArgumentException("Invalid instantiation."); - } - return io.qt.internal.QtJambiInternal.registerMetaType(clazz, _instantiations); - }else { - if(instantiations.length>0) { - throw new IllegalArgumentException("Type "+clazz.getName()+" does not accept instantiations."); - } - return io.qt.internal.QtJambiInternal.registerMetaType(clazz); - } + @Deprecated + public static int metaTypeId(Class clazz, QMetaType... instantiations){ + return qMetaTypeId(clazz, instantiations); } /** @@ -12745,93 +13118,24 @@ public static int registerDebugStreamOperator(DebugStreamFn debugstreamFn return debugstreamTypes[2]; } - /** - *

Returns the meta type id of goven class at compile time.

- *

If the class has never been registered as meta type UnknownType is returned.

- *

If given class is generic (e.g. {@link io.qt.core.QList}, {@link io.qt.core.QPair}, {@link io.qt.core.QMap}) - * specify the template instantiations to be used in the registered template type.

- *

See qMetaTypeId<T>()

- * @param clazz the class to be registered - * @param instantiations optional instantiations for generics (templates) - * @return meta type ID - */ - public static int metaTypeId(Class clazz, QMetaType... instantiations){ - if(clazz==null) - return QMetaType.Type.Nullptr.value(); - io.qt.QtUtilities.initializePackage(clazz); - Object[] typeParameters = clazz.getTypeParameters(); - if(typeParameters.length>0) { - if(typeParameters.length!=instantiations.length) { - if(instantiations.length==0) { - int result = io.qt.internal.QtJambiInternal.metaTypeId(clazz); - if(result!=0) - return result; - } - throw new IllegalArgumentException("Number of instantiations does not correspond to number of type parameters."); - } - for (QMetaType instantiation : instantiations) { - if(instantiation.id()==0) - throw new IllegalArgumentException("Invalid instantiation."); - } - switch(typeParameters.length) { - case 1: - if(instantiations[0].id()!=Type.Void.value()) { - if(clazz==java.util.Set.class) { - return type(String.format("QSet<%1$s>", instantiations[0].name())); - }else if(clazz==java.util.Queue.class) { - return type(String.format("QQueue<%1$s>", instantiations[0].name())); - }else if(clazz==java.util.Deque.class) { - return type(String.format("QStack<%1$s>", instantiations[0].name())); - }else if(clazz.isInterface() && java.util.List.class.isAssignableFrom(clazz)) { - return type(String.format("QList<%1$s>", instantiations[0].name())); - } - } - break; - case 2: - if(instantiations[0].id()!=QMetaType.Type.Void.value() && instantiations[1].id()!=QMetaType.Type.Void.value()) { - if(clazz==java.util.Map.class) { - return type(String.format("QHash<%1$s,%2$s>", instantiations[0].name(), instantiations[1].name())); - }else if(clazz==java.util.TreeMap.class) { - return type(String.format("QMap<%1$s,%2$s>", instantiations[0].name(), instantiations[1].name())); - }else if(clazz==java.util.HashMap.class) { - return type(String.format("QHash<%1$s>", instantiations[0].name(), instantiations[1].name())); - }else if(clazz.isInterface() && java.util.NavigableMap.class.isAssignableFrom(clazz)) { - return type(String.format("QMap<%1$s,%2$s>", instantiations[0].name(), instantiations[1].name())); - } - } - break; - } - if(io.qt.QtObjectInterface.class.isAssignableFrom(clazz)) { - String name = clazz.getSimpleName(); - QStringList _instantiations = new QStringList(); - for (QMetaType instantiation : instantiations) { - _instantiations.add(instantiation.name().toString()); - } - return type(String.format("%1$s<%2$s>", name, _instantiations.join(','))); - } - }else { - if(instantiations.length>0) { - throw new IllegalArgumentException("Type "+clazz.getName()+" does not accept instantiations."); - } - } - return io.qt.internal.QtJambiInternal.metaTypeId(clazz); - } + @io.qt.QtUninvokable + private static native Class javaType(long __this__nativeId); /** * Returns the Java class for this meta type. * @return java class */ + @io.qt.QtUninvokable public final Class javaType(){ - return io.qt.internal.QtJambiInternal.javaTypeForMetaTypeId(id()); + return javaType(QtJambi_LibraryUtilities.internal.nativeId(this)); } /** * Returns the Java class for the given meta type ID. * @return java class */ - public static Class javaType(int metaTypeId){ - return io.qt.internal.QtJambiInternal.javaTypeForMetaTypeId(metaTypeId); - } + @io.qt.QtUninvokable + public static native Class javaType(int metaTypeId); /** * Interface super type for all generic classes representing a QMetaType-registered but Java-unknown value type. @@ -13121,113 +13425,1478 @@ public boolean equals(Object obj) { } /** - * This class represents a QMetaType-registered but Java-unknown 64 Bit enumerator. + * This class represents a QMetaType-registered but Java-unknown 64 Bit enumerator. + */ + public final static class GenericLongEnumerator extends AbstractGenericEnumerator implements io.qt.QtLongEnumerator{ + @io.qt.NativeAccess + private GenericLongEnumerator(int type, int index, long value, String name) { + super(type, index, name); + this.value = value; + } + + private final long value; + + @Override + public long value() { + return value; + } + + @Override + public Class getDeclaringClass() { + return GenericLongEnumerator.class; + } + + String valueString() { + return Long.toString(value); + } + + @Override + public int hashCode() { + final int prime = 31; + int result = super.hashCode(); + result = prime * result + (int) (value ^ (value >>> 32)); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (!super.equals(obj)) + return false; + if (getClass() != obj.getClass()) + return false; + GenericLongEnumerator other = (GenericLongEnumerator) obj; + if (value != other.value) + return false; + return true; + } + } + + /** + * This class represents a QMetaType-registered but Java-unknown value type. + */ + public final static class GenericValue extends io.qt.QtObject implements Cloneable, GenericTypeInterface{ + @io.qt.NativeAccess + private GenericValue(QPrivateConstructor p) { super(p); } + + private native GenericValue clone(int type); + private native java.nio.ByteBuffer buffer(int type); + + @Override + public GenericValue clone() { + return clone(type); + } + + @io.qt.NativeAccess + private final int type = QMetaType.Type.UnknownType.value(); + + @io.qt.QtUninvokable + public QMetaType metaType() { + return new QMetaType(type); + } + + public java.nio.ByteBuffer buffer(){ + return buffer(type); + } + } + + /** + * This class represents a QMetaType-registered but Java-unknown object type. + */ + public final static class GenericObject extends io.qt.QtObject implements GenericTypeInterface{ + private GenericObject(QPrivateConstructor p) { super(p); } + + @io.qt.NativeAccess + private final int type = QMetaType.Type.UnknownType.value(); + + @io.qt.QtUninvokable + public QMetaType metaType() { + return new QMetaType(type); + } + } + + /** + * This class represents a QMetaType-registered but Java-unknown gadget type. + */ + public final static class GenericGadget extends io.qt.QtGadget implements GenericTypeInterface{ + private GenericGadget(QPrivateConstructor p) {super(p);} + + @io.qt.NativeAccess + private final int type = QMetaType.Type.UnknownType.value(); + + @io.qt.QtUninvokable + public QMetaType metaType() { + return new QMetaType(type); + } + } + + @SuppressWarnings("unchecked") + static T cast(Class javaType, Object object) { + if (object != null && javaType != null) { + if (javaType.isPrimitive()) { + if (javaType == boolean.class) + return (T)(object==null ? Boolean.FALSE : Boolean.class.cast(object)); + else if (javaType == char.class) + return (T)(object==null ? Character.valueOf('\0') : Character.class.cast(object)); + else { + if (javaType == int.class) + return (T)(Integer.valueOf(object==null ? 0 : Number.class.cast(object).intValue())); + else if (javaType == double.class) + return (T)(Double.valueOf(object==null ? 0.0 : Number.class.cast(object).doubleValue())); + else if (javaType == long.class) + return (T)(Long.valueOf(object==null ? 0L : Number.class.cast(object).longValue())); + else if (javaType == float.class) + return (T)(Float.valueOf(object==null ? 0.f : Number.class.cast(object).floatValue())); + else if (javaType == short.class) + return (T)(Short.valueOf(object==null ? (short)0 : Number.class.cast(object).shortValue())); + else if (javaType == byte.class) + return (T)(Byte.valueOf(object==null ? (byte)0 : Number.class.cast(object).byteValue())); + else + return null; + } + } else { + if (java.util.Collection.class.isAssignableFrom(javaType)) { + return (T)java.util.Collection.class.cast(object); + } else if (java.util.Map.class.isAssignableFrom(javaType)) { + return (T)java.util.Map.class.cast(object); + } else { + return javaType.cast(object); + } + } + } + return (T)object; + } +}// class + +class QVariant_5__ { + /** + * @deprecated Use {@link QDataStream#writeObject(Object)} instead. + */ + @Deprecated + public static void saveObject(QDataStream stream, Object object){ + saveObject(stream, object, null); + } + + /** + * @deprecated Use {@link QDataStream#writeObject(Object)} instead. + */ + @Deprecated + public static void saveObject(QDataStream stream, Object object, Boolean[] ok){ + QVariant variant = new QVariant(object); + int metaType = variant.userType(); + stream.append(metaType); + boolean isOk = QMetaType.save(stream, metaType, object); + if(ok!=null && ok.length>0) + ok[0] = isOk; + } + + /** + * @deprecated Use {@link QDataStream#readObject(Class, QMetaType...)} instead. + */ + @Deprecated + public static Object loadObject(QDataStream stream){ + return loadObject(stream, null); + } + + /** + * @deprecated Use {@link QDataStream#readObject(Class, QMetaType...)} instead. + */ + @Deprecated + public static Object loadObject(QDataStream stream, Boolean ok[]){ + java.util.Optional optional = QMetaType.load(stream, stream.readInt()); + if(ok!=null && ok.length>0) + ok[0] = optional.isPresent(); + return optional.orElse(null); + } + + /** + * Convenient static function for type conversion. + * @see {@link #convert(int)} + */ + public static Object convert(Object obj, int metaType) { + return convert(obj, metaType, null); + } + + /** + * Convenient static function for type conversion. + * @see {@link #convert(int)} + */ + public static Object convert(Object obj, int metaType, boolean ok[]) { + if(obj==null){ + if(ok!=null && ok.length>0) + ok[0] = true; + return QMetaType.create(metaType); + } + QVariant variant = new QVariant(obj); + if(obj!=null && variant.userType()==metaType) { + if(ok!=null && ok.length>0) + ok[0] = true; + return obj; + }else if(variant.userType()==metaType || variant.convert(metaType)) { + if(ok!=null && ok.length>0) + ok[0] = true; + return variant.value(); + }else { + if(ok!=null && ok.length>0) + ok[0] = false; + return null; + } + } + + /** + * Convenient static function for type conversion. + * @see {@link #convert(int)} + */ + public static Object convert(Object obj, QMetaType metaType) { + return convert(obj, metaType.id(), null); + } + + /** + * Convenient static function for type conversion. + * @see {@link #convert(int)} + */ + public static Object convert(Object obj, QMetaType metaType, boolean ok[]) { + return convert(obj, metaType.id(), ok); + } + + /** + * Convenient static function for type conversion. + * @see {@link #convert(int)} + */ + public static Object convert(Object obj, QMetaType.Type metaType) { + return convert(obj, metaType.value(), null); + } + + /** + * Convenient static function for type conversion. + * @see {@link #convert(int)} + */ + public static Object convert(Object obj, QMetaType.Type metaType, boolean ok[]) { + return convert(obj, metaType.value(), ok); + } + + /** + * Convenient static function for type conversion. + * @see {@link #convert(int)} + */ + public static Object convert(Object obj, Type metaType) { + return convert(obj, metaType.value(), null); + } + + /** + * Convenient static function for type conversion. + * @see {@link #convert(int)} + */ + public static Object convert(Object obj, Type metaType, boolean ok[]) { + return convert(obj, metaType.value(), ok); + } + + /** + *

See QVariant::canConvert(int)const

+ */ + @io.qt.QtUninvokable + public final boolean canConvert(io.qt.core.QMetaType.Type targetType){ + return canConvert(targetType.value()); + } + + /** + *

See QVariant::canConvert(int)const

+ */ + @io.qt.QtUninvokable + public final boolean canConvert(Type targetType){ + return canConvert(targetType.value()); + } + + /** + *

See QVariant::convert(int)

+ */ + public final boolean convert(Class cl, QMetaType...instantiations) { + return convert(QMetaType.fromType(cl, instantiations).id()); + } + + /** + *

See QVariant::QVariant(int,const void*)

+ */ + public QVariant(QMetaType.Type metaType){ + this(metaType.value(), null); + } + + /** + * Convenient static function for type conversion. + * @see {@link #canConvert(int)} + */ + @Deprecated + public static boolean canConvert(Object obj, int targetType) { + QMetaType objectType = QMetaType.fromObject(obj); + if(objectType.id()==targetType) + return true; + QVariant variant = new QVariant(objectType.id(), obj); + return variant.canConvert(targetType); + } + + /** + * Convenient static function for type conversion. + * @see {@link #canConvert(int)} + */ + public static boolean canConvert(Object obj, QMetaType.Type type) { + return canConvert(obj, type.value()); + } +}// class + +class QVariant_6__ { + + /** + *

See QVariant::QVariant(QMetaType,const void*)

+ */ + public QVariant(io.qt.core.QMetaType.Type type, java.lang.Object copy){ + this(new QMetaType(type), copy); + } + + /** + * @deprecated Use {@link QDataStream#writeObject(Object)} instead. + */ + @Deprecated + public static void saveObject(QDataStream stream, Object object){ + saveObject(stream, object, null); + } + + /** + * @deprecated Use {@link QDataStream#writeObject(Object)} instead. + */ + @Deprecated + public static void saveObject(QDataStream stream, Object object, Boolean[] ok){ + QVariant variant = new QVariant(object); + QMetaType metaType = variant.metaType(); + stream.append(metaType.id()); + boolean isOk = metaType.save(stream, object); + if(ok!=null && ok.length>0) + ok[0] = isOk; + } + + /** + * @deprecated Use {@link QDataStream#readObject(Class, QMetaType...)} instead. + */ + @Deprecated + public static Object loadObject(QDataStream stream){ + return loadObject(stream, null); + } + + /** + * @deprecated Use {@link QDataStream#readObject(Class, QMetaType...)} instead. + */ + @Deprecated + public static Object loadObject(QDataStream stream, Boolean ok[]){ + QMetaType metaType = new QMetaType(stream.readInt()); + java.util.Optional optional = metaType.load(stream); + if(ok!=null && ok.length>0) + ok[0] = optional.isPresent(); + return optional.orElse(null); + } + + /** + * Convenient static function for type conversion. + * @see {@link #convert(QMetaType)} + */ + public static Object convert(Object obj, QMetaType metaType) { + return convert(obj, metaType, null); + } + + /** + * Convenient static function for type conversion. + * @see {@link #convert(QMetaType)} + */ + public static Object convert(Object obj, QMetaType metaType, boolean ok[]) { + java.util.Objects.requireNonNull(metaType); + if(obj==null){ + if(ok!=null && ok.length>0) + ok[0] = true; + return metaType.create(); + } + QVariant variant = new QVariant(obj); + if(obj!=null && variant.metaType().equals(metaType)) { + if(ok!=null && ok.length>0) + ok[0] = true; + return obj; + }else if(variant.metaType().equals(metaType) || variant.convert(metaType)) { + if(ok!=null && ok.length>0) + ok[0] = true; + return variant.value(); + }else { + if(ok!=null && ok.length>0) + ok[0] = false; + return null; + } + } + + /** + * Convenient static function for type conversion. + * @see {@link #convert(int)} + */ + public static Object convert(Object obj, int metaType) { + return convert(obj, metaType, null); + } + + /** + * Convenient static function for type conversion. + * @see {@link #convert(QMetaType)} + */ + public static Object convert(Object obj, int metaType, boolean ok[]) { + return convert(obj, new QMetaType(metaType), ok); + } + + /** + *

See QVariant::canConvert(QMetaType)const

+ */ + @io.qt.QtUninvokable + public final boolean canConvert(io.qt.core.QMetaType.Type targetType){ + return canConvert(new QMetaType(targetType)); + } + + /** + * Convenient static function for type conversion. + * @see {@link #convert(QMetaType)} + */ + public static Object convert(Object obj, QMetaType.Type type) { + return convert(obj, new QMetaType(type)); + } + + /** + * Convenient static function for type conversion. + * @see {@link #convert(QMetaType)} + */ + public static Object convert(Object obj, QMetaType.Type type, boolean ok[]) { + return convert(obj, new QMetaType(type), ok); + } + + /** + *

See QVariant::canConvert(QMetaType)const

+ */ + @Deprecated + @io.qt.QtUninvokable + public final boolean canConvert(Type targetType){ + return canConvert(new QMetaType(targetType.value())); + } + + /** + * Convenient static function for type conversion. + * @see {@link #canConvert(QMetaType)} + */ + public static boolean canConvert(Object obj, QMetaType type) { + QMetaType objectType = QMetaType.fromObject(obj); + if(objectType.equals(type)) + return true; + QVariant variant = new QVariant(objectType, obj); + return variant.canConvert(type); + } + + /** + *

See QVariant::convert(QMetaType)

+ */ + public final boolean convert(Class cl, QMetaType...instantiations) { + return convert(QMetaType.fromType(cl, instantiations)); + } + + /** + *

See QVariant::QVariant(QMetaType,const void*)

+ */ + public QVariant(QMetaType.Type metaType){ + this(new QMetaType(metaType), null); + } + + /** + * Convenient static function for type conversion. + * @see {@link #canConvert(QMetaType)} + */ + public static boolean canConvert(Object obj, QMetaType.Type type) { + return canConvert(obj, new QMetaType(type)); + } + + /** + * Convenient static function for type conversion. + * @see {@link #canConvert(QMetaType)} + */ + @Deprecated + public static boolean canConvert(Object obj, int targetType) { + return canConvert(obj, new QMetaType(targetType)); + } +}// class + +class QVariant___ { + + static Class getComplexType(Class primitiveType) { + if (primitiveType == int.class) + return Integer.class; + else if (primitiveType == double.class) + return Double.class; + else if (primitiveType == long.class) + return Long.class; + else if (primitiveType == float.class) + return Float.class; + else if (primitiveType == short.class) + return Short.class; + else if (primitiveType == boolean.class) + return Boolean.class; + else if (primitiveType == char.class) + return Character.class; + else if (primitiveType == byte.class) + return Byte.class; + else + return primitiveType; + } + + /** + * Use {@link QMetaType#fromObject(Object)} instead. + */ + @Deprecated + public static int type(Object obj) { + return QMetaType.fromObject(obj).id(); + } + + /** + * Convenient static function for type conversion. + * @see {@link #convert(QMetaType)} + */ + @SuppressWarnings("unchecked") + public static T convert(Object obj, Class cl, QMetaType...instantiations) { + boolean[] ok = {false}; + Object result = convert(obj, QMetaType.fromType(cl, instantiations), ok); + Class _cl = cl.isPrimitive() ? getComplexType(cl) : cl; + return (ok[0] || _cl.isInstance(result)) ? (T)result : null; + } + + /** + * Use {@link #isValid()} instead. + */ + @Deprecated + public static boolean isValid(Object variant) { + return new QVariant(variant).isValid(); + } + + private static Class dbusVariant; + private static boolean dbusVariantResolved; + + private static boolean isDBusVariant(Object value, Class cl) { + if(!dbusVariantResolved) { + dbusVariantResolved = true; + Class _dbusVariant = null; + try { + _dbusVariant = Class.forName("io.qt.dbus.QDBusVariant"); + } catch (Exception e) { + } + dbusVariant = _dbusVariant; + } + return dbusVariant!=null && cl!=dbusVariant && dbusVariant.isInstance(value); + } + + /** + * Convenient static function for type conversion. + * @see {@link #canConvert(QMetaType)} + */ + public static > boolean canConvertToEnum(Class enumClass, Object obj) + { + if(enumClass.isInstance(obj)) { + return true; + }else { + QVariant variant = new QVariant(obj); + if(io.qt.QtEnumerator.class.isAssignableFrom(enumClass) + || io.qt.QtByteEnumerator.class.isAssignableFrom(enumClass) + || io.qt.QtShortEnumerator.class.isAssignableFrom(enumClass)) { + return variant.canConvert(QMetaType.Type.Int); + }else if(io.qt.QtLongEnumerator.class.isAssignableFrom(enumClass)) { + return variant.canConvert(QMetaType.Type.Long); + }else if (variant.canConvert(QMetaType.Type.Int)) { + boolean[] ok = {false}; + int value = variant.toInt(ok); + E[] constants = enumClass.getEnumConstants(); + return constants!=null && ok[0] && value> E toEnum(Class enumClass, Object obj) { + return toEnum(enumClass, obj, (boolean[])null); + } + + /** + * Convenient static function for type conversion. + * @see {@link #canConvert(QMetaType)} + */ + public static > E toEnum(Class enumClass, Object obj, boolean ok[]) { + if(enumClass.isInstance(obj)) { + try { + if(ok!=null && ok.length>0) + ok[0] = true; + return enumClass.cast(obj); + } catch (Exception e) { + } + }else { + QVariant variant = new QVariant(obj); + if(io.qt.QtEnumerator.class.isAssignableFrom(enumClass)) { + try { + java.lang.reflect.Method resolveMethod = enumClass.getMethod("resolve", int.class); + int value = variant.toInt(ok); + if(ok==null || ok[0]) + return enumClass.cast(resolveMethod.invoke(null, value)); + } catch (Exception e) { + } + }else if(io.qt.QtByteEnumerator.class.isAssignableFrom(enumClass)) { + try { + java.lang.reflect.Method resolveMethod = enumClass.getMethod("resolve", byte.class); + int value = variant.toInt(ok); + if(ok==null || ok[0]) + return enumClass.cast(resolveMethod.invoke(null, (byte)value)); + } catch (Exception e) { + } + }else if(io.qt.QtShortEnumerator.class.isAssignableFrom(enumClass)) { + try { + java.lang.reflect.Method resolveMethod = enumClass.getMethod("resolve", short.class); + int value = variant.toInt(ok); + if(ok==null || ok[0]) + return enumClass.cast(resolveMethod.invoke(null, value)); + } catch (Exception e) { + } + }else if(io.qt.QtLongEnumerator.class.isAssignableFrom(enumClass)) { + try { + java.lang.reflect.Method resolveMethod = enumClass.getMethod("resolve", long.class); + long value = variant.toLong(ok); + if(ok==null || ok[0]) + return enumClass.cast(resolveMethod.invoke(null, value)); + } catch (Exception e) { + } + }else{ + int value = variant.toInt(ok); + E[] constants = enumClass.getEnumConstants(); + if(constants!=null && (ok==null || value0) + ok[0] = false; + return null; + } + + /** + * Convenient static function for type conversion. + * @see {@link #convert(QMetaType)} + */ + public static > F toFlags(Class flagsClass, Object obj) { + return toFlags(flagsClass, obj, null); + } + + /** + * Convenient static function for type conversion. + * @see {@link #convert(QMetaType)} + */ + public static > F toFlags(Class flagsClass, Object obj, boolean ok[]) { + if(flagsClass.isInstance(obj)) { + try{ + if(ok!=null && ok.length>0) + ok[0] = true; + return flagsClass.cast(obj); + } catch (Exception e) { + } + }else { + QVariant variant = new QVariant(obj); + int value = variant.toInt(ok); + if(ok==null || ok[0]){ + try{ + return flagsClass.getConstructor(int.class).newInstance(value); + } catch (Exception e) { + } + } + } + if(ok!=null && ok.length>0) + ok[0] = false; + return null; + } + + /** + * Convenient static function for type conversion. + * @see {@link #canConvert(QMetaType)} + */ + public static boolean canConvertToDouble(Object obj){ + return obj instanceof Number || canConvert(obj, QMetaType.Type.Double); + } + + /** + * Convenient static function for type conversion. + * @see {@link #toDouble()} + */ + public static double toDouble(Object obj) { return toDouble(obj, null); } + + /** + * Convenient static function for type conversion. + * @see {@link #toDouble()} + */ + public static double toDouble(Object obj, boolean ok[]){ + if (obj==null) { + if(ok!=null && ok.length>0) + ok[0] = true; + return 0.0; + } else if (obj instanceof Number) { + if(ok!=null && ok.length>0) + ok[0] = true; + return ((Number) obj).doubleValue(); + } else { + QVariant variant = new QVariant(obj); + return variant.toDouble(ok); + } + } + + /** + * Convenient static function for type conversion. + * @see {@link #canConvert(QMetaType)} + */ + public static boolean canConvertToFloat(Object obj){ + return obj instanceof Number || canConvert(obj, QMetaType.Type.Float); + } + + /** + * Convenient static function for type conversion. + * @see {@link #toFloat()} + */ + public static float toFloat(Object obj) { return toFloat(obj, null); } + + /** + * Convenient static function for type conversion. + * @see {@link #toFloat()} + */ + public static float toFloat(Object obj, boolean ok[]){ + if (obj==null) { + if(ok!=null && ok.length>0) + ok[0] = true; + return 0.f; + } else if (obj instanceof Float) { + if(ok!=null && ok.length>0) + ok[0] = true; + return (Float)obj; + } else if (obj instanceof Number) { + if(ok!=null && ok.length>0) + ok[0] = true; + return ((Number) obj).floatValue(); + } else { + QVariant variant = new QVariant(obj); + return variant.toFloat(ok); + } + } + + /** + * Convenient static function for type conversion. + * @see {@link #canConvert(QMetaType)} + */ + public static boolean canConvertToString(Object obj){ + return true; + } + + /** + * Convenient static function for type conversion. + * @see {@link #toString()} + */ + public static String toString(Object obj){ + return obj==null ? new String() : obj.toString(); + } + + /** + * Convenient static function for type conversion. + * @see {@link #canConvert(QMetaType)} + */ + public static boolean canConvertToBoolean(Object obj){ + return obj instanceof Boolean || obj instanceof Number || canConvert(obj, QMetaType.Type.Bool); + } + + /** + * Convenient static function for type conversion. + * @see {@link #toBoolean()} + */ + public static boolean toBoolean(Object obj){ + if (obj==null) { + return false; + } else if (obj instanceof Boolean) { + return (Boolean) obj; + } else if (obj instanceof Number) { + return ((Number) obj).intValue() != 0; + } else { + return new QVariant(obj).toBoolean(); + } + } + + /** + * Convenient static function for type conversion. + * @see {@link #canConvert(QMetaType)} + */ + public static boolean canConvertToByteArray(Object obj){ + return obj instanceof QByteArray || canConvert(obj, QMetaType.Type.QByteArray); + } + + /** + * Convenient static function for type conversion. + * @see {@link #toByteArray()} + */ + public static QByteArray toByteArray(Object obj) + { + if(obj instanceof QByteArray) { + if(!((io.qt.QtObjectInterface)obj).isDisposed()) + return (QByteArray)obj; + }else if(obj!=null){ + Object returned = convert(obj, QMetaType.Type.QByteArray); + if(returned instanceof QByteArray) { + return (QByteArray)returned; + } + } + return new QByteArray(); + } + + /** + * Convenient static function for type conversion. + * @see {@link #canConvert(QMetaType)} + */ + public static boolean canConvertToBitArray(Object obj) + { + return obj instanceof QBitArray || canConvert(obj, QMetaType.Type.QBitArray); + } + + /** + * Convenient static function for type conversion. + * @see {@link #toBitArray()} + */ + public static QBitArray toBitArray(Object obj) + { + if(obj instanceof QBitArray) { + if(!((io.qt.QtObjectInterface)obj).isDisposed()) + return (QBitArray)obj; + }else if(obj!=null){ + Object returned = convert(obj, QMetaType.Type.QBitArray); + if(returned instanceof QBitArray) { + return (QBitArray)returned; + } + } + return new QBitArray(); + } + + /** + * Convenient static function for type conversion. + * @see {@link #canConvert(QMetaType)} + */ + public static boolean canConvertToChar(Object obj) + { + return obj instanceof Character || canConvert(obj, QMetaType.Type.QChar); + } + + /** + * Convenient static function for type conversion. + * @see {@link #toChar()} + */ + public static char toChar(Object obj) + { + if(obj==null) + return 0; + else if (obj instanceof Character) + return (Character) obj; + else + return new QVariant(obj).toChar(); + } + + /** + * Convenient static function for type conversion. + * @see {@link #canConvert(QMetaType)} + */ + public static boolean canConvertToDate(Object obj) + { + return obj instanceof QDate || canConvert(obj, QMetaType.Type.QDate); + } + + /** + * Convenient static function for type conversion. + * @see {@link #toDate()} + */ + public static QDate toDate(Object obj) + { + if(obj instanceof QDate) { + if(!((io.qt.QtObjectInterface)obj).isDisposed()) + return (QDate)obj; + }else if(obj!=null){ + Object returned = convert(obj, QMetaType.Type.QDate); + if(returned instanceof QDate) { + return (QDate)returned; + } + } + return new QDate(); + } + + /** + * Convenient static function for type conversion. + * @see {@link #canConvert(QMetaType)} + */ + public static boolean canConvertToDateTime(Object obj) + { + return obj instanceof QDateTime || canConvert(obj, QMetaType.Type.QDateTime); + } + + /** + * Convenient static function for type conversion. + * @see {@link #toDateTime()} + */ + public static QDateTime toDateTime(Object obj) + { + if(obj instanceof QDateTime) { + if(!((io.qt.QtObjectInterface)obj).isDisposed()) + return (QDateTime)obj; + }else if(obj!=null){ + Object returned = convert(obj, QMetaType.Type.QDateTime); + if(returned instanceof QDateTime) { + return (QDateTime)returned; + } + } + return new QDateTime(); + } + + /** + * Convenient static function for type conversion. + * @see {@link #canConvert(QMetaType)} + */ + public static boolean canConvertToInt(Object obj) + { + return obj instanceof Number || canConvert(obj, QMetaType.Type.Int); + } + + /** + * Convenient static function for type conversion. + * @see {@link #toInt()} + */ + public static int toInt(Object obj) { return toInt(obj, null); } + + /** + * Convenient static function for type conversion. + * @see {@link #toFloat()} + */ + public static int toInt(Object obj, boolean ok[]){ + if(obj==null) { + if(ok!=null && ok.length>0) + ok[0] = true; + return 0; + }else if (obj instanceof Number) { + if(ok!=null && ok.length>0) + ok[0] = true; + return ((Number) obj).intValue(); + } else { + QVariant variant = new QVariant(obj); + return variant.toInt(ok); + } + } + + /** + * Convenient static function for type conversion. + * @see {@link #canConvert(QMetaType)} + */ + public static boolean canConvertToLine(Object obj) + { + return obj instanceof QLine || canConvert(obj, QMetaType.Type.QLine); + } + + /** + * Convenient static function for type conversion. + * @see {@link #toLine()} + */ + public static QLine toLine(Object obj) + { + if(obj instanceof QLine) { + if(!((io.qt.QtObjectInterface)obj).isDisposed()) + return (QLine)obj; + }else if(obj!=null){ + Object returned = convert(obj, QMetaType.Type.QLine); + if(returned instanceof QLine) { + return (QLine)returned; + } + } + return new QLine(); + } + + /** + * Convenient static function for type conversion. + * @see {@link #canConvert(QMetaType)} + */ + public static boolean canConvertToLineF(Object obj) + { + return obj instanceof QLineF || canConvert(obj, QMetaType.Type.QLineF); + } + + /** + * Convenient static function for type conversion. + * @see {@link #toLineF()} + */ + public static QLineF toLineF(Object obj) + { + if(obj instanceof QLineF) { + if(!((io.qt.QtObjectInterface)obj).isDisposed()) + return (QLineF)obj; + }else if(obj!=null){ + Object returned = convert(obj, QMetaType.Type.QLineF); + if(returned instanceof QLineF) { + return (QLineF)returned; + } + } + return new QLineF(); + } + + /** + * Convenient static function for type conversion. + * @see {@link #canConvert(QMetaType)} + */ + public static boolean canConvertToLocale(Object obj) + { + return obj instanceof QLocale || canConvert(obj, QMetaType.Type.QLocale); + } + + /** + * Convenient static function for type conversion. + * @see {@link #toLocale()} + */ + public static QLocale toLocale(Object obj) + { + if(obj instanceof QLocale) { + if(!((io.qt.QtObjectInterface)obj).isDisposed()) + return (QLocale)obj; + }else if(obj!=null){ + Object returned = convert(obj, QMetaType.Type.QLocale); + if(returned instanceof QLocale) { + return (QLocale)returned; + } + } + return new QLocale(); + } + + /** + * Convenient static function for type conversion. + * @see {@link #canConvert(QMetaType)} + */ + public static boolean canConvertToPoint(Object obj) + { + return obj instanceof QPoint || canConvert(obj, QMetaType.Type.QPoint); + } + + /** + * Convenient static function for type conversion. + * @see {@link #toPoint()} + */ + public static QPoint toPoint(Object obj) + { + if(obj instanceof QPoint) { + if(!((io.qt.QtObjectInterface)obj).isDisposed()) + return (QPoint)obj; + }else if(obj!=null){ + Object returned = convert(obj, QMetaType.Type.QPoint); + if(returned instanceof QPoint) { + return (QPoint)returned; + } + } + return new QPoint(); + } + + /** + * Convenient static function for type conversion. + * @see {@link #canConvert(QMetaType)} + */ + public static boolean canConvertToPointF(Object obj) + { + return obj instanceof QPointF || canConvert(obj, QMetaType.Type.QPointF); + } + + /** + * Convenient static function for type conversion. + * @see {@link #toPointF()} + */ + public static QPointF toPointF(Object obj) + { + if(obj instanceof QPointF) { + if(!((io.qt.QtObjectInterface)obj).isDisposed()) + return (QPointF)obj; + }else if(obj!=null){ + Object returned = convert(obj, QMetaType.Type.QPointF); + if(returned instanceof QPointF) { + return (QPointF)returned; + } + } + return new QPointF(); + } + + /** + * Convenient static function for type conversion. + * @see {@link #canConvert(QMetaType)} + */ + public static boolean canConvertToRect(Object obj) + { + return obj instanceof QRect || canConvert(obj, QMetaType.Type.QRect); + } + + /** + * Convenient static function for type conversion. + * @see {@link #toRect()} + */ + public static QRect toRect(Object obj) + { + if(obj instanceof QRect) { + if(!((io.qt.QtObjectInterface)obj).isDisposed()) + return (QRect)obj; + }else if(obj!=null){ + Object returned = convert(obj, QMetaType.Type.QRect); + if(returned instanceof QRect) { + return (QRect)returned; + } + } + return new QRect(); + } + + /** + * Convenient static function for type conversion. + * @see {@link #canConvert(QMetaType)} + */ + public static boolean canConvertToRectF(Object obj) + { + return obj instanceof QRectF || canConvert(obj, QMetaType.Type.QRectF); + } + + /** + * Convenient static function for type conversion. + * @see {@link #toRectF()} + */ + public static QRectF toRectF(Object obj) + { + if(obj instanceof QRectF) { + if(!((io.qt.QtObjectInterface)obj).isDisposed()) + return (QRectF)obj; + }else if(obj!=null){ + Object returned = convert(obj, QMetaType.Type.QRectF); + if(returned instanceof QRectF) { + return (QRectF)returned; + } + } + return new QRectF(); + } + + /** + * Convenient static function for type conversion. + * @see {@link #canConvert(QMetaType)} + */ + public static boolean canConvertToRegularExpression(Object obj) + { + return obj instanceof QRegularExpression || canConvert(obj, QMetaType.Type.QRegularExpression); + } + + /** + * Convenient static function for type conversion. + * @see {@link #toRegularExpression()} + */ + public static QRegularExpression toRegularExpression(Object obj) + { + if(obj instanceof QRegularExpression) { + if(!((io.qt.QtObjectInterface)obj).isDisposed()) + return (QRegularExpression)obj; + }else if(obj!=null){ + Object returned = convert(obj, QMetaType.Type.QRegularExpression); + if(returned instanceof QRegularExpression) { + return (QRegularExpression)returned; + } + } + return new QRegularExpression(); + } + + /** + * Convenient static function for type conversion. + * @see {@link #canConvert(QMetaType)} + */ + public static boolean canConvertToSize(Object obj) + { + return obj instanceof QSize || canConvert(obj, QMetaType.Type.QSize); + } + + /** + * Convenient static function for type conversion. + * @see {@link #toSize()} + */ + public static QSize toSize(Object obj) + { + if(obj instanceof QSize) { + if(!((io.qt.QtObjectInterface)obj).isDisposed()) + return (QSize)obj; + }else if(obj!=null){ + Object returned = convert(obj, QMetaType.Type.QSize); + if(returned instanceof QSize) { + return (QSize)returned; + } + } + return new QSize(); + } + + /** + * Convenient static function for type conversion. + * @see {@link #canConvert(QMetaType)} + */ + public static boolean canConvertToSizeF(Object obj) + { + return obj instanceof QSizeF || canConvert(obj, QMetaType.Type.QSizeF); + } + + /** + * Convenient static function for type conversion. + * @see {@link #toSizeF()} + */ + public static QSizeF toSizeF(Object obj) + { + if(obj instanceof QSizeF) { + if(!((io.qt.QtObjectInterface)obj).isDisposed()) + return (QSizeF)obj; + }else if(obj!=null){ + Object returned = convert(obj, QMetaType.Type.QSizeF); + if(returned instanceof QSizeF) { + return (QSizeF)returned; + } + } + return new QSizeF(); + } + + /** + * Convenient static function for type conversion. + * @see {@link #canConvert(QMetaType)} + */ + public static boolean canConvertToTime(Object obj) + { + return obj instanceof QTime || canConvert(obj, QMetaType.Type.QTime); + } + + /** + * Convenient static function for type conversion. + * @see {@link #toTime()} */ - public final static class GenericLongEnumerator extends AbstractGenericEnumerator implements io.qt.QtLongEnumerator{ - @io.qt.NativeAccess - private GenericLongEnumerator(int type, int index, long value, String name) { - super(type, index, name); - this.value = value; - } - - private final long value; - - @Override - public long value() { - return value; + public static QTime toTime(Object obj) + { + if(obj instanceof QTime) { + if(!((io.qt.QtObjectInterface)obj).isDisposed()) + return (QTime)obj; + }else if(obj!=null){ + Object returned = convert(obj, QMetaType.Type.QTime); + if(returned instanceof QTime) { + return (QTime)returned; + } } + return new QTime(); + } + + /** + * Convenient static function for type conversion. + * @see {@link #canConvert(QMetaType)} + */ + public static boolean canConvertToLong(Object obj) + { + return obj instanceof Number || canConvert(obj, QMetaType.Type.LongLong); + } - @Override - public Class getDeclaringClass() { - return GenericLongEnumerator.class; + /** + * Convenient static function for type conversion. + * @see {@link #toLong()} + */ + public static long toLong(Object obj, boolean ok[]){ + if(obj==null) { + if(ok!=null && ok.length>0) + ok[0] = true; + return 0L; + }else if (obj instanceof Number) { + if(ok!=null && ok.length>0) + ok[0] = true; + return ((Number) obj).longValue(); + } else { + QVariant variant = new QVariant(obj); + return variant.toLong(ok); } + } + + /** + * Convenient static function for type conversion. + * @see {@link #canConvert(QMetaType)} + */ + public static boolean canConvertToList(Object obj) + { + return obj instanceof java.util.Collection || canConvert(obj, QMetaType.Type.QVariantList); + } - String valueString() { - return Long.toString(value); + /** + * Convenient static function for type conversion. + * @see {@link #toList()} + */ + @SuppressWarnings("unchecked") + public static QList toList(Object obj) + { + if (obj instanceof java.util.Collection){ + if (obj instanceof QList && ((QList)obj).elementMetaType().javaType()==Object.class) + return (QList)obj; + QList list = QList.createVariantList(); + list.addAll((java.util.Collection) obj); + return list; + }else if(obj!=null) { + Object returned = convert(obj, QMetaType.Type.QVariantList); + if(returned instanceof QList) { + return (QList)returned; + } } + return QList.createVariantList(); + } - @Override - public int hashCode() { - final int prime = 31; - int result = super.hashCode(); - result = prime * result + (int) (value ^ (value >>> 32)); - return result; + /** + * Convenient static function for type conversion. + * @see {@link #canConvert(QMetaType)} + */ + public static boolean canConvertToStringList(Object obj) + { + return obj instanceof java.util.Collection || canConvert(obj, QMetaType.Type.QStringList); + } + + /** + * Convenient static function for type conversion. + * @see {@link #toStringList()} + */ + public static QStringList toStringList(Object obj) + { + if (obj instanceof java.util.Collection){ + if (obj instanceof QStringList) { + return (QStringList)obj; + } + QStringList list = new QStringList(); + for(Object entry : (java.util.Collection)obj) { + list.add(entry==null ? null : entry.toString()); + } + return list; + }else if(obj!=null) { + Object returned = convert(obj, QMetaType.Type.QStringList); + if(returned instanceof QStringList) { + return (QStringList)returned; + } } + return new QStringList(); + } - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (!super.equals(obj)) - return false; - if (getClass() != obj.getClass()) - return false; - GenericLongEnumerator other = (GenericLongEnumerator) obj; - if (value != other.value) - return false; - return true; - } + /** + * Convenient static function for type conversion. + * @see {@link #canConvert(QMetaType)} + */ + public static boolean canConvertToCollection(Object obj) + { + return obj instanceof java.util.Collection || canConvert(obj, QMetaType.Type.QVariantList); } /** - * This class represents a QMetaType-registered but Java-unknown value type. + * Convenient static function for type conversion. + * @see {@link #toList()} */ - public final static class GenericValue extends io.qt.QtObject implements Cloneable, GenericTypeInterface{ - @io.qt.NativeAccess - private GenericValue(QPrivateConstructor p) { super(p); } - - private native GenericValue clone(int type); - private native java.nio.ByteBuffer buffer(int type); - - @Override - public GenericValue clone() { - return clone(type); + public static java.util.Collection toCollection(Object obj) + { + if (obj instanceof java.util.Collection){ + return (java.util.Collection)obj; + }else if(obj!=null) { + Object returned = convert(obj, QMetaType.Type.QVariantList); + if(returned instanceof java.util.Collection) { + return (java.util.Collection)returned; + } } + return QList.createVariantList(); + } - @io.qt.NativeAccess - private final int type = QMetaType.Type.UnknownType.value(); - - @io.qt.QtUninvokable - public QMetaType metaType() { - return new QMetaType(type); - } - - public java.nio.ByteBuffer buffer(){ - return buffer(type); - } + /** + * Convenient static function for type conversion. + * @see {@link #canConvert(QMetaType)} + */ + public static boolean canConvertToMap(Object obj) + { + return obj instanceof java.util.Map || canConvert(obj, QMetaType.Type.QVariantHash); } - + /** - * This class represents a QMetaType-registered but Java-unknown object type. + * Convenient static function for type conversion. + * @see {@link #toHash()} */ - public final static class GenericObject extends io.qt.QtObject implements GenericTypeInterface{ - private GenericObject(QPrivateConstructor p) { super(p); } - - @io.qt.NativeAccess - private final int type = QMetaType.Type.UnknownType.value(); - - @io.qt.QtUninvokable - public QMetaType metaType() { - return new QMetaType(type); + @SuppressWarnings("unchecked") + public static QHash toHash(Object obj) + { + if (obj instanceof java.util.Map) { + if(obj instanceof QHash + && ((QHash)obj).keyMetaType().javaType()==String.class + && ((QHash)obj).valueMetaType().javaType()==Object.class) { + return (QHash) obj; + } + java.util.Map otherMap = (java.util.Map) obj; + QHash map = QHash.createVariantHash(); + for (java.util.Map.Entry e : otherMap.entrySet()) + map.put(e.getKey().toString(), e.getValue()); + return map; + }else if(obj!=null) { + Object returned = convert(obj, QMetaType.Type.QVariantHash); + if(returned instanceof QHash) { + return (QHash)returned; + } } + return QHash.createVariantHash(); } - + /** - * This class represents a QMetaType-registered but Java-unknown gadget type. + * Convenient static function for type conversion. + * @see {@link #toMap()} */ - public final static class GenericGadget extends io.qt.QtGadget implements GenericTypeInterface{ - private GenericGadget(QPrivateConstructor p) {super(p);} - - @io.qt.NativeAccess - private final int type = QMetaType.Type.UnknownType.value(); - - @io.qt.QtUninvokable - public QMetaType metaType() { - return new QMetaType(type); + @SuppressWarnings("unchecked") + public static QMap toMap(Object obj) + { + if (obj instanceof java.util.Map) { + if(obj instanceof QMap + && ((QMap)obj).keyMetaType().javaType()==String.class + && ((QMap)obj).valueMetaType().javaType()==Object.class) { + return (QMap) obj; + } + java.util.Map otherMap = (java.util.Map) obj; + QMap map = QMap.createVariantMap(); + for (java.util.Map.Entry e : otherMap.entrySet()) + map.put(e.getKey().toString(), e.getValue()); + return map; + }else if(obj!=null) { + Object returned = convert(obj, QMetaType.Type.QVariantHash); + if(returned instanceof QMap) { + return (QMap)returned; + } } + return QMap.createVariantMap(); } }// class +class QPartialOrdering___ { + /** + *

See QPartialOrdering::Equivalent

+ */ + public static final int Equivalent = 0; + /** + *

See QPartialOrdering::Less

+ */ + public static final int Greater = 1; + /** + *

See QPartialOrdering::Greater

+ */ + public static final int Less = -1; + /** + *

See QPartialOrdering::Unordered

+ */ + public static final int Unordered = -127; +}// class + class QMetaMethod___ { private Class returnClassType; private java.util.List> parameterClassTypes; @@ -13392,6 +15061,9 @@ public final Object invokeOnGadget(Object object, Object... args) throws Illegal @io.qt.QtUninvokable private native Object invoke_native(Object object, Class[] argClassTypes, Object[] args); + /** + * Returns this meta method as Java reflection method. + */ @io.qt.QtUninvokable public final java.lang.reflect.Method toReflectedMethod() { if(isValid()) { @@ -13418,6 +15090,9 @@ public final java.lang.reflect.Method toReflectedMethod() { @io.qt.QtUninvokable private native java.lang.reflect.AccessibleObject toReflected(); + /** + * Returns this meta method as Java reflection constructor. + */ @io.qt.QtUninvokable public final java.lang.reflect.Constructor toReflectedConstructor() { if(isValid()) { @@ -13438,11 +15113,14 @@ public final java.lang.reflect.Constructor toReflectedConstructor() { return null; } + /** + * Returns this meta method as signal object. + */ @io.qt.QtUninvokable public final QMetaObject.AbstractSignal toSignal(QObject sender) { if(isValid()) { if(methodType()==MethodType.Signal) { - QtJambi_LibraryUtilities.internal.checkedNativeId(java.util.Objects.requireNonNull(sender)); + QtJambi_LibraryUtilities.internal.checkedNativeId(java.util.Objects.requireNonNull(sender)); return io.qt.internal.QtJambiInternal.findSignal(sender, this); }else { throw new IllegalArgumentException("Method " + this + " is not a signal."); @@ -13451,6 +15129,9 @@ public final QMetaObject.AbstractSignal toSignal(QObject sender) { return null; } + /** + * Returns corresponding meta method for given signal object. + */ @io.qt.QtUninvokable public static QMetaMethod fromSignal(QMetaObject.Signal signal) { QMetaMethod method = null; @@ -13466,6 +15147,9 @@ public static QMetaMethod fromSignal(QMetaObject.Signal signal) { return method; } + /** + * Returns corresponding meta method for given reflection constructor. + */ public static QMetaMethod fromReflectedConstructor(java.lang.reflect.Constructor constructor) { QMetaObject mo = QMetaObject.forType(constructor.getDeclaringClass()); if(mo!=null) { @@ -13474,6 +15158,9 @@ public static QMetaMethod fromReflectedConstructor(java.lang.reflect.Constructor return null; } + /** + * Returns corresponding meta method for given reflection method. + */ public static QMetaMethod fromReflectedMethod(java.lang.reflect.Method method) { Class declaringClass = method.getDeclaringClass(); QMetaMethod qmethod = null; @@ -13483,8 +15170,8 @@ public static QMetaMethod fromReflectedMethod(java.lang.reflect.Method method) { qmethod = methodFromMethod(mo.metaObjectPointer, ok); if(qmethod==null && ok[0]==null) { qmethod = mo.method(method.getName(), method.getParameterTypes()); - if(qmethod!=null && qmethod.methodType()==MethodType.Signal) { - qmethod = null; + if(qmethod!=null && qmethod.methodType()==MethodType.Signal) { + qmethod = null; } } } @@ -13506,82 +15193,142 @@ private static QMetaMethod fromMethodImpl(QMetaObject.AbstractSlot method) { return null; } + /** + * Returns corresponding meta method for given method handle. + */ public static QMetaMethod fromMethod(QMetaObject.Method0 method) { return fromMethodImpl(method); } + /** + * Returns corresponding meta method for given method handle. + */ public static QMetaMethod fromMethod(QMetaObject.Method1 method) { return fromMethodImpl(method); } + /** + * Returns corresponding meta method for given method handle. + */ public static QMetaMethod fromMethod(QMetaObject.Method2 method) { return fromMethodImpl(method); } + /** + * Returns corresponding meta method for given method handle. + */ public static QMetaMethod fromMethod(QMetaObject.Method3 method) { return fromMethodImpl(method); } + /** + * Returns corresponding meta method for given method handle. + */ public static QMetaMethod fromMethod(QMetaObject.Method4 method) { return fromMethodImpl(method); } + /** + * Returns corresponding meta method for given method handle. + */ public static QMetaMethod fromMethod(QMetaObject.Method5 method) { return fromMethodImpl(method); } + /** + * Returns corresponding meta method for given method handle. + */ public static QMetaMethod fromMethod(QMetaObject.Method6 method) { return fromMethodImpl(method); } + /** + * Returns corresponding meta method for given method handle. + */ public static QMetaMethod fromMethod(QMetaObject.Method7 method) { return fromMethodImpl(method); } + /** + * Returns corresponding meta method for given method handle. + */ public static QMetaMethod fromMethod(QMetaObject.Method8 method) { return fromMethodImpl(method); } + /** + * Returns corresponding meta method for given method handle. + */ public static QMetaMethod fromMethod(QMetaObject.Method9 method) { return fromMethodImpl(method); } + /** + * Returns corresponding meta method for given method handle. + */ public static QMetaMethod fromMethod(QMetaObject.Slot0 method) { return fromMethodImpl(method); } + /** + * Returns corresponding meta method for given method handle. + */ public static QMetaMethod fromMethod(QMetaObject.Slot1 method) { return fromMethodImpl(method); } + /** + * Returns corresponding meta method for given method handle. + */ public static QMetaMethod fromMethod(QMetaObject.Slot2 method) { return fromMethodImpl(method); } + /** + * Returns corresponding meta method for given method handle. + */ public static QMetaMethod fromMethod(QMetaObject.Slot3 method) { return fromMethodImpl(method); } + /** + * Returns corresponding meta method for given method handle. + */ public static QMetaMethod fromMethod(QMetaObject.Slot4 method) { return fromMethodImpl(method); } + /** + * Returns corresponding meta method for given method handle. + */ public static QMetaMethod fromMethod(QMetaObject.Slot5 method) { return fromMethodImpl(method); } + /** + * Returns corresponding meta method for given method handle. + */ public static QMetaMethod fromMethod(QMetaObject.Slot6 method) { return fromMethodImpl(method); } + /** + * Returns corresponding meta method for given method handle. + */ public static QMetaMethod fromMethod(QMetaObject.Slot7 method) { return fromMethodImpl(method); } + /** + * Returns corresponding meta method for given method handle. + */ public static QMetaMethod fromMethod(QMetaObject.Slot8 method) { return fromMethodImpl(method); } + /** + * Returns corresponding meta method for given method handle. + */ public static QMetaMethod fromMethod(QMetaObject.Slot9 method) { return fromMethodImpl(method); } @@ -13589,6 +15336,9 @@ public static QMetaMethod fromMethod(QMetaObject.Slot9See QMetaEnum::keysToValue(const char *) const

+ */ @io.qt.QtUninvokable public Integer keysToValue(String... keys) { return keysToValue(new QStringList(keys).join('|')); } + /** + *

See QMetaEnum::keysToValue(const char *) const

+ */ @io.qt.QtUninvokable public Integer keysToValue(java.util.Collection keys) { return keysToValue((keys instanceof QStringList ? (QStringList)keys : new QStringList(keys)).join('|')); } + /** + * Returns all enum entries of this enum type. + */ @io.qt.QtUninvokable public io.qt.QtAbstractEnumerator[] entries() { return enclosingMetaObject().enumEntries(this); } + /** + * Returns the enum entry of the given value. + */ @io.qt.QtUninvokable public io.qt.QtAbstractEnumerator entry(int index) { return enclosingMetaObject().enumEntry(this, index); } + /** + * Returns the enum entry of the given name. + */ @io.qt.QtUninvokable public io.qt.QtAbstractEnumerator entry(String name) { return enclosingMetaObject().enumEntry(this, name); } + /** + * Returns the java class of this enum type. + */ @io.qt.QtUninvokable public Class type() { return enclosingMetaObject().enumType(this); @@ -13700,6 +15468,9 @@ private static Class flagsType(Class enumType){ } } + /** + * Returns flags for the given value. + */ @io.qt.QtUninvokable public io.qt.QFlags flags(int value) { Class enumType = type(); @@ -13713,6 +15484,9 @@ public io.qt.QFlags flags(int value) { return null; } + /** + * Returns flags for the given enum names. + */ @io.qt.QtUninvokable public io.qt.QFlags flags(String... names) { @SuppressWarnings("unchecked") @@ -13731,6 +15505,9 @@ public io.qt.QFlags flags(String... names) { @io.qt.QtUninvokable private static native io.qt.QFlags flags(Class cls, int value); + /** + * Returns the enum entry of the given value. + */ @io.qt.QtUninvokable public io.qt.QtAbstractEnumerator resolve(int value) { Class type = type(); @@ -13760,20 +15537,6 @@ class Qt___ extends Qt { }// class -class Qt_56__ extends Qt { - - public native static void qSetGlobalQHashSeed(int newSeed); - public native static int qGlobalQHashSeed(); - -}// class - -class Qt_66__ extends Qt { - @Deprecated - public native static void qSetGlobalQHashSeed(int newSeed); - @Deprecated - public native static int qGlobalQHashSeed(); -}// class - class QCollatorSortKey___{ @io.qt.QtUninvokable @@ -13787,78 +15550,35 @@ public final int compareTo(io.qt.core.QCollatorSortKey key){ class QCborValue_java__{ /** - * Result class for {@link #fromCbor(io.qt.core.QByteArray)} - */ - public static final class FromCborResult{ - private FromCborResult(io.qt.core.QCborValue value, io.qt.core.QCborParserError error) { - super(); - this.value = value; - this.error = error; - } - public final io.qt.core.QCborValue value; - public final io.qt.core.QCborParserError error; - } - - @io.qt.QtUninvokable - public native final void setValue(java.lang.String key, io.qt.core.QCborValue value); - - @io.qt.QtUninvokable - public native final void setValue(long key, io.qt.core.QCborValue value); - -}// class - -class QCborArray_java__{ - - @io.qt.QtUninvokable - public native final void setValue(long i, io.qt.core.QCborValue value); -}// class - -class QCborMap_java__{ - - @io.qt.QtUninvokable - public native final void setValue(io.qt.core.QCborValue key, io.qt.core.QCborValue value); - - @io.qt.QtUninvokable - public native final void setValue(java.lang.String key, io.qt.core.QCborValue value); - - @io.qt.QtUninvokable - public native final void setValue(long key, io.qt.core.QCborValue value); - + * Result class for {@link #fromCbor(io.qt.core.QByteArray)} + */ + public static final class FromCborResult{ + private FromCborResult(io.qt.core.QCborValue value, io.qt.core.QCborParserError error) { + super(); + this.value = value; + this.error = error; + } + public final io.qt.core.QCborValue value; + public final io.qt.core.QCborParserError error; + } }// class class QCborStreamReader_java__{ + /** + *

See QCborStreamReader::QCborStreamReader(const char*,qsizetype)

+ */ public QCborStreamReader(byte[] data){ this(new io.qt.core.QByteArray(data)); } + /** + *

See QCborStreamReader::addData(QByteArray)

+ */ @io.qt.QtUninvokable public final void addData(byte[] data){ addData(new io.qt.core.QByteArray(data)); } - - /** - * Result class for {@link #readByteArray()} and {@link #readString()} - */ - public static final class StringResult { - private StringResult(Container data, StringResultCode status) { - super(); - this.data = data; - this.status = status; - } - public final Container data; - public final StringResultCode status; - }; - - @io.qt.QtUninvokable - public native final io.qt.core.QCborStreamReader.StringResult readByteArray(); - - @io.qt.QtUninvokable - public native final io.qt.core.QCborStreamReader.StringResult readString(); - - @io.qt.QtUninvokable - public native final io.qt.core.QCborStreamReader.StringResult readChunk(java.nio.ByteBuffer buffer); - }// class class QFactoryLoader_62_{ @@ -13911,14 +15631,14 @@ public

R loadPlugin(QMetaObject.Method2 R loadPlugin(QMetaObject.Method3 R loadPlugin(QMetaObject.Method4

R loadPlugin(QMetaObject.Method } } }else if(factoryClass==null && io.qt.core.QOperatingSystemVersion.current().isAnyOfType(io.qt.core.QOperatingSystemVersion.OSType.Android)) { - QObject factoryObject = instance(index); + QObject factoryObject = instance(index); @SuppressWarnings("unchecked") - P factory = (P)factoryObject; - if(factory!=null){ + P factory = (P)factoryObject; + if(factory!=null){ try { return create.invoke(factory, key, a, b, c); } catch (Throwable ex) { - return null; + return null; } } } @@ -14055,14 +15775,14 @@ public

R loadPlugin(QMetaObject.Met } } }else if(factoryClass==null && io.qt.core.QOperatingSystemVersion.current().isAnyOfType(io.qt.core.QOperatingSystemVersion.OSType.Android)) { - QObject factoryObject = instance(index); + QObject factoryObject = instance(index); @SuppressWarnings("unchecked") - P factory = (P)factoryObject; - if(factory!=null){ + P factory = (P)factoryObject; + if(factory!=null){ try { return create.invoke(factory, key, a, b, c, d); } catch (Throwable ex) { - return null; + return null; } } } @@ -14091,14 +15811,14 @@ public

R loadPlugin(QMetaObject. } } }else if(factoryClass==null && io.qt.core.QOperatingSystemVersion.current().isAnyOfType(io.qt.core.QOperatingSystemVersion.OSType.Android)) { - QObject factoryObject = instance(index); + QObject factoryObject = instance(index); @SuppressWarnings("unchecked") - P factory = (P)factoryObject; - if(factory!=null){ + P factory = (P)factoryObject; + if(factory!=null){ try { return create.invoke(factory, key, a, b, c, d, e); } catch (Throwable ex) { - return null; + return null; } } } @@ -14127,14 +15847,14 @@ public

R loadPlugin(QMetaObje } } }else if(factoryClass==null && io.qt.core.QOperatingSystemVersion.current().isAnyOfType(io.qt.core.QOperatingSystemVersion.OSType.Android)) { - QObject factoryObject = instance(index); + QObject factoryObject = instance(index); @SuppressWarnings("unchecked") - P factory = (P)factoryObject; - if(factory!=null){ + P factory = (P)factoryObject; + if(factory!=null){ try { return create.invoke(factory, key, a, b, c, d, e, f); } catch (Throwable ex) { - return null; + return null; } } } @@ -14163,14 +15883,14 @@ public

R loadPlugin(QMetaO } } }else if(factoryClass==null && io.qt.core.QOperatingSystemVersion.current().isAnyOfType(io.qt.core.QOperatingSystemVersion.OSType.Android)) { - QObject factoryObject = instance(index); + QObject factoryObject = instance(index); @SuppressWarnings("unchecked") - P factory = (P)factoryObject; - if(factory!=null){ + P factory = (P)factoryObject; + if(factory!=null){ try { return create.invoke(factory, key, a, b, c, d, e, f, g); } catch (Throwable ex) { - return null; + return null; } } } @@ -14197,14 +15917,14 @@ public

R loadPlugin(QMetaObject.Method1 c } } }else if(factoryClass==null && io.qt.core.QOperatingSystemVersion.current().isAnyOfType(io.qt.core.QOperatingSystemVersion.OSType.Android)) { - QObject factoryObject = instance(index); + QObject factoryObject = instance(index); @SuppressWarnings("unchecked") - P factory = (P)factoryObject; - if(factory!=null){ + P factory = (P)factoryObject; + if(factory!=null){ try { return create.invoke(factory); } catch (Throwable ex) { - return null; + return null; } } } @@ -14233,14 +15953,14 @@ public

R loadPlugin(QMetaObject.Method2 R loadPlugin(QMetaObject.Method3

R loadPlugin(QMetaObject.Method } } }else if(factoryClass==null && io.qt.core.QOperatingSystemVersion.current().isAnyOfType(io.qt.core.QOperatingSystemVersion.OSType.Android)) { - QObject factoryObject = instance(index); + QObject factoryObject = instance(index); @SuppressWarnings("unchecked") - P factory = (P)factoryObject; - if(factory!=null){ + P factory = (P)factoryObject; + if(factory!=null){ try { return create.invoke(factory, a, b, c); } catch (Throwable ex) { - return null; + return null; } } } @@ -14341,14 +16061,14 @@ public

R loadPlugin(QMetaObject.Met } } }else if(factoryClass==null && io.qt.core.QOperatingSystemVersion.current().isAnyOfType(io.qt.core.QOperatingSystemVersion.OSType.Android)) { - QObject factoryObject = instance(index); + QObject factoryObject = instance(index); @SuppressWarnings("unchecked") - P factory = (P)factoryObject; - if(factory!=null){ + P factory = (P)factoryObject; + if(factory!=null){ try { return create.invoke(factory, a, b, c, d); } catch (Throwable ex) { - return null; + return null; } } } @@ -14377,14 +16097,14 @@ public

R loadPlugin(QMetaObject. } } }else if(factoryClass==null && io.qt.core.QOperatingSystemVersion.current().isAnyOfType(io.qt.core.QOperatingSystemVersion.OSType.Android)) { - QObject factoryObject = instance(index); + QObject factoryObject = instance(index); @SuppressWarnings("unchecked") - P factory = (P)factoryObject; - if(factory!=null){ + P factory = (P)factoryObject; + if(factory!=null){ try { return create.invoke(factory, a, b, c, d, e); } catch (Throwable ex) { - return null; + return null; } } } @@ -14413,14 +16133,14 @@ public

R loadPlugin(QMetaObje } } }else if(factoryClass==null && io.qt.core.QOperatingSystemVersion.current().isAnyOfType(io.qt.core.QOperatingSystemVersion.OSType.Android)) { - QObject factoryObject = instance(index); + QObject factoryObject = instance(index); @SuppressWarnings("unchecked") - P factory = (P)factoryObject; - if(factory!=null){ + P factory = (P)factoryObject; + if(factory!=null){ try { return create.invoke(factory, a, b, c, d, e, f); } catch (Throwable ex) { - return null; + return null; } } } @@ -14449,14 +16169,14 @@ public

R loadPlugin(QMetaO } } }else if(factoryClass==null && io.qt.core.QOperatingSystemVersion.current().isAnyOfType(io.qt.core.QOperatingSystemVersion.OSType.Android)) { - QObject factoryObject = instance(index); + QObject factoryObject = instance(index); @SuppressWarnings("unchecked") - P factory = (P)factoryObject; - if(factory!=null){ + P factory = (P)factoryObject; + if(factory!=null){ try { return create.invoke(factory, a, b, c, d, e, f, g); } catch (Throwable ex) { - return null; + return null; } } } @@ -14485,14 +16205,14 @@ public

R loadPlugin(QMe } } }else if(factoryClass==null && io.qt.core.QOperatingSystemVersion.current().isAnyOfType(io.qt.core.QOperatingSystemVersion.OSType.Android)) { - QObject factoryObject = instance(index); + QObject factoryObject = instance(index); @SuppressWarnings("unchecked") - P factory = (P)factoryObject; - if(factory!=null){ + P factory = (P)factoryObject; + if(factory!=null){ try { return create.invoke(factory, a, b, c, d, e, f, g, h); } catch (Throwable ex) { - return null; + return null; } } } @@ -14611,34 +16331,58 @@ public

P loadPlugin(Class

pluginClass, String k class QPluginLoader_java__{ + /** + *

See qRegisterStaticPluginFunction(QStaticPlugin)

+ */ public static void registerStaticPluginFunction(QObject instance){ io.qt.internal.QtJambiPlugins.qRegisterStaticPluginFunction(instance, (QJsonObject)null); } + /** + *

See qRegisterStaticPluginFunction(QStaticPlugin)

+ */ public static void registerStaticPluginFunction(QObject instance, QJsonObject metaData){ io.qt.internal.QtJambiPlugins.qRegisterStaticPluginFunction(instance, metaData); } + /** + *

See qRegisterStaticPluginFunction(QStaticPlugin)

+ */ public static void registerStaticPluginFunction(QObject instance, java.util.Map metaData){ io.qt.internal.QtJambiPlugins.qRegisterStaticPluginFunction(instance, QJsonObject.fromVariantHash(metaData)); } + /** + *

See qRegisterStaticPluginFunction(QStaticPlugin)

+ */ public static void registerStaticPluginFunction(Class pluginClass){ io.qt.internal.QtJambiPlugins.qRegisterStaticPluginFunction(pluginClass, (QJsonObject)null); } + /** + *

See qRegisterStaticPluginFunction(QStaticPlugin)

+ */ public static void registerStaticPluginFunction(Class pluginClass, QJsonObject metaData){ io.qt.internal.QtJambiPlugins.qRegisterStaticPluginFunction(pluginClass, metaData); } + /** + *

See qRegisterStaticPluginFunction(QStaticPlugin)

+ */ public static void registerStaticPluginFunction(Class pluginClass, java.util.Map metaData){ io.qt.internal.QtJambiPlugins.qRegisterStaticPluginFunction(pluginClass, QJsonObject.fromVariantHash(metaData)); } + /** + *

See qRegisterStaticPluginFunction(QStaticPlugin)

+ */ public static void registerPluginInterface(Class factoryClass){ io.qt.internal.QtJambiPlugins.qRegisterPluginInterface(factoryClass); } + /** + *

See QPluginLoader::instance()

+ */ @io.qt.QtUninvokable public final T instance(Class type){ return QMetaObject.cast(type, instance()); @@ -14646,6 +16390,9 @@ public final T instance(Class type){ }// class class QStaticPlugin_java__{ + /** + *

See QStaticPlugin::instance

+ */ @io.qt.QtUninvokable public final native io.qt.core.QObject instance(); }// class @@ -14655,6 +16402,9 @@ class QThread___{ @io.qt.QtUninvokable static native void initialize(); + /** + * @see Thread#Thread(ThreadGroup, Runnable, String, long) + */ public QThread(ThreadGroup group, String name, long stackSize, io.qt.core.QObject parent) { super((QPrivateConstructor)null); initialize_native(this, parent); @@ -14665,62 +16415,122 @@ public QThread(ThreadGroup group, String name, long stackSize, io.qt.core.QObjec setStackSize( (int)(stackSize & 0x0ffffffffL) ); } + /** + *

See QThread::create(Function, Args...)

+ * @see Thread#Thread(Runnable) + */ public static QThread create(Runnable runnable) { return create(null, runnable, null, -1, null); } + /** + *

See QThread::create(Function, Args...)

+ * @see Thread#Thread(Runnable) + */ public static QThread create(Runnable runnable, io.qt.core.QObject parent) { return create(null, runnable, null, -1, parent); } + /** + *

See QThread::create(Function, Args...)

+ * @see Thread#Thread(ThreadGroup, Runnable, String, long) + */ public static QThread create(Runnable runnable, long stackSize) { return create(null, runnable, null, stackSize, null); } + /** + *

See QThread::create(Function, Args...)

+ * @see Thread#Thread(ThreadGroup, Runnable, String, long) + */ public static QThread create(Runnable runnable, long stackSize, io.qt.core.QObject parent) { return create(null, runnable, null, stackSize, parent); } + /** + *

See QThread::create(Function, Args...)

+ * @see Thread#Thread(ThreadGroup, Runnable, String, long) + */ public static QThread create(ThreadGroup group, Runnable runnable, long stackSize) { return create(group, runnable, null, stackSize, null); } + /** + *

See QThread::create(Function, Args...)

+ * @see Thread#Thread(ThreadGroup, Runnable, String, long) + */ public static QThread create(ThreadGroup group, Runnable runnable, long stackSize, io.qt.core.QObject parent) { return create(group, runnable, null, stackSize, parent); } + /** + *

See QThread::create(Function, Args...)

+ * @see Thread#Thread(ThreadGroup, Runnable, String) + */ public static QThread create(ThreadGroup group, Runnable runnable, String name) { return create(group, runnable, name, -1, null); } + /** + *

See QThread::create(Function, Args...)

+ * @see Thread#Thread(ThreadGroup, Runnable, String) + */ public static QThread create(ThreadGroup group, Runnable runnable, String name, io.qt.core.QObject parent) { return create(group, runnable, name, -1, parent); } + /** + *

See QThread::create(Function, Args...)

+ * @see Thread#Thread(ThreadGroup, Runnable, String, long) + */ public static QThread create(ThreadGroup group, Runnable runnable, String name, long stackSize) { return create(group, runnable, name, stackSize, null); } + /** + *

See QThread::create(Function, Args...)

+ * @see Thread#Thread(Runnable, String, long) + */ public static QThread create(Runnable runnable, String name, long stackSize, io.qt.core.QObject parent) { return create(null, runnable, name, stackSize, parent); } + /** + *

See QThread::create(Function, Args...)

+ * @see Thread#Thread(Runnable, String, long) + */ public static QThread create(Runnable runnable, String name, long stackSize) { return create(null, runnable, name, stackSize, null); } + /** + *

See QThread::create(Function, Args...)

+ * @see Thread#Thread(Runnable, String) + */ public static QThread create(Runnable runnable, String name, io.qt.core.QObject parent) { return create(null, runnable, name, -1, parent); } + /** + *

See QThread::create(Function, Args...)

+ * @see Thread#Thread(Runnable, String) + */ public static QThread create(Runnable runnable, String name) { return create(null, runnable, name, -1, null); } + /** + *

See QThread::create(Function, Args...)

+ * @see Thread#Thread(ThreadGroup, Runnable) + */ public static QThread create(ThreadGroup group, Runnable runnable) { return create(group, runnable, null, -1, null); } + /** + *

See QThread::create(Function, Args...)

+ * @see Thread#Thread(ThreadGroup, Runnable, String, long) + */ public static QThread create(ThreadGroup group, Runnable runnable, String name, long stackSize, io.qt.core.QObject parent) { return new Runner(group, runnable, name, stackSize, parent); } @@ -14740,46 +16550,79 @@ protected void run() { } } + /** + * @see Thread#Thread(ThreadGroup, Runnable, String, long) + */ public QThread(String name) { this(null, name, -1, null); } + /** + * @see Thread#Thread(ThreadGroup, Runnable, String, long) + */ public QThread(ThreadGroup group) { this(group, null, -1, null); } + /** + * @see Thread#Thread(ThreadGroup, Runnable, String, long) + */ public QThread(String name, io.qt.core.QObject parent) { this(null, name, -1, parent); } + /** + * @see Thread#Thread(ThreadGroup, Runnable, String, long) + */ public QThread(ThreadGroup group, io.qt.core.QObject parent) { this(group, null, -1, parent); } + /** + * @see Thread#Thread(ThreadGroup, Runnable, String, long) + */ public QThread(String name, long stackSize) { this(null, name, stackSize, null); } + /** + * @see Thread#Thread(ThreadGroup, Runnable, String, long) + */ public QThread(ThreadGroup group, long stackSize) { this(group, null, stackSize, null); } + /** + * @see Thread#Thread(ThreadGroup, Runnable, String, long) + */ public QThread(String name, long stackSize, io.qt.core.QObject parent) { this(null, name, stackSize, parent); } + /** + * @see Thread#Thread(ThreadGroup, Runnable, String, long) + */ public QThread(ThreadGroup group, long stackSize, io.qt.core.QObject parent) { this(group, null, stackSize, parent); } + /** + * @see Thread#Thread(ThreadGroup, Runnable, String, long) + */ public QThread(ThreadGroup group, String name, long stackSize) { this(group, name, stackSize, null); } + /** + * @see Thread#Thread(ThreadGroup, Runnable, String, long) + */ public QThread(ThreadGroup group, String name, io.qt.core.QObject parent) { this(group, name, -1, parent); } + /** + * @see Thread#Thread(ThreadGroup, Runnable, String, long) + */ public QThread(ThreadGroup group, String name) { this(group, name, -1, null); } @@ -14790,6 +16633,9 @@ private void initialize(ThreadGroup group) { __qt_initialize(group); } + /** + * @see Thread#getThreadGroup() + */ public final ThreadGroup getThreadGroup() { if(javaThread!=null) { return javaThread.getThreadGroup(); @@ -14799,6 +16645,9 @@ public final ThreadGroup getThreadGroup() { private native ThreadGroup __qt_getThreadGroup(); + /** + * @see Thread#setName(String) + */ public void setName(String name) { if(!isRunning() && javaThread==null) __qt_setName(name); @@ -14806,6 +16655,9 @@ public void setName(String name) { private native void __qt_setName(String name); + /** + * @see Thread#getName() + */ public final String getName() { if(javaThread!=null) { return javaThread.getName(); @@ -14815,6 +16667,9 @@ public final String getName() { private native String __qt_getName(); + /** + * @see Thread#setDaemon(boolean) + */ public void setDaemon(boolean daemon) { if(!isRunning() && javaThread==null) __qt_setDaemon(daemon); @@ -14822,6 +16677,9 @@ public void setDaemon(boolean daemon) { private native void __qt_setDaemon(boolean daemon); + /** + * @see Thread#isDaemon() + */ public final boolean isDaemon() { if(javaThread!=null) { return javaThread.isDaemon(); @@ -14831,6 +16689,9 @@ public final boolean isDaemon() { private native boolean __qt_isDaemon(); + /** + * @see Thread#setUncaughtExceptionHandler(java.lang.Thread.UncaughtExceptionHandler) + */ public void setUncaughtExceptionHandler(Thread.UncaughtExceptionHandler handler) { if(javaThread!=null) { javaThread.setUncaughtExceptionHandler(handler); @@ -14841,6 +16702,9 @@ public void setUncaughtExceptionHandler(Thread.UncaughtExceptionHandler handler) private native void __qt_setUncaughtExceptionHandler(Thread.UncaughtExceptionHandler handler); + /** + * @see Thread#getUncaughtExceptionHandler() + */ public final Thread.UncaughtExceptionHandler getUncaughtExceptionHandler() { if(javaThread!=null) { return javaThread.getUncaughtExceptionHandler(); @@ -14850,6 +16714,9 @@ public final Thread.UncaughtExceptionHandler getUncaughtExceptionHandler() { private native Thread.UncaughtExceptionHandler __qt_getUncaughtExceptionHandler(); + /** + * @see Thread#setContextClassLoader(ClassLoader) + */ public void setContextClassLoader(ClassLoader cl) { if(javaThread!=null) { javaThread.setContextClassLoader(cl); @@ -14860,6 +16727,9 @@ public void setContextClassLoader(ClassLoader cl) { private native void __qt_setContextClassLoader(ClassLoader cl); + /** + * @see Thread#getContextClassLoader() + */ public final ClassLoader getContextClassLoader() { if(javaThread!=null) { return javaThread.getContextClassLoader(); @@ -14877,20 +16747,32 @@ public final ClassLoader getContextClassLoader() { private native Thread __qt_javaThread(); public static native QThread thread(Thread thread); + /** + * @see Thread#isAlive() + */ public final boolean isAlive() { return isRunning(); } + /** + * @see Thread#isInterrupted() + */ public final boolean isInterrupted() { if(javaThread!=null && javaThread.isInterrupted()) return true; return isInterruptionRequested(); } + /** + * @see Thread#interrupted() + */ public static boolean interrupted() { return Thread.interrupted(); } + /** + * @see Thread#interrupt() + */ public final void interrupt() { requestInterruption(); } @@ -15178,7 +17060,7 @@ public QLoggingCategory(java.lang.String category){ } /** - *

See QLoggingCategory::QLoggingCategory(const char*,QtMsgType)

+ *

See QLoggingCategory::QLoggingCategory(const char*,QtMsgType)

*/ public QLoggingCategory(java.lang.String category, io.qt.core.QtMsgType severityLevel){ this(category==null ? null : new QByteArray(category), severityLevel); @@ -15270,68 +17152,171 @@ public static void removeClassPath(String path) { }// class class QCryptographicHash___{ + /** + *

See QCryptographicHash::addData(const char*)

+ */ @io.qt.QtUninvokable public final void addData(java.nio.ByteBuffer data){ addData(new io.qt.core.QByteArrayView(data)); } + /** + *

See QCryptographicHash::hash(const char*,QCryptographicHash::Algorithm)

+ */ public static io.qt.core.QByteArray hash(java.nio.ByteBuffer data, io.qt.core.QCryptographicHash.Algorithm method){ return hash(new io.qt.core.QByteArrayView(data), method); } + /** + *

See QCryptographicHash::addData(QByteArray)

+ */ @io.qt.QtUninvokable public final void addData(io.qt.core.QByteArray data){ addData(new io.qt.core.QByteArrayView(data)); } + /** + *

See QCryptographicHash::hash(QByteArray,QCryptographicHash::Algorithm)

+ */ public static io.qt.core.QByteArray hash(io.qt.core.QByteArray data, io.qt.core.QCryptographicHash.Algorithm method){ return hash(new io.qt.core.QByteArrayView(data), method); } }// class +class QDataStream_5__{ + /** + *

See QDataStream::operator<<

+ */ + public final QDataStream writeObject(T object){ + int metaType = QMetaType.fromObject(object).id(); + if(!QMetaType.save(this, metaType, object)){ + this.setStatus(Status.WriteFailed); + QLogging.qWarning("Unable to write object of type %1$s", object==null ? "null" : object.getClass().getTypeName()); + } + return this; + } + + /** + *

See QDataStream::operator>>

+ */ + @SuppressWarnings("unchecked") + public final T readObject(Class cl, QMetaType...instantiations){ + int metaType = QMetaType.fromType(cl, instantiations).id(); + java.util.Optional optional = QMetaType.load(this, metaType); + if(!optional.isPresent()){ + setStatus(Status.ReadCorruptData); + QLogging.qWarning("Unable to read object of type %1$s", QMetaType.typeName(metaType)); + } + return (T)optional.orElse(null); + } +}// class + +class QDataStream_6__{ + /** + *

See QDataStream::operator<<

+ */ + public final QDataStream writeObject(T object){ + QMetaType metaType = QMetaType.fromObject(object); + if(!metaType.save(this, object)){ + this.setStatus(Status.WriteFailed); + QLogging.qWarning("Unable to write object of type %1$s", object==null ? "null" : object.getClass().getTypeName()); + } + return this; + } + + /** + *

See QDataStream::operator>>

+ */ + @SuppressWarnings("unchecked") + public final T readObject(Class cl, QMetaType...instantiations){ + QMetaType metaType = QMetaType.fromType(cl, instantiations); + java.util.Optional optional = metaType.load(this); + if(!optional.isPresent()){ + setStatus(Status.ReadCorruptData); + QLogging.qWarning("Unable to read object of type %1$s", metaType.name()); + } + return (T)optional.orElse(null); + } +}// class + class QDataStream___{ + /** + *

See QDataStream::operator<<

+ */ + @io.qt.QtUninvokable + public final QDataStream append(T t){ + return writeObject(t); + } + + /** + *

See QDataStream::operator<<

+ */ @io.qt.QtUninvokable public final QDataStream append(java.lang.String s){ return writeString(s); } + /** + *

See QDataStream::operator<<

+ */ @io.qt.QtUninvokable public final QDataStream append(double v){ return writeDouble(v); } + /** + *

See QDataStream::operator<<

+ */ @io.qt.QtUninvokable public final QDataStream append(byte v){ return writeByte(v); } + /** + *

See QDataStream::operator<<

+ */ @io.qt.QtUninvokable public final QDataStream append(byte[] v){ writeBytes(v); return this; } + /** + *

See QDataStream::operator<<

+ */ @io.qt.QtUninvokable public final QDataStream append(char v){ return writeChar(v); } + /** + *

See QDataStream::operator<<

+ */ @io.qt.QtUninvokable public final QDataStream append(float v){ return writeFloat(v); } + /** + *

See QDataStream::operator<<

+ */ @io.qt.QtUninvokable public final QDataStream append(int v){ return writeInt(v); } + /** + *

See QDataStream::operator<<

+ */ @io.qt.QtUninvokable public final QDataStream append(long v){ return writeLong(v); } + /** + *

See QDataStream::operator<<

+ */ @io.qt.QtUninvokable public final QDataStream append(short v){ return writeShort(v); @@ -15339,87 +17324,87 @@ public final QDataStream append(short v){ }// class class QString__{ - /** + /** * {@inheritDoc} */ - @Override - @io.qt.QtUninvokable - public final char charAt(int index) { - return at(index); - } + @Override + @io.qt.QtUninvokable + public final char charAt(int index) { + return at(index); + } - /** + /** * {@inheritDoc} */ - @Override - @io.qt.QtUninvokable - public final QString subSequence(int start, int end) { - return mid(start, end-start); - } + @Override + @io.qt.QtUninvokable + public final QString subSequence(int start, int end) { + return mid(start, end-start); + } - /** + /** * {@inheritDoc} */ - @Override - @io.qt.QtUninvokable - public final QString append(CharSequence csq, int start, int end) throws java.io.IOException { - return append(csq==null ? "null" : csq.subSequence(start, end)); - } - - /** - *

See QString::arg(Args &&... args) const

+ @Override + @io.qt.QtUninvokable + public final QString append(CharSequence csq, int start, int end) throws java.io.IOException { + return append(csq==null ? "null" : csq.subSequence(start, end)); + } + + /** + *

See QString::arg(Args &&... args) const

*/ - @io.qt.QtUninvokable + @io.qt.QtUninvokable public final io.qt.core.QString arg(Object... args){ - QString _this = this.clone(); - for(Object arg : args) { - if(arg instanceof Integer) - _this = _this.arg((int)arg); - else if(arg instanceof Character) - _this = _this.arg((char)arg); - else if(arg instanceof Double) - _this = _this.arg((double)arg); - else if(arg instanceof Byte) - _this = _this.arg((byte)arg); - else if(arg instanceof Short) - _this = _this.arg((short)arg); - else if(arg instanceof Long) - _this = _this.arg((long)arg); - else if(arg instanceof Float) - _this = _this.arg((float)arg); - else if(arg instanceof CharSequence) - _this = _this.arg((CharSequence)arg); - else if(arg!=null) - _this = _this.arg(arg.toString()); - else - _this = _this.arg("null"); - } - return _this; - } - + QString _this = this.clone(); + for(Object arg : args) { + if(arg instanceof Integer) + _this = _this.arg((int)arg); + else if(arg instanceof Character) + _this = _this.arg((char)arg); + else if(arg instanceof Double) + _this = _this.arg((double)arg); + else if(arg instanceof Byte) + _this = _this.arg((byte)arg); + else if(arg instanceof Short) + _this = _this.arg((short)arg); + else if(arg instanceof Long) + _this = _this.arg((long)arg); + else if(arg instanceof Float) + _this = _this.arg((float)arg); + else if(arg instanceof CharSequence) + _this = _this.arg((CharSequence)arg); + else if(arg!=null) + _this = _this.arg(arg.toString()); + else + _this = _this.arg("null"); + } + return _this; + } + /** * Similar to {@link java.lang.String#format(String, Object...)} but using {@link QString#arg(Object...)}. * @param format format string * @param args arguments * @return formatted string */ - @io.qt.QtUninvokable + @io.qt.QtUninvokable public static io.qt.core.QString format(CharSequence format, Object... args){ - io.qt.core.QString strg; - if(format instanceof io.qt.core.QString){ - strg = (io.qt.core.QString)format; - }else{ - strg = new io.qt.core.QString(format); - } - return strg.arg(args); - } - + io.qt.core.QString strg; + if(format instanceof io.qt.core.QString){ + strg = (io.qt.core.QString)format; + }else{ + strg = new io.qt.core.QString(format); + } + return strg.arg(args); + } + /** * Static version of {@link QString#toUtf8()} * @param string * @return utf8 */ - @io.qt.QtUninvokable + @io.qt.QtUninvokable public static native io.qt.core.QByteArray toUtf8(CharSequence string); /** diff --git a/generator/typesystem/java/typesystem_gui-java.java b/generator/typesystem/java/typesystem_gui-java.java index eadd1dbd..96cc0fdf 100644 --- a/generator/typesystem/java/typesystem_gui-java.java +++ b/generator/typesystem/java/typesystem_gui-java.java @@ -224,14 +224,13 @@ public QShortcut(io.qt.gui.QKeySequence.StandardKey key, io.qt.core.QObject pare this(key, parent, slot, io.qt.core.Qt.ShortcutContext.WindowShortcut); } + /** + *

Type-casting overload of QObject::parent()const

+ */ @io.qt.QtUninvokable public final T parent(Class type) { return type.cast(parent()); } - - public final io.qt.widgets.QWidget parentWidget() { - return parent(io.qt.widgets.QWidget.class); - } }// class class QAbstractTextDocumentLayout___ extends QAbstractTextDocumentLayout { @@ -736,15 +735,6 @@ public static QGradient create(io.qt.gui.QGradient.Preset preset){ private native static QGradient create(int preset); }// class - -class QOpenGLContext___{ - - @io.qt.QtUninvokable - public native final T versionFunctions(Class type); - -}// class - - class QWindow___ extends QWindow { /** *

Overloaded function for {@link #parent(io.qt.gui.QWindow.AncestorMode)} @@ -759,96 +749,60 @@ public final io.qt.gui.QWindow nonTransientParent(){ class QAction___ extends QAction { - private QActionGroup __rcActionGroup = null; - - /** - * Sets the shortcut to the key sequence for the given key string. For - * example "Ctrl+O" gives CTRL+'O'. The strings "Ctrl", "Shift", "Alt" and - * "Meta" are recognized, as well as their translated equivalents in the - * "QShortcut" context (using QObject::tr()). Up to four key codes may be - * entered by separating them with commas, e.g. "Alt+X,Ctrl+S,Q". - * - * @param key - * The description of the key sequence. Typically used with tr() - * so key sequences can be locale aware. - */ - public final void setShortcut(String key) { - setShortcut(new QKeySequence(key)); - } + private QActionGroup __rcActionGroup = null; - /** - * Sets the shortcut to the key sequence for the given key. The result will - * depend on the currently running platform. The key sequence will be based - * on the first element in the list of key bindings for the key. - * - * @param key - * The key for which to select a key sequence - */ - public final void setShortcut(QKeySequence.StandardKey key) { - setShortcut(new QKeySequence(key)); - } + /** + * Sets the shortcut to the key sequence for the given key string. For + * example "Ctrl+O" gives CTRL+'O'. The strings "Ctrl", "Shift", "Alt" and + * "Meta" are recognized, as well as their translated equivalents in the + * "QShortcut" context (using QObject::tr()). Up to four key codes may be + * entered by separating them with commas, e.g. "Alt+X,Ctrl+S,Q". + * + * @param key + * The description of the key sequence. Typically used with tr() + * so key sequences can be locale aware. + */ + public final void setShortcut(String key) { + setShortcut(new QKeySequence(key)); + } - public final void setIcon(QPixmap pm) { - setIcon(new QIcon(pm)); - } + /** + * Sets the shortcut to the key sequence for the given key. The result will + * depend on the currently running platform. The key sequence will be based + * on the first element in the list of key bindings for the key. + * + * @param key + * The key for which to select a key sequence + */ + public final void setShortcut(QKeySequence.StandardKey key) { + setShortcut(new QKeySequence(key)); + } - @io.qt.QtUninvokable - public final io.qt.widgets.QMenu menu(){ - return menu(io.qt.widgets.QMenu.class); - } - - @io.qt.QtUninvokable - public final T menu(Class type) { - io.qt.core.QObject result = menuObject(); - if(!type.isInstance(result)) - return type.cast(result); - return null; - } - - private Object __rcMenu; + public final void setIcon(QPixmap pm) { + setIcon(new QIcon(pm)); + } - @io.qt.QtUninvokable - public final void setMenu(io.qt.core.QObject menu){ - setMenuObject(menu); - __rcMenu = menuObject(); - } - - @io.qt.QtUninvokable - private native io.qt.core.QObject menuObject(); - - @io.qt.QtUninvokable - private native void setMenuObject(io.qt.core.QObject menu); - - @io.qt.QtUninvokable - public final T parent(Class type) { - io.qt.core.QObject result = parent(); - while (result!=null && !type.isInstance(result)) - result = result.parent(); - return type.cast(result); - } - - @io.qt.QtUninvokable - public final java.util.List associatedObjects(Class type) { - java.util.List result = new java.util.ArrayList<>(); - for (io.qt.core.QObject object : associatedObjects()) - if (type.isInstance(object)) - result.add(type.cast(object)); - return result; - } - - @io.qt.QtUninvokable - public final io.qt.widgets.QWidget parentWidget(){ - return parent(io.qt.widgets.QWidget.class); - } - - @io.qt.QtUninvokable - public final java.util.List associatedWidgets() { - return associatedObjects(io.qt.widgets.QWidget.class); - } - - @io.qt.QtUninvokable - public final java.util.List associatedGraphicsWidgets() { - return associatedObjects(io.qt.widgets.QGraphicsWidget.class); - } + /** + *

Type-casting overload of QObject::parent()const

+ */ + @io.qt.QtUninvokable + public final T parent(Class type) { + io.qt.core.QObject result = parent(); + while (result!=null && !type.isInstance(result)) + result = result.parent(); + return type.cast(result); + } + + /** + *

Type-casting overload of QAction::associatedObjects()const

+ */ + @io.qt.QtUninvokable + public final io.qt.core.QList associatedObjects(Class type) { + io.qt.core.QList result = new io.qt.core.QList<>(type); + for (io.qt.core.QObject object : associatedObjects()) + if (type.isInstance(object)) + result.add(type.cast(object)); + return result; + } }// class diff --git a/generator/typesystem/java/typesystem_httpserver-java.java b/generator/typesystem/java/typesystem_httpserver-java.java index e5ddb9ce..42fa1446 100644 --- a/generator/typesystem/java/typesystem_httpserver-java.java +++ b/generator/typesystem/java/typesystem_httpserver-java.java @@ -1,814 +1,920 @@ /**************************************************************************** -** -** Copyright (C) 2009-2022 Dr. Peter Droste, Omix Visualization GmbH & Co. KG. All rights reserved. -** -** This file is part of Qt Jambi. -** -** ** $BEGIN_LICENSE$ -** -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this -** package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** $END_LICENSE$ -** -** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -** -****************************************************************************/ - -class QHttpServer___{ - private QHttpServerRouter __rcRouter; - - @io.qt.QtUninvokable - public void afterRequest(java.util.function.Function action) { - afterRequest(QtJambi_LibraryUtilities.internal.nativeId(this), false, action); - } - - @io.qt.QtUninvokable - public void afterRequest(java.util.function.BiFunction action) { - afterRequest(QtJambi_LibraryUtilities.internal.nativeId(this), true, action); - } - + ** + ** Copyright (C) 2009-2022 Dr. Peter Droste, Omix Visualization GmbH & Co. KG. + * All rights reserved. + ** + ** This file is part of Qt Jambi. + ** + ** ** $BEGIN_LICENSE$ + ** + ** GNU Lesser General Public License Usage This file may be used under the terms + * of the GNU Lesser General Public License version 2.1 as published by the Free + * Software Foundation and appearing in the file LICENSE.LGPL included in the + ** packaging of this file. Please review the following information to ensure the + * GNU Lesser General Public License version 2.1 requirements will be met: + * http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. + ** + ** In addition, as a special exception, Nokia gives you certain additional + * rights. These rights are described in the Nokia Qt LGPL Exception version + * 1.0, included in the file LGPL_EXCEPTION.txt in this package. + ** + ** GNU General Public License Usage Alternatively, this file may be used under + * the terms of the GNU General Public License version 3.0 as published by the + * Free Software Foundation and appearing in the file LICENSE.GPL included in + * the packaging of this file. Please review the following information to ensure + * the GNU General Public License version 3.0 requirements will be met: + * http://www.gnu.org/copyleft/gpl.html. + ** + ** $END_LICENSE$ + ** + ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE + ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + ** + ****************************************************************************/ + +class QHttpServer___ { + private QHttpServerRouter __rcRouter; + + @io.qt.QtUninvokable + public void afterRequest(java.util.function.Function action) { + afterRequest(QtJambi_LibraryUtilities.internal.nativeId(this), false, action); + } + + @io.qt.QtUninvokable + public void afterRequest( + java.util.function.BiFunction action) { + afterRequest(QtJambi_LibraryUtilities.internal.nativeId(this), true, action); + } + @io.qt.QtUninvokable private native void afterRequest(long __this__nativeId, boolean isBi, Object action); - @Override - protected boolean handleRequest(QHttpServerRequest request, io.qt.network.QTcpSocket socket) { - return handleRequest(QtJambi_LibraryUtilities.internal.nativeId(this), QtJambi_LibraryUtilities.internal.checkedNativeId(request), QtJambi_LibraryUtilities.internal.nativeId(socket)); - } - - @io.qt.QtUninvokable - private native boolean handleRequest(long __this__nativeId, long request, long socket); - - @io.qt.QtUninvokable - private void sendResponse(QHttpServerResponse response, QHttpServerRequest request, io.qt.network.QTcpSocket socket){ - sendResponse(QtJambi_LibraryUtilities.internal.nativeId(this), QtJambi_LibraryUtilities.internal.checkedNativeId(response), QtJambi_LibraryUtilities.internal.checkedNativeId(request), QtJambi_LibraryUtilities.internal.nativeId(socket)); - } - - @io.qt.QtUninvokable - private void sendResponse(Object result, QHttpServerRequest request, io.qt.network.QTcpSocket socket){ - if(result instanceof QHttpServerResponse) - sendResponse((QHttpServerResponse)result, request, socket); - else if(result instanceof String) - sendResponse(new QHttpServerResponse((String)result), request, socket); - else if(result instanceof io.qt.core.QByteArray) - sendResponse(new QHttpServerResponse((io.qt.core.QByteArray)result), request, socket); - else if(result instanceof io.qt.core.QJsonArray) - sendResponse(new QHttpServerResponse((io.qt.core.QJsonArray)result), request, socket); - else if(result instanceof io.qt.core.QJsonObject) - sendResponse(new QHttpServerResponse((io.qt.core.QJsonObject)result), request, socket); - else if(result==null) - sendResponse(new QHttpServerResponse(QHttpServerResponder.StatusCode.NoContent), request, socket); - else - sendResponse(new QHttpServerResponse(result.toString()), request, socket); - } - - @io.qt.QtUninvokable - private native void sendResponse(long __this__nativeId, long response, long request, long socket); - - public interface GenericViewHandler{ - void invoke(Object[] args, QHttpServerResponder responder, QHttpServerRequest request); - } - - private Object[] values(io.qt.core.QRegularExpressionMatch rem, io.qt.core.QMetaType[] metaTypes, Object... requestResponder) { - Object[] values = new Object[metaTypes.length + requestResponder.length]; - for (int i = 0; i < metaTypes.length; i++) { - String cpt = rem.captured(i+1); - values[i] = io.qt.core.QVariant.convert(cpt, metaTypes[i]); - } - for (int i = 0; i < requestResponder.length; i++) { - values[metaTypes.length+i] = requestResponder[i]; - } - return values; - } - - @io.qt.QtUninvokable - private QHttpServerRouterRule.RouterHandler createRouterHandler(GenericViewHandler viewHandler, io.qt.core.QMetaType... metaTypes){ - return (rem, request, socket)->{ - Object[] values = values(rem, metaTypes); - viewHandler.invoke(values, makeResponder(request, socket), request); - }; - } - - @io.qt.QtUninvokable - private QHttpServerRouterRule.RouterHandler createRouterHandler(java.util.function.BiFunction viewHandler, io.qt.core.QMetaType... metaTypes){ - return (rem, request, socket)->{ - Object[] values = values(rem, metaTypes); - R result = viewHandler.apply(values, request); - sendResponse(result, request, socket); - }; - } - - @io.qt.QtUninvokable - private QHttpServerRouterRule.RouterHandler createRouterHandler(java.util.function.Function viewHandler, io.qt.core.QMetaType... metaTypes){ - return (rem, request, socket)->{ - Object[] values = values(rem, metaTypes); - R result = viewHandler.apply(values); - sendResponse(result, request, socket); - }; - } - - @io.qt.QtUninvokable - private QHttpServerRouterRule.RouterHandler createRouterHandler(java.util.function.BiConsumer viewHandler, io.qt.core.QMetaType... metaTypes){ - return (rem, request, socket)->{ - Object[] values = values(rem, metaTypes); - viewHandler.accept(values, makeResponder(request, socket)); - }; - } - - @io.qt.QtUninvokable - private QHttpServerRouterRule.RouterHandler createRouterHandlerResponder(ViewHandler viewHandler, SlotInvoker slotInvoker, io.qt.core.QMetaType... metaTypes){ - return (rem, request, socket)->{ - Object[] values = values(rem, metaTypes, makeResponder(request, socket)); - try { - slotInvoker.invoke(viewHandler, values); - } catch (RuntimeException | Error e) { - throw e; - } catch (Throwable e) { - throw new RuntimeException(e); - } - }; - } - - @io.qt.QtUninvokable - private QHttpServerRouterRule.RouterHandler createRouterHandlerRequestResponder(ViewHandler viewHandler, SlotInvoker slotInvoker, io.qt.core.QMetaType... metaTypes){ - return (rem, request, socket)->{ - Object[] values = values(rem, metaTypes, request, makeResponder(request, socket)); - try { - slotInvoker.invoke(viewHandler, values); - } catch (RuntimeException | Error e) { - throw e; - } catch (Throwable e) { - throw new RuntimeException(e); - } - }; - } - - @io.qt.QtUninvokable - private QHttpServerRouterRule.RouterHandler createRouterHandlerResponderRequest(ViewHandler viewHandler, SlotInvoker slotInvoker, io.qt.core.QMetaType... metaTypes){ - return (rem, request, socket)->{ - Object[] values = values(rem, metaTypes, makeResponder(request, socket), request); - try { - slotInvoker.invoke(viewHandler, values); - } catch (RuntimeException | Error e) { - throw e; - } catch (Throwable e) { - throw new RuntimeException(e); - } - }; - } - - @io.qt.QtUninvokable - private QHttpServerRouterRule.RouterHandler createRouterHandlerRequest(ViewHandler viewHandler, SlotInvoker slotInvoker, io.qt.core.QMetaType... metaTypes){ - return (rem, request, socket)->{ - Object[] values = values(rem, metaTypes, request); - Object result; - try { - result = slotInvoker.invoke(viewHandler, values); - } catch (RuntimeException | Error e) { - throw e; - } catch (Throwable e) { - throw new RuntimeException(e); - } - sendResponse(result, request, socket); - }; - } - - @io.qt.QtUninvokable - private QHttpServerRouterRule.RouterHandler createRouterHandler(ViewHandler viewHandler, SlotInvoker slotInvoker, io.qt.core.QMetaType... metaTypes){ - return (rem, request, socket)->{ - Object[] values = values(rem, metaTypes); - Object result; - try { - result = slotInvoker.invoke(viewHandler, values); - } catch (RuntimeException | Error e) { - throw e; - } catch (Throwable e) { - throw new RuntimeException(e); - } - sendResponse(result, request, socket); - }; - } - + @Override + protected void missingHandler(QHttpServerRequest request, io.qt.network.QTcpSocket socket) { + missingHandler(QtJambi_LibraryUtilities.internal.nativeId(this), + QtJambi_LibraryUtilities.internal.checkedNativeId(request), + QtJambi_LibraryUtilities.internal.nativeId(socket)); + } + + @io.qt.QtUninvokable + private native void missingHandler(long __this__nativeId, long request, long socket); + + @Override + protected boolean handleRequest(QHttpServerRequest request, io.qt.network.QTcpSocket socket) { + return handleRequest(QtJambi_LibraryUtilities.internal.nativeId(this), + QtJambi_LibraryUtilities.internal.checkedNativeId(request), + QtJambi_LibraryUtilities.internal.nativeId(socket)); + } + + @io.qt.QtUninvokable + private native boolean handleRequest(long __this__nativeId, long request, long socket); + + @io.qt.QtUninvokable + private void sendResponse(QHttpServerResponse response, QHttpServerRequest request, + io.qt.network.QTcpSocket socket) { + sendResponse(QtJambi_LibraryUtilities.internal.nativeId(this), + QtJambi_LibraryUtilities.internal.checkedNativeId(response), + QtJambi_LibraryUtilities.internal.checkedNativeId(request), + QtJambi_LibraryUtilities.internal.nativeId(socket)); + } + + @io.qt.QtUninvokable + private void sendResponse(Object result, QHttpServerRequest request, io.qt.network.QTcpSocket socket) { + if (result instanceof QHttpServerResponse) + sendResponse((QHttpServerResponse) result, request, socket); + else if (result instanceof String) + sendResponse(new QHttpServerResponse((String) result), request, socket); + else if (result instanceof io.qt.core.QByteArray) + sendResponse(new QHttpServerResponse((io.qt.core.QByteArray) result), request, socket); + else if (result instanceof io.qt.core.QJsonArray) + sendResponse(new QHttpServerResponse((io.qt.core.QJsonArray) result), request, socket); + else if (result instanceof io.qt.core.QJsonObject) + sendResponse(new QHttpServerResponse((io.qt.core.QJsonObject) result), request, socket); + else if (result == null) + sendResponse(new QHttpServerResponse(QHttpServerResponder.StatusCode.NoContent), request, socket); + else + sendResponse(new QHttpServerResponse(result.toString()), request, socket); + } + + @io.qt.QtUninvokable + private native void sendResponse(long __this__nativeId, long response, long request, long socket); + + public interface GenericViewHandler { + void invoke(Object[] args, QHttpServerResponder responder, QHttpServerRequest request); + } + + private Object[] values(io.qt.core.QRegularExpressionMatch rem, io.qt.core.QMetaType[] metaTypes, + Object... requestResponder) { + Object[] values = new Object[metaTypes.length + requestResponder.length]; + for (int i = 0; i < metaTypes.length; i++) { + String cpt = rem.captured(i + 1); + values[i] = io.qt.core.QVariant.convert(cpt, metaTypes[i]); + } + for (int i = 0; i < requestResponder.length; i++) { + values[metaTypes.length + i] = requestResponder[i]; + } + return values; + } + + @io.qt.QtUninvokable + private QHttpServerRouterRule.RouterHandler createRouterHandler(GenericViewHandler viewHandler, + io.qt.core.QMetaType... metaTypes) { + return (rem, request, socket) -> { + Object[] values = values(rem, metaTypes); + viewHandler.invoke(values, makeResponder(request, socket), request); + }; + } + + @io.qt.QtUninvokable + private QHttpServerRouterRule.RouterHandler createRouterHandler( + java.util.function.BiFunction viewHandler, + io.qt.core.QMetaType... metaTypes) { + return (rem, request, socket) -> { + Object[] values = values(rem, metaTypes); + R result = viewHandler.apply(values, request); + sendResponse(result, request, socket); + }; + } + + @io.qt.QtUninvokable + private QHttpServerRouterRule.RouterHandler createRouterHandler( + java.util.function.Function viewHandler, io.qt.core.QMetaType... metaTypes) { + return (rem, request, socket) -> { + Object[] values = values(rem, metaTypes); + R result = viewHandler.apply(values); + sendResponse(result, request, socket); + }; + } + + @io.qt.QtUninvokable + private QHttpServerRouterRule.RouterHandler createRouterHandler( + java.util.function.BiConsumer viewHandler, + io.qt.core.QMetaType... metaTypes) { + return (rem, request, socket) -> { + Object[] values = values(rem, metaTypes); + viewHandler.accept(values, makeResponder(request, socket)); + }; + } + + @io.qt.QtUninvokable + private QHttpServerRouterRule.RouterHandler createRouterHandlerResponder( + ViewHandler viewHandler, SlotInvoker slotInvoker, io.qt.core.QMetaType... metaTypes) { + return (rem, request, socket) -> { + Object[] values = values(rem, metaTypes, makeResponder(request, socket)); + try { + slotInvoker.invoke(viewHandler, values); + } catch (RuntimeException | Error e) { + throw e; + } catch (Throwable e) { + throw new RuntimeException(e); + } + }; + } + + @io.qt.QtUninvokable + private QHttpServerRouterRule.RouterHandler createRouterHandlerRequestResponder( + ViewHandler viewHandler, SlotInvoker slotInvoker, io.qt.core.QMetaType... metaTypes) { + return (rem, request, socket) -> { + Object[] values = values(rem, metaTypes, request, makeResponder(request, socket)); + try { + slotInvoker.invoke(viewHandler, values); + } catch (RuntimeException | Error e) { + throw e; + } catch (Throwable e) { + throw new RuntimeException(e); + } + }; + } + + @io.qt.QtUninvokable + private QHttpServerRouterRule.RouterHandler createRouterHandlerResponderRequest( + ViewHandler viewHandler, SlotInvoker slotInvoker, io.qt.core.QMetaType... metaTypes) { + return (rem, request, socket) -> { + Object[] values = values(rem, metaTypes, makeResponder(request, socket), request); + try { + slotInvoker.invoke(viewHandler, values); + } catch (RuntimeException | Error e) { + throw e; + } catch (Throwable e) { + throw new RuntimeException(e); + } + }; + } + + @io.qt.QtUninvokable + private QHttpServerRouterRule.RouterHandler createRouterHandlerRequest( + ViewHandler viewHandler, SlotInvoker slotInvoker, io.qt.core.QMetaType... metaTypes) { + return (rem, request, socket) -> { + Object[] values = values(rem, metaTypes, request); + Object result; + try { + result = slotInvoker.invoke(viewHandler, values); + } catch (RuntimeException | Error e) { + throw e; + } catch (Throwable e) { + throw new RuntimeException(e); + } + sendResponse(result, request, socket); + }; + } + + @io.qt.QtUninvokable + private QHttpServerRouterRule.RouterHandler createRouterHandler( + ViewHandler viewHandler, SlotInvoker slotInvoker, io.qt.core.QMetaType... metaTypes) { + return (rem, request, socket) -> { + Object[] values = values(rem, metaTypes); + Object result; + try { + result = slotInvoker.invoke(viewHandler, values); + } catch (RuntimeException | Error e) { + throw e; + } catch (Throwable e) { + throw new RuntimeException(e); + } + sendResponse(result, request, socket); + }; + } + @io.qt.QtUninvokable public boolean route(String pathPattern, GenericViewHandler viewHandler, io.qt.core.QMetaType... metaTypes) { - if(pathPattern==null || viewHandler==null || metaTypes==null) - return false; - return router().addRule(new QHttpServerRouterRule(pathPattern, createRouterHandler(viewHandler, metaTypes)), metaTypes); - } - - @io.qt.QtUninvokable - public boolean route(java.util.function.Function ruleFactory, GenericViewHandler viewHandler, io.qt.core.QMetaType... metaTypes) { - if(viewHandler==null || metaTypes==null) - return false; - return router().addRule(ruleFactory.apply(createRouterHandler(viewHandler, metaTypes)), metaTypes); - } - - @io.qt.QtUninvokable - public boolean route(String pathPattern, io.qt.httpserver.QHttpServerRequest.Methods methods, GenericViewHandler viewHandler, io.qt.core.QMetaType... metaTypes) { - if(pathPattern==null || viewHandler==null || metaTypes==null) - return false; - return router().addRule(new QHttpServerRouterRule(pathPattern, methods, createRouterHandler(viewHandler, metaTypes)), metaTypes); - } - - @io.qt.QtUninvokable - public boolean route(java.util.function.Function ruleFactory, java.util.function.BiFunction viewHandler, io.qt.core.QMetaType... metaTypes) { - if(viewHandler==null || metaTypes==null) - return false; - return router().addRule(ruleFactory.apply(createRouterHandler(viewHandler, metaTypes)), metaTypes); - } - - @io.qt.QtUninvokable - public boolean route(String pathPattern, java.util.function.BiFunction viewHandler, io.qt.core.QMetaType... metaTypes) { - if(pathPattern==null || viewHandler==null || metaTypes==null) - return false; - return router().addRule(new QHttpServerRouterRule(pathPattern, createRouterHandler(viewHandler, metaTypes)), metaTypes); - } - - @io.qt.QtUninvokable - public boolean route(String pathPattern, io.qt.httpserver.QHttpServerRequest.Methods methods, java.util.function.BiFunction viewHandler, io.qt.core.QMetaType... metaTypes) { - if(pathPattern==null || viewHandler==null || metaTypes==null) - return false; - return router().addRule(new QHttpServerRouterRule(pathPattern, methods, createRouterHandler(viewHandler, metaTypes)), metaTypes); - } - - @io.qt.QtUninvokable - public boolean route(java.util.function.Function ruleFactory, java.util.function.BiConsumer viewHandler, io.qt.core.QMetaType... metaTypes) { - if(viewHandler==null || metaTypes==null) - return false; - return router().addRule(ruleFactory.apply(createRouterHandler(viewHandler, metaTypes)), metaTypes); - } - - @io.qt.QtUninvokable - public boolean route(String pathPattern, java.util.function.BiConsumer viewHandler, io.qt.core.QMetaType... metaTypes) { - if(pathPattern==null || viewHandler==null || metaTypes==null) - return false; - return router().addRule(new QHttpServerRouterRule(pathPattern, createRouterHandler(viewHandler, metaTypes)), metaTypes); - } - - @io.qt.QtUninvokable - public boolean route(String pathPattern, io.qt.httpserver.QHttpServerRequest.Methods methods, java.util.function.BiConsumer viewHandler, io.qt.core.QMetaType... metaTypes) { - if(pathPattern==null || viewHandler==null || metaTypes==null) - return false; - return router().addRule(new QHttpServerRouterRule(pathPattern, methods, createRouterHandler(viewHandler, metaTypes)), metaTypes); - } - - @io.qt.QtUninvokable - public boolean route(java.util.function.Function ruleFactory, java.util.function.Function viewHandler, io.qt.core.QMetaType... metaTypes) { - if(viewHandler==null || metaTypes==null) - return false; - return router().addRule(ruleFactory.apply(createRouterHandler(viewHandler, metaTypes)), metaTypes); - } - - @io.qt.QtUninvokable - public boolean route(String pathPattern, java.util.function.Function viewHandler, io.qt.core.QMetaType... metaTypes) { - if(pathPattern==null || viewHandler==null || metaTypes==null) - return false; - return router().addRule(new QHttpServerRouterRule(pathPattern, createRouterHandler(viewHandler, metaTypes)), metaTypes); - } - - @io.qt.QtUninvokable - public boolean route(String pathPattern, io.qt.httpserver.QHttpServerRequest.Methods methods, java.util.function.Function viewHandler, io.qt.core.QMetaType... metaTypes) { - if(pathPattern==null || viewHandler==null || metaTypes==null) - return false; - return router().addRule(new QHttpServerRouterRule(pathPattern, methods, createRouterHandler(viewHandler, metaTypes)), metaTypes); - } - + if (pathPattern == null || viewHandler == null || metaTypes == null) + return false; + return router().addRule(new QHttpServerRouterRule(pathPattern, createRouterHandler(viewHandler, metaTypes)), + metaTypes); + } + + @io.qt.QtUninvokable + public boolean route( + java.util.function.Function ruleFactory, + GenericViewHandler viewHandler, io.qt.core.QMetaType... metaTypes) { + if (viewHandler == null || metaTypes == null) + return false; + return router().addRule(ruleFactory.apply(createRouterHandler(viewHandler, metaTypes)), metaTypes); + } + + @io.qt.QtUninvokable + public boolean route(String pathPattern, io.qt.httpserver.QHttpServerRequest.Methods methods, + GenericViewHandler viewHandler, io.qt.core.QMetaType... metaTypes) { + if (pathPattern == null || viewHandler == null || metaTypes == null) + return false; + return router().addRule( + new QHttpServerRouterRule(pathPattern, methods, createRouterHandler(viewHandler, metaTypes)), + metaTypes); + } + + @io.qt.QtUninvokable + public boolean route( + java.util.function.Function ruleFactory, + java.util.function.BiFunction viewHandler, + io.qt.core.QMetaType... metaTypes) { + if (viewHandler == null || metaTypes == null) + return false; + return router().addRule(ruleFactory.apply(createRouterHandler(viewHandler, metaTypes)), metaTypes); + } + + @io.qt.QtUninvokable + public boolean route(String pathPattern, + java.util.function.BiFunction viewHandler, + io.qt.core.QMetaType... metaTypes) { + if (pathPattern == null || viewHandler == null || metaTypes == null) + return false; + return router().addRule(new QHttpServerRouterRule(pathPattern, createRouterHandler(viewHandler, metaTypes)), + metaTypes); + } + + @io.qt.QtUninvokable + public boolean route(String pathPattern, io.qt.httpserver.QHttpServerRequest.Methods methods, + java.util.function.BiFunction viewHandler, + io.qt.core.QMetaType... metaTypes) { + if (pathPattern == null || viewHandler == null || metaTypes == null) + return false; + return router().addRule( + new QHttpServerRouterRule(pathPattern, methods, createRouterHandler(viewHandler, metaTypes)), + metaTypes); + } + + @io.qt.QtUninvokable + public boolean route( + java.util.function.Function ruleFactory, + java.util.function.BiConsumer viewHandler, + io.qt.core.QMetaType... metaTypes) { + if (viewHandler == null || metaTypes == null) + return false; + return router().addRule(ruleFactory.apply(createRouterHandler(viewHandler, metaTypes)), metaTypes); + } + + @io.qt.QtUninvokable + public boolean route(String pathPattern, java.util.function.BiConsumer viewHandler, + io.qt.core.QMetaType... metaTypes) { + if (pathPattern == null || viewHandler == null || metaTypes == null) + return false; + return router().addRule(new QHttpServerRouterRule(pathPattern, createRouterHandler(viewHandler, metaTypes)), + metaTypes); + } + + @io.qt.QtUninvokable + public boolean route(String pathPattern, io.qt.httpserver.QHttpServerRequest.Methods methods, + java.util.function.BiConsumer viewHandler, + io.qt.core.QMetaType... metaTypes) { + if (pathPattern == null || viewHandler == null || metaTypes == null) + return false; + return router().addRule( + new QHttpServerRouterRule(pathPattern, methods, createRouterHandler(viewHandler, metaTypes)), + metaTypes); + } + + @io.qt.QtUninvokable + public boolean route( + java.util.function.Function ruleFactory, + java.util.function.Function viewHandler, io.qt.core.QMetaType... metaTypes) { + if (viewHandler == null || metaTypes == null) + return false; + return router().addRule(ruleFactory.apply(createRouterHandler(viewHandler, metaTypes)), metaTypes); + } + + @io.qt.QtUninvokable + public boolean route(String pathPattern, java.util.function.Function viewHandler, + io.qt.core.QMetaType... metaTypes) { + if (pathPattern == null || viewHandler == null || metaTypes == null) + return false; + return router().addRule(new QHttpServerRouterRule(pathPattern, createRouterHandler(viewHandler, metaTypes)), + metaTypes); + } + + @io.qt.QtUninvokable + public boolean route(String pathPattern, io.qt.httpserver.QHttpServerRequest.Methods methods, + java.util.function.Function viewHandler, io.qt.core.QMetaType... metaTypes) { + if (pathPattern == null || viewHandler == null || metaTypes == null) + return false; + return router().addRule( + new QHttpServerRouterRule(pathPattern, methods, createRouterHandler(viewHandler, metaTypes)), + metaTypes); + } + @FunctionalInterface - private interface SlotInvoker{ - Object invoke(ViewHandler object, Object... args) throws Throwable; - } - - private static class InvokableTypeInfo{ - SlotInvoker slotInvoker; - java.lang.reflect.Parameter[] parameters; - boolean hasReturnType; - } - + private interface SlotInvoker { + Object invoke(ViewHandler object, Object... args) throws Throwable; + } + + private static class InvokableTypeInfo { + SlotInvoker slotInvoker; + java.lang.reflect.Parameter[] parameters; + boolean hasReturnType; + } + @SuppressWarnings({ "unchecked", "rawtypes" }) - private InvokableTypeInfo type(ViewHandler slot){ - InvokableTypeInfo info = new InvokableTypeInfo<>(); - java.lang.reflect.Executable exec = QtJambi_LibraryUtilities.internal.lambdaExecutable(slot); - java.lang.reflect.Method method = null; - java.lang.reflect.Constructor constructor = null; - if (exec instanceof java.lang.reflect.Method) { - method = (java.lang.reflect.Method)exec; - info.parameters = method.getParameters(); - info.hasReturnType = method.getReturnType()!=void.class; - }else if (exec instanceof java.lang.reflect.Constructor){ - constructor = (java.lang.reflect.Constructor)exec; - info.parameters = constructor.getParameters(); - info.hasReturnType = true; - }else{ - info.parameters = new java.lang.reflect.Parameter[0]; - } - if(slot instanceof io.qt.core.QMetaObject.Slot0) { - info.slotInvoker = (object, args) -> { - ((io.qt.core.QMetaObject.Slot0)object).invoke(); - return null; - }; - }else if(slot instanceof io.qt.core.QMetaObject.Slot1) { - info.slotInvoker = (object, args) -> { - ((io.qt.core.QMetaObject.Slot1)object).invoke(args[0]); - return null; - }; - }else if(slot instanceof io.qt.core.QMetaObject.Slot2) { - info.slotInvoker = (object, args) -> { - ((io.qt.core.QMetaObject.Slot2)object).invoke(args[0], args[1]); - return null; - }; - }else if(slot instanceof io.qt.core.QMetaObject.Slot3) { - info.slotInvoker = (object, args) -> { - ((io.qt.core.QMetaObject.Slot3)object).invoke(args[0], args[1], args[2]); - return null; - }; - }else if(slot instanceof io.qt.core.QMetaObject.Slot4) { - info.slotInvoker = (object, args) -> { - ((io.qt.core.QMetaObject.Slot4)object).invoke(args[0], args[1], args[2], args[3]); - return null; - }; - }else if(slot instanceof io.qt.core.QMetaObject.Slot5) { - info.slotInvoker = (object, args) -> { - ((io.qt.core.QMetaObject.Slot5)object).invoke(args[0], args[1], args[2], args[3], args[4]); - return null; - }; - }else if(slot instanceof io.qt.core.QMetaObject.Slot6) { - info.slotInvoker = (object, args) -> { - ((io.qt.core.QMetaObject.Slot6)object).invoke(args[0], args[1], args[2], args[3], args[4], args[5]); - return null; - }; - }else if(slot instanceof io.qt.core.QMetaObject.Slot7) { - info.slotInvoker = (object, args) -> { - ((io.qt.core.QMetaObject.Slot7)object).invoke(args[0], args[1], args[2], args[3], args[4], args[5], args[6]); - return null; - }; - }else if(slot instanceof io.qt.core.QMetaObject.Slot8) { - info.slotInvoker = (object, args) -> { - ((io.qt.core.QMetaObject.Slot8)object).invoke(args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7]); - return null; - }; - }else if(slot instanceof io.qt.core.QMetaObject.Slot9) { - info.slotInvoker = (object, args) -> { - ((io.qt.core.QMetaObject.Slot9)object).invoke(args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8]); - return null; - }; - }else if(slot instanceof io.qt.core.QMetaObject.Method0) { - info.slotInvoker = (object, args) -> { - return ((io.qt.core.QMetaObject.Method0)object).invoke(); - }; - }else if(slot instanceof io.qt.core.QMetaObject.Method1) { - info.slotInvoker = (object, args) -> { - return ((io.qt.core.QMetaObject.Method1)object).invoke(args[0]); - }; - }else if(slot instanceof io.qt.core.QMetaObject.Method2) { - info.slotInvoker = (object, args) -> { - return ((io.qt.core.QMetaObject.Method2)object).invoke(args[0], args[1]); - }; - }else if(slot instanceof io.qt.core.QMetaObject.Method3) { - info.slotInvoker = (object, args) -> { - return ((io.qt.core.QMetaObject.Method3)object).invoke(args[0], args[1], args[2]); - }; - }else if(slot instanceof io.qt.core.QMetaObject.Method4) { - info.slotInvoker = (object, args) -> { - return ((io.qt.core.QMetaObject.Method4)object).invoke(args[0], args[1], args[2], args[3]); - }; - }else if(slot instanceof io.qt.core.QMetaObject.Method5) { - info.slotInvoker = (object, args) -> { - return ((io.qt.core.QMetaObject.Method5)object).invoke(args[0], args[1], args[2], args[3], args[4]); - }; - }else if(slot instanceof io.qt.core.QMetaObject.Method6) { - info.slotInvoker = (object, args) -> { - return ((io.qt.core.QMetaObject.Method6)object).invoke(args[0], args[1], args[2], args[3], args[4], args[5]); - }; - }else if(slot instanceof io.qt.core.QMetaObject.Method7) { - info.slotInvoker = (object, args) -> { - return ((io.qt.core.QMetaObject.Method7)object).invoke(args[0], args[1], args[2], args[3], args[4], args[5], args[6]); - }; - }else if(slot instanceof io.qt.core.QMetaObject.Method8) { - info.slotInvoker = (object, args) -> { - return ((io.qt.core.QMetaObject.Method8)object).invoke(args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7]); - }; - }else if(slot instanceof io.qt.core.QMetaObject.Method9) { - info.slotInvoker = (object, args) -> { - return ((io.qt.core.QMetaObject.Method9)object).invoke(args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8]); - }; - } - return info; - } - - @io.qt.QtUninvokable - public boolean route(String pathPattern, ViewHandler viewHandler) { - InvokableTypeInfo info = type(viewHandler); - if(info.slotInvoker==null) - return false; - java.lang.reflect.Parameter[] parameters = info.parameters; - int requestArg = -1; - int responderArg = -1; - for (int i = 0; i < parameters.length; i++) { - if(parameters[i].getType()==QHttpServerRequest.class) { - requestArg = i; - }else if(parameters[i].getType()==QHttpServerResponder.class) { - responderArg = i; - } - } - if(!info.hasReturnType) { // no responder! - if(responderArg==-1) { - throw new RuntimeException("QHttpServerResponder expected as argument."); - }else { - if(requestArg==-1) { - if(responderArg!=parameters.length-1) { - throw new RuntimeException("QHttpServerResponder expected to be last argument."); - } - }else { - if(responderArg0) { - throw new RuntimeException("QHttpServerResponder unexpected for suppliers."); - } - if(requestArg>0 && requestArg!=parameters.length-1) { - throw new RuntimeException("QHttpServerRequest expected to be last argument."); - } - io.qt.core.QMetaType[] metaTypes = new io.qt.core.QMetaType[parameters.length - (requestArg==-1 ? 0 : 1)]; - for(int i=0; i boolean route(java.util.function.Function ruleFactory, ViewHandler viewHandler) { - InvokableTypeInfo info = type(viewHandler); - if(info.slotInvoker==null) - return false; - java.lang.reflect.Parameter[] parameters = info.parameters; - int requestArg = -1; - int responderArg = -1; - for (int i = 0; i < parameters.length; i++) { - if(parameters[i].getType()==QHttpServerRequest.class) { - requestArg = i; - }else if(parameters[i].getType()==QHttpServerResponder.class) { - responderArg = i; - } - } - if(!info.hasReturnType) { // no responder! - if(responderArg==-1) { - throw new RuntimeException("QHttpServerResponder expected as argument."); - }else { - if(requestArg==-1) { - if(responderArg!=parameters.length-1) { - throw new RuntimeException("QHttpServerResponder expected to be last argument."); - } - }else { - if(responderArg0) { - throw new RuntimeException("QHttpServerResponder unexpected for suppliers."); - } - if(requestArg>0 && requestArg!=parameters.length-1) { - throw new RuntimeException("QHttpServerRequest expected to be last argument."); - } - io.qt.core.QMetaType[] metaTypes = new io.qt.core.QMetaType[parameters.length - (requestArg==-1 ? 0 : 1)]; - for(int i=0; i boolean route(String pathPattern, io.qt.httpserver.QHttpServerRequest.Methods methods, ViewHandler viewHandler) { - InvokableTypeInfo info = type(viewHandler); - if(info.slotInvoker==null) - return false; - java.lang.reflect.Parameter[] parameters = info.parameters; - int requestArg = -1; - int responderArg = -1; - for (int i = 0; i < parameters.length; i++) { - if(parameters[i].getType()==QHttpServerRequest.class) { - requestArg = i; - }else if(parameters[i].getType()==QHttpServerResponder.class) { - responderArg = i; - } - } - if(!info.hasReturnType) { // no responder! - if(responderArg==-1) { - throw new RuntimeException("QHttpServerResponder expected as argument."); - }else { - if(requestArg==-1) { - if(responderArg!=parameters.length-1) { - throw new RuntimeException("QHttpServerResponder expected to be last argument."); - } - }else { - if(responderArg0) { - throw new RuntimeException("QHttpServerResponder unexpected for suppliers."); - } - if(requestArg>0 && requestArg!=parameters.length-1) { - throw new RuntimeException("QHttpServerRequest expected to be last argument."); - } - io.qt.core.QMetaType[] metaTypes = new io.qt.core.QMetaType[parameters.length - (requestArg==-1 ? 0 : 1)]; - for(int i=0; i InvokableTypeInfo type( + ViewHandler slot) { + InvokableTypeInfo info = new InvokableTypeInfo<>(); + java.lang.reflect.Executable exec = QtJambi_LibraryUtilities.internal.lambdaExecutable(slot); + java.lang.reflect.Method method = null; + java.lang.reflect.Constructor constructor = null; + if (exec instanceof java.lang.reflect.Method) { + method = (java.lang.reflect.Method) exec; + info.parameters = method.getParameters(); + info.hasReturnType = method.getReturnType() != void.class; + } else if (exec instanceof java.lang.reflect.Constructor) { + constructor = (java.lang.reflect.Constructor) exec; + info.parameters = constructor.getParameters(); + info.hasReturnType = true; + } else { + info.parameters = new java.lang.reflect.Parameter[0]; + } + if (slot instanceof io.qt.core.QMetaObject.Slot0) { + info.slotInvoker = (object, args) -> { + ((io.qt.core.QMetaObject.Slot0) object).invoke(); + return null; + }; + } else if (slot instanceof io.qt.core.QMetaObject.Slot1) { + info.slotInvoker = (object, args) -> { + ((io.qt.core.QMetaObject.Slot1) object).invoke(args[0]); + return null; + }; + } else if (slot instanceof io.qt.core.QMetaObject.Slot2) { + info.slotInvoker = (object, args) -> { + ((io.qt.core.QMetaObject.Slot2) object).invoke(args[0], args[1]); + return null; + }; + } else if (slot instanceof io.qt.core.QMetaObject.Slot3) { + info.slotInvoker = (object, args) -> { + ((io.qt.core.QMetaObject.Slot3) object).invoke(args[0], args[1], args[2]); + return null; + }; + } else if (slot instanceof io.qt.core.QMetaObject.Slot4) { + info.slotInvoker = (object, args) -> { + ((io.qt.core.QMetaObject.Slot4) object).invoke(args[0], args[1], args[2], args[3]); + return null; + }; + } else if (slot instanceof io.qt.core.QMetaObject.Slot5) { + info.slotInvoker = (object, args) -> { + ((io.qt.core.QMetaObject.Slot5) object).invoke(args[0], args[1], args[2], args[3], args[4]); + return null; + }; + } else if (slot instanceof io.qt.core.QMetaObject.Slot6) { + info.slotInvoker = (object, args) -> { + ((io.qt.core.QMetaObject.Slot6) object).invoke(args[0], args[1], args[2], args[3], args[4], args[5]); + return null; + }; + } else if (slot instanceof io.qt.core.QMetaObject.Slot7) { + info.slotInvoker = (object, args) -> { + ((io.qt.core.QMetaObject.Slot7) object).invoke(args[0], args[1], args[2], args[3], args[4], args[5], + args[6]); + return null; + }; + } else if (slot instanceof io.qt.core.QMetaObject.Slot8) { + info.slotInvoker = (object, args) -> { + ((io.qt.core.QMetaObject.Slot8) object).invoke(args[0], args[1], args[2], args[3], args[4], args[5], + args[6], args[7]); + return null; + }; + } else if (slot instanceof io.qt.core.QMetaObject.Slot9) { + info.slotInvoker = (object, args) -> { + ((io.qt.core.QMetaObject.Slot9) object).invoke(args[0], args[1], args[2], args[3], args[4], args[5], + args[6], args[7], args[8]); + return null; + }; + } else if (slot instanceof io.qt.core.QMetaObject.Method0) { + info.slotInvoker = (object, args) -> { + return ((io.qt.core.QMetaObject.Method0) object).invoke(); + }; + } else if (slot instanceof io.qt.core.QMetaObject.Method1) { + info.slotInvoker = (object, args) -> { + return ((io.qt.core.QMetaObject.Method1) object).invoke(args[0]); + }; + } else if (slot instanceof io.qt.core.QMetaObject.Method2) { + info.slotInvoker = (object, args) -> { + return ((io.qt.core.QMetaObject.Method2) object).invoke(args[0], args[1]); + }; + } else if (slot instanceof io.qt.core.QMetaObject.Method3) { + info.slotInvoker = (object, args) -> { + return ((io.qt.core.QMetaObject.Method3) object).invoke(args[0], args[1], args[2]); + }; + } else if (slot instanceof io.qt.core.QMetaObject.Method4) { + info.slotInvoker = (object, args) -> { + return ((io.qt.core.QMetaObject.Method4) object).invoke(args[0], args[1], args[2], args[3]); + }; + } else if (slot instanceof io.qt.core.QMetaObject.Method5) { + info.slotInvoker = (object, args) -> { + return ((io.qt.core.QMetaObject.Method5) object).invoke(args[0], args[1], args[2], args[3], args[4]); + }; + } else if (slot instanceof io.qt.core.QMetaObject.Method6) { + info.slotInvoker = (object, args) -> { + return ((io.qt.core.QMetaObject.Method6) object).invoke(args[0], args[1], args[2], args[3], args[4], + args[5]); + }; + } else if (slot instanceof io.qt.core.QMetaObject.Method7) { + info.slotInvoker = (object, args) -> { + return ((io.qt.core.QMetaObject.Method7) object).invoke(args[0], args[1], args[2], args[3], args[4], + args[5], args[6]); + }; + } else if (slot instanceof io.qt.core.QMetaObject.Method8) { + info.slotInvoker = (object, args) -> { + return ((io.qt.core.QMetaObject.Method8) object).invoke(args[0], args[1], args[2], args[3], args[4], + args[5], args[6], args[7]); + }; + } else if (slot instanceof io.qt.core.QMetaObject.Method9) { + info.slotInvoker = (object, args) -> { + return ((io.qt.core.QMetaObject.Method9) object).invoke(args[0], args[1], args[2], args[3], args[4], + args[5], args[6], args[7], args[8]); + }; + } + return info; + } + + @io.qt.QtUninvokable + public boolean route(String pathPattern, + ViewHandler viewHandler) { + InvokableTypeInfo info = type(viewHandler); + if (info.slotInvoker == null) + return false; + java.lang.reflect.Parameter[] parameters = info.parameters; + int requestArg = -1; + int responderArg = -1; + for (int i = 0; i < parameters.length; i++) { + if (parameters[i].getType() == QHttpServerRequest.class) { + requestArg = i; + } else if (parameters[i].getType() == QHttpServerResponder.class) { + responderArg = i; + } + } + if (!info.hasReturnType) { // no responder! + if (responderArg == -1) { + throw new RuntimeException("QHttpServerResponder expected as argument."); + } else { + if (requestArg == -1) { + if (responderArg != parameters.length - 1) { + throw new RuntimeException("QHttpServerResponder expected to be last argument."); + } + } else { + if (responderArg < parameters.length - 2) { + throw new RuntimeException( + "QHttpServerResponder and QHttpServerRequest expected to be last arguments."); + } + if (requestArg < parameters.length - 2) { + throw new RuntimeException( + "QHttpServerResponder and QHttpServerRequest expected to be last arguments."); + } + } + } + io.qt.core.QMetaType[] metaTypes = new io.qt.core.QMetaType[parameters.length - (requestArg == -1 ? 1 : 2)]; + for (int i = 0; i < metaTypes.length; ++i) { + metaTypes[i] = new io.qt.core.QMetaType( + QtJambi_LibraryUtilities.internal.registerMetaType(parameters[i])); + } + if (requestArg == -1) { + return router().addRule(new QHttpServerRouterRule(pathPattern, + createRouterHandlerResponder(viewHandler, info.slotInvoker, metaTypes)), metaTypes); + } else if (requestArg < responderArg) { + return router().addRule( + new QHttpServerRouterRule(pathPattern, + createRouterHandlerRequestResponder(viewHandler, info.slotInvoker, metaTypes)), + metaTypes); + } else { + return router().addRule( + new QHttpServerRouterRule(pathPattern, + createRouterHandlerResponderRequest(viewHandler, info.slotInvoker, metaTypes)), + metaTypes); + } + } else { + if (responderArg > 0) { + throw new RuntimeException("QHttpServerResponder unexpected for suppliers."); + } + if (requestArg > 0 && requestArg != parameters.length - 1) { + throw new RuntimeException("QHttpServerRequest expected to be last argument."); + } + io.qt.core.QMetaType[] metaTypes = new io.qt.core.QMetaType[parameters.length - (requestArg == -1 ? 0 : 1)]; + for (int i = 0; i < metaTypes.length; ++i) { + metaTypes[i] = new io.qt.core.QMetaType( + QtJambi_LibraryUtilities.internal.registerMetaType(parameters[i])); + } + if (requestArg == -1) { + return router().addRule(new QHttpServerRouterRule(pathPattern, + createRouterHandler(viewHandler, info.slotInvoker, metaTypes)), metaTypes); + } else { + return router().addRule(new QHttpServerRouterRule(pathPattern, + createRouterHandlerRequest(viewHandler, info.slotInvoker, metaTypes)), metaTypes); + } + } + } + + @io.qt.QtUninvokable + public boolean route( + java.util.function.Function ruleFactory, + ViewHandler viewHandler) { + InvokableTypeInfo info = type(viewHandler); + if (info.slotInvoker == null) + return false; + java.lang.reflect.Parameter[] parameters = info.parameters; + int requestArg = -1; + int responderArg = -1; + for (int i = 0; i < parameters.length; i++) { + if (parameters[i].getType() == QHttpServerRequest.class) { + requestArg = i; + } else if (parameters[i].getType() == QHttpServerResponder.class) { + responderArg = i; + } + } + if (!info.hasReturnType) { // no responder! + if (responderArg == -1) { + throw new RuntimeException("QHttpServerResponder expected as argument."); + } else { + if (requestArg == -1) { + if (responderArg != parameters.length - 1) { + throw new RuntimeException("QHttpServerResponder expected to be last argument."); + } + } else { + if (responderArg < parameters.length - 2) { + throw new RuntimeException( + "QHttpServerResponder and QHttpServerRequest expected to be last arguments."); + } + if (requestArg < parameters.length - 2) { + throw new RuntimeException( + "QHttpServerResponder and QHttpServerRequest expected to be last arguments."); + } + } + } + io.qt.core.QMetaType[] metaTypes = new io.qt.core.QMetaType[parameters.length - (requestArg == -1 ? 1 : 2)]; + for (int i = 0; i < metaTypes.length; ++i) { + metaTypes[i] = new io.qt.core.QMetaType( + QtJambi_LibraryUtilities.internal.registerMetaType(parameters[i])); + } + if (requestArg == -1) { + return router().addRule( + ruleFactory.apply(createRouterHandlerResponder(viewHandler, info.slotInvoker, metaTypes)), + metaTypes); + } else if (requestArg < responderArg) { + return router().addRule( + ruleFactory + .apply(createRouterHandlerRequestResponder(viewHandler, info.slotInvoker, metaTypes)), + metaTypes); + } else { + return router().addRule( + ruleFactory + .apply(createRouterHandlerResponderRequest(viewHandler, info.slotInvoker, metaTypes)), + metaTypes); + } + } else { + if (responderArg > 0) { + throw new RuntimeException("QHttpServerResponder unexpected for suppliers."); + } + if (requestArg > 0 && requestArg != parameters.length - 1) { + throw new RuntimeException("QHttpServerRequest expected to be last argument."); + } + io.qt.core.QMetaType[] metaTypes = new io.qt.core.QMetaType[parameters.length - (requestArg == -1 ? 0 : 1)]; + for (int i = 0; i < metaTypes.length; ++i) { + metaTypes[i] = new io.qt.core.QMetaType( + QtJambi_LibraryUtilities.internal.registerMetaType(parameters[i])); + } + if (requestArg == -1) { + return router().addRule( + ruleFactory.apply(createRouterHandler(viewHandler, info.slotInvoker, metaTypes)), metaTypes); + } else { + return router().addRule( + ruleFactory.apply(createRouterHandlerRequest(viewHandler, info.slotInvoker, metaTypes)), + metaTypes); + } + } + } + + @io.qt.QtUninvokable + public boolean route(String pathPattern, + io.qt.httpserver.QHttpServerRequest.Methods methods, ViewHandler viewHandler) { + InvokableTypeInfo info = type(viewHandler); + if (info.slotInvoker == null) + return false; + java.lang.reflect.Parameter[] parameters = info.parameters; + int requestArg = -1; + int responderArg = -1; + for (int i = 0; i < parameters.length; i++) { + if (parameters[i].getType() == QHttpServerRequest.class) { + requestArg = i; + } else if (parameters[i].getType() == QHttpServerResponder.class) { + responderArg = i; + } + } + if (!info.hasReturnType) { // no responder! + if (responderArg == -1) { + throw new RuntimeException("QHttpServerResponder expected as argument."); + } else { + if (requestArg == -1) { + if (responderArg != parameters.length - 1) { + throw new RuntimeException("QHttpServerResponder expected to be last argument."); + } + } else { + if (responderArg < parameters.length - 2) { + throw new RuntimeException( + "QHttpServerResponder and QHttpServerRequest expected to be last arguments."); + } + if (requestArg < parameters.length - 2) { + throw new RuntimeException( + "QHttpServerResponder and QHttpServerRequest expected to be last arguments."); + } + } + } + io.qt.core.QMetaType[] metaTypes = new io.qt.core.QMetaType[parameters.length - (requestArg == -1 ? 1 : 2)]; + for (int i = 0; i < metaTypes.length; ++i) { + metaTypes[i] = new io.qt.core.QMetaType( + QtJambi_LibraryUtilities.internal.registerMetaType(parameters[i])); + } + if (requestArg == -1) { + return router().addRule(new QHttpServerRouterRule(pathPattern, methods, + createRouterHandlerResponder(viewHandler, info.slotInvoker, metaTypes)), metaTypes); + } else if (requestArg < responderArg) { + return router().addRule( + new QHttpServerRouterRule(pathPattern, methods, + createRouterHandlerRequestResponder(viewHandler, info.slotInvoker, metaTypes)), + metaTypes); + } else { + return router().addRule( + new QHttpServerRouterRule(pathPattern, methods, + createRouterHandlerResponderRequest(viewHandler, info.slotInvoker, metaTypes)), + metaTypes); + } + } else { + if (responderArg > 0) { + throw new RuntimeException("QHttpServerResponder unexpected for suppliers."); + } + if (requestArg > 0 && requestArg != parameters.length - 1) { + throw new RuntimeException("QHttpServerRequest expected to be last argument."); + } + io.qt.core.QMetaType[] metaTypes = new io.qt.core.QMetaType[parameters.length - (requestArg == -1 ? 0 : 1)]; + for (int i = 0; i < metaTypes.length; ++i) { + metaTypes[i] = new io.qt.core.QMetaType( + QtJambi_LibraryUtilities.internal.registerMetaType(parameters[i])); + } + if (requestArg == -1) { + return router().addRule(new QHttpServerRouterRule(pathPattern, methods, + createRouterHandler(viewHandler, info.slotInvoker, metaTypes)), metaTypes); + } else { + return router().addRule(new QHttpServerRouterRule(pathPattern, methods, + createRouterHandlerRequest(viewHandler, info.slotInvoker, metaTypes)), metaTypes); + } + } } }// class -class QHttpServerRouter___{ - - @io.qt.QtUninvokable - public final void addConverter(Class type, java.lang.String regexp){ - io.qt.core.QMetaType metaType = io.qt.core.QMetaType.fromType(type); +class QHttpServerRouter___ { + + @io.qt.QtUninvokable + public final void addConverter(Class type, java.lang.String regexp) { + io.qt.core.QMetaType metaType = io.qt.core.QMetaType.fromType(type); addConverter(metaType, regexp); } - - @io.qt.QtUninvokable - public final void removeConverter(Class type){ - io.qt.core.QMetaType metaType = io.qt.core.QMetaType.fromType(type); + + @io.qt.QtUninvokable + public final void removeConverter(Class type) { + io.qt.core.QMetaType metaType = io.qt.core.QMetaType.fromType(type); removeConverter(metaType); } - - @io.qt.QtUninvokable - boolean addRule(QHttpServerRouterRule rule, io.qt.core.QMetaType... metaTypes){ - io.qt.core.QList _metaTypes = new io.qt.core.QList<>(io.qt.core.QMetaType.class); - _metaTypes.append(java.util.Arrays.asList(metaTypes)); - return addRule(rule, _metaTypes); - } - - @io.qt.QtUninvokable - boolean addRule(QHttpServerRouterRule rule, io.qt.core.QList metaTypes){ - return addRuleImpl(QtJambi_LibraryUtilities.internal.nativeId(this), QtJambi_LibraryUtilities.internal.checkedNativeId(rule), QtJambi_LibraryUtilities.internal.checkedNativeId(metaTypes)); - } - - @io.qt.QtUninvokable - private native boolean addRuleImpl(long __this__nativeId, long rule, long metaTypes); -}// class -class QAbstractHttpServer___{ - @SuppressWarnings({"exports"}) - @io.qt.QtUninvokable - public final int listen(io.qt.network.QHostAddress.SpecialAddress address, int port){ - return listen(new io.qt.network.QHostAddress(address), port); - } - - @io.qt.QtUninvokable - public final int listen(String address, int port){ - return listen(new io.qt.network.QHostAddress(address), port); - } -}// class + @io.qt.QtUninvokable + boolean addRule(QHttpServerRouterRule rule, io.qt.core.QMetaType... metaTypes) { + io.qt.core.QList _metaTypes = new io.qt.core.QList<>(io.qt.core.QMetaType.class); + _metaTypes.append(java.util.Arrays.asList(metaTypes)); + return addRule(rule, _metaTypes); + } -class QHttpServerResponder___{ - @io.qt.QtUninvokable - public final void write(String data, String mimeType){ - write(io.qt.core.QString.toUtf8(data), io.qt.core.QString.toUtf8(mimeType)); + @io.qt.QtUninvokable + boolean addRule(QHttpServerRouterRule rule, io.qt.core.QList metaTypes) { + return addRuleImpl(QtJambi_LibraryUtilities.internal.nativeId(this), + QtJambi_LibraryUtilities.internal.checkedNativeId(rule), + QtJambi_LibraryUtilities.internal.checkedNativeId(metaTypes)); } - + + @io.qt.QtUninvokable + private native boolean addRuleImpl(long __this__nativeId, long rule, long metaTypes); +}// class + +class QAbstractHttpServer___ { + @SuppressWarnings({ "exports" }) @io.qt.QtUninvokable - public final void write(String data, String mimeType, io.qt.httpserver.QHttpServerResponder.StatusCode status){ - write(io.qt.core.QString.toUtf8(data), io.qt.core.QString.toUtf8(mimeType), status); + public final int listen(io.qt.network.QHostAddress.SpecialAddress address, int port) { + return listen(new io.qt.network.QHostAddress(address), port); } - + @io.qt.QtUninvokable - public final void write(io.qt.core.QIODevice data, String mimeType){ - write(data, io.qt.core.QString.toUtf8(mimeType)); + public final int listen(String address, int port) { + return listen(new io.qt.network.QHostAddress(address), port); } - +}// class + +class QHttpServerResponder___ { @io.qt.QtUninvokable - public final void write(io.qt.core.QIODevice data, String mimeType, io.qt.httpserver.QHttpServerResponder.StatusCode status){ - write(data, io.qt.core.QString.toUtf8(mimeType), status); + public final void write(String data, String mimeType) { + write(io.qt.core.QString.toUtf8(data), io.qt.core.QString.toUtf8(mimeType)); } - + @io.qt.QtUninvokable - public final void write(io.qt.core.QByteArray data, String mimeType){ - write(data, io.qt.core.QString.toUtf8(mimeType)); + public final void write(String data, String mimeType, io.qt.httpserver.QHttpServerResponder.StatusCode status) { + write(io.qt.core.QString.toUtf8(data), io.qt.core.QString.toUtf8(mimeType), status); } - + @io.qt.QtUninvokable - public final void write(io.qt.core.QByteArray data, String mimeType, io.qt.httpserver.QHttpServerResponder.StatusCode status){ - write(data, io.qt.core.QString.toUtf8(mimeType), status); + public final void write(io.qt.core.QIODevice data, String mimeType) { + write(data, io.qt.core.QString.toUtf8(mimeType)); } - + @io.qt.QtUninvokable - public final void writeBody(byte[] body){ - writeBody(new io.qt.core.QByteArray(body)); + public final void write(io.qt.core.QIODevice data, String mimeType, + io.qt.httpserver.QHttpServerResponder.StatusCode status) { + write(data, io.qt.core.QString.toUtf8(mimeType), status); } - + @io.qt.QtUninvokable - public final void writeHeader(io.qt.core.QByteArray key, String value){ - writeHeader(key, io.qt.core.QString.toUtf8(value)); + public final void write(io.qt.core.QByteArray data, String mimeType) { + write(data, io.qt.core.QString.toUtf8(mimeType)); } - + @io.qt.QtUninvokable - public final void writeHeader(String key, io.qt.core.QByteArray value){ - writeHeader(io.qt.core.QString.toUtf8(key), value); + public final void write(io.qt.core.QByteArray data, String mimeType, + io.qt.httpserver.QHttpServerResponder.StatusCode status) { + write(data, io.qt.core.QString.toUtf8(mimeType), status); } - - @io.qt.QtUninvokable - public final void writeStatusLine(io.qt.core.QPair version){ - writeStatusLine(io.qt.httpserver.QHttpServerResponder.StatusCode.Ok, version); + + @io.qt.QtUninvokable + public final void writeBody(byte[] body) { + writeBody(new io.qt.core.QByteArray(body)); } - + @io.qt.QtUninvokable - public final void writeStatusLine(io.qt.httpserver.QHttpServerResponder.StatusCode status){ - writeStatusLine(status, new io.qt.core.QPair<>((byte)1, (byte)1)); + public final void writeHeader(io.qt.core.QByteArray key, String value) { + writeHeader(key, io.qt.core.QString.toUtf8(value)); } - + @io.qt.QtUninvokable - public final void writeStatusLine(){ - writeStatusLine(io.qt.httpserver.QHttpServerResponder.StatusCode.Ok, new io.qt.core.QPair<>((byte)1, (byte)1)); + public final void writeHeader(String key, io.qt.core.QByteArray value) { + writeHeader(io.qt.core.QString.toUtf8(key), value); } - - @SafeVarargs - @io.qt.QtUninvokable - public final io.qt.core.QPair[] headerList(io.qt.core.QPair... pairs){ - return pairs; + + @SafeVarargs + @io.qt.QtUninvokable + public final io.qt.core.QPair[] headerList( + io.qt.core.QPair... pairs) { + return pairs; } - - @SafeVarargs - @io.qt.QtUninvokable - public final void write(io.qt.core.QByteArray data, io.qt.core.QPair... headers){ + + @SafeVarargs + @io.qt.QtUninvokable + public final void write(io.qt.core.QByteArray data, + io.qt.core.QPair... headers) { write(data, headers, io.qt.httpserver.QHttpServerResponder.StatusCode.Ok); } - - @SafeVarargs - @io.qt.QtUninvokable - public final void write(io.qt.core.QIODevice data, io.qt.core.QPair... headers){ + + @SafeVarargs + @io.qt.QtUninvokable + public final void write(io.qt.core.QIODevice data, + io.qt.core.QPair... headers) { write(data, headers, io.qt.httpserver.QHttpServerResponder.StatusCode.Ok); } - - @SafeVarargs - @io.qt.QtUninvokable - public final void write(io.qt.core.QJsonDocument document, io.qt.core.QPair... headers){ + + @SafeVarargs + @io.qt.QtUninvokable + public final void write(io.qt.core.QJsonDocument document, + io.qt.core.QPair... headers) { write(document, headers, io.qt.httpserver.QHttpServerResponder.StatusCode.Ok); } - - @SafeVarargs - @io.qt.QtUninvokable - public final void write(io.qt.core.QPair... headers){ + + @SafeVarargs + @io.qt.QtUninvokable + public final void write(io.qt.core.QPair... headers) { write(headers, io.qt.httpserver.QHttpServerResponder.StatusCode.Ok); } }// class -class QHttpServerResponse___{ - @io.qt.QtUninvokable - public final void addHeader(io.qt.core.QByteArray key, String value){ - addHeader(key, io.qt.core.QString.toUtf8(value)); +class QHttpServerResponse___ { + @io.qt.QtUninvokable + public final void addHeader(io.qt.core.QByteArray key, String value) { + addHeader(key, io.qt.core.QString.toUtf8(value)); } - + @io.qt.QtUninvokable - public final void addHeader(String key, io.qt.core.QByteArray value){ - addHeader(io.qt.core.QString.toUtf8(key), value); + public final void addHeader(String key, io.qt.core.QByteArray value) { + addHeader(io.qt.core.QString.toUtf8(key), value); } - @io.qt.QtUninvokable - public final void setHeader(io.qt.core.QByteArray key, String value){ - setHeader(key, io.qt.core.QString.toUtf8(value)); + + @io.qt.QtUninvokable + public final void setHeader(io.qt.core.QByteArray key, String value) { + setHeader(key, io.qt.core.QString.toUtf8(value)); } - + @io.qt.QtUninvokable - public final void setHeader(String key, io.qt.core.QByteArray value){ - setHeader(io.qt.core.QString.toUtf8(key), value); + public final void setHeader(String key, io.qt.core.QByteArray value) { + setHeader(io.qt.core.QString.toUtf8(key), value); } - - @io.qt.QtUninvokable - public final void clearHeader(String key){ - clearHeader(io.qt.core.QString.toUtf8(key)); + + @io.qt.QtUninvokable + public final void clearHeader(String key) { + clearHeader(io.qt.core.QString.toUtf8(key)); } - - @io.qt.QtUninvokable - public final boolean hasHeader(String name){ - return hasHeader(io.qt.core.QString.toUtf8(name)); + + @io.qt.QtUninvokable + public final boolean hasHeader(String name) { + return hasHeader(io.qt.core.QString.toUtf8(name)); } - - @io.qt.QtUninvokable - public final boolean hasHeader(String name, io.qt.core.QByteArray value){ - return hasHeader(io.qt.core.QString.toUtf8(name), value); + + @io.qt.QtUninvokable + public final boolean hasHeader(String name, io.qt.core.QByteArray value) { + return hasHeader(io.qt.core.QString.toUtf8(name), value); } - - @io.qt.QtUninvokable - public final boolean hasHeader(String name, String value){ - return hasHeader(io.qt.core.QString.toUtf8(name), io.qt.core.QString.toUtf8(value)); + + @io.qt.QtUninvokable + public final boolean hasHeader(String name, String value) { + return hasHeader(io.qt.core.QString.toUtf8(name), io.qt.core.QString.toUtf8(value)); } - - @io.qt.QtUninvokable - public final io.qt.core.QList headers(String name){ - return headers(io.qt.core.QString.toUtf8(name)); + + @io.qt.QtUninvokable + public final io.qt.core.QList headers(String name) { + return headers(io.qt.core.QString.toUtf8(name)); } - - public QHttpServerResponse(String mimeType, io.qt.core.QByteArray data) { + +public QHttpServerResponse(String mimeType, io.qt.core.QByteArray data) { this(io.qt.core.QString.toUtf8(mimeType), data); } - - public QHttpServerResponse(String mimeType, String data) { + +public QHttpServerResponse(String mimeType, String data) { this(io.qt.core.QString.toUtf8(mimeType), io.qt.core.QString.toUtf8(data)); } - - public QHttpServerResponse(io.qt.core.QByteArray mimeType, String data) { + +public QHttpServerResponse(io.qt.core.QByteArray mimeType, String data) { this(mimeType, io.qt.core.QString.toUtf8(data)); } - - public QHttpServerResponse(String mimeType, io.qt.core.QByteArray data, io.qt.httpserver.QHttpServerResponder.StatusCode status) { + +public QHttpServerResponse(String mimeType, io.qt.core.QByteArray data, io.qt.httpserver.QHttpServerResponder.StatusCode status) { this(io.qt.core.QString.toUtf8(mimeType), data, status); } - - public QHttpServerResponse(String mimeType, String data, io.qt.httpserver.QHttpServerResponder.StatusCode status) { + +public QHttpServerResponse(String mimeType, String data, io.qt.httpserver.QHttpServerResponder.StatusCode status) { this(io.qt.core.QString.toUtf8(mimeType), io.qt.core.QString.toUtf8(data), status); } - - public QHttpServerResponse(io.qt.core.QByteArray mimeType, String data, io.qt.httpserver.QHttpServerResponder.StatusCode status) { + +public QHttpServerResponse(io.qt.core.QByteArray mimeType, String data, io.qt.httpserver.QHttpServerResponder.StatusCode status) { this(mimeType, io.qt.core.QString.toUtf8(data), status); } }// class -class QHttpServerRequest___{ - @io.qt.QtUninvokable - public final io.qt.core.QByteArray value(String key){ - return value(io.qt.core.QString.toUtf8(key)); - } +class QHttpServerRequest___ { + @io.qt.QtUninvokable + public final io.qt.core.QByteArray value(String key) { + return value(io.qt.core.QString.toUtf8(key)); + } }// class diff --git a/generator/typesystem/java/typesystem_opengl-java.java b/generator/typesystem/java/typesystem_opengl-java.java index 0018ed70..933710ab 100644 --- a/generator/typesystem/java/typesystem_opengl-java.java +++ b/generator/typesystem/java/typesystem_opengl-java.java @@ -34,12 +34,4 @@ ** ****************************************************************************/ -class QOpenGLVersionFunctionsFactory___{ - @io.qt.QtUninvokable - public static T get(Class type){ - return get(type, null); - } - @io.qt.QtUninvokable - public static native T get(Class type, io.qt.gui.QOpenGLContext context); -}// class diff --git a/generator/typesystem/java/typesystem_qml-java.java b/generator/typesystem/java/typesystem_qml-java.java index 7a6dc0da..58d78aaf 100644 --- a/generator/typesystem/java/typesystem_qml-java.java +++ b/generator/typesystem/java/typesystem_qml-java.java @@ -37,22 +37,22 @@ class __QQmlComponent extends QQmlComponent{ @io.qt.QtUninvokable - public final void setData(String data, io.qt.core.QUrl baseUrl) { + public final void setData(String data, io.qt.core.QUrl baseUrl){ setData(new io.qt.core.QByteArray(data), baseUrl); } @io.qt.QtUninvokable - public final void setData(byte[] data, io.qt.core.QUrl baseUrl) { + public final void setData(byte[] data, io.qt.core.QUrl baseUrl){ setData(new io.qt.core.QByteArray(data), baseUrl); } @io.qt.QtUninvokable - public T create(Class type) { + public T create(Class type){ return create(type, (io.qt.qml.QQmlContext)null); } @io.qt.QtUninvokable - public T create(Class type, io.qt.qml.QQmlContext context) { + public T create(Class type, io.qt.qml.QQmlContext context){ String packageName = type.getName(); int idx = packageName.lastIndexOf('.'); if(idx>0){ @@ -66,194 +66,112 @@ public T create(Class type, io.qt.qml.QQmlCont class __QJSValue extends QJSValue{ @io.qt.QtUninvokable - public final void setProperty(java.lang.String name, String value) { + public final void setProperty(java.lang.String name, String value){ setProperty(name, new QJSValue(value)); } @io.qt.QtUninvokable - public final void setProperty(java.lang.String name, boolean value) { + public final void setProperty(java.lang.String name, boolean value){ setProperty(name, new QJSValue(value)); } @io.qt.QtUninvokable - public final void setProperty(java.lang.String name, double value) { + public final void setProperty(java.lang.String name, double value){ setProperty(name, new QJSValue(value)); } @io.qt.QtUninvokable - public final void setProperty(java.lang.String name, int value) { + public final void setProperty(java.lang.String name, int value){ setProperty(name, new QJSValue(value)); } @io.qt.QtUninvokable - public final void setProperty(java.lang.String name, QJSValue.SpecialValue value) { + public final void setProperty(java.lang.String name, QJSValue.SpecialValue value){ setProperty(name, new QJSValue(value)); } @io.qt.QtUninvokable - public final void setProperty(int arrayIndex, String value) { + public final void setProperty(int arrayIndex, String value){ setProperty(arrayIndex, new QJSValue(value)); } @io.qt.QtUninvokable - public final void setProperty(int arrayIndex, boolean value) { + public final void setProperty(int arrayIndex, boolean value){ setProperty(arrayIndex, new QJSValue(value)); } @io.qt.QtUninvokable - public final void setProperty(int arrayIndex, double value) { + public final void setProperty(int arrayIndex, double value){ setProperty(arrayIndex, new QJSValue(value)); } @io.qt.QtUninvokable - public final void setProperty(int arrayIndex, int value) { + public final void setProperty(int arrayIndex, int value){ setProperty(arrayIndex, new QJSValue(value)); } @io.qt.QtUninvokable - public final void setProperty(int arrayIndex, QJSValue.SpecialValue value) { + public final void setProperty(int arrayIndex, QJSValue.SpecialValue value){ setProperty(arrayIndex, new QJSValue(value)); } }// class class __QtQml__ extends QtQml{ - - /** - * Returns the QJSEngine associated with object, if any. - * - * This function is useful if you have exposed a QObject to the JavaScript environment - * and later in your program would like to regain access. It does not require you to - * keep the wrapper around that was returned from QJSEngine::newQObject(). - */ - @io.qt.QtUninvokable - public static QJSEngine qjsEngine(io.qt.core.QObject object){ - return qjsEngine(QtJambi_LibraryUtilities.internal.nativeId(object)); - } - - private static native QJSEngine qjsEngine(long object); - - public static native int qmlRegisterTypeNotAvailable(String uri, int versionMajor, int versionMinor, String qmlName, String message); - - public static native int qmlRegisterUncreatableType(Class type, String uri, int versionMajor, int versionMinor, String qmlName, String reason); - public static native int qmlRegisterUncreatableType(Class type, int metaObjectRevision, String uri, int versionMajor, int versionMinor, String qmlName, String reason); - - public static native int qmlRegisterType(Class type, String uri, int versionMajor, int versionMinor, String qmlName); - - public static native int qmlRegisterType(Class type, int metaObjectRevision, String uri, int versionMajor, int versionMinor, String qmlName); - - public static native int qmlRegisterRevision(Class type, int metaObjectRevision, String uri, int versionMajor, int versionMinor); - - public static native int qmlRegisterExtendedType(Class type, Class extendedType, String uri, int versionMajor, int versionMinor, String qmlName); - - public static QObject qmlAttachedPropertiesObject(Class clazz, QObject obj){ - return qmlAttachedPropertiesObject(clazz, obj, true); - } - - public static native QObject qmlAttachedPropertiesObject(Class clazz, QObject obj, boolean create); - - public static native int qmlRegisterAnonymousType(Class type, String uri, int versionMajor); - - public static native int qmlRegisterType(QUrl url, String uri, int versionMajor, int versionMinor, String qmlName); - - public static native int qmlTypeId(String uri, int versionMajor, int versionMinor, String qmlName); - - public static native boolean qmlProtectModule(String uri, int majVersion); - - public static native void qmlClearTypeRegistrations(); - - public static native int qmlRegisterExtendedUncreatableType(Class type, Class extendedType, String uri, int versionMajor, int versionMinor, String qmlName, String reason); - - public static native int qmlRegisterExtendedUncreatableType(Class type, Class extendedType, int metaObjectRevision, String uri, int versionMajor, int versionMinor, String qmlName, String reason); - - public static native void qmlRegisterModule(String uri, int versionMajor, int versionMinor); - - public static native int qmlRegisterSingletonType(String uri, int versionMajor, int versionMinor, String typeName, ValueCallback callback); - - public static native int qmlRegisterSingletonType(Class type, String uri, int versionMajor, int versionMinor, String typeName, ObjectCallback callback); - - public static native int qmlRegisterSingletonType(QUrl url, String uri, int versionMajor, int versionMinor, String qmlName); - - public static int qmlRegisterSingletonInstance(QObject instance, String uri, int versionMajor, int versionMinor, String qmlName){ - return qmlRegisterSingletonType(instance.getClass(), uri, versionMajor, versionMinor, qmlName, (e,v)->instance); - } - - public static native int qmlRegisterUncreatableClass(Class type, String uri, int versionMajor, int versionMinor, String qmlName, String reason); - -}// class - -class __QtQml_5_13 extends QtQml{ - - public static native void qmlRegisterBaseTypes(String uri, int versionMajor, int versionMinor); + private static final int QQmlModuleImportLatest = -1; -}// class - -class __QtQml_5_14 extends QtQml{ - - public static native int qmlRegisterType(Class type); - - public static int qmlRegisterInterface(Class type, String typeName){ - return type.isInterface() ? qmlRegisterInterface1(type, typeName) : -1; - } - - private static native int qmlRegisterInterface1(Class type, String typeName); - - public static native int qmlRegisterExtendedType(Class type, Class extendedType); - -}// class - -class __QtQml_5_15 extends QtQml{ /** - * @deprecated Use qmlRegisterAnonymousType instead + * @deprecated Use {@link #qmlRegisterSingletonInstance(String, int, int, String, QObject)} instead. */ @Deprecated - public static native int qmlRegisterType(Class type); + public static int qmlRegisterSingletonInstance(QObject instance, String uri, int versionMajor, int versionMinor, String qmlName){ + java.util.Objects.requireNonNull(instance); + return qmlRegisterSingletonType(QtJambi_LibraryUtilities.internal.getClass(instance), uri, versionMajor, versionMinor, qmlName, (e,v)->instance); + } /** - * @deprecated Use qmlRegisterInterface(Class type, String uri, int versionMajor) + *

See qmlRegisterSingletonInstance(const char*,int,int,const char*,QObject*)

*/ - @Deprecated - public static int qmlRegisterInterface(Class type, String typeName){ - return type.isInterface() ? qmlRegisterInterface1(type, typeName) : -1; + public static int qmlRegisterSingletonInstance(String uri, int versionMajor, int versionMinor, String qmlName, QObject instance){ + java.util.Objects.requireNonNull(instance); + return qmlRegisterSingletonType(QtJambi_LibraryUtilities.internal.getClass(instance), uri, versionMajor, versionMinor, qmlName, (e,v)->instance); } - - private static native int qmlRegisterInterface1(Class type, String typeName); - public static int qmlRegisterInterface(Class type, String uri, int versionMajor){ - return type.isInterface() ? qmlRegisterInterface2(type, uri, versionMajor) : -1; + /** + * @deprecated Use {@link #qmlRegisterUncreatableType(Class, int, String, int, int, String, String)} instead. + */ + @Deprecated + public static int qmlRegisterUncreatableClass(java.lang.Class type, int metaObjectRevision, java.lang.String uri, int versionMajor, int versionMinor, java.lang.String qmlName, java.lang.String reason) { + return qmlRegisterUncreatableType(type, metaObjectRevision, uri, versionMajor, versionMinor, qmlName, reason); } - - private static native int qmlRegisterInterface2(Class type, String uri, int versionMajor); - /** - * @deprecated Use qmlRegisterExtendedType(type, uri, versionMajor) instead + * @deprecated Use {@link #qmlRegisterUncreatableType(Class, String, int, int, String, String)} instead. */ @Deprecated - public static native int qmlRegisterExtendedType(Class type, Class extendedType); - - public static native int qmlRegisterExtendedType(Class type, Class extendedType, String uri, int versionMajor); - + public static int qmlRegisterUncreatableClass(java.lang.Class type, java.lang.String uri, int versionMajor, int versionMinor, java.lang.String qmlName, java.lang.String reason) { + return qmlRegisterUncreatableType(type, uri, versionMajor, versionMinor, qmlName, reason); + } }// class class QQmlProperty__{ @io.qt.QtUninvokable public final boolean connectNotifySignal(io.qt.core.QMetaObject.Slot0 slot){ - return connectNotifySignal(slot, io.qt.core.QMetaMethod.fromMethod(java.util.Objects.requireNonNull(slot))); + return connectNotifySignal(slot, io.qt.core.QMetaMethod.fromMethod(java.util.Objects.requireNonNull(slot))); } @io.qt.QtUninvokable public final boolean connectNotifySignal(io.qt.core.QMetaObject.Slot1 slot){ - return connectNotifySignal(slot, io.qt.core.QMetaMethod.fromMethod(java.util.Objects.requireNonNull(slot))); + return connectNotifySignal(slot, io.qt.core.QMetaMethod.fromMethod(java.util.Objects.requireNonNull(slot))); } @io.qt.QtUninvokable private final boolean connectNotifySignal(io.qt.core.QMetaObject.AbstractSlot slot, io.qt.core.QMetaMethod metaMethod){ if(metaMethod!=null && metaMethod.isValid()) { - io.qt.core.QObject qobject = QtJambi_LibraryUtilities.internal.lambdaContext(slot); - if(qobject!=null) - return connectNotifySignal(qobject, metaMethod.methodIndex()); + io.qt.core.QObject qobject = QtJambi_LibraryUtilities.internal.lambdaContext(slot); + if(qobject!=null) + return connectNotifySignal(qobject, metaMethod.methodIndex()); } return false; } @@ -262,28 +180,28 @@ private final boolean connectNotifySignal(io.qt.core.QMetaObject.AbstractSlot sl class QJSEngine__{ - @io.qt.QtUninvokable + @io.qt.QtUninvokable public final QJSValue newQMetaObject(Class type) { - return newQMetaObject(io.qt.core.QMetaObject.forType(type)); + return newQMetaObject(io.qt.core.QMetaObject.forType(type)); } }// class class QJSEngine_6_{ - @io.qt.QtUninvokable + @io.qt.QtUninvokable public final T fromScriptValue(QJSValue value, Class type, io.qt.core.QMetaType...instantiations) { - return fromScriptValue(value, io.qt.core.QMetaType.fromType(type, instantiations)); + return fromScriptValue(value, io.qt.core.QMetaType.fromType(type, instantiations)); } @io.qt.QtUninvokable public final T fromScriptValue(QJSValue value, io.qt.core.QMetaType type) { - return fromScriptValue(QtJambi_LibraryUtilities.internal.nativeId(this), QtJambi_LibraryUtilities.internal.checkedNativeId(value), QtJambi_LibraryUtilities.internal.checkedNativeId(type)); + return fromScriptValue(QtJambi_LibraryUtilities.internal.nativeId(this), QtJambi_LibraryUtilities.internal.checkedNativeId(value), QtJambi_LibraryUtilities.internal.checkedNativeId(type)); } private static native T fromScriptValue(long thisId, long valueId, long typeId); @io.qt.QtUninvokable public final QJSValue toScriptValue(T value) { - return toScriptValue(QtJambi_LibraryUtilities.internal.nativeId(this), value); + return toScriptValue(QtJambi_LibraryUtilities.internal.nativeId(this), value); } private static native QJSValue toScriptValue(long thisId, Object value); @@ -292,19 +210,19 @@ public final QJSValue toScriptValue(T value) { class QJSEngine_61_{ @io.qt.QtUninvokable public final T fromManagedValue(QJSManagedValue value, Class type, io.qt.core.QMetaType...instantiations) { - return fromManagedValue(value, io.qt.core.QMetaType.fromType(type, instantiations)); + return fromManagedValue(value, io.qt.core.QMetaType.fromType(type, instantiations)); } @io.qt.QtUninvokable public final T fromManagedValue(QJSManagedValue value, io.qt.core.QMetaType type) { - return fromManagedValue(QtJambi_LibraryUtilities.internal.nativeId(this), QtJambi_LibraryUtilities.internal.checkedNativeId(value), QtJambi_LibraryUtilities.internal.checkedNativeId(type)); + return fromManagedValue(QtJambi_LibraryUtilities.internal.nativeId(this), QtJambi_LibraryUtilities.internal.checkedNativeId(value), QtJambi_LibraryUtilities.internal.checkedNativeId(type)); } private static native T fromManagedValue(long thisId, long valueId, long typeId); @io.qt.QtUninvokable public final QJSManagedValue toManagedValue(T value) { - return toManagedValue(QtJambi_LibraryUtilities.internal.nativeId(this), value); + return toManagedValue(QtJambi_LibraryUtilities.internal.nativeId(this), value); } private static native QJSManagedValue toManagedValue(long thisId, Object value); @@ -314,29 +232,29 @@ public final QJSManagedValue toManagedValue(T value) { class QJSEngine_63_{ @io.qt.QtUninvokable public final T fromVariant(Object variant, Class type, io.qt.core.QMetaType...instantiations) { - return fromVariant(variant, io.qt.core.QMetaType.fromType(type, instantiations)); + return fromVariant(variant, io.qt.core.QMetaType.fromType(type, instantiations)); } @io.qt.QtUninvokable public final T fromVariant(Object variant, io.qt.core.QMetaType type) { - return fromVariant(QtJambi_LibraryUtilities.internal.nativeId(this), variant, QtJambi_LibraryUtilities.internal.checkedNativeId(type)); + return fromVariant(QtJambi_LibraryUtilities.internal.nativeId(this), variant, QtJambi_LibraryUtilities.internal.checkedNativeId(type)); } private static native T fromVariant(long thisId, Object variant, long typeId); - + }// class class QQmlEngine__{ - - /** + + /** *

See QQmlEngine::singletonInstance(int qmlTypeId)

*/ @io.qt.QtUninvokable public final T singletonInstance(Class type, int qmlTypeId) { - io.qt.core.QObject object = singletonInstance(QtJambi_LibraryUtilities.internal.nativeId(this), qmlTypeId).toQObject(); - if(object!=null) - return object.qt_metacast(type); - return null; + io.qt.core.QObject object = singletonInstance(QtJambi_LibraryUtilities.internal.nativeId(this), qmlTypeId).toQObject(); + if(object!=null) + return object.qt_metacast(type); + return null; } /** @@ -344,12 +262,12 @@ public final T singletonInstance(Class ty */ @io.qt.QtUninvokable public final QJSValue singletonInstance(int qmlTypeId) { - return singletonInstance(QtJambi_LibraryUtilities.internal.nativeId(this), qmlTypeId); + return singletonInstance(QtJambi_LibraryUtilities.internal.nativeId(this), qmlTypeId); } @io.qt.QtUninvokable private static native QJSValue singletonInstance(long __this__nativeId, int qmlTypeId); - + }// class class QQmlExpression__{ @@ -405,8 +323,8 @@ class QQmlParserStatus__native__{ }// class class QQmlIncubationController__{ -public static class WhileFlag{ - private final long flag; + public static class WhileFlag{ + private final long flag; public WhileFlag() { this(true); } @@ -418,7 +336,7 @@ public WhileFlag(boolean flag) { } public void set(boolean flag) { - set(this.flag, flag); + set(this.flag, flag); } private static native long create(boolean flag); diff --git a/generator/typesystem/java/typesystem_qt3dcore-java.java b/generator/typesystem/java/typesystem_qt3dcore-java.java index 23879908..3c07cabf 100644 --- a/generator/typesystem/java/typesystem_qt3dcore-java.java +++ b/generator/typesystem/java/typesystem_qt3dcore-java.java @@ -40,6 +40,9 @@ class QAbstractAspect___java extends QAbstractAspect { + /** + *

See Qt3DCore::QAbstractAspect::registerBackendType(Qt3DCore::QBackendNodeMapperPtr)

+ */ @io.qt.QtUninvokable protected final void registerBackendType(Class type, io.qt.qt3d.core.QBackendNodeMapper functor) { registerBackendType(io.qt.core.QMetaObject.forType(type), functor); @@ -52,8 +55,11 @@ protected final void unregisterBackendType(Class t }// class -class QEntity__ { +class QEntity_6_ { + /** + *

See Qt3DCore::QEntity::componentsOfType<T>()const

+ */ @io.qt.QtUninvokable public final io.qt.core.QList componentsOfType(Class type) { @@ -66,3 +72,21 @@ public final io.qt.core.QList componen } }// class + +class QEntity_5_ { + + /** + *

See Qt3DCore::QEntity::componentsOfType<T>()const

+ */ + @io.qt.QtUninvokable + public final io.qt.core.QVector componentsOfType(Class type) + { + io.qt.core.QVector matchComponents = new io.qt.core.QVector(type); + for (io.qt.qt3d.core.QComponent component : components()) { + if (type.isInstance(component)) + matchComponents.append(type.cast(component)); + } + return matchComponents; + } + +}// class diff --git a/generator/typesystem/java/typesystem_remoteobjects-java.java b/generator/typesystem/java/typesystem_remoteobjects-java.java index c6d8bacf..5c140123 100644 --- a/generator/typesystem/java/typesystem_remoteobjects-java.java +++ b/generator/typesystem/java/typesystem_remoteobjects-java.java @@ -91,9 +91,7 @@ public final T acquire(Class type, java.lang } java.lang.reflect.Constructor constructor = type.getConstructor(QRemoteObjectNode.class, String.class); try { - return constructor.newInstance(this, name); - } catch (InstantiationException | IllegalAccessException | IllegalArgumentException e) { - return acquire(type, constructor, name); + return QtJambi_LibraryUtilities.internal.invokeContructor(constructor, this, name); } catch (java.lang.reflect.InvocationTargetException e) { if(e.getTargetException() instanceof RuntimeException) { throw (RuntimeException)e.getTargetException(); @@ -101,10 +99,12 @@ public final T acquire(Class type, java.lang throw (Error)e.getTargetException(); } throw new RuntimeException(e.getTargetException()); + }catch(RuntimeException | Error e) { + throw e; + }catch(Throwable e) { + throw new RuntimeException(e); } - } - private native final T acquire(Class type, java.lang.reflect.Constructor constructor, java.lang.String name); - + } }// class class QtRemoteObjects___ { @@ -136,115 +136,23 @@ public static TypeNameAndMetaobject getTypeNameAndMetaobjectFromClassInfo(io.qt. return new TypeNameAndMetaobject(typeName, metaObject); } - @io.qt.QtUninvokable - public static void qRegisterRemoteObjectsServer(java.lang.String id, Class type){ - try { - java.lang.reflect.Constructor constructor = type.getConstructor(io.qt.core.QObject.class); - qRegisterRemoteObjectsServer(id, type, constructor); - } catch (NoSuchMethodException e) { - throw new RuntimeException(e); - } - } - @io.qt.QtUninvokable - private static native void qRegisterRemoteObjectsServer(java.lang.String id, Class type, java.lang.reflect.Constructor constructor); - - - @SuppressWarnings("unchecked") @io.qt.QtUninvokable public static void copyStoredProperties(T src, T dst) { - if(src!=null)copyStoredProperties((Class)src.getClass(), src, dst); + if(src!=null)QtRemoteObjects.copyStoredProperties(QtJambi_LibraryUtilities.internal.getClass(src), src, dst); } - @SuppressWarnings("unchecked") @io.qt.QtUninvokable public static void copyStoredProperties(T src, io.qt.core.QDataStream dst) { - if(src!=null)copyStoredProperties((Class)src.getClass(), src, dst); + if(src!=null)QtRemoteObjects.copyStoredProperties(QtJambi_LibraryUtilities.internal.getClass(src), src, dst); } - @SuppressWarnings("unchecked") @io.qt.QtUninvokable public static void copyStoredProperties(io.qt.core.QDataStream src, T dst) { - if(dst!=null)copyStoredProperties((Class)dst.getClass(), src, dst); - } - - @io.qt.QtUninvokable - public static void copyStoredProperties(Class type, T src, T dst) - { - if(io.qt.core.QObject.class.isAssignableFrom(type)) - throw new IllegalArgumentException("Only gadget types allowed."); - if(src instanceof io.qt.QtObjectInterface) - copyStoredProperties(io.qt.core.QMetaObject.forType(type), QtJambi_LibraryUtilities.internal.checkedNativeId((io.qt.QtObjectInterface)src), QtJambi_LibraryUtilities.internal.checkedNativeId((io.qt.QtObjectInterface)dst)); - else - copyStoredProperties(io.qt.core.QMetaObject.forType(type), src, dst); - } - - @io.qt.QtUninvokable - public static void copyStoredProperties(Class type, T src, io.qt.core.QDataStream dst) - { - java.util.Objects.requireNonNull(dst); - if(io.qt.core.QObject.class.isAssignableFrom(type)) - throw new IllegalArgumentException("Only gadget types allowed."); - if(src instanceof io.qt.QtObjectInterface) - copyStoredPropertiesStreamOut(io.qt.core.QMetaObject.forType(type), QtJambi_LibraryUtilities.internal.checkedNativeId((io.qt.QtObjectInterface)src), QtJambi_LibraryUtilities.internal.checkedNativeId(dst)); - else - copyStoredPropertiesStreamOut(io.qt.core.QMetaObject.forType(type), src, QtJambi_LibraryUtilities.internal.checkedNativeId(dst)); - } - - @io.qt.QtUninvokable - public static void copyStoredProperties(Class type, io.qt.core.QDataStream src, T dst) - { - java.util.Objects.requireNonNull(src); - if(io.qt.core.QObject.class.isAssignableFrom(type)) - throw new IllegalArgumentException("Only gadget types allowed."); - if(dst instanceof io.qt.QtObjectInterface) - copyStoredPropertiesStreamIn(io.qt.core.QMetaObject.forType(type), QtJambi_LibraryUtilities.internal.checkedNativeId(src), QtJambi_LibraryUtilities.internal.checkedNativeId((io.qt.QtObjectInterface)dst)); - else - copyStoredPropertiesStreamIn(io.qt.core.QMetaObject.forType(type), QtJambi_LibraryUtilities.internal.checkedNativeId(src), dst); + if(dst!=null)QtRemoteObjects.copyStoredProperties(QtJambi_LibraryUtilities.internal.getClass(dst), src, dst); } - - @io.qt.QtUninvokable - private native static void copyStoredProperties(io.qt.core.QMetaObject type, long src, long dst); - @io.qt.QtUninvokable - private native static void copyStoredProperties(io.qt.core.QMetaObject type, Object src, Object dst); - @io.qt.QtUninvokable - private native static void copyStoredPropertiesStreamIn(io.qt.core.QMetaObject type, long src, Object dst); - @io.qt.QtUninvokable - private native static void copyStoredPropertiesStreamIn(io.qt.core.QMetaObject type, long src, long dst); - @io.qt.QtUninvokable - private native static void copyStoredPropertiesStreamOut(io.qt.core.QMetaObject type, Object src, long dst); - @io.qt.QtUninvokable - private native static void copyStoredPropertiesStreamOut(io.qt.core.QMetaObject type, long src, long dst); -}// class - -class QtRemoteObjects_5__ { - @io.qt.QtUninvokable - public static void qRegisterRemoteObjectsClient(java.lang.String id, Class type){ - try { - java.lang.reflect.Constructor constructor = type.getConstructor(io.qt.core.QObject.class); - qRegisterRemoteObjectsClient(id, type, constructor); - } catch (NoSuchMethodException e) { - throw new RuntimeException(e); - } - } - @io.qt.QtUninvokable - private static native void qRegisterRemoteObjectsClient(java.lang.String id, Class type, java.lang.reflect.Constructor constructor); -}// class - -class QtRemoteObjects_6__ { - @io.qt.QtUninvokable - public static void qRegisterRemoteObjectsClient(java.lang.String id, Class type){ - try { - java.lang.reflect.Constructor constructor = type.getConstructor(io.qt.core.QObject.class); - qRegisterRemoteObjectsClient(id, type, constructor); - } catch (NoSuchMethodException e) { - throw new RuntimeException(e); - } - } - @io.qt.QtUninvokable - private static native void qRegisterRemoteObjectsClient(java.lang.String id, Class type, java.lang.reflect.Constructor constructor); }// class class IoDevice___ { diff --git a/generator/typesystem/java/typesystem_test-java.java b/generator/typesystem/java/typesystem_test-java.java index 39439d57..eb09b4ec 100644 --- a/generator/typesystem/java/typesystem_test-java.java +++ b/generator/typesystem/java/typesystem_test-java.java @@ -36,6 +36,9 @@ class QTest__{ + /** + *

See QBENCHMARK

+ */ @io.qt.QtUninvokable public static void QBENCHMARK(Runnable runnable) { for (QBenchmarkIterationController __iteration_controller = new QBenchmarkIterationController(); @@ -43,6 +46,9 @@ public static void QBENCHMARK(Runnable runnable) { runnable.run(); } + /** + *

See QBENCHMARK_ONCE

+ */ @io.qt.QtUninvokable public static void QBENCHMARK_ONCE(Runnable runnable) { for (QBenchmarkIterationController __iteration_controller = new QBenchmarkIterationController(QBenchmarkIterationController.RunMode.RunOnce); @@ -70,6 +76,9 @@ public static boolean qCompare(T t1, T t2, java.lang.String actual, java.lan file, line); } + /** + *

See QCOMPARE(actual, expected)

+ */ @io.qt.QtUninvokable public static > void QCOMPARE(T t1, T t2) throws AssertionError { io.qt.InternalAccess.CallerContext info = QtJambi_LibraryUtilities.internal.callerContextProvider().get(); @@ -80,6 +89,9 @@ public static > void QCOMPARE(T t1, T t2) throws Asserti throw new AssertionError("Compared values are not the same"); } + /** + *

See QCOMPARE(actual, expected)

+ */ @io.qt.QtUninvokable public static void QCOMPARE(T t1, T t2) throws AssertionError { io.qt.InternalAccess.CallerContext info = QtJambi_LibraryUtilities.internal.callerContextProvider().get(); @@ -90,6 +102,9 @@ public static void QCOMPARE(T t1, T t2) throws AssertionError { throw new AssertionError("Compared values are not the same"); } + /** + *

See QCOMPARE(actual, expected)

+ */ @io.qt.QtUninvokable public static void QCOMPARE(int t1, int t2) throws AssertionError { io.qt.InternalAccess.CallerContext info = QtJambi_LibraryUtilities.internal.callerContextProvider().get(); @@ -100,6 +115,9 @@ public static void QCOMPARE(int t1, int t2) throws AssertionError { throw new AssertionError("Compared values are not the same"); } + /** + *

See QCOMPARE(actual, expected)

+ */ @io.qt.QtUninvokable public static void QCOMPARE(double t1, double t2) throws AssertionError { io.qt.InternalAccess.CallerContext info = QtJambi_LibraryUtilities.internal.callerContextProvider().get(); @@ -110,6 +128,9 @@ public static void QCOMPARE(double t1, double t2) throws AssertionError { throw new AssertionError("Compared values are not the same"); } + /** + *

See QCOMPARE(actual, expected)

+ */ @io.qt.QtUninvokable public static void QCOMPARE(float t1, double t2) throws AssertionError { io.qt.InternalAccess.CallerContext info = QtJambi_LibraryUtilities.internal.callerContextProvider().get(); @@ -120,6 +141,9 @@ public static void QCOMPARE(float t1, double t2) throws AssertionError { throw new AssertionError("Compared values are not the same"); } + /** + *

See QCOMPARE(actual, expected)

+ */ @io.qt.QtUninvokable public static void QCOMPARE(double t1, float t2) throws AssertionError { io.qt.InternalAccess.CallerContext info = QtJambi_LibraryUtilities.internal.callerContextProvider().get(); @@ -130,6 +154,9 @@ public static void QCOMPARE(double t1, float t2) throws AssertionError { throw new AssertionError("Compared values are not the same"); } + /** + *

See QCOMPARE(actual, expected)

+ */ @io.qt.QtUninvokable public static void QCOMPARE(float t1, float t2) throws AssertionError { io.qt.InternalAccess.CallerContext info = QtJambi_LibraryUtilities.internal.callerContextProvider().get(); @@ -140,6 +167,9 @@ public static void QCOMPARE(float t1, float t2) throws AssertionError { throw new AssertionError("Compared values are not the same"); } + /** + *

See QCOMPARE(actual, expected)

+ */ @io.qt.QtUninvokable public static void QCOMPARE(String t1, String t2) throws AssertionError { io.qt.InternalAccess.CallerContext info = QtJambi_LibraryUtilities.internal.callerContextProvider().get(); @@ -150,6 +180,9 @@ public static void QCOMPARE(String t1, String t2) throws AssertionError { throw new AssertionError("Compared values are not the same"); } + /** + *

See QCOMPARE(actual, expected)

+ */ @io.qt.QtUninvokable public static void QCOMPARE(io.qt.gui.QIcon t1, io.qt.gui.QIcon t2) throws AssertionError { if(t1==null) @@ -164,6 +197,9 @@ public static void QCOMPARE(io.qt.gui.QIcon t1, io.qt.gui.QIcon t2) throws Asser throw new AssertionError("Compared values are not the same"); } + /** + *

See QCOMPARE(actual, expected)

+ */ @io.qt.QtUninvokable public static void QCOMPARE(io.qt.gui.QPixmap t1, io.qt.gui.QPixmap t2) throws AssertionError { if(t1==null) @@ -178,6 +214,9 @@ public static void QCOMPARE(io.qt.gui.QPixmap t1, io.qt.gui.QPixmap t2) throws A throw new AssertionError("Compared values are not the same"); } + /** + *

See QCOMPARE(actual, expected)

+ */ @io.qt.QtUninvokable public static void QCOMPARE(io.qt.gui.QImage t1, io.qt.gui.QImage t2) throws AssertionError { if(t1==null) @@ -192,6 +231,9 @@ public static void QCOMPARE(io.qt.gui.QImage t1, io.qt.gui.QImage t2) throws Ass throw new AssertionError("Compared values are not the same"); } + /** + *

See QEXPECT_FAIL(dataIndex, comment, mode)

+ */ @io.qt.QtUninvokable public static void QEXPECT_FAIL(String dataIndex, String comment, QTest.TestFailMode mode) throws AssertionError { io.qt.InternalAccess.CallerContext info = QtJambi_LibraryUtilities.internal.callerContextProvider().get(); @@ -199,6 +241,9 @@ public static void QEXPECT_FAIL(String dataIndex, String comment, QTest.TestFail throw new AssertionError(comment); } + /** + *

See QFAIL(message)

+ */ @io.qt.QtUninvokable public static void QFAIL(String message) throws AssertionError { io.qt.InternalAccess.CallerContext info = QtJambi_LibraryUtilities.internal.callerContextProvider().get(); @@ -206,28 +251,61 @@ public static void QFAIL(String message) throws AssertionError { throw new AssertionError(message); } + /** + * @deprecated Use {@link #QFETCH(String, Class, io.qt.core.QMetaType...)} instead. + */ @io.qt.QtUninvokable + @Deprecated public static T QFETCH(Class type, String name) { return io.qt.core.QVariant.convert(qData(name, io.qt.core.QMetaType.fromType(type).id()), type); } + /** + * @deprecated Use {@link #QFETCH_GLOBAL(String, Class, io.qt.core.QMetaType...)} instead. + */ @io.qt.QtUninvokable + @Deprecated public static T QFETCH_GLOBAL(Class type, String name) { return io.qt.core.QVariant.convert(qGlobalData(name, io.qt.core.QMetaType.fromType(type).id()), type); } + + /** + *

See QFETCH(type, name)

+ */ + @io.qt.QtUninvokable + public static T QFETCH(String name, Class type, io.qt.core.QMetaType...instantiations) { + return io.qt.core.QVariant.convert(qData(name, io.qt.core.QMetaType.fromType(type, instantiations).id()), type); + } + + /** + *

See QFETCH_GLOBAL(type, name)

+ */ + @io.qt.QtUninvokable + public static T QFETCH_GLOBAL(String name, Class type, io.qt.core.QMetaType...instantiations) { + return io.qt.core.QVariant.convert(qGlobalData(name, io.qt.core.QMetaType.fromType(type, instantiations).id()), type); + } + /** + *

See QFINDTESTDATA(filename)

+ */ @io.qt.QtUninvokable public static String QFINDTESTDATA(String basepath){ io.qt.InternalAccess.CallerContext info = QtJambi_LibraryUtilities.internal.callerContextProvider().get(); return QTest.qFindTestData(basepath, info.declaringClass.getName()+"."+info.methodName, info.lineNumber); } + /** + *

See QFINDTESTDATA(filename,builddir)

+ */ @io.qt.QtUninvokable public static String QFINDTESTDATA(String basepath, java.lang.String builddir){ io.qt.InternalAccess.CallerContext info = QtJambi_LibraryUtilities.internal.callerContextProvider().get(); return QTest.qFindTestData(basepath, info.declaringClass.getName()+"."+info.methodName, info.lineNumber, builddir); } + /** + *

See QSKIP(description)

+ */ @io.qt.QtUninvokable public static void QSKIP(String statement){ io.qt.InternalAccess.CallerContext info = QtJambi_LibraryUtilities.internal.callerContextProvider().get(); @@ -241,6 +319,9 @@ public static boolean qTest(T actual, String elementName, String actualStr, return qCompare(actual, io.qt.core.QVariant.convert(QTest.qElementData(elementName, io.qt.core.QMetaType.fromType(cls).id()), cls), actualStr, expected, file, line); } + /** + *

See QTEST(actual, testElement)

+ */ @io.qt.QtUninvokable public static void QTEST(T actual, String testElement) throws AssertionError { io.qt.InternalAccess.CallerContext info = QtJambi_LibraryUtilities.internal.callerContextProvider().get(); @@ -248,6 +329,9 @@ public static void QTEST(T actual, String testElement) throws AssertionError throw new AssertionError(); } + /** + *

See QTest::qExec(QObject *, int, char **)

+ */ @io.qt.QtUninvokable public static int qExec(io.qt.core.QObject testObject, String...args){ return qExec(testObject, java.util.Arrays.asList(args)); @@ -304,24 +388,36 @@ private static void QTRY_COMPARE_WITH_TIMEOUT_IMPL(io.qt.InternalAccess.CallerCo } } + /** + *

See QTRY_COMPARE_WITH_TIMEOUT(actual, expected, timeout)

+ */ @io.qt.QtUninvokable public static > void QTRY_COMPARE_WITH_TIMEOUT(T t1, T t2, int timeout) throws AssertionError { io.qt.InternalAccess.CallerContext info = QtJambi_LibraryUtilities.internal.callerContextProvider().get(); QTRY_COMPARE_WITH_TIMEOUT_IMPL(info, ()->t1!=null, ()->t1.compareTo(t2)==0, timeout); } + /** + *

See QTRY_COMPARE(actual, expected)

+ */ @io.qt.QtUninvokable public static > void QTRY_COMPARE(T t1, T t2) throws AssertionError { io.qt.InternalAccess.CallerContext info = QtJambi_LibraryUtilities.internal.callerContextProvider().get(); QTRY_COMPARE_WITH_TIMEOUT_IMPL(info, ()->t1!=null, ()->t1.compareTo(t2)==0, 5000); } + /** + *

See QTRY_COMPARE_WITH_TIMEOUT(actual, expected, timeout)

+ */ @io.qt.QtUninvokable public static void QTRY_COMPARE_WITH_TIMEOUT(T t1, T t2, int timeout) throws AssertionError { io.qt.InternalAccess.CallerContext info = QtJambi_LibraryUtilities.internal.callerContextProvider().get(); QTRY_COMPARE_WITH_TIMEOUT_IMPL(info, ()->t1!=null, ()->java.util.Objects.equals(t1, t2), timeout); } + /** + *

See QTRY_COMPARE(actual, expected)

+ */ @io.qt.QtUninvokable public static void QTRY_COMPARE(T t1, T t2) throws AssertionError { io.qt.InternalAccess.CallerContext info = QtJambi_LibraryUtilities.internal.callerContextProvider().get(); @@ -335,6 +431,9 @@ public static void QTRY_VERIFY_WITH_TIMEOUT(java.util.function.BooleanSupplier e QVERIFY(info, expr); } + /** + *

See QTRY_VERIFY_WITH_TIMEOUT(condition, timeout)

+ */ @io.qt.QtUninvokable public static void QTRY_VERIFY_WITH_TIMEOUT(java.util.function.BooleanSupplier expr, String messageExpression, int timeout) throws AssertionError { io.qt.InternalAccess.CallerContext info = QtJambi_LibraryUtilities.internal.callerContextProvider().get(); @@ -342,24 +441,36 @@ public static void QTRY_VERIFY_WITH_TIMEOUT(java.util.function.BooleanSupplier e QVERIFY(info, expr, messageExpression); } + /** + *

See QVERIFY(condition)

+ */ @io.qt.QtUninvokable public static void QVERIFY(java.util.function.BooleanSupplier statement) throws AssertionError { io.qt.InternalAccess.CallerContext info = QtJambi_LibraryUtilities.internal.callerContextProvider().get(); QVERIFY(info, statement); } + /** + *

See QVERIFY(condition)

+ */ @io.qt.QtUninvokable private static void QVERIFY(io.qt.InternalAccess.CallerContext info, java.util.function.BooleanSupplier statement) throws AssertionError { if (!qVerify(statement.getAsBoolean(), "", "", info.declaringClass.getName()+"."+info.methodName, info.lineNumber)) throw new AssertionError(); } + /** + *

See QVERIFY2(condition,message)

+ */ @io.qt.QtUninvokable public static void QVERIFY(java.util.function.BooleanSupplier statement, String description) throws AssertionError { io.qt.InternalAccess.CallerContext info = QtJambi_LibraryUtilities.internal.callerContextProvider().get(); QVERIFY(info, statement, description); } + /** + *

See QVERIFY2(condition,message)

+ */ @io.qt.QtUninvokable private static void QVERIFY(io.qt.InternalAccess.CallerContext info, java.util.function.BooleanSupplier statement, String description) throws AssertionError { if(statement.getAsBoolean()) { @@ -371,39 +482,154 @@ private static void QVERIFY(io.qt.InternalAccess.CallerContext info, java.util.f } } + /** + *

See QTest

+ */ @io.qt.QtUninvokable public static void QWARN(String message){ io.qt.InternalAccess.CallerContext info = QtJambi_LibraryUtilities.internal.callerContextProvider().get(); QTest.qWarn(message, info.declaringClass.getName()+"."+info.methodName, info.lineNumber); } + /** + *

See QTest

+ */ @io.qt.QtUninvokable public static io.qt.core.QTemporaryDir QEXTRACTTESTDATA(String resourcePath){ return QTest.qExtractTestData(resourcePath); } + /** + * Use {@link #addColumn(String, Class, QMetaType...)} instead. + */ + @Deprecated @io.qt.QtUninvokable public static void addColumn(Class type, String name){ - addColumnInternal(io.qt.core.QMetaType.fromType(type).id(), name); + addColumn(name, type); + } + + /** + * Place this macro-like method in the main method of the test class. + *

See QTEST_MAIN(TestClass)

+ */ + @io.qt.QtUninvokable + @SuppressWarnings("unchecked") + public static int QTEST_MAIN(String... args) { + io.qt.InternalAccess.CallerContext context = QtJambi_LibraryUtilities.internal.callerContextProvider().get(); + if(!io.qt.core.QObject.class.isAssignableFrom(context.declaringClass) || !"main".equals(context.methodName)) + throw new RuntimeException("QTEST_MAIN() can only be called from inside main method of QObject-based type."); + return QTEST_MAIN_WRAPPER((Class)context.declaringClass, args, io.qt.widgets.QApplication::initialize); + } + + /** + * Place this macro-like method in the main method of the test class. + *

See QTEST_MAIN(TestClass)

+ */ + @io.qt.QtUninvokable + @SuppressWarnings("unchecked") + public static int QTEST_WIDGETLESS_MAIN(String... args) { + io.qt.InternalAccess.CallerContext context = QtJambi_LibraryUtilities.internal.callerContextProvider().get(); + if(!io.qt.core.QObject.class.isAssignableFrom(context.declaringClass) || !"main".equals(context.methodName)) + throw new RuntimeException("QTEST_MAIN() can only be called from inside main method of QObject-based type."); + return QTEST_MAIN_WRAPPER((Class)context.declaringClass, args, io.qt.gui.QGuiApplication::initialize); + } + + /** + * Place this macro-like method in the main method of the test class. + *

See QTEST_GUILESS_MAIN(TestClass)

+ */ + @io.qt.QtUninvokable + @SuppressWarnings("unchecked") + public static int QTEST_GUILESS_MAIN(String... args) { + io.qt.InternalAccess.CallerContext context = QtJambi_LibraryUtilities.internal.callerContextProvider().get(); + if(!io.qt.core.QObject.class.isAssignableFrom(context.declaringClass) || !"main".equals(context.methodName)) + throw new RuntimeException("QTEST_MAIN() can only be called from inside main method of QObject-based type."); + return QTEST_MAIN_WRAPPER((Class)context.declaringClass, args, io.qt.core.QCoreApplication::initialize); + } + + /** + * Place this macro-like method in the main method of the test class. + *

See QTEST_APPLESS_MAIN(TestClass)

+ */ + @io.qt.QtUninvokable + @SuppressWarnings("unchecked") + public static int QTEST_APPLESS_MAIN(String... args) { + io.qt.InternalAccess.CallerContext context = QtJambi_LibraryUtilities.internal.callerContextProvider().get(); + if(!io.qt.core.QObject.class.isAssignableFrom(context.declaringClass) || !"main".equals(context.methodName)) + throw new RuntimeException("QTEST_MAIN() can only be called from inside main method of QObject-based type."); + return QTEST_MAIN_WRAPPER((Class)context.declaringClass, args, null); + } + + private static int QTEST_MAIN_WRAPPER(Class testClass, String[] args, java.util.function.BiConsumer init) { + java.lang.reflect.Method initMain = null; + try { + initMain = testClass.getMethod("initMain"); + } catch (Throwable e) {} + if(initMain!=null && java.lang.reflect.Modifier.isStatic(initMain.getModifiers())) { + try { + QtJambi_LibraryUtilities.internal.invokeMethod(initMain, null); + } catch (Throwable e) { + throw new AssertionError("Error in "+testClass.getName()+".initMain()", e); + } + } + if(init!=null) { + init.accept(testClass.getSimpleName(), args); + io.qt.core.QCoreApplication.setAttribute(io.qt.core.Qt.ApplicationAttribute.AA_Use96Dpi, true); + if(io.qt.widgets.QApplication.instance()!=null) { + try { + io.qt.widgets.QApplication.setNavigationMode(io.qt.core.Qt.NavigationMode.NavigationModeNone); + } catch (io.qt.QNoImplementationException e) {} + } + }else { + String[] newArgs = new String[args.length+1]; + newArgs[0] = testClass.getSimpleName(); + System.arraycopy(args, 0, newArgs, 1, args.length); + args = newArgs; + } + io.qt.core.QObject testObject; + try { + testObject = QtJambi_LibraryUtilities.internal.invokeContructor(testClass.getConstructor()); + } catch (NoSuchMethodException e) { + throw new AssertionError(testClass.getName()+": no default constructor available.", e); + } catch (Throwable e) { + throw new AssertionError("Unable to create "+testClass.getName(), e); + } + QTest.setMainSourcePath(""); + int result = QTest.qExec(testObject, init!=null ? io.qt.core.QCoreApplication.arguments() : java.util.Arrays.asList(args)); + if(init!=null) + io.qt.core.QCoreApplication.shutdown(); + return result; } }// class class QTest_5__{ + /** + *

See QTest::touchEvent(QWindow *window, QTouchDevice *device, bool autoCommit = true)

+ */ @io.qt.QtUninvokable public static io.qt.test.QTest.QTouchEventSequence touchEvent(io.qt.gui.QWindow window, io.qt.gui.QTouchDevice device) { return touchEvent(window, device, true); } + /** + *

See QTest::touchEvent(QWindow *window, QTouchDevice *device, bool autoCommit = true)

+ */ @io.qt.QtUninvokable public static native io.qt.test.QTest.QTouchEventSequence touchEvent(io.qt.gui.QWindow window, io.qt.gui.QTouchDevice device, boolean autoCommit); + /** + *

See QTest::touchEvent(QWidget *widget, QTouchDevice *device, bool autoCommit = true)

+ */ @io.qt.QtUninvokable public static io.qt.test.QTest.QTouchEventSequence touchEvent(io.qt.widgets.QWidget window, io.qt.gui.QTouchDevice device) { return touchEvent(window, device, true); } + /** + *

See QTest::touchEvent(QWidget *widget, QTouchDevice *device, bool autoCommit = true)

+ */ @io.qt.QtUninvokable public static native io.qt.test.QTest.QTouchEventSequence touchEvent(io.qt.widgets.QWidget window, io.qt.gui.QTouchDevice device, boolean autoCommit); @@ -411,21 +637,39 @@ public static io.qt.test.QTest.QTouchEventSequence touchEvent(io.qt.widgets.QWid class QTest_6__{ + /** + *

See QTest::touchEvent(QWidget *widget, QPointingDevice *device, bool autoCommit = true)

+ */ @io.qt.QtUninvokable public static io.qt.test.QTest.QTouchEventSequence touchEvent(io.qt.gui.QWindow window, io.qt.gui.QPointingDevice device) { return touchEvent(window, device, true); } + + /** + *

See QTest::touchEvent(QWidget *widget, QPointingDevice *device, bool autoCommit = true)

+ */ @io.qt.QtUninvokable public static io.qt.test.QTest.QTouchEventSequence touchEvent(io.qt.gui.QWindow window, io.qt.gui.QPointingDevice device, boolean autoCommit){ return new io.qt.test.QTest.QTouchEventSequence(window, device, autoCommit); } + + /** + *

See QTest::touchEvent(QWindow *window, QPointingDevice *device, bool autoCommit = true)

+ */ @io.qt.QtUninvokable public static io.qt.test.QTest.QTouchEventWidgetSequence touchEvent(io.qt.widgets.QWidget window, io.qt.gui.QPointingDevice device) { return touchEvent(window, device, true); } + + /** + *

See QTest::touchEvent(QWindow *window, QPointingDevice *device, bool autoCommit = true)

+ */ @io.qt.QtUninvokable public static native io.qt.test.QTest.QTouchEventWidgetSequence touchEvent(io.qt.widgets.QWidget window, io.qt.gui.QPointingDevice device, boolean autoCommit); + /** + *

See QFINDTESTDATA(filename,builddir)

+ */ @io.qt.QtUninvokable public static String QFINDTESTDATA(String basepath, java.lang.String builddir, java.lang.String sourcedir){ io.qt.InternalAccess.CallerContext info = QtJambi_LibraryUtilities.internal.callerContextProvider().get(); @@ -434,8 +678,233 @@ public static String QFINDTESTDATA(String basepath, java.lang.String builddir, j }// class +class QTest_64__{ + @io.qt.QtUninvokable + private static void QCOMPARE_OP_IMPL(java.util.function.BiPredicate predicate, T lhs, T rhs, ComparisonOperation op) throws AssertionError { + io.qt.InternalAccess.CallerContext info = QtJambi_LibraryUtilities.internal.callerContextProvider().get(); + if (reportResult(predicate.test(lhs, rhs), + ()->java.util.Objects.toString(lhs), + ()->java.util.Objects.toString(rhs), + "leftValue", "rightValue", op, info.declaringClass.getName()+"."+info.methodName, info.lineNumber)) { + throw new AssertionError("Compared values are not the same"); + } + } + + /** + *

See QCOMPARE_EQ

+ */ + @io.qt.QtUninvokable + public static void QCOMPARE_EQ(T lhs, T rhs) throws AssertionError { + QCOMPARE_OP_IMPL(java.util.Objects::equals, lhs, rhs, ComparisonOperation.Equal); + } + + /** + *

See QCOMPARE_NE

+ */ + @io.qt.QtUninvokable + public static void QCOMPARE_NE(T lhs, T rhs) throws AssertionError { + QCOMPARE_OP_IMPL((l,r)->!java.util.Objects.equals(l,r), lhs, rhs, ComparisonOperation.Equal); + } + + /** + *

See QCOMPARE_EQ

+ */ + @io.qt.QtUninvokable + public static > void QCOMPARE_EQ(T lhs, T rhs) throws AssertionError { + QCOMPARE_OP_IMPL((l,r)->l.compareTo(r)==0, lhs, rhs, ComparisonOperation.Equal); + } + + /** + *

See QCOMPARE_EQ

+ */ + @io.qt.QtUninvokable + public static void QCOMPARE_EQ(int lhs, int rhs) throws AssertionError { + QCOMPARE_OP_IMPL((l,r)->l==r, lhs, rhs, ComparisonOperation.Equal); + } + + /** + *

See QCOMPARE_EQ

+ */ + @io.qt.QtUninvokable + public static void QCOMPARE_EQ(double lhs, double rhs) throws AssertionError { + QCOMPARE_OP_IMPL((l,r)->l==r, lhs, rhs, ComparisonOperation.Equal); + } + + /** + *

See QCOMPARE_EQ

+ */ + @io.qt.QtUninvokable + public static void QCOMPARE_EQ(long lhs, long rhs) throws AssertionError { + QCOMPARE_OP_IMPL((l,r)->l==r, lhs, rhs, ComparisonOperation.Equal); + } + + /** + *

See QCOMPARE_NE

+ */ + @io.qt.QtUninvokable + public static > void QCOMPARE_NE(T lhs, T rhs) throws AssertionError { + QCOMPARE_OP_IMPL((l,r)->l.compareTo(r)!=0, lhs, rhs, ComparisonOperation.NotEqual); + } + + /** + *

See QCOMPARE_NE

+ */ + @io.qt.QtUninvokable + public static void QCOMPARE_NE(int lhs, int rhs) throws AssertionError { + QCOMPARE_OP_IMPL((l,r)->l!=r, lhs, rhs, ComparisonOperation.NotEqual); + } + + /** + *

See QCOMPARE_NE

+ */ + @io.qt.QtUninvokable + public static void QCOMPARE_NE(double lhs, double rhs) throws AssertionError { + QCOMPARE_OP_IMPL((l,r)->l!=r, lhs, rhs, ComparisonOperation.NotEqual); + } + + /** + *

See QCOMPARE_NE

+ */ + @io.qt.QtUninvokable + public static void QCOMPARE_NE(long lhs, long rhs) throws AssertionError { + QCOMPARE_OP_IMPL((l,r)->l!=r, lhs, rhs, ComparisonOperation.NotEqual); + } + + /** + *

See QCOMPARE_LT

+ */ + @io.qt.QtUninvokable + public static > void QCOMPARE_LT(T lhs, T rhs) throws AssertionError { + QCOMPARE_OP_IMPL((l,r)->l.compareTo(r)<0, lhs, rhs, ComparisonOperation.LessThan); + } + + /** + *

See QCOMPARE_LT

+ */ + @io.qt.QtUninvokable + public static void QCOMPARE_LT(int lhs, int rhs) throws AssertionError { + QCOMPARE_OP_IMPL((l,r)->lSee QCOMPARE_LT

+ */ + @io.qt.QtUninvokable + public static void QCOMPARE_LT(double lhs, double rhs) throws AssertionError { + QCOMPARE_OP_IMPL((l,r)->lSee QCOMPARE_LT

+ */ + @io.qt.QtUninvokable + public static void QCOMPARE_LT(long lhs, long rhs) throws AssertionError { + QCOMPARE_OP_IMPL((l,r)->lSee QCOMPARE_LE

+ */ + @io.qt.QtUninvokable + public static > void QCOMPARE_LE(T lhs, T rhs) throws AssertionError { + QCOMPARE_OP_IMPL((l,r)->l.compareTo(r)<=0, lhs, rhs, ComparisonOperation.LessThanOrEqual); + } + + /** + *

See QCOMPARE_LE

+ */ + @io.qt.QtUninvokable + public static void QCOMPARE_LE(int lhs, int rhs) throws AssertionError { + QCOMPARE_OP_IMPL((l,r)->l<=r, lhs, rhs, ComparisonOperation.LessThanOrEqual); + } + + /** + *

See QCOMPARE_LE

+ */ + @io.qt.QtUninvokable + public static void QCOMPARE_LE(double lhs, double rhs) throws AssertionError { + QCOMPARE_OP_IMPL((l,r)->l<=r, lhs, rhs, ComparisonOperation.LessThanOrEqual); + } + + /** + *

See QCOMPARE_LE

+ */ + @io.qt.QtUninvokable + public static void QCOMPARE_LE(long lhs, long rhs) throws AssertionError { + QCOMPARE_OP_IMPL((l,r)->l<=r, lhs, rhs, ComparisonOperation.LessThanOrEqual); + } + + /** + *

See QCOMPARE_GT

+ */ + @io.qt.QtUninvokable + public static > void QCOMPARE_GT(T lhs, T rhs) throws AssertionError { + QCOMPARE_OP_IMPL((l,r)->l.compareTo(r)>0, lhs, rhs, ComparisonOperation.GreaterThan); + } + + /** + *

See QCOMPARE_GT

+ */ + @io.qt.QtUninvokable + public static void QCOMPARE_GT(int lhs, int rhs) throws AssertionError { + QCOMPARE_OP_IMPL((l,r)->l>r, lhs, rhs, ComparisonOperation.GreaterThan); + } + + /** + *

See QCOMPARE_GT

+ */ + @io.qt.QtUninvokable + public static void QCOMPARE_GT(double lhs, double rhs) throws AssertionError { + QCOMPARE_OP_IMPL((l,r)->l>r, lhs, rhs, ComparisonOperation.GreaterThan); + } + + /** + *

See QCOMPARE_GT

+ */ + @io.qt.QtUninvokable + public static void QCOMPARE_GT(long lhs, long rhs) throws AssertionError { + QCOMPARE_OP_IMPL((l,r)->l>r, lhs, rhs, ComparisonOperation.GreaterThan); + } + + /** + *

See QCOMPARE_GE

+ */ + @io.qt.QtUninvokable + public static > void QCOMPARE_GE(T lhs, T rhs) throws AssertionError { + QCOMPARE_OP_IMPL((l,r)->l.compareTo(r)>=0, lhs, rhs, ComparisonOperation.GreaterThanOrEqual); + } + + /** + *

See QCOMPARE_GE

+ */ + @io.qt.QtUninvokable + public static void QCOMPARE_GE(int lhs, int rhs) throws AssertionError { + QCOMPARE_OP_IMPL((l,r)->l>=r, lhs, rhs, ComparisonOperation.GreaterThanOrEqual); + } + + /** + *

See QCOMPARE_GE

+ */ + @io.qt.QtUninvokable + public static void QCOMPARE_GE(double lhs, double rhs) throws AssertionError { + QCOMPARE_OP_IMPL((l,r)->l>=r, lhs, rhs, ComparisonOperation.GreaterThanOrEqual); + } + + /** + *

See QCOMPARE_GE

+ */ + @io.qt.QtUninvokable + public static void QCOMPARE_GE(long lhs, long rhs) throws AssertionError { + QCOMPARE_OP_IMPL((l,r)->l>=r, lhs, rhs, ComparisonOperation.GreaterThanOrEqual); + } + +}// class + class QSignalSpy__{ + /** + *

See QSignalSpy::QSignalSpy(const QObject *, PointerToMemberFunction)

+ */ public QSignalSpy(QMetaObject.AbstractSignal signal) { super((QPrivateConstructor)null); if(!(signal.containingObject() instanceof QObject)) { @@ -446,331 +915,563 @@ public QSignalSpy(QMetaObject.AbstractSignal signal) { initialize_native(this, obj, signalMethod); } + /** + * {@inheritDoc} + */ + @Override @io.qt.QtUninvokable public final void forEach(Consumer> action) { list().forEach(action); } + /** + * {@inheritDoc} + */ + @Override @io.qt.QtUninvokable public boolean addAll(Collection> c) { return list().addAll(c); } + /** + * {@inheritDoc} + */ + @Override @io.qt.QtUninvokable public boolean addAll(int index, Collection> c) { return list().addAll(index, c); } + /** + * {@inheritDoc} + */ + @Override @io.qt.QtUninvokable public java.util.List remove(int index) { return list().remove(index); } + /** + * {@inheritDoc} + */ + @Override @io.qt.QtUninvokable public ListIterator> listIterator() { return list().listIterator(); } + /** + * {@inheritDoc} + */ + @Override @io.qt.QtUninvokable public ListIterator> listIterator(int index) { return list().listIterator(index); } + /** + * {@inheritDoc} + */ + @Override @io.qt.QtUninvokable public List> subList(int fromIndex, int toIndex) { return list().subList(fromIndex, toIndex); } + /** + * {@inheritDoc} + */ + @Override @io.qt.QtUninvokable public Object[] toArray() { return list().toArray(); } + /** + * {@inheritDoc} + */ + @Override @io.qt.QtUninvokable public T[] toArray(T[] a) { return list().toArray(a); } + /** + * {@inheritDoc} + */ + @Override @io.qt.QtUninvokable public boolean containsAll(Collection c) { return list().containsAll(c); } + /** + * {@inheritDoc} + */ + @Override @io.qt.QtUninvokable public QList> clone() { return list().clone(); } + /** + * @see io.qt.core.QList#append(java.util.Collection) + */ @io.qt.QtUninvokable - public final void append(Collection> t) { + public final void append(java.util.Collection> t) { list().append(t); } + /** + * {@inheritDoc} + */ + @Override @io.qt.QtUninvokable public boolean removeAll(Collection c) { return list().removeAll(c); } + /** + * {@inheritDoc} + */ + @Override @io.qt.QtUninvokable public boolean retainAll(Collection c) { return list().retainAll(c); } + /** + * @see io.qt.core.QList#append(java.util.List) + */ @io.qt.QtUninvokable public final void append(java.util.List t) { list().append(t); } + /** + * {@inheritDoc} + */ + @Override @io.qt.QtUninvokable public Iterator> iterator() { return list().iterator(); } + /** + * {@inheritDoc} + */ + @Override @io.qt.QtUninvokable public String toString() { return list().toString(); } + /** + * @see io.qt.core.QList#at(int) + */ @io.qt.QtUninvokable public final java.util.List at(int i) { return list().at(i); } + /** + * {@inheritDoc} + */ + @Override @io.qt.QtUninvokable public final void clear() { list().clear(); } + /** + * {@inheritDoc} + */ + @Override @io.qt.QtUninvokable public final boolean contains(Object t) { return list().contains(t); } + /** + * @see io.qt.core.QList#count() + */ @io.qt.QtUninvokable public final int count() { return list().count(); } + /** + * @see io.qt.core.QList#count(java.util.List) + */ @io.qt.QtUninvokable public final int count(java.util.List t) { return list().count(t); } + /** + * @see io.qt.core.QList#endsWith(java.util.List) + */ @io.qt.QtUninvokable public final boolean endsWith(java.util.List t) { return list().endsWith(t); } + /** + * @see io.qt.core.QList#first() + */ @io.qt.QtUninvokable public final java.util.List first() { return list().first(); } + /** + * @see io.qt.core.QList#indexOf(java.util.List,int) + */ @io.qt.QtUninvokable public final int indexOf(java.util.List t, int from) { return list().indexOf(t, from); } + /** + * @see io.qt.core.QList#insert(int,java.util.List) + */ @io.qt.QtUninvokable public final void insert(int i, java.util.List t) { list().insert(i, t); } + /** + * {@inheritDoc} + */ + @Override @io.qt.QtUninvokable public final boolean isEmpty() { return list().isEmpty(); } + /** + * @see io.qt.core.QList#last() + */ @io.qt.QtUninvokable public final java.util.List last() { return list().last(); } + /** + * {@inheritDoc} + */ + @Override @io.qt.QtUninvokable public final int lastIndexOf(Object t) { return list().lastIndexOf(t); } + /** + * @see io.qt.core.QList#lastIndexOf(java.util.List,int) + */ @io.qt.QtUninvokable public final int lastIndexOf(java.util.List t, int from) { return list().lastIndexOf(t, from); } + /** + * @see io.qt.core.QList#length() + */ @io.qt.QtUninvokable public final int length() { return list().length(); } + /** + * @see io.qt.core.QList#mid(int) + */ @io.qt.QtUninvokable public final QList> mid(int pos) { return list().mid(pos); } + /** + * @see io.qt.core.QList#mid(int,int) + */ @io.qt.QtUninvokable public final QList> mid(int pos, int length) { return list().mid(pos, length); } + /** + * @see io.qt.core.QList#move(int,int) + */ @io.qt.QtUninvokable public final void move(int from, int to) { list().move(from, to); } + /** + * @see io.qt.core.QList#prepend(java.util.List) + */ @io.qt.QtUninvokable public final void prepend(java.util.List t) { list().prepend(t); } + /** + * @see io.qt.core.QList#removeAll(java.util.List) + */ @io.qt.QtUninvokable public final int removeAll(java.util.List t) { return list().removeAll(t); } + /** + * @see io.qt.core.QList#removeAt(int) + */ @io.qt.QtUninvokable public final void removeAt(int i) { list().removeAt(i); } + /** + * @see io.qt.core.QList#removeOnt(java.util.List) + */ @io.qt.QtUninvokable public final boolean removeOne(java.util.List t) { return list().removeOne(t); } + /** + * @see io.qt.core.QList#replace(int,java.util.List) + */ @io.qt.QtUninvokable public final void replace(int i, java.util.List t) { list().replace(i, t); } + /** + * @see io.qt.core.QList#reserve(int) + */ @io.qt.QtUninvokable public final void reserve(int size) { list().reserve(size); } + /** + * {@inheritDoc} + */ + @Override @io.qt.QtUninvokable public final int size() { return list().size(); } + /** + * @see io.qt.core.QList#startsWith(java.util.List) + */ @io.qt.QtUninvokable public final boolean startsWith(java.util.List t) { return list().startsWith(t); } + /** + * @see io.qt.core.QList#takeAt(int) + */ @io.qt.QtUninvokable public final java.util.List takeAt(int i) { return list().takeAt(i); } + /** + * @see io.qt.core.QList#takeFirst() + */ @io.qt.QtUninvokable public final java.util.List takeFirst() { return list().takeFirst(); } + /** + * @see io.qt.core.QList#takeLast() + */ @io.qt.QtUninvokable public final java.util.List takeLast() { return list().takeLast(); } + /** + * @see io.qt.core.QList#value(int) + */ @io.qt.QtUninvokable public final java.util.List value(int i) { return list().value(i); } + /** + * @see io.qt.core.QList#value(int,java.util.List) + */ @io.qt.QtUninvokable public final java.util.List value(int i, java.util.List defaultValue) { return list().value(i, defaultValue); } + /** + * {@inheritDoc} + */ + @Override @io.qt.QtUninvokable public boolean equals(Object other) { return list().equals(other); } + /** + * {@inheritDoc} + */ + @Override @io.qt.QtUninvokable public int hashCode() { return list().hashCode(); } + /** + * {@inheritDoc} + */ + @Override @io.qt.QtUninvokable public boolean add(java.util.List e) { return list().add(e); } + /** + * {@inheritDoc} + */ + @Override @io.qt.QtUninvokable public void add(int index, java.util.List e) { list().add(index, e); } + /** + * {@inheritDoc} + */ + @Override @io.qt.QtUninvokable public java.util.List set(int index, java.util.List e) { return list().set(index, e); } + /** + * {@inheritDoc} + */ + @Override @io.qt.QtUninvokable public boolean remove(Object e) { return list().remove(e); } + /** + * {@inheritDoc} + */ + @Override @io.qt.QtUninvokable public int indexOf(Object e) { return list().indexOf(e); } + /** + * {@inheritDoc} + */ + @Override @io.qt.QtUninvokable public java.util.List get(int index) { return list().get(index); } + /** + * @see io.qt.core.QList#swapItemsAt(int,int) + */ @io.qt.QtUninvokable public final void swapItemsAt(int i, int j) { list().swapItemsAt(i, j); } + /** + * {@inheritDoc} + */ + @Override @io.qt.QtUninvokable public final void replaceAll(UnaryOperator> operator) { list().replaceAll(operator); } + /** + * @see io.qt.core.QList#writeTo(QDataStream) + */ @io.qt.QtUninvokable public void writeTo(QDataStream stream) { list().writeTo(stream); } + /** + * @see io.qt.core.QList#readFrom(QDataStream) + */ @io.qt.QtUninvokable public void readFrom(QDataStream stream) { list().readFrom(stream); } + /** + * {@inheritDoc} + */ + @Override @io.qt.QtUninvokable public final void sort(Comparator> c) { list().sort(c); } + /** + * {@inheritDoc} + */ + @Override @io.qt.QtUninvokable public final boolean removeIf(Predicate> filter) { return list().removeIf(filter); } + /** + * {@inheritDoc} + */ + @Override @io.qt.QtUninvokable public final Spliterator> spliterator() { return list().spliterator(); } + /** + * {@inheritDoc} + */ + @Override @io.qt.QtUninvokable public final Stream> stream() { return list().stream(); } + /** + * {@inheritDoc} + */ + @Override @io.qt.QtUninvokable public final Stream> parallelStream() { return list().parallelStream(); } + /** + * @see io.qt.core.QList#removeFirst() + */ @io.qt.QtUninvokable public final void removeFirst() { list().removeFirst(); } + /** + * @see io.qt.core.QList#removeLast() + */ @io.qt.QtUninvokable public final void removeLast() { list().removeLast(); @@ -778,6 +1479,9 @@ public final void removeLast() { }// class class QSignalSpy_5_{ + /** + * @see io.qt.core.QList#toSet() + */ @io.qt.QtUninvokable public final QSet> toSet() { return list().toSet(); @@ -785,36 +1489,57 @@ public final QSet> toSet() { }// class class QSignalSpy_6_{ + /** + * @see io.qt.core.QList#fill(java.util.List) + */ @io.qt.QtUninvokable public final void fill(java.util.List t) { list().fill(t); } + /** + * @see io.qt.core.QList#fill(java.util.List,int) + */ @io.qt.QtUninvokable public final void fill(java.util.List t, int size) { list().fill(t, size); } + /** + * @see io.qt.core.QList#insert(int,int,java.util.List) + */ @io.qt.QtUninvokable public final void insert(int i, int n, java.util.List t) { list().insert(i, n, t); } + /** + * @see io.qt.core.QList#remove(int,int) + */ @io.qt.QtUninvokable public final void remove(int i, int n) { list().remove(i, n); } + /** + * @see io.qt.core.QList#capacity() + */ @io.qt.QtUninvokable public final int capacity() { return list().capacity(); } + /** + * @see io.qt.core.QList#resize(int) + */ @io.qt.QtUninvokable public final void resize(int size) { list().resize(size); } + /** + * @see io.qt.core.QList#squeeze() + */ @io.qt.QtUninvokable public final void squeeze() { list().squeeze(); diff --git a/generator/typesystem/java/typesystem_webenginequick-java.java b/generator/typesystem/java/typesystem_webenginequick-java.java index 1c3a94bb..03942d09 100644 --- a/generator/typesystem/java/typesystem_webenginequick-java.java +++ b/generator/typesystem/java/typesystem_webenginequick-java.java @@ -41,7 +41,7 @@ class QtWebEngineQuick___{ * @return QWebEngineSettings */ @SuppressWarnings("exports") - public static native io.qt.webengine.core.QWebEngineSettings toWebEngineSettings(io.qt.core.QObject quickWebEngineSettings); + public static native io.qt.webengine.core.QWebEngineSettings toWebEngineSettings(io.qt.core.QObject quickWebEngineSettings); /** * Allows accessing the QWebEngineScriptCollection inside of a QQuickWebEngineScriptCollection (internal type). @@ -49,7 +49,7 @@ class QtWebEngineQuick___{ * @return QWebEngineScriptCollection */ @SuppressWarnings("exports") - public static native io.qt.webengine.core.QWebEngineScriptCollection toWebEngineScriptCollection(io.qt.core.QObject quickWebEngineScriptCollection); + public static native io.qt.webengine.core.QWebEngineScriptCollection toWebEngineScriptCollection(io.qt.core.QObject quickWebEngineScriptCollection); }// class diff --git a/generator/typesystem/modification.h b/generator/typesystem/modification.h index 8b708962..5e3cd797 100644 --- a/generator/typesystem/modification.h +++ b/generator/typesystem/modification.h @@ -56,11 +56,33 @@ enum class ThreadAffinity : uint{ }; struct ArgumentModification { - ArgumentModification(int idx) : + enum Type{ + Default, + AdditionalArgument, + TypeParameter, + }; + + ArgumentModification(Type _type = Type::AdditionalArgument) : + removed_default_expression(false), + removed(false), + no_null_pointers(false), + reset_after_use(false), + value_as_pointer(false), + type(_type), + thread_affine(ThreadAffinity::None), + index(std::numeric_limits::max()), + useAsArrayType(AsArrayType::No), + arrayLengthParameter(-1), + minArrayLength(-1), + maxArrayLength(-1) + {} + ArgumentModification(int idx, Type _type = Type::Default) : removed_default_expression(false), removed(false), no_null_pointers(false), reset_after_use(false), + value_as_pointer(false), + type(_type), thread_affine(ThreadAffinity::None), index(idx), useAsArrayType(AsArrayType::No), @@ -74,6 +96,8 @@ struct ArgumentModification { uint removed : 1; uint no_null_pointers : 1; uint reset_after_use : 1; + uint value_as_pointer : 1; + Type type; ThreadAffinity thread_affine; //! The index of this argument @@ -108,8 +132,6 @@ struct ArgumentModification { int arrayLengthParameter; int minArrayLength; int maxArrayLength; - - static int ADDED_ARGUMENT; }; struct Modification { @@ -144,6 +166,7 @@ struct Modification { }; Modification() : modifiers(0) { } + Modification(const Modification&) = default; bool isAccessModifier() const { return modifiers & AccessModifierMask; } Modifiers accessModifier() const { return Modifiers(modifiers & AccessModifierMask); } @@ -175,28 +198,41 @@ struct Modification { QString renamedToName; }; -struct TemplateInstantiation: public Modification { - QList arguments; +struct AbstractFunctionModification: public Modification { + AbstractFunctionModification() = default; + AbstractFunctionModification(const AbstractFunctionModification&) = default; + bool isCodeInjection() const { return modifiers & CodeInjection; } + QString ppCondition; + QString throws; + QString association; + CodeSnipList snips; + QString targetType; + QString proxyCall; + QList argument_mods; +}; + +struct Parameter{ + QString type; + QString name; + QString extends; + bool implicit; }; -typedef QList TemplateInstantiationList; +struct TemplateInstantiation: public AbstractFunctionModification { + TemplateInstantiation() = default; + TemplateInstantiation(const TemplateInstantiation&) = default; + QList arguments; +}; -struct FunctionModification: public Modification { - FunctionModification() : removal(TypeSystem::NoLanguage) { } +typedef QList TemplateInstantiationList; - bool isCodeInjection() const { return modifiers & CodeInjection; } +struct FunctionModification: public AbstractFunctionModification { + FunctionModification() : AbstractFunctionModification(), removal(TypeSystem::NoLanguage) { } + FunctionModification(const FunctionModification&) = default; bool isRemoveModifier() const { return removal != TypeSystem::NoLanguage; } - QString toString() const; - - QString signature; - QString ppCondition; - QString throws; - QString association; - CodeSnipList snips; TypeSystem::Language removal; - - QList argument_mods; + QString signature; QList template_instantiations; }; typedef QList FunctionModificationList; diff --git a/generator/typesystem/typedatabase.cpp b/generator/typesystem/typedatabase.cpp index eb029057..22c4cc2b 100644 --- a/generator/typesystem/typedatabase.cpp +++ b/generator/typesystem/typedatabase.cpp @@ -87,6 +87,7 @@ TypeDatabase::TypeDatabase() : m_pixmapType(nullptr), m_bitmapType(nullptr), m_qstringType(nullptr), + m_qvariantType(nullptr), m_qcharType(nullptr){ } @@ -208,7 +209,10 @@ NamespaceTypeEntry *TypeDatabase::findNamespaceType(const QString &name) { } void TypeDatabase::addType(TypeEntry *e) { - if(e->qualifiedCppName()=="QString" && !e->isQString()){ + if(e->qualifiedCppName()=="QVariant" && !e->isVariant()){ + m_entries["QtJambiVariant"].append(e); + m_qvariantType = dynamic_cast(e); + }else if(e->qualifiedCppName()=="QString" && !e->isQString()){ m_entries["QtJambiString"].append(e); m_qstringType = dynamic_cast(e); }else if(e->qualifiedCppName()=="QChar" && !e->isChar()){ @@ -247,6 +251,7 @@ void TypeDatabase::initialize(const QString &filename, const QStringList &import ContainerTypeEntry* stringListEntry(nullptr); { ReportHandler::setContext("Typesystem"); + addType(new AutoTypeEntry()); { StringTypeEntry *e = new StringTypeEntry("QString"); e->setCodeGeneration(TypeEntry::GenerateAll); @@ -314,12 +319,6 @@ void TypeDatabase::initialize(const QString &filename, const QStringList &import qvariant->setTargetLangPackage("io.qt.core"); qvariant->setCodeGeneration(TypeEntry::GenerateNothing); addType(qvariant); - EnumTypeEntry* etype = new EnumTypeEntry("QVariant", "Type"); - etype->setTargetTypeSystem("QtCore"); - etype->setTargetLangPackage("io.qt.core"); - etype->setExtensible(true); - etype->setCodeGeneration(TypeEntry::GenerateNothing); - addType(etype); } { diff --git a/generator/typesystem/typedatabase.h b/generator/typesystem/typedatabase.h index 9a969e67..c6a6a22f 100644 --- a/generator/typesystem/typedatabase.h +++ b/generator/typesystem/typedatabase.h @@ -156,6 +156,10 @@ class TypeDatabase { inline uint qtVersion() const {return m_qtVersion;} + ComplexTypeEntry * qvariantType() const{ + return m_qvariantType; + } + ComplexTypeEntry * qstringType() const{ return m_qstringType; } @@ -189,6 +193,7 @@ class TypeDatabase { ComplexTypeEntry * m_pixmapType; ComplexTypeEntry * m_bitmapType; ComplexTypeEntry * m_qstringType; + ComplexTypeEntry * m_qvariantType; ComplexTypeEntry * m_qcharType; }; diff --git a/generator/typesystem/typeentry.cpp b/generator/typesystem/typeentry.cpp index df4b9ffd..86f1d3cd 100644 --- a/generator/typesystem/typeentry.cpp +++ b/generator/typesystem/typeentry.cpp @@ -62,18 +62,8 @@ ComplexTypeEntry::ComplexTypeEntry(const QString &name, Type t) : TypeEntry(QString(name).replace("::", "$"), t), // the A$B notation is the java binary name of an embedded class m_pp_condition(), m_qualified_cpp_name(name), - m_is_qobject(false), - m_is_qwidget(false), - m_is_qwindow(false), - m_is_qaction(false), - m_is_qapplication(false), - m_polymorphic_base(false), - m_generic_class(false), - m_isTemplate(false), - m_isNativeInterface(false), - m_inhibitMetaobject(false), - m_isNativeIdBased(useNativeIds), m_type_flags() { + m_attributes.setFlag(IsNativeIdBased, useNativeIds); Include inc; inc.name = "QtCore/QVariant"; inc.type = Include::IncludePath; @@ -88,16 +78,11 @@ ComplexTypeEntry *ComplexTypeEntry::copy() const { centry->setExtraIncludes(extraIncludes()); centry->setFunctionModifications(functionModifications()); centry->setFieldModifications(fieldModifications()); - centry->setQObject(isQObject()); - centry->setQWidget(isQWidget()); - centry->setQWindow(isQWindow()); - centry->setQAction(isQAction()); - centry->setQCoreApplication(isQCoreApplication()); centry->setDefaultSuperclass(defaultSuperclass()); centry->setCodeSnips(codeSnips()); centry->setTargetLangPackage(javaPackage()); centry->setTargetTypeSystem(targetTypeSystem()); - centry->m_isNativeIdBased = m_isNativeIdBased; + centry->m_attributes = m_attributes; return centry; } @@ -203,7 +188,9 @@ QString EnumTypeEntry::javaPackage() const { }else{ m_qualifier_type = TypeDatabase::instance()->findType(m_javaScope); } - if(m_qualifier_type && m_qualifier_type->isQString() && TypeDatabase::instance()->qstringType()) + if(m_qualifier_type && m_qualifier_type->isVariant() && TypeDatabase::instance()->qvariantType()) + m_qualifier_type = TypeDatabase::instance()->qvariantType(); + else if(m_qualifier_type && m_qualifier_type->isQString() && TypeDatabase::instance()->qstringType()) m_qualifier_type = TypeDatabase::instance()->qstringType(); else if(m_qualifier_type && m_qualifier_type->isChar() && TypeDatabase::instance()->qcharType()) m_qualifier_type = TypeDatabase::instance()->qcharType(); @@ -226,7 +213,9 @@ QString EnumTypeEntry::javaQualifier() const { }else{ m_qualifier_type = TypeDatabase::instance()->findType(m_javaScope); } - if(m_qualifier_type && m_qualifier_type->isQString()) + if(m_qualifier_type && m_qualifier_type->isVariant()) + m_qualifier_type = TypeDatabase::instance()->findType("QtJambiVariant"); + else if(m_qualifier_type && m_qualifier_type->isQString()) m_qualifier_type = TypeDatabase::instance()->findType("QtJambiString"); else if(m_qualifier_type && m_qualifier_type->isChar()) m_qualifier_type = TypeDatabase::instance()->findType("QtJambiChar"); @@ -388,6 +377,26 @@ bool ComplexTypeEntry::hasFunctionCodeInjections(const QString &methodSignature, return false; } +bool TypeSystemTypeEntry::hasFunctionCodeInjections(const QString &methodSignature, TypeSystem::Language language, const QSet& positions) const{ + for (const FunctionModification& mod : m_function_mods) { + if (mod.signature == methodSignature) { + if (mod.snips.count() <= 0) + continue ; + for(const CodeSnip& snip : mod.snips) { + if (!positions.contains(snip.position)) + continue; + + if (!(snip.language & language)) + continue; + + if(!snip.code().isEmpty()) + return true; + } + } + } + return false; +} + FunctionModificationList ComplexTypeEntry::functionModifications(const QString &signature) const { FunctionModificationList lst; for (const FunctionModification& mod : m_function_mods) { @@ -398,6 +407,16 @@ FunctionModificationList ComplexTypeEntry::functionModifications(const QString & return lst; } +FunctionModificationList TypeSystemTypeEntry::functionModifications(const QString &signature) const { + FunctionModificationList lst; + for (const FunctionModification& mod : m_function_mods) { + if (mod.signature == signature) { + lst << mod; + } + } + return lst; +} + FieldModification ComplexTypeEntry::fieldModification(const QString &name) const { for (int i = 0; i < m_field_mods.size(); ++i) if (m_field_mods.at(i).name == name) @@ -420,10 +439,10 @@ QString ComplexTypeEntry::qualifiedCppName() const { bool ObjectTypeEntry::isValueOwner() const { - return m_is_value_owner; + return m_attributes.testFlag(IsValueOwner); } void ObjectTypeEntry::setIsValueOwner(bool is_value_owner) { - m_is_value_owner = is_value_owner; + m_attributes.setFlag(IsValueOwner, is_value_owner); } diff --git a/generator/typesystem/typeentry.h b/generator/typesystem/typeentry.h index 47962b40..bcce9c2e 100644 --- a/generator/typesystem/typeentry.h +++ b/generator/typesystem/typeentry.h @@ -88,6 +88,7 @@ class TypeEntry { AliasType, PrimitiveType, VoidType, + AutoType, FlagsType, EnumType, FunctionalType, @@ -141,13 +142,6 @@ class TypeEntry { GenerateCode = GenerateTargetLang | GenerateCpp }; - enum ConstructorType{ - LegacyCopyConstructor, - DefaultConstructor, - CopyConstructor, - MoveConstructor - }; - TypeEntry(const QString &name, Type t) : m_name(name), m_type(t), @@ -281,6 +275,9 @@ class TypeEntry { bool isVoid() const { return m_type == VoidType; } + bool isAuto() const { + return m_type == AutoType; + } bool isThread() const { return m_type == ThreadType; } @@ -360,20 +357,6 @@ class TypeEntry { return nullptr; } - void setCustomConstructor(const CustomFunction &func, ConstructorType type = CopyConstructor) { - m_customConstructors[type] = func; - } - CustomFunction customConstructor(ConstructorType type = CopyConstructor) const { - return m_customConstructors[type]; - } - - void setCustomDestructor(const CustomFunction &func) { - m_customDestructor = func; - } - const CustomFunction& customDestructor() const { - return m_customDestructor; - } - virtual bool isValue() const { return false; } @@ -401,8 +384,6 @@ class TypeEntry { QString m_name; Type m_type; uint m_code_generation; - QHash m_customConstructors; - CustomFunction m_customDestructor; bool m_isDeclaredDeprecated; // currently not yet in use: bool m_preferred_conversion; @@ -464,7 +445,6 @@ class TypeSystemTypeEntry : public TypeEntry { snips(), m_include(), m_extra_includes(), - m_includes_used(), m_qtLibrary(), m_module(), m_requiredTypeSystems(), @@ -476,7 +456,6 @@ class TypeSystemTypeEntry : public TypeEntry { snips(), m_include(), m_extra_includes(), - m_includes_used(), m_qtLibrary(lib), m_module(module), m_requiredTypeSystems(), @@ -497,10 +476,7 @@ class TypeSystemTypeEntry : public TypeEntry { m_extra_includes = includes; } void addExtraInclude(const Include &include) { - if (!m_includes_used.value(include.name, false)) { - m_extra_includes << include; - m_includes_used[include.name] = true; - } + m_extra_includes << include; } const QString& qtLibrary() const { @@ -555,16 +531,32 @@ class TypeSystemTypeEntry : public TypeEntry { m_noExports = noExports; } + const FunctionModificationList& functionModifications() const { + return m_function_mods; + } + void setFunctionModifications(const FunctionModificationList &functionModifications) { + m_function_mods = functionModifications; + } + void addFunctionModifications(const FunctionModificationList &functionModifications) { + m_function_mods << functionModifications; + } + void addFunctionModification(const FunctionModification &functionModification) { + m_function_mods << functionModification; + } + FunctionModificationList functionModifications(const QString &signature) const; + + bool hasFunctionCodeInjections(const QString &methodSignature, TypeSystem::Language language, const QSet& positions) const; + QMap> snips; Include m_include; IncludeList m_extra_includes; - QHash m_includes_used; QString m_qtLibrary; QString m_module; QList m_requiredTypeSystems; QList m_requiredQtLibraries; QString m_description; QList m_forwardDeclarations; + FunctionModificationList m_function_mods; bool m_noExports; }; @@ -587,7 +579,16 @@ class ThreadTypeEntry : public TypeEntry { class VoidTypeEntry : public TypeEntry { public: - VoidTypeEntry() : TypeEntry("void", VoidType) { } + VoidTypeEntry() : TypeEntry("void", VoidType) { + setCodeGeneration(GenerateNothing); + } +}; + +class AutoTypeEntry : public TypeEntry { + public: + AutoTypeEntry() : TypeEntry("auto", AutoType) { + setCodeGeneration(GenerateNothing); + } }; class TemplateArgumentEntry : public TypeEntry { @@ -1146,6 +1147,12 @@ class FlagsTypeEntry : public TypeEntry { class ComplexTypeEntry : public TypeEntry { public: + enum ConstructorType{ + LegacyCopyConstructor, + DefaultConstructor, + CopyConstructor, + MoveConstructor + }; enum TypeFlag { ForceAbstract = 0x01, ThreadAffine = 0x02, @@ -1262,38 +1269,38 @@ class ComplexTypeEntry : public TypeEntry { } bool isQObject() const { - return m_is_qobject; + return m_attributes.testFlag(IsQObject); } void setQObject(bool qobject) { - m_is_qobject = qobject; + m_attributes.setFlag(IsQObject, qobject); } bool isQWidget() const { - return m_is_qwidget; + return m_attributes.testFlag(IsQWidget); } void setQWidget(bool qWidget) { - m_is_qwidget = qWidget; + m_attributes.setFlag(IsQWidget, qWidget); } bool isQWindow() const { - return m_is_qwindow; + return m_attributes.testFlag(IsQWindow); } void setQWindow(bool qw) { - m_is_qwindow = qw; + m_attributes.setFlag(IsQWindow, qw); } bool isQAction() const { - return m_is_qaction; + return m_attributes.testFlag(IsQAction); } void setQAction(bool qw) { - m_is_qaction = qw; + m_attributes.setFlag(IsQAction, qw); } bool isQCoreApplication() const { - return m_is_qapplication; + return m_attributes.testFlag(IsQCoreApplication); } void setQCoreApplication(bool qw) { - m_is_qapplication = qw; + m_attributes.setFlag(IsQCoreApplication, qw); } const QString& defaultSuperclass() const { @@ -1318,10 +1325,10 @@ class ComplexTypeEntry : public TypeEntry { } void setIsPolymorphicBase(bool on) { - m_polymorphic_base = on; + m_attributes.setFlag(IsPolymorphicBase, on); } bool isPolymorphicBase() const { - return m_polymorphic_base; + return m_attributes.testFlag(IsPolymorphicBase); } void setPolymorphicIdValue(const QString &value) { @@ -1364,31 +1371,31 @@ class ComplexTypeEntry : public TypeEntry { } bool isGenericClass() const { - return m_generic_class; + return m_attributes.testFlag(IsGenericClass); } void setGenericClass(bool isGeneric) { - m_generic_class = isGeneric; + m_attributes.setFlag(IsGenericClass, isGeneric); } bool isTemplate() const { - return m_isTemplate; + return m_attributes.testFlag(IsTemplate); } void setTemplate(bool isTemplate) { - m_isTemplate = isTemplate; + m_attributes.setFlag(IsTemplate, isTemplate); } bool isNativeInterface() const { - return m_isNativeInterface; + return m_attributes.testFlag(IsNativeInterface); } void setNativeInterface(bool isNativeInterface) { - m_isNativeInterface = isNativeInterface; + m_attributes.setFlag(IsNativeInterface, isNativeInterface); } bool inhibitMetaobject() const { - return m_inhibitMetaobject; + return m_attributes.testFlag(InhibitMetaobject); } void setInhibitMetaobject(bool inhibitMetaobject) { - m_inhibitMetaobject = inhibitMetaobject; + m_attributes.setFlag(InhibitMetaobject, inhibitMetaobject); } const QString& threadAffinity() const { @@ -1414,11 +1421,11 @@ class ComplexTypeEntry : public TypeEntry { } virtual bool isNativeIdBased() const override { - return m_isNativeIdBased; + return m_attributes.testFlag(IsNativeIdBased); } void disableNativeIdUsage() { - m_isNativeIdBased = false; + m_attributes.setFlag(IsNativeIdBased, false); } void addInstantiation(const QStringList& instantiation, const ComplexTypeEntry* typeEntry = nullptr){ @@ -1431,7 +1438,38 @@ class ComplexTypeEntry : public TypeEntry { void setExtendType(const QString& extendType){ m_extendType = extendType; } const QString& extendType() const { return m_extendType; } - private: + void setCustomConstructor(const CustomFunction &func, ConstructorType type = CopyConstructor) { + m_customConstructors[type] = func; + } + CustomFunction customConstructor(ConstructorType type = CopyConstructor) const { + return m_customConstructors[type]; + } + + void setCustomDestructor(const CustomFunction &func) { + m_customDestructor = func; + } + const CustomFunction& customDestructor() const { + return m_customDestructor; + } +protected: + enum ComplexAttributeFlag{ + IsQObject = 0x01, + IsQWidget = 0x02, + IsQWindow = 0x04, + IsQAction = 0x08, + IsQCoreApplication = 0x010, + IsPolymorphicBase = 0x020, + IsGenericClass = 0x040, + IsTemplate = 0x080, + IsNativeInterface = 0x0100, + InhibitMetaobject = 0x0200, + IsNativeIdBased = 0x0400, + IsNoImpl = 0x0800, + IsValueOwner = 0x01000, + SkipMetaTypeRegistration = 0x2000 + }; + QFlags m_attributes; +private: IncludeList m_extra_includes; Include m_include; QHash m_includes_used; @@ -1446,19 +1484,8 @@ class ComplexTypeEntry : public TypeEntry { QString m_java_name; QString m_implements; QString m_threadAffinity; - - uint m_is_qobject : 1; - uint m_is_qwidget : 1; - uint m_is_qwindow : 1; - uint m_is_qaction : 1; - uint m_is_qapplication : 1; - uint m_polymorphic_base : 1; - uint m_generic_class : 1; - uint m_isTemplate : 1; - uint m_isNativeInterface : 1; - uint m_inhibitMetaobject : 1; - uint m_isNativeIdBased : 1; - + QHash m_customConstructors; + CustomFunction m_customDestructor; QString m_polymorphic_id_value; QMap m_interface_polymorphic_id_values; QString m_lookup_name; @@ -1497,10 +1524,12 @@ class AliasTypeEntry : public ComplexTypeEntry { }; class NamespaceTypeEntry : public ComplexTypeEntry { - public: - NamespaceTypeEntry(const QString &name) : ComplexTypeEntry(name, NamespaceType) { +public: + NamespaceTypeEntry(const QString &name, bool isHeader) : ComplexTypeEntry(name, NamespaceType), m_isHeader(isHeader) { disableNativeIdUsage(); } + bool isHeader() const{return m_isHeader;} +private: uint m_isHeader : 1; }; class ImplementorTypeEntry; @@ -1516,11 +1545,11 @@ class InterfaceTypeEntry : public ComplexTypeEntry { } bool noImpl() const{ - return m_noImpl; + return m_attributes.testFlag(IsNoImpl); } void setNoImpl(bool noImpl){ - m_noImpl = noImpl; + m_attributes.setFlag(IsNoImpl, noImpl); } ImplementorTypeEntry *origin() const { @@ -1532,7 +1561,6 @@ class InterfaceTypeEntry : public ComplexTypeEntry { private: ImplementorTypeEntry *m_origin; - bool m_noImpl; }; class ImplementorTypeEntry : public ComplexTypeEntry { @@ -1584,31 +1612,26 @@ class ObjectTypeEntry : public ImplementorTypeEntry { } bool isValueOwner() const; void setIsValueOwner(bool is_value_owner); -private: - bool m_is_value_owner; }; class ValueTypeEntry : public ImplementorTypeEntry { public: - ValueTypeEntry(const QString &name) : ImplementorTypeEntry(name, BasicValueType), m_skipMetaTypeRegistration(false) { } + ValueTypeEntry(const QString &name) : ImplementorTypeEntry(name, BasicValueType) { } bool isValue() const override { return true; } bool skipMetaTypeRegistration() const { - return m_skipMetaTypeRegistration; + return m_attributes.testFlag(SkipMetaTypeRegistration); } void setSkipMetaTypeRegistration(bool skipMetaTypeRegistration){ - m_skipMetaTypeRegistration = skipMetaTypeRegistration; + m_attributes.setFlag(SkipMetaTypeRegistration, skipMetaTypeRegistration); } protected: - ValueTypeEntry(const QString &name, Type t) : ImplementorTypeEntry(name, t), m_skipMetaTypeRegistration(false) { } - - private: - bool m_skipMetaTypeRegistration; + ValueTypeEntry(const QString &name, Type t) : ImplementorTypeEntry(name, t) { } }; class StringTypeEntry : public ValueTypeEntry { diff --git a/generator/typesystem/typesystem.cpp b/generator/typesystem/typesystem.cpp index 124f14dd..5698cc43 100644 --- a/generator/typesystem/typesystem.cpp +++ b/generator/typesystem/typesystem.cpp @@ -81,19 +81,15 @@ QString Include::toString() const { * which our typedefs unforntuatly expand to. */ QString fixCppTypeName(const QString &name) { - if (name == "qtjambireal"){ - return "qreal"; - }else{ #if QT_VERSION < QT_VERSION_CHECK(6,0,0) - QMetaType metaType(QMetaType::type(name.toLatin1().constData())); + QMetaType metaType(QMetaType::type(name.toLatin1().constData())); #else - QMetaType metaType = QMetaType::fromName(name.toLatin1().constData()); + QMetaType metaType = QMetaType::fromName(name.toLatin1().constData()); #endif - if(metaType.isValid() && metaType.id()<=QMetaType::HighestInternalId){ - return metaType.name(); - } - return name; + if(metaType.isValid() && metaType.id()<=QMetaType::HighestInternalId){ + return metaType.name(); } + return name; } QString formattedCodeHelper(QTextStream &s, Indentor &indentor, QStringList &lines) { diff --git a/generator/typesystem/typesystem.h b/generator/typesystem/typesystem.h index b81f84af..b1eaceaa 100644 --- a/generator/typesystem/typesystem.h +++ b/generator/typesystem/typesystem.h @@ -88,10 +88,14 @@ namespace TypeSystem { Signal = 0x0100, MetaInfo = 0x0200, ModuleInfo = 0x0400, + Getter = 0x1000, + Setter = 0x2000, // masks All = TargetLangCode | NativeCode + | Getter + | Setter | ShellCode | ShellDeclaration | PackageInitializer diff --git a/generator/typesystem/xml/typesystem_activex-common.xml b/generator/typesystem/xml/typesystem_activex-common.xml index b81143f8..21f0d773 100644 --- a/generator/typesystem/xml/typesystem_activex-common.xml +++ b/generator/typesystem/xml/typesystem_activex-common.xml @@ -45,6 +45,7 @@ + @@ -60,6 +61,20 @@ + + + + + + + + + + + + + + diff --git a/generator/typesystem/xml/typesystem_bluetooth-common.xml b/generator/typesystem/xml/typesystem_bluetooth-common.xml index 87064392..bb1ad523 100644 --- a/generator/typesystem/xml/typesystem_bluetooth-common.xml +++ b/generator/typesystem/xml/typesystem_bluetooth-common.xml @@ -43,6 +43,8 @@ ** ****************************************************************************--> + + diff --git a/generator/typesystem/xml/typesystem_concurrent-common.xml b/generator/typesystem/xml/typesystem_concurrent-common.xml index e55754ed..7e53db1b 100644 --- a/generator/typesystem/xml/typesystem_concurrent-common.xml +++ b/generator/typesystem/xml/typesystem_concurrent-common.xml @@ -50,8 +50,17 @@ + + + + + + + + + @@ -155,7 +164,6 @@ - @@ -196,7 +204,6 @@ - @@ -212,6 +219,9 @@ + + + @@ -222,7 +232,6 @@ - @@ -241,27 +250,27 @@ - + - - + + - + - - + + @@ -272,4 +281,7 @@ + + + diff --git a/generator/typesystem/xml/typesystem_concurrent-java.xml b/generator/typesystem/xml/typesystem_concurrent-java.xml index 4a9966bd..05dfe982 100644 --- a/generator/typesystem/xml/typesystem_concurrent-java.xml +++ b/generator/typesystem/xml/typesystem_concurrent-java.xml @@ -44,15 +44,38 @@ ** ****************************************************************************--> + + void initialize_meta_info_util(); + + + initialize_meta_info_util(); + + + + + + + + + + + + QFutureInterfaceBase* %out = qtjambi_cast<QFutureInterfaceBase*>(%env, %in); + + + jobject %out = qtjambi_cast<jobject>(%env, %in); + + + diff --git a/generator/typesystem/xml/typesystem_core-common.xml b/generator/typesystem/xml/typesystem_core-common.xml index 5f39f511..e6efbbd1 100644 --- a/generator/typesystem/xml/typesystem_core-common.xml +++ b/generator/typesystem/xml/typesystem_core-common.xml @@ -53,6 +53,8 @@ + + @@ -113,12 +115,17 @@ + + + + + @@ -145,6 +152,8 @@ + + @@ -172,16 +181,24 @@ + + + + - + + + + + @@ -198,6 +215,8 @@ + + @@ -285,6 +304,10 @@ + + + + @@ -318,6 +341,29 @@ + + + + + + + + + + + + + + + + + + + + + + + @@ -364,12 +410,17 @@ - + + + + + + @@ -520,8 +571,6 @@ - - @@ -587,7 +636,6 @@ - @@ -1300,7 +1348,7 @@ - + @@ -1411,8 +1459,6 @@ - - @@ -1433,7 +1479,6 @@ - @@ -1479,9 +1524,6 @@ - - - @@ -1501,12 +1543,22 @@ + + + + + + + + + + + - @@ -1537,8 +1589,10 @@ - + + + + @@ -1709,6 +1763,7 @@ + @@ -2464,7 +2519,6 @@ - @@ -2774,8 +2828,8 @@ + - @@ -3275,25 +3329,14 @@ - - - - - - - - - - - if(copy){ @@ -3302,13 +3345,53 @@ return new(placement) QMetaType(); } + + + + + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -3475,6 +3558,462 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -3533,11 +4072,11 @@ - - - + + + - + @@ -3629,7 +4168,6 @@ - @@ -3659,7 +4197,7 @@ - + @@ -3695,10 +4233,10 @@ - + - + @@ -3713,7 +4251,7 @@ - + @@ -3728,4 +4266,11 @@ + + + + + + + diff --git a/generator/typesystem/xml/typesystem_core-java.xml b/generator/typesystem/xml/typesystem_core-java.xml index 15cda810..5d147d53 100644 --- a/generator/typesystem/xml/typesystem_core-java.xml +++ b/generator/typesystem/xml/typesystem_core-java.xml @@ -255,7 +255,7 @@ - + @@ -301,6 +301,9 @@ + + + @@ -518,14 +521,14 @@ - + namespace QtJambiPrivate { template<> struct RegistryHelper<QPointF, false>{ - static void registerHashFunction(){ ::registerHashFunction(typeid(QPointF), [](const void* ptr, hash_type seed)->hash_type{ return !ptr ? 0 : qHash(*reinterpret_cast<const QPointF*>(ptr), QHashDummyValue(), seed); }); } + static void registerHashFunction(){ ::registerHashFunction(typeid(QPointF), [](const void* ptr, hash_type seed)->hash_type{ return !ptr ? 0 : qHash(*reinterpret_cast<const QPointF*>(ptr), QHashDummyValue(), seed); }); } }; } - + @@ -747,6 +750,9 @@ struct RegistryHelper<QPointF, false>{ + + + @@ -1956,10 +1962,6 @@ struct RegistryHelper<QPointF, false>{ - - - - @@ -2278,7 +2280,7 @@ struct RegistryHelper<QPointF, false>{ %out = %in; - if(%out){ + if(%out){ ObjectUserData *oldUserData = QTJAMBI_GET_OBJECTUSERDATA(ObjectUserData, __qt_this); QTJAMBI_SET_OBJECTUSERDATA(ObjectUserData, __qt_this, userData.release()); if(oldUserData) @@ -2355,11 +2357,6 @@ struct RegistryHelper<QPointF, false>{ - - - - - @@ -2632,9 +2629,6 @@ struct RegistryHelper<QPointF, false>{ - - - @@ -2707,7 +2701,7 @@ struct RegistryHelper<QPointF, false>{ if(QtJambiObjectData::isRejectedUserProperty(__qt_this, __qt_%1)){ QTJAMBI_TRY_RETURN(__java_return_value,nullptr); - } + } @@ -2718,7 +2712,7 @@ struct RegistryHelper<QPointF, false>{ if(QtJambiObjectData::isRejectedUserProperty(__qt_this, __qt_%1)){ QTJAMBI_TRY_RETURN(__java_return_value,false); - } + } @@ -2735,6 +2729,86 @@ struct RegistryHelper<QPointF, false>{ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -2777,20 +2851,20 @@ struct RegistryHelper<QPointF, false>{ bool useQGuiApplicationExec = false; QCoreApplication* instance = QCoreApplication::instance(); if (!instance) - JavaException::raiseRuntimeException(%env, "QCoreApplication has not been initialized with QCoreApplication.initialize()" QTJAMBI_STACKTRACEINFO ); + JavaException::raiseRuntimeException(%env, "QCoreApplication has not been initialized with QCoreApplication.initialize()" QTJAMBI_STACKTRACEINFO ); else if(instance->inherits("QGuiApplication")){ - useQGuiApplicationExec = true; - QTJAMBI_TRY_ANY{ - Java::QtGui::QGuiApplication::getClass(%env); - }QTJAMBI_CATCH_ANY{ - useQGuiApplicationExec = false; - }QTJAMBI_TRY_END - if(useQGuiApplicationExec) - __java_return_value = Java::QtGui::QGuiApplication::exec(%env); + useQGuiApplicationExec = true; + QTJAMBI_TRY_ANY{ + Java::QtGui::QGuiApplication::getClass(%env); + }QTJAMBI_CATCH_ANY{ + useQGuiApplicationExec = false; + }QTJAMBI_TRY_END + if(useQGuiApplicationExec) + __java_return_value = Java::QtGui::QGuiApplication::exec(%env); }else if(instance->thread()!=QThread::currentThread()) - JavaException::raiseRuntimeException(%env, "exec() must be called from the main thread." QTJAMBI_STACKTRACEINFO ); + JavaException::raiseRuntimeException(%env, "exec() must be called from the main thread." QTJAMBI_STACKTRACEINFO ); else if(QThreadData::get2(instance->thread())->eventLoops.size()>0) - JavaException::raiseRuntimeException(%env, "The event loop is already running." QTJAMBI_STACKTRACEINFO ); + JavaException::raiseRuntimeException(%env, "The event loop is already running." QTJAMBI_STACKTRACEINFO ); if(!useQGuiApplicationExec){ } @@ -2869,7 +2943,7 @@ if(!useQGuiApplicationExec){ Q_UNUSED(__qt_return_value) - %out = __qt_%1; + %out = __qt_%1; @@ -2885,7 +2959,7 @@ if(!useQGuiApplicationExec){ Q_UNUSED(__qt_return_value) - %out = __qt_%1; + %out = __qt_%1; @@ -2903,7 +2977,7 @@ if(!useQGuiApplicationExec){ Q_UNUSED(__qt_return_value) - %out = __qt_%1; + %out = __qt_%1; @@ -2931,7 +3005,7 @@ if(!useQGuiApplicationExec){ Q_UNUSED(__qt_return_value) - %out = __qt_%1; + %out = __qt_%1; @@ -3113,6 +3187,8 @@ if(!useQGuiApplicationExec){ + + @@ -3156,7 +3232,7 @@ if(!useQGuiApplicationExec){ Q_UNUSED(__qt_return_value) - %out = __qt_%1; + %out = __qt_%1; @@ -3172,7 +3248,7 @@ if(!useQGuiApplicationExec){ Q_UNUSED(__qt_return_value) - %out = __qt_%1; + %out = __qt_%1; @@ -3188,7 +3264,7 @@ if(!useQGuiApplicationExec){ Q_UNUSED(__qt_return_value) - %out = __qt_%1; + %out = __qt_%1; @@ -3239,7 +3315,7 @@ if(!useQGuiApplicationExec){ - Q_UNUSED(__qt_return_value) + Q_UNUSED(__qt_return_value) %out = qtjambi_from_qstring(%env, __qt_%1); @@ -3250,7 +3326,7 @@ if(!useQGuiApplicationExec){ - + @@ -3261,10 +3337,10 @@ if(!useQGuiApplicationExec){ - - - QString %out = qtjambi_to_qstring(%env, %1); - + + + QString %out = qtjambi_to_qstring(%env, %1); + @@ -3610,9 +3686,6 @@ if(!useQGuiApplicationExec){ - @@ -3654,46 +3727,41 @@ if(!useQGuiApplicationExec){ - - - + + + - + - - + - + - - + - + - - + - + - - + - + - - + @@ -3843,13 +3911,13 @@ if(!useQGuiApplicationExec){ - + - + - - %0 = qtjambi_cast<const QJsonValue&>(%env, value); - + + %0 = qtjambi_cast<const QJsonValue&>(%env, value); + @@ -4011,8 +4079,13 @@ if(!useQGuiApplicationExec){ + QRunnable* %out = nullptr; + if(Java::QtCore::QRunnable::isInstanceOf(%env, %in)){ + %out = qtjambi_cast<QRunnable*>(%env, %in); + qtjambi_set_cpp_ownership(%env, %in); + }else{ JObjectWrapper __wrapper_%in(%env, %in); - std::function<void()> %out = [__wrapper_%in](){ + %out = QRunnable::create([__wrapper_%in](){ QTJAMBI_TRY_ANY{ if(JNIEnv * env = qtjambi_current_environment()){ QTJAMBI_JNI_LOCAL_FRAME(env, 300) @@ -4023,25 +4096,53 @@ if(!useQGuiApplicationExec){ }QTJAMBI_CATCH(const JavaException& exn){ __exnHandler.handle(env, exn, "QRunnable::run()"); }QTJAMBI_TRY_END - if(Java::QtCore::QRunnable::isInstanceOf(env, object)){ - if(QRunnable* runnable = qtjambi_cast<QRunnable*>(env, object)){ - if(runnable->autoDelete()) - delete runnable; - } - } } }QTJAMBI_CATCH_ANY{}QTJAMBI_TRY_END - }; + }); + } + + + + + + + + QRunnable* %out = nullptr; + if(Java::QtCore::QRunnable::isInstanceOf(%env, %in)){ + %out = qtjambi_cast<QRunnable*>(%env, %in); + qtjambi_set_cpp_ownership(%env, %in); + }else{ + JObjectWrapper __wrapper_%in(%env, %in); + %out = QRunnable::create([__wrapper_%in](){ + QTJAMBI_TRY_ANY{ + if(JNIEnv * env = qtjambi_current_environment()){ + QTJAMBI_JNI_LOCAL_FRAME(env, 300) + QtJambiExceptionInhibitor __exnHandler; + jobject object = env->NewLocalRef(__wrapper_runnable0.object()); + QTJAMBI_TRY{ + Java::Runtime::Runnable::run(env, object); + }QTJAMBI_CATCH(const JavaException& exn){ + __exnHandler.handle(env, exn, "QRunnable::run()"); + }QTJAMBI_TRY_END + } + }QTJAMBI_CATCH_ANY{}QTJAMBI_TRY_END + }); + } - + QRunnable* %out = nullptr; + QtJambiScope scope; + if(Java::QtCore::QRunnable::isInstanceOf(%env, %in)){ + %out = qtjambi_cast<QRunnable*>(%env, %in); + qtjambi_set_cpp_ownership(%env, %in); + }else{ JObjectWrapper __wrapper_%in(%env, %in); - std::function<void()> %out = [__wrapper_%in](){ + %out = QRunnable::create([__wrapper_%in](){ QTJAMBI_TRY_ANY{ if(JNIEnv * env = qtjambi_current_environment()){ QTJAMBI_JNI_LOCAL_FRAME(env, 300) @@ -4052,17 +4153,15 @@ if(!useQGuiApplicationExec){ }QTJAMBI_CATCH(const JavaException& exn){ __exnHandler.handle(env, exn, "QRunnable::run()"); }QTJAMBI_TRY_END - if(Java::QtCore::QRunnable::isInstanceOf(env, object)){ - if(QRunnable* runnable = qtjambi_cast<QRunnable*>(env, object)){ - if(runnable->autoDelete()) - delete runnable; - } - } } }QTJAMBI_CATCH_ANY{}QTJAMBI_TRY_END - }; + }); + scope.addFinalAction([&](){ + if(!__java_return_value) + delete %out; + }); + } - @@ -4088,17 +4187,17 @@ if(!useQGuiApplicationExec){ - qsizetype* %out; + qsizetype* %out; if constexpr(sizeof(int)==sizeof(qsizetype)){ - %out = qtjambi_array_cast<qsizetype*>(%env, %scope, %in, 1); - }else{ - if(int* tmp = qtjambi_array_cast<int*>(%env, %scope, %in, 1)){ - %out = new qsizetype(*tmp); - %scope.addFinalAction([=]{*tmp = jint(*%out); delete %out;}); - }else{ - %out = nullptr; - } - } + %out = qtjambi_array_cast<qsizetype*>(%env, %scope, %in, 1); + }else{ + if(int* tmp = qtjambi_array_cast<int*>(%env, %scope, %in, 1)){ + %out = new qsizetype(*tmp); + %scope.addFinalAction([=]{*tmp = jint(*%out); delete %out;}); + }else{ + %out = nullptr; + } + } @@ -4197,13 +4296,562 @@ if(!useQGuiApplicationExec){ + + + + + + + + + + + + + + + + + + + + + QVariant variant = qtjambi_to_qvariant(%env, %in); + auto __scope = qScopeGuard([&](){reinterpret_cast<QVariant*>(__qtjambi_ptr)->swap(variant);}); + QMetaType %out(QMetaType::UnknownType); + + + QVariant variant = qtjambi_to_qvariant(%env, %in); + auto __scope = qScopeGuard([&](){reinterpret_cast<QVariant*>(__qtjambi_ptr)->swap(variant);}); + int %out = QMetaType::UnknownType; + + + + + + + + QVariant variant = qtjambi_convert_checked_object_to_qvariant(%env, %in, QMetaType(%1)); + auto __scope = qScopeGuard([&](){reinterpret_cast<QVariant*>(__qtjambi_ptr)->swap(variant);}); + %1 = QMetaType::UnknownType; + const void * %out = nullptr; + + + + + + + + QVariant variant = qtjambi_convert_checked_object_to_qvariant(%env, %in, __qt_%1); + auto __scope = qScopeGuard([&](){reinterpret_cast<QVariant*>(__qtjambi_ptr)->swap(variant);}); + __qt_%1 = QMetaType(QMetaType::UnknownType); + const void * %out = nullptr; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + QVariant %out = qtjambi_to_qvariant(%env, %in); + + + + + + + + QVariant %out = qtjambi_to_qvariant(%env, %in); + + + + + + + + if(%in==QPartialOrdering::Less){ + %out = -1; + }else if(%in==QPartialOrdering::Greater){ + %out = 1; + }else if(%in==QPartialOrdering::Unordered){ + %out = -127; + }else{ + %out = 0; + } + + + + + + + + Q_UNUSED(%in) + %out = qtjambi_from_qvariant(%env, *__qt_this); + + + + + + + + jobject %out = nullptr; + if(%in){ + %out = Java::Runtime::Optional::ofNullable(%env, qtjambi_from_qvariant(%env, variant2)); + }else{ + %out = Java::Runtime::Optional::empty(%env); + } + + + + + +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) + QVariant variant2(%1, nullptr); +#else + QVariant variant2(QMetaType(%1), nullptr); +#endif + void * %out = variant2.data(); + + + + + + + + %2 = QMetaType.cast(QMetaType.javaType(%1), %2); + + + + + QVariant variant = qtjambi_convert_checked_object_to_qvariant(%env, %in, QMetaType(%1)); + const void* %out = variant.data(); + + + + + + + + %2 = QMetaType.cast(%1.javaType(), %2); + + + + + QVariant variant = qtjambi_convert_checked_object_to_qvariant(%env, %in, __qt_%1); + const void* %out = variant.data(); + + + + + + + + + + + + + + + + + + + + + + + + + + + %out = %in; + + + + + + + + + + + + + + + + + int typeId = qtjambiMetaTypeId(%env, clazz, instantiations); + if(typeId==QMetaType::UnknownType || (%in.userType()!=typeId && !%in.convert(typeId))) + %in = QVariant(typeId, nullptr); + %out = qtjambi_cast<jobject>(%env, %in); + + + QMetaType typeId(qtjambiMetaTypeId(%env, clazz, instantiations)); + if(!typeId.isValid() || (%in.metaType()!=typeId && !%in.convert(typeId))) + %in = QVariant(typeId, nullptr); + %out = qtjambi_cast<jobject>(%env, %in); + + + + + + + + + + + + + + + + %out = qtjambi_cast<jobject>(%env, QMetaType(%in)); + + + + + + + + + %1 = cast(javaType(), %1); + %2 = cast(javaType(), %2); + + + + + if(%in==QPartialOrdering::Less){ + %out = -1; + }else if(%in==QPartialOrdering::Greater){ + %out = 1; + }else if(%in==QPartialOrdering::Unordered){ + %out = -127; + }else{ + %out = 0; + } + + + + + + QVariant var1 = qtjambi_convert_checked_object_to_qvariant(%env, %in, *__qt_this); + const void* %out = var1.data(); + + + + + + QVariant var2 = qtjambi_convert_checked_object_to_qvariant(%env, %in, *__qt_this); + const void* %out = var2.data(); + + + + + + + + + %1 = cast(javaType(%3), %1); + %2 = cast(javaType(%3), %2); + + + + + if(%in){ + %out = Java::Runtime::OptionalInt::of(%env, %4); + }else{ + %out = Java::Runtime::OptionalInt::empty(%env); + } + + + + + + QVariant var1 = qtjambi_convert_checked_object_to_qvariant(%env, %in, QMetaType(%3)); + const void* %out = var1.data(); + + + + + + QVariant var2 = qtjambi_convert_checked_object_to_qvariant(%env, %in, QMetaType(%3)); + const void* %out = var2.data(); + + + + + + int %in = 0; + int* %out = &%in; + + + + + + + + %1 = cast(javaType(), %1); + %2 = cast(javaType(), %2); + + + + + QVariant var1 = qtjambi_convert_checked_object_to_qvariant(%env, %in, *__qt_this); + const void* %out = var1.data(); + + + + + + QVariant var2 = qtjambi_convert_checked_object_to_qvariant(%env, %in, *__qt_this); + const void* %out = var2.data(); + + + + + + + + + %1 = cast(javaType(%3), %1); + %2 = cast(javaType(%3), %2); + + + + + if(%in){ + %out = Java::Runtime::OptionalInt::of(%env, %4); + }else{ + %out = Java::Runtime::OptionalInt::empty(%env); + } + + + + + + QVariant var1 = qtjambi_convert_checked_object_to_qvariant(%env, %in, QMetaType(%3)); + const void* %out = var1.data(); + + + + + + QVariant var2 = qtjambi_convert_checked_object_to_qvariant(%env, %in, QMetaType(%3)); + const void* %out = var2.data(); + + + + + + int %in = 0; + int* %out = &%in; + + + + + + + %1 = cast(javaType(), %1); + + + + + */ + %out = qtjambi_from_qvariant(%env, variant); + + + + + + QVariant variant = qtjambi_convert_checked_object_to_qvariant(%env, %in, *__qt_this); + /* + + + + + + + + %2 = cast(javaType(%1), %2); + + + + + */ + %out = qtjambi_from_qvariant(%env, variant); + + + + + + QVariant variant = qtjambi_convert_checked_object_to_qvariant(%env, %in, QMetaType(%1)); + /* + + + + + + + +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) + QVariant outVariant(__qt_this->id(), nullptr); +#else + QVariant outVariant(*__qt_this, nullptr); +#endif + void *%out = outVariant.data(); + + + + + + if(%in){ + %out = Java::Runtime::Optional::ofNullable(%env, qtjambi_from_qvariant(%env, outVariant)); + }else{ + %out = Java::Runtime::Optional::empty(%env); + } + + + + + + + +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) + QVariant outVariant(%2, nullptr); +#else + QVariant outVariant(QMetaType(%2), nullptr); +#endif + void *%out = outVariant.data(); + + + + + + if(%in){ + %out = Java::Runtime::Optional::ofNullable(%env, qtjambi_from_qvariant(%env, outVariant)); + }else{ + %out = Java::Runtime::Optional::empty(%env); + } + + + + + + + %2 = cast(javaType(), %2); + + + + + QVariant variant = qtjambi_convert_checked_object_to_qvariant(%env, %in, *__qt_this); + const void* %out = variant.data(); + + + + + + + + %3 = cast(javaType(%2), %3); + + + + + QVariant variant = qtjambi_convert_checked_object_to_qvariant(%env, %in, QMetaType(%2)); + const void* %out = variant.data(); + + + + + + + + if(%in){ + %out = Java::Runtime::Optional::ofNullable(%env, qtjambi_from_qvariant(%env, variant4)); + }else{ + %out = Java::Runtime::Optional::empty(%env); + } + + + + + + QVariant variant2 = qtjambi_convert_checked_object_to_qvariant(%env, %in, __qt_%1); + const void * %out = variant2.data(); + + + + + +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) + QVariant variant4(__qt_%3.id(), nullptr); +#else + QVariant variant4(__qt_%3, nullptr); +#endif + void * %out = variant4.data(); + + + + + + + + if(%in){ + %out = Java::Runtime::Optional::ofNullable(%env, qtjambi_from_qvariant(%env, variant3)); + }else{ + %out = Java::Runtime::Optional::empty(%env); + } + + + + + + QVariant variant1 = qtjambi_convert_checked_object_to_qvariant(%env, %in, QMetaType(%2)); + const void * %out = variant1.data(); + + + + + +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) + QVariant variant3(%4, nullptr); +#else + QVariant variant3(QMetaType(%4), nullptr); +#endif + void * %out = variant3.data(); + + + @@ -4220,6 +4868,21 @@ if(!useQGuiApplicationExec){ + + + + + + + + + + + + + + + @@ -4237,19 +4900,19 @@ if(!useQGuiApplicationExec){ bool solved = false; - if(const QHash<int,const char*>* _renamedMethods = renamedMethods(__qt_this->enclosingMetaObject())){ + if(const QHash<int,const char*>* _renamedMethods = renamedMethods(__qt_this->enclosingMetaObject())){ if(const char* newName = (*_renamedMethods)[__qt_this->methodIndex()]){ __java_return_value = qtjambi_cast<jobject>(__jni_env, QByteArray(newName)); - solved = true; - } + solved = true; + } } - if(!solved){ + if(!solved){ %in.detach(); %out = qtjambi_cast<jobject>(%env, %in); - } + } @@ -4338,14 +5001,28 @@ if(!useQGuiApplicationExec){ - - + + + + + + %0 = qtjambi_cast<const QCborValue&>(%env, value); + + + + + + + + %0 = qtjambi_cast<const QCborValue&>(%env, value); + + @@ -4381,10 +5058,37 @@ if(!useQGuiApplicationExec){ - - - + + + + + + %0 = qtjambi_cast<const QCborValue&>(%env, value); + + + + + @@ -4406,9 +5110,30 @@ if(!useQGuiApplicationExec){ - - - + + + + + + %0 = qtjambi_cast<const QCborValue&>(%env, value); + + + + + + + + %0 = qtjambi_cast<const QCborValue&>(%env, value); + + + + + + + + %0 = qtjambi_cast<const QCborValue&>(%env, value); + + @@ -4581,22 +5306,22 @@ if(!useQGuiApplicationExec){ - - if(!data.isDirect()) { + + if(!%1.isDirect()) { throw new IllegalArgumentException("Can only read from direct buffers."); } - __rcDevice = data; + __rcDevice = %1; - - if(!data.isDirect()) { + + if(!%1.isDirect()) { throw new IllegalArgumentException("Can only read from direct buffers."); } - __rcDevice = new QPair<>(__rcDevice, data); + __rcDevice = new QPair<>(__rcDevice, %1); @@ -4631,6 +5356,47 @@ if(!useQGuiApplicationExec){ __java_return_value = toBigInteger(%env, quint64(__qt_this->toNegativeInteger()), true); }else{ + + + + + QCborStreamReader::StringResult<QVariant>* _%in = new QCborStreamReader::StringResult<QVariant>; + _%in->data = %in.data; + _%in->status = %in.status; + %out = qtjambi_from_object(%env, _%in, false); + + + + + + + + QCborStreamReader::StringResult<QVariant>* _%in = new QCborStreamReader::StringResult<QVariant>; + _%in->data = %in.data; + _%in->status = %in.status; + %out = qtjambi_from_object(%env, _%in, false); + + + + + + + + QCborStreamReader::StringResult<QVariant>* _%in = new QCborStreamReader::StringResult<QVariant>; + _%in->data = qint64(%in.data); + _%in->status = %in.status; + %out = qtjambi_from_object(%env, _%in, false); + + + + + + + if(!%1.isDirect()) { + throw new IllegalArgumentException("Can only read from direct buffers."); + } + + @@ -5046,15 +5812,15 @@ if(!useQGuiApplicationExec){ - + - - QString %out = qtjambi_to_qstring(%env, %1); - + + QString %out = qtjambi_to_qstring(%env, %1); + @@ -5123,13 +5889,13 @@ if(!useQGuiApplicationExec){ - + - + @@ -5137,7 +5903,7 @@ if(!useQGuiApplicationExec){ - + @@ -5332,7 +6098,7 @@ if(!useQGuiApplicationExec){ - + QString& %out = *qtjambi_to_object<QString>(%env, %in); @@ -5421,7 +6187,7 @@ if(!useQGuiApplicationExec){ - + QRegExp& %out = qtjambi_cast<QRegExp&>(%env, %in); @@ -5430,7 +6196,7 @@ if(!useQGuiApplicationExec){ - + QRegExp& %out = qtjambi_cast<QRegExp&>(%env, %in); @@ -5439,7 +6205,7 @@ if(!useQGuiApplicationExec){ - + QRegExp& %out = qtjambi_cast<QRegExp&>(%env, %in); @@ -5571,10 +6337,10 @@ if(!useQGuiApplicationExec){ - + - const QString& %out = *qtjambi_cast<QString*>(%env, %in); + const QString& %out = *qtjambi_cast<QString*>(%env, %in); @@ -5582,8 +6348,8 @@ if(!useQGuiApplicationExec){ - jint size = jint(__qt_this->size()); - %out = qtjambi_array_cast<jcharArray>(%env, %scope, %in, size); + jint size = jint(__qt_this->size()); + %out = qtjambi_array_cast<jcharArray>(%env, %scope, %in, size); @@ -5591,10 +6357,10 @@ if(!useQGuiApplicationExec){ - jint size = 0; - while(%in[size]!=0) - ++size; - %out = qtjambi_array_cast<jshortArray>(%env, %scope, %in, size); + jint size = 0; + while(%in[size]!=0) + ++size; + %out = qtjambi_array_cast<jshortArray>(%env, %scope, %in, size); @@ -5606,8 +6372,8 @@ if(!useQGuiApplicationExec){ - - + diff --git a/generator/typesystem/xml/typesystem_datavisualization-common.xml b/generator/typesystem/xml/typesystem_datavisualization-common.xml index 9a3acf6e..ef3c8228 100644 --- a/generator/typesystem/xml/typesystem_datavisualization-common.xml +++ b/generator/typesystem/xml/typesystem_datavisualization-common.xml @@ -53,6 +53,8 @@ + + diff --git a/generator/typesystem/xml/typesystem_dbus-common.xml b/generator/typesystem/xml/typesystem_dbus-common.xml index 1e0ef416..0692afea 100644 --- a/generator/typesystem/xml/typesystem_dbus-common.xml +++ b/generator/typesystem/xml/typesystem_dbus-common.xml @@ -3,7 +3,14 @@ + + + + + + + diff --git a/generator/typesystem/xml/typesystem_designer-common.xml b/generator/typesystem/xml/typesystem_designer-common.xml index 8a7eaafd..71f323d9 100644 --- a/generator/typesystem/xml/typesystem_designer-common.xml +++ b/generator/typesystem/xml/typesystem_designer-common.xml @@ -47,6 +47,7 @@ + @@ -117,6 +118,8 @@ + + diff --git a/generator/typesystem/xml/typesystem_gui-common.xml b/generator/typesystem/xml/typesystem_gui-common.xml index ba241606..205858f3 100644 --- a/generator/typesystem/xml/typesystem_gui-common.xml +++ b/generator/typesystem/xml/typesystem_gui-common.xml @@ -47,19 +47,37 @@ - + + + + + + + + + + + + + + + + + + + @@ -152,11 +170,6 @@ - - - - - @@ -3087,6 +3100,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/generator/typesystem/xml/typesystem_gui-java.xml b/generator/typesystem/xml/typesystem_gui-java.xml index 858dd6bc..9d6adc6a 100644 --- a/generator/typesystem/xml/typesystem_gui-java.xml +++ b/generator/typesystem/xml/typesystem_gui-java.xml @@ -3243,6 +3243,25 @@ if(!useQApplicationExec){ + + QAbstractOpenGLFunctions* qtjambi_QOpenGLContext_versionFunctions(JNIEnv *__jni_env, QtJambiNativeID __this, jclass type); + + + + + + + + + + + + + + + + + @@ -3265,9 +3284,6 @@ if(!useQApplicationExec){ - - - @@ -5430,6 +5446,7 @@ __rcRedirections.remove(%1); + @@ -5450,6 +5467,54 @@ __rcRedirections.remove(%1); } + + + + + + + + static bool iswidgetApplication = QGuiApplication::instance()->inherits("QApplication"); + if(iswidgetApplication && %in && !Java::QtWidgets::QMenu::isInstanceOf(%env, %in)){ + JavaException::raiseIllegalArgumentException(%env, "QAction.setMenu(menu) expects a QMenu in widget applications." QTJAMBI_STACKTRACEINFO ); + } + QObject* %out = qtjambi_to_qobject(%env, %in); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -5503,6 +5568,14 @@ __rcRedirections.remove(%1); + + + + + + + + diff --git a/generator/typesystem/xml/typesystem_help-common.xml b/generator/typesystem/xml/typesystem_help-common.xml index 51d06ccd..2ce06f89 100644 --- a/generator/typesystem/xml/typesystem_help-common.xml +++ b/generator/typesystem/xml/typesystem_help-common.xml @@ -44,6 +44,7 @@ ** ****************************************************************************--> + diff --git a/generator/typesystem/xml/typesystem_httpserver-common.xml b/generator/typesystem/xml/typesystem_httpserver-common.xml index 1635ac89..ae52ee63 100644 --- a/generator/typesystem/xml/typesystem_httpserver-common.xml +++ b/generator/typesystem/xml/typesystem_httpserver-common.xml @@ -42,7 +42,7 @@ ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ****************************************************************************--> - + @@ -55,9 +55,14 @@ + + + + + @@ -80,8 +85,8 @@ - - + + diff --git a/generator/typesystem/xml/typesystem_httpserver-java.xml b/generator/typesystem/xml/typesystem_httpserver-java.xml index 4a11926a..d3253acb 100644 --- a/generator/typesystem/xml/typesystem_httpserver-java.xml +++ b/generator/typesystem/xml/typesystem_httpserver-java.xml @@ -135,6 +135,10 @@ + + + + @@ -182,7 +186,34 @@ + + + + + + + if(__rcRouter!=null && !__rcRouter.isDisposed()) diff --git a/generator/typesystem/xml/typesystem_multimedia-common.xml b/generator/typesystem/xml/typesystem_multimedia-common.xml index 93975acc..68ff2458 100644 --- a/generator/typesystem/xml/typesystem_multimedia-common.xml +++ b/generator/typesystem/xml/typesystem_multimedia-common.xml @@ -53,6 +53,12 @@ + + + + + + diff --git a/generator/typesystem/xml/typesystem_multimedia-java.xml b/generator/typesystem/xml/typesystem_multimedia-java.xml index c7df34b7..5422c4f8 100644 --- a/generator/typesystem/xml/typesystem_multimedia-java.xml +++ b/generator/typesystem/xml/typesystem_multimedia-java.xml @@ -170,8 +170,9 @@ + - + jobject %out = qtjambi_from_qobject(%env, %in, jclass(%1)); @@ -766,7 +767,7 @@ jobjectArray %out = nullptr; - if(%in>0){ + if(%in>0){ if(%in>4) %in = 4; %out = Java::QtMultimedia::QAbstractVideoBuffer$MapResult::newArray(%env, jsize(%in)); diff --git a/generator/typesystem/xml/typesystem_multimediawidgets-common.xml b/generator/typesystem/xml/typesystem_multimediawidgets-common.xml index b8855812..4bdd8ee6 100644 --- a/generator/typesystem/xml/typesystem_multimediawidgets-common.xml +++ b/generator/typesystem/xml/typesystem_multimediawidgets-common.xml @@ -44,6 +44,7 @@ ** ****************************************************************************--> + diff --git a/generator/typesystem/xml/typesystem_network-common.xml b/generator/typesystem/xml/typesystem_network-common.xml index ddbcaf3b..eeb86c4a 100644 --- a/generator/typesystem/xml/typesystem_network-common.xml +++ b/generator/typesystem/xml/typesystem_network-common.xml @@ -47,6 +47,7 @@ + @@ -390,11 +391,17 @@ - + + + @@ -423,7 +430,7 @@ - + diff --git a/generator/typesystem/xml/typesystem_nfc-common.xml b/generator/typesystem/xml/typesystem_nfc-common.xml index 5a533b51..3c6f1a58 100644 --- a/generator/typesystem/xml/typesystem_nfc-common.xml +++ b/generator/typesystem/xml/typesystem_nfc-common.xml @@ -44,6 +44,7 @@ ** ****************************************************************************--> + @@ -80,7 +81,7 @@ - + @@ -102,7 +103,7 @@ - + diff --git a/generator/typesystem/xml/typesystem_opengl-common.xml b/generator/typesystem/xml/typesystem_opengl-common.xml index c0b6e466..a5765b34 100644 --- a/generator/typesystem/xml/typesystem_opengl-common.xml +++ b/generator/typesystem/xml/typesystem_opengl-common.xml @@ -44,10 +44,10 @@ ** ****************************************************************************--> - - - - + + + + @@ -123,7 +123,19 @@ - + + QAbstractOpenGLFunctions* qtjambi_QOpenGLVersionFunctionsFactory_get(JNIEnv *__jni_env, jclass type, QOpenGLContext* context); + + + + + + + + + + + diff --git a/generator/typesystem/xml/typesystem_opengl-java.xml b/generator/typesystem/xml/typesystem_opengl-java.xml index 1a6a8670..8bec5ea2 100644 --- a/generator/typesystem/xml/typesystem_opengl-java.xml +++ b/generator/typesystem/xml/typesystem_opengl-java.xml @@ -4154,10 +4154,5 @@ - - - - - diff --git a/generator/typesystem/xml/typesystem_pdfwidgets-common.xml b/generator/typesystem/xml/typesystem_pdfwidgets-common.xml index 558e0d88..cc0138be 100644 --- a/generator/typesystem/xml/typesystem_pdfwidgets-common.xml +++ b/generator/typesystem/xml/typesystem_pdfwidgets-common.xml @@ -43,7 +43,7 @@ ** ****************************************************************************--> - + diff --git a/generator/typesystem/xml/typesystem_qml-common.xml b/generator/typesystem/xml/typesystem_qml-common.xml index 1fab8370..5358bb71 100644 --- a/generator/typesystem/xml/typesystem_qml-common.xml +++ b/generator/typesystem/xml/typesystem_qml-common.xml @@ -46,16 +46,20 @@ + + + + + - @@ -66,6 +70,8 @@ + + @@ -154,6 +160,7 @@ + @@ -170,6 +177,8 @@ + + @@ -189,6 +198,18 @@ + + + if(copy){ + return new(placement) QQmlInfo(*copy); + }else{ + return new(placement) QQmlInfo(qmlDebug(nullptr)); + } + + + new(placement) QQmlInfo(qmlDebug(nullptr)); + + @@ -203,6 +224,7 @@ + @@ -226,7 +248,7 @@ - + @@ -370,6 +392,360 @@ --> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + QtQml::ObjectCallback %out = qtjambi_cast<QtQml::ObjectCallback>(%env, %in); + + + + + + + + + + + + + + + + QtQml::ValueCallback %out = qtjambi_cast<QtQml::ValueCallback>(%env, %in); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -397,4 +773,7 @@ + + + diff --git a/generator/typesystem/xml/typesystem_qml-java.xml b/generator/typesystem/xml/typesystem_qml-java.xml index 4ff4ac98..e8c11c51 100644 --- a/generator/typesystem/xml/typesystem_qml-java.xml +++ b/generator/typesystem/xml/typesystem_qml-java.xml @@ -173,22 +173,6 @@ - @@ -376,8 +360,8 @@ if(valueIsUndefined){ Java::QtQml::QQmlExpression$ValueIsUndefined::throwNew(%env, "Value is undefined." QTJAMBI_STACKTRACEINFO ); }else{ - %out = qtjambi_cast<jobject>(%env, %in); - } + %out = qtjambi_cast<jobject>(%env, %in); + } @@ -392,15 +376,6 @@ - - - - - - - - - diff --git a/generator/typesystem/xml/typesystem_qt3dcore-common.xml b/generator/typesystem/xml/typesystem_qt3dcore-common.xml index 42ae8f35..7631ff6e 100644 --- a/generator/typesystem/xml/typesystem_qt3dcore-common.xml +++ b/generator/typesystem/xml/typesystem_qt3dcore-common.xml @@ -45,7 +45,7 @@ - + @@ -61,7 +61,6 @@ - @@ -74,6 +73,7 @@ + @@ -106,7 +106,6 @@ - if(JNIEnv *%env = qtjambi_current_environment()) { @@ -242,6 +241,7 @@ + @@ -350,9 +350,10 @@ - - - + + + + diff --git a/generator/typesystem/xml/typesystem_qt3dcore-java.xml b/generator/typesystem/xml/typesystem_qt3dcore-java.xml index bc399985..fa8e8bb6 100644 --- a/generator/typesystem/xml/typesystem_qt3dcore-java.xml +++ b/generator/typesystem/xml/typesystem_qt3dcore-java.xml @@ -103,8 +103,11 @@ private: + + + - + diff --git a/generator/typesystem/xml/typesystem_qt3drenderer-common.xml b/generator/typesystem/xml/typesystem_qt3drenderer-common.xml index 83a33758..88634167 100644 --- a/generator/typesystem/xml/typesystem_qt3drenderer-common.xml +++ b/generator/typesystem/xml/typesystem_qt3drenderer-common.xml @@ -52,8 +52,13 @@ + + + + + @@ -257,7 +262,6 @@ - if(JNIEnv *%env = qtjambi_current_environment()) { @@ -1029,7 +1033,7 @@ - + diff --git a/generator/typesystem/xml/typesystem_quick-common.xml b/generator/typesystem/xml/typesystem_quick-common.xml index 8a5bd20a..b9c3c4b3 100644 --- a/generator/typesystem/xml/typesystem_quick-common.xml +++ b/generator/typesystem/xml/typesystem_quick-common.xml @@ -44,6 +44,7 @@ ****************************************************************************--> + @@ -64,22 +65,16 @@ - - - - - + + + - - - - @@ -306,6 +301,8 @@ + + @@ -463,18 +460,18 @@ - - - - - - - - - - - - + + + + + + + + + + + + @@ -694,6 +691,7 @@ + @@ -733,24 +731,23 @@ + + + + + - + - - - - - - - + diff --git a/generator/typesystem/xml/typesystem_quick-java.xml b/generator/typesystem/xml/typesystem_quick-java.xml index 6867014d..6af31c8b 100644 --- a/generator/typesystem/xml/typesystem_quick-java.xml +++ b/generator/typesystem/xml/typesystem_quick-java.xml @@ -354,11 +354,8 @@ - - %out = qtjambi_to_jobjectArray<QSGGeometry::Attribute>(%env, %in, __qt_this->count, - [](JNIEnv * env, const QSGGeometry::Attribute& item)->jobject{ - return qtjambi_cast<jobject>(env, item); - }); + + %out = qtjambi_array_cast<jobjectArray>(%env, %scope, %in, __qt_this->count); @@ -652,7 +649,7 @@ - + @@ -739,29 +736,65 @@ - - - + +#if defined(Q_OS_MACOS) +namespace QNativeInterface { +struct QSGMetalTexture{ + QT_DECLARE_NATIVE_INTERFACE(QSGMetalTexture, 1, QSGTexture) +}; +} + +void* qtjambi_QSGMetalTexture_nativeTexture(JNIEnv *env, const void* ptr); +QSGTexture * qtjambi_QSGMetalTexture_fromNative(JNIEnv *env, void* texture, QQuickWindow* window, const QSize& size, QQuickWindow::CreateTextureOptions options); +#endif // defined(Q_OS_MACOS) + + + + + - %out = jlong(quint64(%in)); + void* %out = qtjambi_to_cpointer(%env, %in, 0); - + +QSGTexture * qtjambi_QSGVulkanTexture_fromNative(JNIEnv *env, jlong image, jint layout, QQuickWindow* window, const QSize& size, QQuickWindow::CreateTextureOptions options); + + + + + +#ifdef %out +#undef %out +#endif +#define %out %in + + + + + +#ifdef %out +#undef %out +#endif +#define %out %in + + + + - + - %out = jlong(%in); + %out = jlong(%in); - + - + - %out = jint(%in); + %out = jint(%in); @@ -795,4 +828,69 @@ + + +QQuickRenderTarget qtjambi_QQuickRenderTarget_fromVulkanImage(JNIEnv *env, jlong image, jint layout, const QSize& pixelSize, int sampleCount); + + +QQuickRenderTarget qtjambi_QQuickRenderTarget_fromVulkanImage(JNIEnv *env, jlong image, jint layout, jint format, const QSize& pixelSize, int sampleCount); + + + + + + + + + + + + + +#ifdef %out +#undef %out +#endif +#define %out %in + + + + + +#ifdef %out +#undef %out +#endif +#define %out %in + + + + + + + +#ifdef %out +#undef %out +#endif +#define %out %in + + + + + +#ifdef %out +#undef %out +#endif +#define %out %in + + + + + +#ifdef %out +#undef %out +#endif +#define %out %in + + + + diff --git a/generator/typesystem/xml/typesystem_quick3d-common.xml b/generator/typesystem/xml/typesystem_quick3d-common.xml index c1ddd59d..87d88620 100644 --- a/generator/typesystem/xml/typesystem_quick3d-common.xml +++ b/generator/typesystem/xml/typesystem_quick3d-common.xml @@ -47,6 +47,8 @@ + + diff --git a/generator/typesystem/xml/typesystem_quickcontrols2-common.xml b/generator/typesystem/xml/typesystem_quickcontrols2-common.xml index 9420ce92..a57aa1fa 100644 --- a/generator/typesystem/xml/typesystem_quickcontrols2-common.xml +++ b/generator/typesystem/xml/typesystem_quickcontrols2-common.xml @@ -45,4 +45,5 @@ + diff --git a/generator/typesystem/xml/typesystem_quicktest-common.xml b/generator/typesystem/xml/typesystem_quicktest-common.xml index ea45b51b..9762ac62 100644 --- a/generator/typesystem/xml/typesystem_quicktest-common.xml +++ b/generator/typesystem/xml/typesystem_quicktest-common.xml @@ -48,6 +48,45 @@ + + + + + + + + + std::unique_ptr<ApplicationData> applicationData(new ApplicationData(%env, jobjectArray(%in))); + char** %out = applicationData->chars(); + int %1 = applicationData->size(); + + + + + + + + + + + + + + + + + std::unique_ptr<ApplicationData> applicationData(new ApplicationData(%env, jobjectArray(%in))); + char** %out = applicationData->chars(); + int %1 = applicationData->size(); + + + + + + + + + diff --git a/generator/typesystem/xml/typesystem_remoteobjects-common.xml b/generator/typesystem/xml/typesystem_remoteobjects-common.xml index d06d6cfe..07ee5cdc 100644 --- a/generator/typesystem/xml/typesystem_remoteobjects-common.xml +++ b/generator/typesystem/xml/typesystem_remoteobjects-common.xml @@ -47,10 +47,15 @@ + + + + + @@ -65,6 +70,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -103,46 +141,6 @@ - @@ -191,6 +189,22 @@ + + + + + + + + + + + + + + + + diff --git a/generator/typesystem/xml/typesystem_remoteobjects-java.xml b/generator/typesystem/xml/typesystem_remoteobjects-java.xml index 797a9cbc..2ea80212 100644 --- a/generator/typesystem/xml/typesystem_remoteobjects-java.xml +++ b/generator/typesystem/xml/typesystem_remoteobjects-java.xml @@ -75,8 +75,7 @@ - - + @@ -89,8 +88,6 @@ - - diff --git a/generator/typesystem/xml/typesystem_serialbus-common.xml b/generator/typesystem/xml/typesystem_serialbus-common.xml index 0cd36496..be1e6e9b 100644 --- a/generator/typesystem/xml/typesystem_serialbus-common.xml +++ b/generator/typesystem/xml/typesystem_serialbus-common.xml @@ -117,16 +117,12 @@ - QModbusPdu* clone = new(placement) QModbusPdu(); - if(copy){ - struct ModbusPdu{ - QModbusPdu::FunctionCode m_code; - QByteArray m_data; - }; - clone->setData(copy->data()); - reinterpret_cast<ModbusPdu*>(clone)->m_code = reinterpret_cast<const ModbusPdu*>(copy)->m_code; - } - return clone; + void* create_QModbusPdu(void* placement, const void * copy); + return create_QModbusPdu(placement, copy); + + + void* create_QModbusPdu(void* placement, const void * copy); + create_QModbusPdu(placement, copy); @@ -188,5 +184,6 @@ + diff --git a/generator/typesystem/xml/typesystem_serialbus-java.xml b/generator/typesystem/xml/typesystem_serialbus-java.xml index 576a7190..8f87738a 100644 --- a/generator/typesystem/xml/typesystem_serialbus-java.xml +++ b/generator/typesystem/xml/typesystem_serialbus-java.xml @@ -284,7 +284,7 @@ @io.qt.QtUninvokable public void encodeData(Number...data) { - io.qt.core.QByteArray byteArray = new io.qt.core.QByteArray(); + io.qt.core.QByteArray byteArray = new io.qt.core.QByteArray(data()); io.qt.core.QDataStream stream = new io.qt.core.QDataStream(byteArray, io.qt.core.QIODevice.OpenModeFlag.WriteOnly); for (Number s : data) { if(s instanceof Byte) { @@ -295,26 +295,29 @@ throw new IllegalArgumentException("Only byte and short supported."); } } + stream.dispose(); setData(byteArray); } @io.qt.QtUninvokable public void encodeData(short...data) { - io.qt.core.QByteArray byteArray = new io.qt.core.QByteArray(); + io.qt.core.QByteArray byteArray = new io.qt.core.QByteArray(data()); io.qt.core.QDataStream stream = new io.qt.core.QDataStream(byteArray, io.qt.core.QIODevice.OpenModeFlag.WriteOnly); for (short s : data) { stream.writeShort(s); } + stream.dispose(); setData(byteArray); } @io.qt.QtUninvokable public void encodeData(byte...data) { - io.qt.core.QByteArray byteArray = new io.qt.core.QByteArray(); + io.qt.core.QByteArray byteArray = new io.qt.core.QByteArray(data()); io.qt.core.QDataStream stream = new io.qt.core.QDataStream(byteArray, io.qt.core.QIODevice.OpenModeFlag.WriteOnly); for (byte s : data) { stream.writeByte(s); } + stream.dispose(); setData(byteArray); } @@ -324,6 +327,7 @@ for (int i = 0; i < data.length; ++i) { data[i] = stream.readByte(); } + stream.dispose(); } @io.qt.QtUninvokable @@ -332,6 +336,7 @@ for (int i = 0; i < data.length; ++i) { data[i] = stream.readShort(); } + stream.dispose(); } @io.qt.QtUninvokable @@ -343,9 +348,11 @@ }else if(data[i] instanceof Short[]) { ((Short[])data[i])[0] = stream.readShort(); }else { + stream.dispose(); throw new IllegalArgumentException("Only byte and short supported."); } } + stream.dispose(); } diff --git a/generator/typesystem/xml/typesystem_serialport-common.xml b/generator/typesystem/xml/typesystem_serialport-common.xml index 59e3a982..c9e064cf 100644 --- a/generator/typesystem/xml/typesystem_serialport-common.xml +++ b/generator/typesystem/xml/typesystem_serialport-common.xml @@ -43,7 +43,7 @@ ** ****************************************************************************--> - + diff --git a/generator/typesystem/xml/typesystem_spatialaudio-common.xml b/generator/typesystem/xml/typesystem_spatialaudio-common.xml new file mode 100644 index 00000000..4475b691 --- /dev/null +++ b/generator/typesystem/xml/typesystem_spatialaudio-common.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/generator/typesystem/xml/typesystem_spatialaudio-java.xml b/generator/typesystem/xml/typesystem_spatialaudio-java.xml new file mode 100644 index 00000000..3a5428ba --- /dev/null +++ b/generator/typesystem/xml/typesystem_spatialaudio-java.xml @@ -0,0 +1,52 @@ + + + + + + public static final float DistanceScaleCentimeter = 1.f; + public static final float DistanceScaleMeter = 100.f; + + + diff --git a/generator/typesystem/xml/typesystem_test-common.xml b/generator/typesystem/xml/typesystem_test-common.xml index caff21d0..4fc3f5ec 100644 --- a/generator/typesystem/xml/typesystem_test-common.xml +++ b/generator/typesystem/xml/typesystem_test-common.xml @@ -63,9 +63,13 @@ + + + + @@ -89,6 +93,7 @@ + @@ -109,6 +114,7 @@ + @@ -210,17 +216,25 @@ namespace QtJambiPrivate{ + + + + + + + + - - - - - - - - - - - + + + + + + + + + + + diff --git a/generator/typesystem/xml/typesystem_test-java.xml b/generator/typesystem/xml/typesystem_test-java.xml index bcafeb94..ef5a74b6 100644 --- a/generator/typesystem/xml/typesystem_test-java.xml +++ b/generator/typesystem/xml/typesystem_test-java.xml @@ -100,7 +100,7 @@ - + @@ -285,6 +285,74 @@ + + + + + + + JObjectWrapper functor(%env, %in); + auto %out = [functor]() -> bool { + if(JNIEnv *env = qtjambi_current_environment()){ + QTJAMBI_JNI_LOCAL_FRAME(env, 200) + return Java::Runtime::BooleanSupplier::getAsBoolean(env, functor.object()); + } + else return false; + }; + + + + + + + + + + + + + + + + + int %out = qtjambiMetaTypeId(%env, type, instantiations); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -608,6 +676,9 @@ + + + diff --git a/generator/typesystem/xml/typesystem_virtkey-common.xml b/generator/typesystem/xml/typesystem_virtkey-common.xml index ca6b2987..85cfc8de 100644 --- a/generator/typesystem/xml/typesystem_virtkey-common.xml +++ b/generator/typesystem/xml/typesystem_virtkey-common.xml @@ -43,6 +43,7 @@ ** ****************************************************************************--> + diff --git a/generator/typesystem/xml/typesystem_webenginecore-common.xml b/generator/typesystem/xml/typesystem_webenginecore-common.xml index d0975321..1f668ae3 100644 --- a/generator/typesystem/xml/typesystem_webenginecore-common.xml +++ b/generator/typesystem/xml/typesystem_webenginecore-common.xml @@ -49,11 +49,27 @@ + + + + + + + + + + + + + + + + @@ -139,7 +155,7 @@ - + diff --git a/generator/typesystem/xml/typesystem_webenginecore-java.xml b/generator/typesystem/xml/typesystem_webenginecore-java.xml index 82f864dd..6a62baee 100644 --- a/generator/typesystem/xml/typesystem_webenginecore-java.xml +++ b/generator/typesystem/xml/typesystem_webenginecore-java.xml @@ -216,7 +216,7 @@ - jstring %out = nullptr; + jstring %out = nullptr; if(%in){ %out = qtjambi_cast<jstring>(%env, %4); } diff --git a/generator/typesystem/xml/typesystem_webenginewidgets-java.xml b/generator/typesystem/xml/typesystem_webenginewidgets-java.xml index 0b79bdcb..ad3dfcf7 100644 --- a/generator/typesystem/xml/typesystem_webenginewidgets-java.xml +++ b/generator/typesystem/xml/typesystem_webenginewidgets-java.xml @@ -181,7 +181,7 @@ - jstring %out = nullptr; + jstring %out = nullptr; if(%in){ %out = qtjambi_cast<jstring>(%env, %4); } diff --git a/generator/typesystem/xml/typesystem_widgets-common.xml b/generator/typesystem/xml/typesystem_widgets-common.xml index dd367b09..904b89dc 100644 --- a/generator/typesystem/xml/typesystem_widgets-common.xml +++ b/generator/typesystem/xml/typesystem_widgets-common.xml @@ -49,8 +49,13 @@ + + + + + @@ -2607,6 +2612,8 @@ + + @@ -3575,13 +3582,17 @@ - - - - - - + + + + + + + + + + diff --git a/generator/wrapper.cpp b/generator/wrapper.cpp index bfb72ca1..57edb283 100644 --- a/generator/wrapper.cpp +++ b/generator/wrapper.cpp @@ -359,7 +359,7 @@ int Wrapper::runJambiGenerator() { analyzeDependencies(typeDatabase); - gs->buildModel(features, pp_file); + gs->buildModel(features, pp_file, QStringList() << includePathsList << include_directory); if (args.contains("dump-object-tree")) { gs->dumpObjectTree(); @@ -405,7 +405,7 @@ void Wrapper::analyzeDependencies(TypeDatabase* typeDatabase) if(entry.endsWith(".framework")){ QString dependsFile(entry+"/Headers/"+entry.chopped(10)+"Depends"); if(dir.exists(dependsFile)){ - dependenciesByLib[entry] = readDependencies(dir.absoluteFilePath(dependsFile)); + dependenciesByLib[entry.chopped(10)] = readDependencies(dir.absoluteFilePath(dependsFile)); } }else{ QString dependsFile(entry+"/"+entry+"Depends"); @@ -420,7 +420,7 @@ void Wrapper::analyzeDependencies(TypeDatabase* typeDatabase) if(entry.endsWith(".framework")){ QString dependsFile(entry+"/Headers/"+entry.chopped(10)+"Depends"); if(dir.exists(dependsFile)){ - dependenciesByLib[entry] = readDependencies(dir.absoluteFilePath(dependsFile)); + dependenciesByLib[entry.chopped(10)] = readDependencies(dir.absoluteFilePath(dependsFile)); } } } diff --git a/releases.properties b/releases.properties index 55411040..b71c51a0 100644 --- a/releases.properties +++ b/releases.properties @@ -1,6 +1,6 @@ -5.15=9 +5.15=10 6.0=1 6.1=1 -6.2=7 -6.3=4 +6.2=8 +6.3=5 6.4=0 \ No newline at end of file diff --git a/src/cpp/qtjambi/qtjambi_application.h b/src/cpp/qtjambi/qtjambi_application.h index 6fd81d1a..a99b38cb 100644 --- a/src/cpp/qtjambi/qtjambi_application.h +++ b/src/cpp/qtjambi/qtjambi_application.h @@ -144,7 +144,7 @@ QTJAMBI_EXPORT jobject qtjambi_install_message_handler(JNIEnv *env, jobject supp typedef bool(*ThreadedPixmapsChecker)(); QTJAMBI_EXPORT void qtjambi_install_threaded_pixmaps_checker(ThreadedPixmapsChecker threadedPixmapsChecker); -QTJAMBI_EXPORT jclass qtjambi_class_for_metatype(JNIEnv *env, int id); +QTJAMBI_EXPORT jclass qtjambi_class_for_metatype(JNIEnv *env, const QMetaType& metaType); QTJAMBI_EXPORT jobject qtjambi_invoke_function_pointer(JNIEnv * __jni_env, QFunctionPointer __qt_this, jobject returnType, jobjectArray arguments); @@ -172,4 +172,10 @@ QTJAMBI_EXPORT hash_type qHash(const QMetaType& metaType, const void* ptr, bool* QTJAMBI_EXPORT void qtjambi_exception_handler(JNIEnv *__jni_env, void* ptr, void(*expression)(void*)); +QTJAMBI_EXPORT QVariant qtjambi_convert_checked_object_to_qvariant(JNIEnv *env, jobject object, const QMetaType& metaType); + +QTJAMBI_EXPORT int qtjambiMetaTypeId(JNIEnv *env, jclass clazz, jobjectArray instantiations = nullptr); + +QTJAMBI_EXPORT int qtjambiRegisterMetaType(JNIEnv *env, jclass containerType, jobjectArray instantiations); + #endif // QTJAMBI_APPLICATION_H diff --git a/src/cpp/qtjambi/qtjambi_containeraccess.cpp b/src/cpp/qtjambi/qtjambi_containeraccess.cpp index 14705017..01ff8c12 100644 --- a/src/cpp/qtjambi/qtjambi_containeraccess.cpp +++ b/src/cpp/qtjambi/qtjambi_containeraccess.cpp @@ -2224,7 +2224,11 @@ TypeAnalysisResult analyzeType(JNIEnv* env, const QMetaType& metaType, const QBy } } }else{ - hasPointer = typeName.endsWith("*"); + if(metaType.isValid()){ + hasPointer = qtjambi_is_pointer_type(metaType); + }else{ + hasPointer = typeName.endsWith("*"); + } } } return TypeAnalysisResult(hasPointer); diff --git a/src/cpp/qtjambi/qtjambi_core.cpp b/src/cpp/qtjambi/qtjambi_core.cpp index e54abbbe..afeae9b3 100644 --- a/src/cpp/qtjambi/qtjambi_core.cpp +++ b/src/cpp/qtjambi/qtjambi_core.cpp @@ -449,7 +449,7 @@ jobject qtjambi_from_qvariant(JNIEnv *env, const QVariant &qt_variant) return nullptr; case QMetaType::Nullptr: case QMetaType::Void: - return Java::QtCore::QVariant::newInstance(env, metaType.id(), nullptr); + return qtjambi_to_variantobject(env, qt_variant); case QMetaType::SChar: case QMetaType::Char: case QMetaType::UChar: @@ -612,10 +612,9 @@ void qtjambi_to_QModelRoleData(JNIEnv *env, QtJambiScope& scope, jobject java_ob #define EXCLUDE_GT_END(strg) strg //.endsWith(">") ? strg+" " : strg -int qtjambi_metaTypeId(JNIEnv *env, jclass clazz); QString qtjambi_to_qstring(JNIEnv *env, jobject object); -int qtjambi_metaTypeId_for_object(JNIEnv *env, jobject java_object){ +int qtjambiMetaTypeId_for_object(JNIEnv *env, jobject java_object){ if (!java_object) return QMetaType::Nullptr; jclass object_class = env->GetObjectClass(java_object); @@ -824,7 +823,7 @@ int qtjambi_metaTypeId_for_object(JNIEnv *env, jobject java_object){ } return qMetaTypeId(); }else{ - return qtjambi_metaTypeId(env, object_class); + return qtjambiMetaTypeId(env, object_class); } } @@ -870,8 +869,6 @@ bool qtjambi_trivial_converter(const void *src, void *target) { }; #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) -void registerJavaClassForCustomMetaType(const QMetaType& metaType, const QByteArray& javaClass); - QMetaType qtjambiRegisterMetaType(const QByteArray& _type, const QMetaObject *metaObject, bool isQObject, const QString& javaClassName){ QMetaType metaType(isQObject ? QMetaType::QObjectStar : QMetaType::VoidStar); const QtPrivate::QMetaTypeInterface* iface = metaType.iface(); @@ -958,16 +955,88 @@ void registerConverterVariant(JNIEnv *env, const QMetaType& metaType, const QStr && !Java::QtJambi::QtObject::isSameClass(env, interfaceClass) && !Java::Runtime::Object::isSameClass(env, interfaceClass)){ QString _fullJavaName = qtjambi_class_name(env, interfaceClass).replace(".", "/"); - if(const std::type_info* interfaceTypeId = getTypeByJavaName(_fullJavaName)){ - QString _qtName = QtJambiTypeManager::getInternalTypeName(env, interfaceClass, false); - QMetaType _metaType = QMetaType::fromName(_qtName.toLatin1()); - - if(!_metaType.isValid() && _qtName.endsWith("*")){ - _metaType = qtjambiRegisterMetaType(_qtName.toUtf8(), registeredOriginalMetaObject(*interfaceTypeId), false, _fullJavaName); + QString _qtName = QtJambiTypeManager::getInternalTypeName(env, interfaceClass, false); + QMetaType _metaType = QMetaType::fromName(_qtName.toLatin1()); + const std::type_info* interfaceTypeId = getTypeByJavaName(_fullJavaName); + if(!interfaceTypeId){ + if(jclass _object_class = resolveClosestQtSuperclass(env, interfaceClass)){ + interfaceClass = _object_class; + _fullJavaName = qtjambi_class_name(env, _object_class).replace(".", "/"); + interfaceTypeId = getTypeByJavaName(_fullJavaName); } - if(_metaType.isValid()){ - registerConverterVariant(env, _metaType, _qtName, _fullJavaName, interfaceClass); + } + if(!_metaType.isValid() && _qtName.endsWith("*") && interfaceTypeId){ + _metaType = qtjambiRegisterMetaType(_qtName.toUtf8(), registeredOriginalMetaObject(*interfaceTypeId), false, _fullJavaName); + } + if(_metaType.isValid()){ + if(!QMetaType::hasRegisteredConverterFunction(metaType, _metaType)){ + if(metaType==jObjectWrapperType +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + || JObjectValueWrapper::isValueType(metaType) +#endif + || isJObjectWrappedMetaType(metaType)){ + interfaceClass = getGlobalClassRef(env, interfaceClass); + const QSharedPointer& (*findLinkForJavaObject)(JNIEnv*,jobject) + = Java::QtJambi::QtJambiObject::isAssignableFrom(env, interfaceClass) ? QtJambiLink::findLinkForJavaObject : QtJambiLink::findLinkForJavaInterface; + if(_qtName.endsWith("*")){ + QMetaType::registerConverterFunction([interfaceClass, interfaceTypeId, findLinkForJavaObject](const void *src, void *target) -> bool { + if(JNIEnv* env = qtjambi_current_environment()){ + QTJAMBI_JNI_LOCAL_FRAME(env, 200) + if(src){ + const JObjectWrapper* wrapper = reinterpret_cast(src); + if(!wrapper->object() || env->IsInstanceOf(wrapper->object(), interfaceClass)){ + void* object = nullptr; + if(QSharedPointer link = findLinkForJavaObject(env, wrapper->object())) + object = interfaceTypeId ? link->typedPointer(*interfaceTypeId) : link->pointer(); + *reinterpret_cast(target) = object; + return true; + }else{ + return false; + } + } + } + return false; + }, metaType, _metaType); + }else{ + QMetaType::registerConverterFunction([interfaceClass, interfaceTypeId, findLinkForJavaObject, _metaType](const void *src, void *target) -> bool { + if(JNIEnv* env = qtjambi_current_environment()){ + QTJAMBI_JNI_LOCAL_FRAME(env, 200) + if(src){ + const JObjectWrapper* wrapper = reinterpret_cast(src); + if(env->IsInstanceOf(wrapper->object(), interfaceClass)){ + void* object = nullptr; + if(QSharedPointer link = findLinkForJavaObject(env, wrapper->object())) + object = interfaceTypeId ? link->typedPointer(*interfaceTypeId) : link->pointer(); + _metaType.destruct(target); + _metaType.construct(target, object); + return true; + }else{ + return false; + } + } + } + return false; + }, metaType, _metaType); + } + }else if(!getTypeByJavaName(fullJavaName) && interfaceTypeId){ + if(jclass _object_class = resolveClosestQtSuperclass(env, clazz)){ + if(const std::type_info* typeId = getTypeByJavaName(qtjambi_class_name(env, _object_class).replace(".", "/"))){ + int offset = registeredInterfaceOffset(*typeId, *interfaceTypeId); + if(offset==0){ + QMetaType::registerConverterFunction(&qtjambi_trivial_converter, metaType, _metaType); + }else if(offset>0){ + QMetaType::registerConverterFunction([offset](const void *src, void *target) ->bool { + char* ptr = *reinterpret_cast(src); + ptr += offset; + *reinterpret_cast(target) = ptr; + return true; + }, metaType, _metaType); + } + } + } + } } + registerConverterVariant(env, _metaType, _qtName, _fullJavaName, interfaceClass); } } } @@ -978,82 +1047,86 @@ void registerConverterVariant(JNIEnv *env, const QMetaType& metaType, const QStr && !Java::Runtime::Object::isSameClass(env, _clazz) && env->GetArrayLength(Java::Runtime::Class::getTypeParameters(env, _clazz))==0){ QString _fullJavaName = qtjambi_class_name(env, _clazz).replace(".", "/"); - const std::type_info* typeId = getTypeByJavaName(_fullJavaName); - if(!typeId){ - if(jclass _object_class = resolveClosestQtSuperclass(env, clazz)){ - _clazz = _object_class; + QString _qtName = QtJambiTypeManager::getInternalTypeName(env, _clazz, false); + QMetaType _metaType = QMetaType::fromName(_qtName.toLatin1()); + if(!_metaType.isValid()){ + if(jclass _object_class = resolveClosestQtSuperclass(env, _clazz)){ _fullJavaName = qtjambi_class_name(env, _object_class).replace(".", "/"); - typeId = getTypeByJavaName(_fullJavaName); + QString __fullJavaName = qtjambi_class_name(env, _object_class).replace(".", "/"); + QString __qtName = QtJambiTypeManager::getInternalTypeName(env, _object_class, false); + _metaType = QMetaType::fromName(__qtName.toLatin1()); + if(_metaType.isValid()){ + _fullJavaName = __fullJavaName; + _qtName = __qtName; + } } } - if(typeId){ - QString _qtName = QtJambiTypeManager::getInternalTypeName(env, _clazz, false); - QMetaType _metaType = QMetaType::fromName(_qtName.toLatin1()); - - if(!_metaType.isValid() && _qtName.endsWith("*")){ - _metaType = qtjambiRegisterMetaType(_qtName.toUtf8(), registeredOriginalMetaObject(*typeId), Java::QtCore::QObject::isAssignableFrom(env, _clazz), _fullJavaName); + const std::type_info* superTypeId = getTypeByJavaName(_fullJavaName); + if(!superTypeId){ + if(jclass _object_class = resolveClosestQtSuperclass(env, _clazz)){ + _clazz = _object_class; + _fullJavaName = qtjambi_class_name(env, _object_class).replace(".", "/"); + superTypeId = getTypeByJavaName(_fullJavaName); } - if(_metaType.isValid()){ - if(!QMetaType::hasRegisteredConverterFunction(metaType, _metaType)){ - if(metaType==jObjectWrapperType){ - _clazz = getGlobalClassRef(env, _clazz); - const QSharedPointer& (*findLinkForJavaObject)(JNIEnv*,jobject) - = Java::QtJambi::QtJambiObject::isAssignableFrom(env, _clazz) ? QtJambiLink::findLinkForJavaObject : QtJambiLink::findLinkForJavaInterface; - - if(_qtName.endsWith("*")){ - QMetaType::registerConverterFunction([_clazz, findLinkForJavaObject](const void *src, void *target) -> bool { - if(JNIEnv* env = qtjambi_current_environment()){ - QTJAMBI_JNI_LOCAL_FRAME(env, 200) - if(src){ - const JObjectWrapper* wrapper = reinterpret_cast(src); - if(!wrapper->object() || env->IsInstanceOf(wrapper->object(), _clazz)){ - void* object = nullptr; - if(QSharedPointer link = findLinkForJavaObject(env, wrapper->object())) - object = link->pointer(); - if(!target) - target = new void*(object); - else{ - *reinterpret_cast(target) = object; - } - return true; - }else{ - return false; - } + } + if(!_metaType.isValid() && _qtName.endsWith("*") && !superTypeId){ + _metaType = qtjambiRegisterMetaType(_qtName.toUtf8(), registeredOriginalMetaObject(*superTypeId), Java::QtCore::QObject::isAssignableFrom(env, _clazz), _fullJavaName); + } + if(_metaType.isValid()){ + if(!QMetaType::hasRegisteredConverterFunction(metaType, _metaType)){ + if(metaType==jObjectWrapperType +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + || JObjectValueWrapper::isValueType(metaType) +#endif + || isJObjectWrappedMetaType(metaType)){ + _clazz = getGlobalClassRef(env, _clazz); + const QSharedPointer& (*findLinkForJavaObject)(JNIEnv*,jobject) + = Java::QtJambi::QtJambiObject::isAssignableFrom(env, _clazz) ? QtJambiLink::findLinkForJavaObject : QtJambiLink::findLinkForJavaInterface; + if(_qtName.endsWith("*")){ + QMetaType::registerConverterFunction([_clazz, findLinkForJavaObject](const void *src, void *target) -> bool { + if(JNIEnv* env = qtjambi_current_environment()){ + QTJAMBI_JNI_LOCAL_FRAME(env, 200) + if(src){ + const JObjectWrapper* wrapper = reinterpret_cast(src); + if(!wrapper->object() || env->IsInstanceOf(wrapper->object(), _clazz)){ + void* object = nullptr; + if(QSharedPointer link = findLinkForJavaObject(env, wrapper->object())) + object = link->pointer(); + *reinterpret_cast(target) = object; + return true; + }else{ + return false; } } - return false; - }, metaType, _metaType); - }else{ - QMetaType::registerConverterFunction([_clazz, findLinkForJavaObject, _metaType](const void *src, void *target) -> bool { - if(JNIEnv* env = qtjambi_current_environment()){ - QTJAMBI_JNI_LOCAL_FRAME(env, 200) - if(src){ - const JObjectWrapper* wrapper = reinterpret_cast(src); - if(env->IsInstanceOf(wrapper->object(), _clazz)){ - void* object = nullptr; - if(QSharedPointer link = findLinkForJavaObject(env, wrapper->object())) - object = link->pointer(); - if(!target) - target = _metaType.create(object); - else{ - _metaType.destruct(target); - _metaType.construct(target, object); - } - return true; - }else{ - return false; - } + } + return false; + }, metaType, _metaType); + }else{ + QMetaType::registerConverterFunction([_clazz, findLinkForJavaObject, _metaType](const void *src, void *target) -> bool { + if(JNIEnv* env = qtjambi_current_environment()){ + QTJAMBI_JNI_LOCAL_FRAME(env, 200) + if(src){ + const JObjectWrapper* wrapper = reinterpret_cast(src); + if(env->IsInstanceOf(wrapper->object(), _clazz)){ + void* object = nullptr; + if(QSharedPointer link = findLinkForJavaObject(env, wrapper->object())) + object = link->pointer(); + _metaType.destruct(target); + _metaType.construct(target, object); + return true; + }else{ + return false; } } - return false; - }, metaType, _metaType); - } - }else{ - QMetaType::registerConverterFunction(&qtjambi_trivial_converter, metaType, _metaType); + } + return false; + }, metaType, _metaType); } + }else{ + QMetaType::registerConverterFunction(&qtjambi_trivial_converter, metaType, _metaType); } - registerConverterVariant(env, _metaType, _qtName, _fullJavaName, _clazz); } + registerConverterVariant(env, _metaType, _qtName, _fullJavaName, _clazz); } } } @@ -1073,7 +1146,11 @@ void registerConverterVariant(JNIEnv *env, const QMetaType& metaType, const QStr QMetaType _metaType = QMetaType::fromName(qPrintable(_qtName)); if(_metaType.isValid()){ if(!QMetaType::hasRegisteredConverterFunction(metaType, _metaType)){ - if(metaType==jObjectWrapperType){ + if(metaType==jObjectWrapperType +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + || JObjectValueWrapper::isValueType(metaType) +#endif + || isJObjectWrappedMetaType(metaType)){ if(_qtName.endsWith("*")){ interfaceClass = getGlobalClassRef(env, interfaceClass); QMetaType::registerConverterFunction([interfaceClass,interfaceTypeId](const void *src, void *target) -> bool { @@ -1163,18 +1240,10 @@ QVariant qtjambi_to_qvariant(JNIEnv *env, jobject java_object, bool convert) // Test some quick ones first... if (Java::QtCore::QVariant::isInstanceOf(env, java_object)) { - int userType = Java::QtCore::QVariant::userType(env, java_object); - if(userType==QMetaType::UnknownType){ - return QVariant(); - }else if(userType==QMetaType::Nullptr || userType==QMetaType::Void){ - return QVariant(META_TYPE(userType), nullptr); - } - jobject value = Java::QtCore::QVariant::value(env, java_object); - QVariant variant = qtjambi_to_qvariant(env, value, convert); - if(variant.userType()!=userType){ - variant.convert(userType); - } - return variant; + QVariant* variant = qtjambi_to_object(env, java_object); + if(variant) + return *variant; + else return QVariant(); } else if (Java::Runtime::Object::isSameClass(env, object_class)) { if(!convert) return QVariant(META_TYPE(qMetaTypeId()), nullptr); @@ -1283,8 +1352,8 @@ QVariant qtjambi_to_qvariant(JNIEnv *env, jobject java_object, bool convert) jobject second = Java::QtCore::QPair::second(env, java_object); jclass firstClass = first ? env->GetObjectClass(first) : nullptr; jclass secondClass = first ? env->GetObjectClass(second) : nullptr; - QMetaType firstMetaType(first ? qtjambi_metaTypeId_for_object(env, first) : QMetaType::Nullptr); - QMetaType secondMetaType(second ? qtjambi_metaTypeId_for_object(env, second) : QMetaType::Nullptr); + QMetaType firstMetaType(first ? qtjambiMetaTypeId_for_object(env, first) : QMetaType::Nullptr); + QMetaType secondMetaType(second ? qtjambiMetaTypeId_for_object(env, second) : QMetaType::Nullptr); if(firstMetaType.isValid() && secondMetaType.isValid()){ AbstractContainerAccess* containerAccess = qtjambi_create_container_access(env, MapType::QPair, firstMetaType, secondMetaType); if(!containerAccess){ @@ -1448,11 +1517,11 @@ QVariant qtjambi_to_qvariant(JNIEnv *env, jobject java_object, bool convert) if(Java::Runtime::Collection::size(env, java_object)>0){ jobject iter = qtjambi_collection_iterator(env, java_object); jobject element = qtjambi_iterator_next(env, iter); - int elementMetaTypeId = element ? qtjambi_metaTypeId_for_object(env, element) : QMetaType::Nullptr; + int elementMetaTypeId = element ? qtjambiMetaTypeId_for_object(env, element) : QMetaType::Nullptr; while(qtjambi_iterator_has_next(env, iter)){ element = qtjambi_iterator_next(env, iter); if(element){ - int _elementMetaTypeId = qtjambi_metaTypeId_for_object(env, element); + int _elementMetaTypeId = qtjambiMetaTypeId_for_object(env, element); if(elementMetaTypeId==QMetaType::Nullptr){ elementMetaTypeId = _elementMetaTypeId; }else if(_elementMetaTypeId!=elementMetaTypeId){ @@ -1575,14 +1644,14 @@ QVariant qtjambi_to_qvariant(JNIEnv *env, jobject java_object, bool convert) jobject entry = qtjambi_iterator_next(env, iter); jobject keyObject = qtjambi_map$entry_key(env, entry); jobject valueObject = qtjambi_map$entry_value(env, entry); - int keyMetaTypeId = qtjambi_metaTypeId_for_object(env, keyObject); - int valueMetaTypeId = qtjambi_metaTypeId_for_object(env, valueObject); + int keyMetaTypeId = qtjambiMetaTypeId_for_object(env, keyObject); + int valueMetaTypeId = qtjambiMetaTypeId_for_object(env, valueObject); while(qtjambi_iterator_has_next(env, iter)){ entry = qtjambi_iterator_next(env, iter); if(entry){ keyObject = qtjambi_map$entry_key(env, entry); if(keyObject){ - int _keyMetaTypeId = qtjambi_metaTypeId_for_object(env, keyObject); + int _keyMetaTypeId = qtjambiMetaTypeId_for_object(env, keyObject); if(keyMetaTypeId==QMetaType::Nullptr){ keyMetaTypeId = _keyMetaTypeId; }else if(_keyMetaTypeId!=keyMetaTypeId){ @@ -1592,7 +1661,7 @@ QVariant qtjambi_to_qvariant(JNIEnv *env, jobject java_object, bool convert) } valueObject = qtjambi_map$entry_value(env, entry); if(valueObject){ - int _valueMetaTypeId = qtjambi_metaTypeId_for_object(env, valueObject); + int _valueMetaTypeId = qtjambiMetaTypeId_for_object(env, valueObject); if(valueMetaTypeId==QMetaType::Nullptr){ valueMetaTypeId = _valueMetaTypeId; }else if(_valueMetaTypeId!=valueMetaTypeId){ @@ -1754,6 +1823,9 @@ QVariant qtjambi_to_qvariant(JNIEnv *env, jobject java_object, bool convert) type = qtjambiRegisterMetaType(qtName.toUtf8(), typeId ? registeredOriginalMetaObject(*typeId) : nullptr, Java::QtCore::QObject::isAssignableFrom(env, object_class), fullJavaName); + }else if(type.isValid() && isJObjectWrappedMetaType(type)){ + JObjectWrapper wrapper(env, java_object); + return QVariant(type, &wrapper); } #else int metaTypeId = !qtName.isEmpty() @@ -3531,6 +3603,44 @@ jobject qtjambi_to_charobject(JNIEnv *env, QChar *strg) return returned; } +jobject qtjambi_to_variantobject(JNIEnv *env, const QVariant &variant) +{ + jobject returned = Java::QtCore::QVariant::newInstance(env, nullptr); + QVariant* vptr = new QVariant(variant); + if (const QSharedPointer& link = QtJambiLink::createLinkForObject( + env, + returned, + vptr, + LINK_NAME_ARG("QVariant") + false, + false, [](void * ptr,bool){delete reinterpret_cast(ptr);})) { + // If the type is copied in, we own the pointer + link->setJavaOwnership(env); + } else { + delete vptr; + returned = nullptr; + } + return returned; +} + +jobject qtjambi_to_variantobject(JNIEnv *env, QVariant *variant) +{ + jobject returned = Java::QtCore::QVariant::newInstance(env, nullptr); + if (const QSharedPointer& link = QtJambiLink::createLinkForObject( + env, + returned, + variant, + LINK_NAME_ARG("QVariant") + false, + false, [](void * ptr,bool){delete reinterpret_cast(ptr);})) { + // If the type is copied in, we own the pointer + link->setJavaOwnership(env); + } else { + returned = nullptr; + } + return returned; +} + jobject qtjambi_to_stringobject(JNIEnv *env, const QString &strg) { jobject returned = Java::QtCore::QString::newInstance(env, nullptr); @@ -7040,7 +7150,7 @@ DoFinally::~DoFinally(){ InvalidateAfterUse::InvalidateAfterUse(JNIEnv *env, jobject object, bool checkJavaOwnership) : m_env(env), - m_object(object), + m_object(m_env->NewGlobalRef(object)), m_checkJavaOwnership(checkJavaOwnership) {} @@ -7050,16 +7160,20 @@ InvalidateAfterUse::~InvalidateAfterUse() try{ qtjambi_invalidate_object(m_env, m_object, m_checkJavaOwnership); }catch(const JavaException& exn){ + m_env->DeleteGlobalRef(m_object); + m_object = nullptr; __exnHandler.handle(m_env, exn, nullptr); } catch (const std::exception& e) { qWarning("%s", e.what()); } catch (...) { } + if(m_object) + m_env->DeleteGlobalRef(m_object); } InvalidateContainerAfterUse::InvalidateContainerAfterUse(JNIEnv *env, jobject object, bool checkJavaOwnership) : m_env(env), - m_object(object), + m_object(m_env->NewGlobalRef(object)), m_checkJavaOwnership(checkJavaOwnership) {} @@ -7069,11 +7183,15 @@ InvalidateContainerAfterUse::~InvalidateContainerAfterUse() try{ qtjambi_invalidate_collection(m_env, m_object, m_checkJavaOwnership); }catch(const JavaException& exn){ + m_env->DeleteGlobalRef(m_object); + m_object = nullptr; __exnHandler.handle(m_env, exn, nullptr); } catch (const std::exception& e) { qWarning("%s", e.what()); } catch (...) { } + if(m_object) + m_env->DeleteGlobalRef(m_object); } InvalidateArrayAfterUse::InvalidateArrayAfterUse(JNIEnv *env, jobjectArray object, bool checkJavaOwnership) @@ -7495,6 +7613,10 @@ QtJambiLinkScope::QtJambiLinkScope(const QSharedPointer& _link) } +QtJambiLink * QtJambiLinkScope::link() const{ + return reinterpret_cast(relatedNativeID()); +} + QtJambiScope::QtJambiScope() : d(nullptr) {} QtJambiScope::QtJambiScope(QtJambiNativeID nativeId) @@ -7842,6 +7964,7 @@ jobject qtjambi_metamethod_invoke_on_gadget env->EnsureLocalCapacity(500); jvalue result; result.l = nullptr; + JObjectWrapper wrapper; QMetaMethod* method = qtjambi_to_object(env, _metaMethod); if(method && method->isValid()){ QtJambiScope scope; @@ -7867,7 +7990,8 @@ jobject qtjambi_metamethod_invoke_on_gadget Java::QtJambi::QNoNativeResourcesException::throwNew(env, QString("Incomplete object of type: %1").arg(qtjambi_object_class_name(env, object).replace("$", ".")) QTJAMBI_STACKTRACEINFO ); } }else{ - ptr = object; + wrapper = JObjectWrapper(env, object); + ptr = &wrapper; } if(ptr){ bool ok = false; @@ -7949,6 +8073,7 @@ jboolean qtjambi_metaproperty_reset_on_gadget(JNIEnv *env, jobject _this, jobjec const QMetaProperty *__qt_this = qtjambi_to_object(env, _this); if(__qt_this && __qt_this->isValid()){ void* ptr = nullptr; + JObjectWrapper wrapper; if(Java::QtJambi::QtObjectInterface::isInstanceOf(env, gadget)){ const QSharedPointer& link = QtJambiLink::findLinkForJavaObject(env, gadget); const std::type_info* typeId = nullptr; @@ -7966,7 +8091,8 @@ jboolean qtjambi_metaproperty_reset_on_gadget(JNIEnv *env, jobject _this, jobjec } qtjambi_check_resource(env, ptr, *typeId); }else{ - ptr = gadget; + wrapper = JObjectWrapper(env, gadget); + ptr = &wrapper; } return __qt_this->resetOnGadget(ptr); } @@ -7982,6 +8108,7 @@ jobject qtjambi_metaproperty_read_on_gadget(JNIEnv *env, jobject _this, jobject const QMetaProperty *__qt_this = qtjambi_to_object(env, _this); if(__qt_this && __qt_this->isValid()){ void* ptr = nullptr; + JObjectWrapper wrapper; if(Java::QtJambi::QtObjectInterface::isInstanceOf(env, gadget)){ const QSharedPointer& link = QtJambiLink::findLinkForJavaObject(env, gadget); const std::type_info* typeId = nullptr; @@ -7999,7 +8126,8 @@ jobject qtjambi_metaproperty_read_on_gadget(JNIEnv *env, jobject _this, jobject } qtjambi_check_resource(env, ptr, *typeId); }else{ - ptr = gadget; + wrapper = JObjectWrapper(env, gadget); + ptr = &wrapper; } variant = __qt_this->readOnGadget(ptr); if(const QtJambiMetaObject* mo = QtJambiMetaObject::cast(__qt_this->enclosingMetaObject())){ @@ -8049,6 +8177,7 @@ jboolean qtjambi_metaproperty_write_on_gadget(JNIEnv *env, jobject _this, jobjec const QMetaProperty *__qt_this = qtjambi_to_object(env, _this); if(__qt_this && __qt_this->isValid()){ void* ptr = nullptr; + JObjectWrapper wrapper; if(Java::QtJambi::QtObjectInterface::isInstanceOf(env, gadget)){ const QSharedPointer& link = QtJambiLink::findLinkForJavaObject(env, gadget); const std::type_info* typeId = nullptr; @@ -8066,7 +8195,8 @@ jboolean qtjambi_metaproperty_write_on_gadget(JNIEnv *env, jobject _this, jobjec } qtjambi_check_resource(env, ptr, *typeId); }else{ - ptr = gadget; + wrapper = JObjectWrapper(env, gadget); + ptr = &wrapper; } int type; if (__qt_this->type()==QVariant::Invalid) { diff --git a/src/cpp/qtjambi/qtjambi_core.h b/src/cpp/qtjambi/qtjambi_core.h index 02e3db03..44629501 100644 --- a/src/cpp/qtjambi/qtjambi_core.h +++ b/src/cpp/qtjambi/qtjambi_core.h @@ -136,14 +136,6 @@ Q_UNUSED(__qt_qtjambi_debug_method_print) #endif -#ifndef QT_JAMBI_RUN -// during qtjambi generator execution qreal is typedef'ed to -// qtjambireal. this avoids platform dependent typedefs to -// float (arm) or double (x86). -// here during compilation, the wrapper's qtjambireal type is mapped back to qreal. -typedef qreal qtjambireal; -#endif - class QVariant; class QRect; class QtJambiFunctionTable; @@ -663,6 +655,12 @@ jobject qtjambi_to_stringobject(JNIEnv *env, const QString &strg); QTJAMBI_EXPORT jobject qtjambi_to_stringobject(JNIEnv *env, QString *strg); +QTJAMBI_EXPORT +jobject qtjambi_to_variantobject(JNIEnv *env, const QVariant &variant); + +QTJAMBI_EXPORT +jobject qtjambi_to_variantobject(JNIEnv *env, QVariant *variant); + QTJAMBI_EXPORT jobject qtjambi_to_charobject(JNIEnv *env, const QChar &strg); diff --git a/src/cpp/qtjambi/qtjambi_functions.cpp b/src/cpp/qtjambi/qtjambi_functions.cpp index c341d7ad..b4fcdb25 100644 --- a/src/cpp/qtjambi/qtjambi_functions.cpp +++ b/src/cpp/qtjambi/qtjambi_functions.cpp @@ -286,11 +286,89 @@ QTJAMBI_FUNCTION_PREFIX(Java_io_qt_internal_QtJambiInternal_isObjectWrapperType) jint metaTypeId) { return metaTypeId == registeredMetaTypeID(typeid(JObjectWrapper)) +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + || isJObjectWrappedMetaType(QMetaType(metaTypeId)) +#endif || metaTypeId == registeredMetaTypeID(typeid(JCollectionWrapper)) || metaTypeId == registeredMetaTypeID(typeid(JMapWrapper)) || metaTypeId == registeredMetaTypeID(typeid(JIteratorWrapper)); } +extern "C" Q_DECL_EXPORT jboolean JNICALL +QTJAMBI_FUNCTION_PREFIX(Java_io_qt_internal_QtJambiInternal_isCustomValueType) +(JNIEnv *, + jclass, + jint metaTypeId) +{ +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + return JObjectValueWrapper::isValueType(QMetaType(metaTypeId)); +#else + Q_UNUSED(metaTypeId) + return false; +#endif +} + +extern "C" Q_DECL_EXPORT jboolean JNICALL +QTJAMBI_FUNCTION_PREFIX(Java_io_qt_internal_QtJambiInternal_metaTypeHasDataStreamOperators) +(JNIEnv *, + jclass, + jint metaTypeId) +{ +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + QMetaType metaType(metaTypeId); + return metaType.iface()->dataStreamIn || metaType.iface()->dataStreamOut; +#else + Q_UNUSED(metaTypeId) + return false; +#endif +} + +extern "C" Q_DECL_EXPORT jboolean JNICALL +QTJAMBI_FUNCTION_PREFIX(Java_io_qt_internal_QtJambiInternal_metaTypeHasDebugStreamOperator) +(JNIEnv *, + jclass, + jint metaTypeId) +{ +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + return JObjectValueWrapper::hasCustomDebugStreamOperator(QMetaType(metaTypeId)); +#else + Q_UNUSED(metaTypeId) + return false; +#endif +} + +extern "C" Q_DECL_EXPORT void JNICALL +QTJAMBI_FUNCTION_PREFIX(Java_io_qt_internal_QtJambiInternal_registerCustomDataStreamOperators) +(JNIEnv *, + jclass, + jint metaTypeId) +{ +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + QMetaType metaType(metaTypeId); + if(!metaType.iface()->dataStreamIn && !metaType.iface()->dataStreamOut){ + const_cast(metaType.iface())->dataStreamIn = QtPrivate::QDataStreamOperatorForType::dataStreamIn; + const_cast(metaType.iface())->dataStreamOut = QtPrivate::QDataStreamOperatorForType::dataStreamOut; + } +#else + Q_UNUSED(metaTypeId) +#endif +} + +extern "C" Q_DECL_EXPORT void JNICALL +QTJAMBI_FUNCTION_PREFIX(Java_io_qt_internal_QtJambiInternal_registerCustomDebugStreamOperator) +(JNIEnv *, + jclass, + jint metaTypeId) +{ +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + QMetaType metaType(metaTypeId); + if(!JObjectValueWrapper::hasCustomDebugStreamOperator(metaType)) + const_cast(metaType.iface())->debugStream = QtPrivate::QDebugStreamOperatorForType::debugStream; +#else + Q_UNUSED(metaTypeId) +#endif +} + extern "C" Q_DECL_EXPORT jlong JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_internal_QtJambiSignals_00024CurrentSenderSetter_setQObjectSender) (JNIEnv * env, jobject, QtJambiNativeID r, QtJambiNativeID s) @@ -1077,47 +1155,6 @@ QTJAMBI_FUNCTION_PREFIX(Java_io_qt_internal_QtJambiInternal_internalTypeNameByCl return nullptr; } -void __savePointer(QDataStream &stream, const void * pointer){ -#if QT_POINTER_SIZE==8 - qint64 value = qint64(pointer); -#else - qint32 value = qint32(pointer); -#endif - stream << value; - qWarning() << "write pointer: " << value; -} - -void __loadPointer(QDataStream & stream, void * pointer){ - Q_UNUSED(pointer) -#if QT_POINTER_SIZE==8 - qint64 value; -#else - qint32 value; -#endif - stream >> value; - pointer = reinterpret_cast(value); - qWarning() << "read pointer: " << value; -} - -template -void * constructHelper(void * where, const void *pointer) -{ - memcpy(where, pointer, SIZE); - return where; -} - -typedef void*(*ConstructorFn)(void*, const void*); -ConstructorFn findConstructor(int size){ - switch(size){ - case 1: return &constructHelper<1>; - case 2: return &constructHelper<2>; - case 4: return &constructHelper<4>; - case 8: return &constructHelper<8>; - default: - return nullptr; - } -} - typedef void(*DestructorFn)(void*); void destructHelper(void *){} @@ -1129,417 +1166,37 @@ void * pointerConstructHelper(void * where, const void *pointer) return where; } -#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) -void registerJavaClassForCustomMetaType(int metaType, const QByteArray& javaClass); -#else -void registerJavaClassForCustomMetaType(const QMetaType& metaType, const QByteArray& javaClass); void registerConverterVariant(JNIEnv *env, const QMetaType& metaType, const QString& qtName, const QString& fullJavaName, jclass clazz); -#endif +int qtjambi_register_metatype(JNIEnv *env, jclass clazz, jboolean isPointer, jboolean isReference); -int qtjambi_register_metatype(JNIEnv *env, jclass clazz, jboolean isPointer, jboolean isReference) -{ - try{ - if(Java::Runtime::Class::isArray(env, clazz) && !isPointer){ - jclass componentType = Java::Runtime::Class::getComponentType(env, clazz); - if(Java::Runtime::Integer::isPrimitiveType(env, componentType)){ - return registerMetaType("JIntArrayWrapper"); - }else if(Java::Runtime::Short::isPrimitiveType(env, componentType)){ - return registerMetaType("JShortArrayWrapper"); - }else if(Java::Runtime::Byte::isPrimitiveType(env, componentType)){ - return registerMetaType("JByteArrayWrapper"); - }else if(Java::Runtime::Long::isPrimitiveType(env, componentType)){ - return registerMetaType("JLongArrayWrapper"); - }else if(Java::Runtime::Character::isPrimitiveType(env, componentType)){ - return registerMetaType("JCharArrayWrapper"); - }else if(Java::Runtime::Boolean::isPrimitiveType(env, componentType)){ - return registerMetaType("JBooleanArrayWrapper"); - }else if(Java::Runtime::Double::isPrimitiveType(env, componentType)){ - return registerMetaType("JDoubleArrayWrapper"); - }else if(Java::Runtime::Float::isPrimitiveType(env, componentType)){ - return registerMetaType("JFloatArrayWrapper"); - }else{ - return registerMetaType("JObjectWrapper"); - } - }else if((Java::Runtime::Integer::isSameClass(env, clazz) || Java::Runtime::Integer::isPrimitiveType(env, clazz)) && !isPointer){ - return QMetaType::Int; - }else if((Java::Runtime::Long::isSameClass(env, clazz) || Java::Runtime::Long::isPrimitiveType(env, clazz)) && !isPointer){ - return QMetaType::LongLong; - }else if((Java::Runtime::Short::isSameClass(env, clazz) || Java::Runtime::Short::isPrimitiveType(env, clazz)) && !isPointer){ - return QMetaType::Short; - }else if((Java::Runtime::Byte::isSameClass(env, clazz) || Java::Runtime::Byte::isPrimitiveType(env, clazz)) && !isPointer){ - return QMetaType::SChar; - }else if((Java::Runtime::Boolean::isSameClass(env, clazz) || Java::Runtime::Boolean::isPrimitiveType(env, clazz)) && !isPointer){ - return QMetaType::Bool; - }else if((Java::Runtime::Character::isSameClass(env, clazz) || Java::Runtime::Character::isPrimitiveType(env, clazz)) && !isPointer){ - return QMetaType::QChar; - }else if((Java::Runtime::Float::isSameClass(env, clazz) || Java::Runtime::Float::isPrimitiveType(env, clazz)) && !isPointer){ - return QMetaType::Float; - }else if((Java::Runtime::Double::isSameClass(env, clazz) || Java::Runtime::Double::isPrimitiveType(env, clazz)) && !isPointer){ - return QMetaType::Double; - }else if((Java::Runtime::Void::isPrimitiveType(env, clazz)) && !isPointer){ - return QMetaType::Void; - }else{ - QString javaClassName = qtjambi_class_name(env, clazz).replace('.', '/'); - if(const std::type_info* typeId = getTypeByJavaName(javaClassName)){ - QByteArray qtType = getQtName(*typeId); - if((!isPointer || qtType.endsWith("*")) && (!isReference || !qtType.endsWith("*"))){ - int id = registeredMetaTypeID(*typeId); - if(id!=QMetaType::UnknownType) - return id; - } - const QMetaObject *meta_object = registeredOriginalMetaObject(*typeId); - QMetaType::TypeFlags flags = QMetaType::MovableType | QMetaType::NeedsDestruction | QMetaType::NeedsConstruction; - QByteArray typeName = QMetaObject::normalizedType(qtType); - EntryTypes entryType = getEntryType(*typeId); - if(isReference){ - switch(entryType){ - case EntryTypes::ObjectTypeInfo: - case EntryTypes::QObjectTypeInfo: - if(typeName.endsWith("*")){ - typeName.chop(1); - } - entryType = EntryTypes::ValueTypeInfo; break; - case EntryTypes::InterfaceTypeInfo: - if(typeName.endsWith("*")){ - typeName.chop(1); - } - entryType = EntryTypes::InterfaceValueTypeInfo; break; - default: break; - } - }else if(isPointer){ - switch(entryType){ - case EntryTypes::ValueTypeInfo: - entryType = EntryTypes::ObjectTypeInfo; break; - case EntryTypes::InterfaceValueTypeInfo: - entryType = EntryTypes::InterfaceTypeInfo; break; - default: break; - } - } - switch(entryType){ - case EntryTypes::ObjectTypeInfo: - case EntryTypes::QObjectTypeInfo: - case EntryTypes::InterfaceTypeInfo: - case EntryTypes::FunctionalTypeInfo: { -#if QT_VERSION >= QT_VERSION_CHECK(6,0,0) - flags |= QMetaType::IsPointer; -#endif - if(entryType!=EntryTypes::FunctionalTypeInfo && !typeName.endsWith("*")){ - typeName = QMetaObject::normalizedType(typeName + "*"); - } - if(Java::QtCore::QObject::isAssignableFrom(env, clazz)){ - flags |= QMetaType::PointerToQObject; - }else if(meta_object){ - flags |= QMetaType::PointerToGadget; - } -#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) - QMetaType::Destructor destructor = &destructHelper; - QMetaType::Constructor constructor = &pointerConstructHelper; - int typeId = QMetaType::registerNormalizedType( - typeName, - destructor, - constructor, - sizeof(void*), - flags, - meta_object - ); - qtjambi_register_comparator(new QtPrivate::BuiltInComparatorFunction(), typeId); - registerJavaClassForCustomMetaType(typeId, javaClassName.toLatin1()); - return typeId; -#else - QMetaType metaType = createMetaType(typeName, - true, - /*.defaultCtr=*/ QtJambiPrivate::QMetaTypeInterfaceFunctions::defaultCtr, - /*.copyCtr=*/ QtJambiPrivate::QMetaTypeInterfaceFunctions::copyCtr, - /*.moveCtr=*/ QtJambiPrivate::QMetaTypeInterfaceFunctions::moveCtr, - /*.dtor=*/ QtJambiPrivate::QMetaTypeInterfaceFunctions::dtor, - /*.equals=*/ QtPrivate::QEqualityOperatorForType::equals, - /*.lessThan=*/ QtPrivate::QLessThanOperatorForType::lessThan, - /*.debugStream=*/ QtPrivate::QDebugStreamOperatorForType::debugStream, - /*.dataStreamOut=*/ QtPrivate::QDataStreamOperatorForType::dataStreamOut, - /*.dataStreamIn=*/ QtPrivate::QDataStreamOperatorForType::dataStreamIn, - /*.legacyRegisterOp=*/ QtJambiPrivate::QMetaTypeInterfaceFunctions::legacyRegisterOp, - /*.size=*/ sizeof(void*), - /*.alignment=*/ alignof(void*), - /*.typeId=*/ QMetaType::UnknownType, - /*.flags=*/ QMetaType::TypeFlags(flags), - meta_object, - nullptr); - metaType.id(); - registerJavaClassForCustomMetaType(metaType, javaClassName.toLatin1()); - registerConverterVariant(env, metaType, typeName, javaClassName, clazz); - return metaType.id(); -#endif - } - case EntryTypes::EnumTypeInfo:{ - flags |= QMetaType::IsEnumeration; - if(Java::QtJambi::QtShortEnumerator::isAssignableFrom(env, clazz)){ -#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) - int typeId = QMetaType::registerNormalizedType( - typeName, - &destructHelper, - findConstructor(sizeof(qint16)), - sizeof(sizeof(qint16)), - flags, - meta_object - ); - qtjambi_register_comparator(new QtPrivate::BuiltInComparatorFunction(), typeId); - registerJavaClassForCustomMetaType(typeId, javaClassName.toLatin1()); - return typeId; -#else - QMetaType metaType = createMetaType(typeName, - true, - /*.defaultCtr=*/ QtJambiPrivate::QMetaTypeInterfaceFunctions::defaultCtr, - /*.copyCtr=*/ QtJambiPrivate::QMetaTypeInterfaceFunctions::copyCtr, - /*.moveCtr=*/ QtJambiPrivate::QMetaTypeInterfaceFunctions::moveCtr, - /*.dtor=*/ QtJambiPrivate::QMetaTypeInterfaceFunctions::dtor, - /*.equals=*/ QtPrivate::QEqualityOperatorForType::equals, - /*.lessThan=*/ QtPrivate::QLessThanOperatorForType::lessThan, - /*.debugStream=*/ QtPrivate::QDebugStreamOperatorForType::debugStream, - /*.dataStreamOut=*/ QtPrivate::QDataStreamOperatorForType::dataStreamOut, - /*.dataStreamIn=*/ QtPrivate::QDataStreamOperatorForType::dataStreamIn, - /*.legacyRegisterOp=*/ QtJambiPrivate::QMetaTypeInterfaceFunctions::legacyRegisterOp, - /*.size=*/ sizeof(qint16), - /*.alignment=*/ alignof(qint16), - /*.typeId=*/ QMetaType::UnknownType, - /*.flags=*/ QMetaType::TypeFlags(flags), - meta_object, - nullptr); - int _id = metaType.id(); - registerJavaClassForCustomMetaType(metaType, javaClassName.toLatin1()); - return _id; -#endif - }else if(Java::QtJambi::QtLongEnumerator::isAssignableFrom(env, clazz)){ -#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) - int typeId = QMetaType::registerNormalizedType( - typeName, - &destructHelper, - findConstructor(sizeof(qint64)), - sizeof(sizeof(qint64)), - flags, - meta_object - ); - qtjambi_register_comparator(new QtPrivate::BuiltInComparatorFunction(), typeId); - registerJavaClassForCustomMetaType(typeId, javaClassName.toLatin1()); - return typeId; -#else - QMetaType metaType = createMetaType(typeName, - true, - /*.defaultCtr=*/ QtJambiPrivate::QMetaTypeInterfaceFunctions::defaultCtr, - /*.copyCtr=*/ QtJambiPrivate::QMetaTypeInterfaceFunctions::copyCtr, - /*.moveCtr=*/ QtJambiPrivate::QMetaTypeInterfaceFunctions::moveCtr, - /*.dtor=*/ QtJambiPrivate::QMetaTypeInterfaceFunctions::dtor, - /*.equals=*/ QtPrivate::QEqualityOperatorForType::equals, - /*.lessThan=*/ QtPrivate::QLessThanOperatorForType::lessThan, - /*.debugStream=*/ QtPrivate::QDebugStreamOperatorForType::debugStream, - /*.dataStreamOut=*/ QtPrivate::QDataStreamOperatorForType::dataStreamOut, - /*.dataStreamIn=*/ QtPrivate::QDataStreamOperatorForType::dataStreamIn, - /*.legacyRegisterOp=*/ QtJambiPrivate::QMetaTypeInterfaceFunctions::legacyRegisterOp, - /*.size=*/ sizeof(qint64), - /*.alignment=*/ alignof(qint64), - /*.typeId=*/ QMetaType::UnknownType, - /*.flags=*/ QMetaType::TypeFlags(flags), - meta_object, - nullptr); - int _id = metaType.id(); - registerJavaClassForCustomMetaType(metaType, javaClassName.toLatin1()); - return _id; -#endif - }else if(Java::QtJambi::QtByteEnumerator::isAssignableFrom(env, clazz)){ -#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) - int typeId = QMetaType::registerNormalizedType( - typeName, - &destructHelper, - findConstructor(sizeof(qint8)), - sizeof(sizeof(qint8)), - flags, - meta_object - ); - qtjambi_register_comparator(new QtPrivate::BuiltInComparatorFunction(), typeId); - registerJavaClassForCustomMetaType(typeId, javaClassName.toLatin1()); - return typeId; -#else - QMetaType metaType = createMetaType(typeName, - true, - /*.defaultCtr=*/ QtJambiPrivate::QMetaTypeInterfaceFunctions::defaultCtr, - /*.copyCtr=*/ QtJambiPrivate::QMetaTypeInterfaceFunctions::copyCtr, - /*.moveCtr=*/ QtJambiPrivate::QMetaTypeInterfaceFunctions::moveCtr, - /*.dtor=*/ QtJambiPrivate::QMetaTypeInterfaceFunctions::dtor, - /*.equals=*/ QtPrivate::QEqualityOperatorForType::equals, - /*.lessThan=*/ QtPrivate::QLessThanOperatorForType::lessThan, - /*.debugStream=*/ QtPrivate::QDebugStreamOperatorForType::debugStream, - /*.dataStreamOut=*/ QtPrivate::QDataStreamOperatorForType::dataStreamOut, - /*.dataStreamIn=*/ QtPrivate::QDataStreamOperatorForType::dataStreamIn, - /*.legacyRegisterOp=*/ QtJambiPrivate::QMetaTypeInterfaceFunctions::legacyRegisterOp, - /*.size=*/ sizeof(qint8), - /*.alignment=*/ alignof(qint8), - /*.typeId=*/ QMetaType::UnknownType, - /*.flags=*/ QMetaType::TypeFlags(flags), - meta_object, - nullptr); - int _id = metaType.id(); - registerJavaClassForCustomMetaType(metaType, javaClassName.toLatin1()); - return _id; -#endif - }else /*if(Java::Runtime::Enum::isAssignableFrom(env, clazz) - || Java::QtJambi::QtEnumerator::isAssignableFrom(env, clazz))*/ { -#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) - int typeId = QMetaType::registerNormalizedType( - typeName, - &destructHelper, - findConstructor(sizeof(qint32)), - sizeof(sizeof(qint32)), - flags, - meta_object - ); - qtjambi_register_comparator(new QtPrivate::BuiltInComparatorFunction(), typeId); - registerJavaClassForCustomMetaType(typeId, javaClassName.toLatin1()); - return typeId; -#else - QMetaType metaType = createMetaType(typeName, - true, - /*.defaultCtr=*/ QtJambiPrivate::QMetaTypeInterfaceFunctions::defaultCtr, - /*.copyCtr=*/ QtJambiPrivate::QMetaTypeInterfaceFunctions::copyCtr, - /*.moveCtr=*/ QtJambiPrivate::QMetaTypeInterfaceFunctions::moveCtr, - /*.dtor=*/ QtJambiPrivate::QMetaTypeInterfaceFunctions::dtor, - /*.equals=*/ QtPrivate::QEqualityOperatorForType::equals, - /*.lessThan=*/ QtPrivate::QLessThanOperatorForType::lessThan, - /*.debugStream=*/ QtPrivate::QDebugStreamOperatorForType::debugStream, - /*.dataStreamOut=*/ QtPrivate::QDataStreamOperatorForType::dataStreamOut, - /*.dataStreamIn=*/ QtPrivate::QDataStreamOperatorForType::dataStreamIn, - /*.legacyRegisterOp=*/ QtJambiPrivate::QMetaTypeInterfaceFunctions::legacyRegisterOp, - /*.size=*/ sizeof(qint32), - /*.alignment=*/ alignof(qint32), - /*.typeId=*/ QMetaType::UnknownType, - /*.flags=*/ QMetaType::TypeFlags(flags), - meta_object, - nullptr); - int _id = metaType.id(); - registerJavaClassForCustomMetaType(metaType, javaClassName.toLatin1()); - return _id; -#endif - } - } - case EntryTypes::FlagsTypeInfo:{ -#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) - int typeId = QMetaType::registerNormalizedType( - typeName, - &destructHelper, - findConstructor(sizeof(qint32)), - sizeof(sizeof(qint32)), - flags, - meta_object - ); - qtjambi_register_comparator(new QtPrivate::BuiltInComparatorFunction(), typeId); - registerJavaClassForCustomMetaType(typeId, javaClassName.toLatin1()); - return typeId; -#else - QMetaType metaType = createMetaType(typeName, - true, - /*.defaultCtr=*/ QtJambiPrivate::QMetaTypeInterfaceFunctions::defaultCtr, - /*.copyCtr=*/ QtJambiPrivate::QMetaTypeInterfaceFunctions::copyCtr, - /*.moveCtr=*/ QtJambiPrivate::QMetaTypeInterfaceFunctions::moveCtr, - /*.dtor=*/ QtJambiPrivate::QMetaTypeInterfaceFunctions::dtor, - /*.equals=*/ QtPrivate::QEqualityOperatorForType::equals, - /*.lessThan=*/ QtPrivate::QLessThanOperatorForType::lessThan, - /*.debugStream=*/ QtPrivate::QDebugStreamOperatorForType::debugStream, - /*.dataStreamOut=*/ QtPrivate::QDataStreamOperatorForType::dataStreamOut, - /*.dataStreamIn=*/ QtPrivate::QDataStreamOperatorForType::dataStreamIn, - /*.legacyRegisterOp=*/ QtJambiPrivate::QMetaTypeInterfaceFunctions::legacyRegisterOp, - /*.size=*/ sizeof(qint32), - /*.alignment=*/ alignof(qint32), - /*.typeId=*/ QMetaType::UnknownType, - /*.flags=*/ QMetaType::TypeFlags(flags), - meta_object, - nullptr); - int _id = metaType.id(); - registerJavaClassForCustomMetaType(metaType, javaClassName.toLatin1()); - return _id; -#endif - } - case EntryTypes::InterfaceValueTypeInfo: - case EntryTypes::ValueTypeInfo:{ - int id = qRegisterMetaType("JObjectWrapper"); -#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) - int typeId = QMetaType::registerNormalizedTypedef(typeName, id); - qtjambi_register_comparator(new QtPrivate::BuiltInEqualsComparatorFunction(), typeId); - registerJavaClassForCustomMetaType(typeId, javaClassName.toLatin1()); - return typeId; -#else - QMetaType::registerNormalizedTypedef(typeName, QMetaType(id)); - return id; -#endif - } - default: break; - } - }else{ - const SuperTypeInfos& superTypes = getSuperTypeInfos(env, clazz); - QByteArray javaName = javaClassName.replace("/", "::").toUtf8(); - if(superTypes.isEmpty()){ - int id; - if(Java::QtJambi::QtShortEnumerator::isAssignableFrom(env, clazz) - || Java::QtJambi::QtLongEnumerator::isAssignableFrom(env, clazz) - || Java::QtJambi::QtByteEnumerator::isAssignableFrom(env, clazz) - || Java::QtJambi::QtEnumerator::isAssignableFrom(env, clazz) - || Java::Runtime::Enum::isAssignableFrom(env, clazz)){ - id = qRegisterMetaType("JEnumWrapper"); - }else if(Java::Runtime::Map::isAssignableFrom(env, clazz)){ - id = qRegisterMetaType("JMapWrapper"); - }else if(Java::Runtime::Collection::isAssignableFrom(env, clazz)){ - id = qRegisterMetaType("JCollectionWrapper"); - }else if(Java::Runtime::Iterator::isAssignableFrom(env, clazz)){ - id = qRegisterMetaType("JIteratorWrapper"); - }else{ - id = qRegisterMetaType("JObjectWrapper"); - } -#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) - int typeId = QMetaType::registerNormalizedTypedef(javaName, id); - qtjambi_register_comparator(new QtPrivate::BuiltInEqualsComparatorFunction(), typeId); - registerJavaClassForCustomMetaType(typeId, javaClassName.toLatin1()); - return typeId; -#else - QMetaType::registerNormalizedTypedef(javaName, QMetaType(id)); - return id; -#endif - }else{ - int id = qtjambi_register_metatype(env, superTypes[0].javaClass(), isPointer, isReference); -#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) - int typeId = QMetaType::registerNormalizedTypedef(javaName, id); - qtjambi_register_comparator(new QtPrivate::BuiltInEqualsComparatorFunction(), typeId); - return typeId; +#if QT_VERSION < QT_VERSION_CHECK(6,0,0) +#define qtjambiMetaType QMetaType::fromType +//qMetaTypeId #else - QMetaType::registerNormalizedTypedef(javaName, QMetaType(id)); - return id; +#define qtjambiMetaType QMetaType::fromType #endif - } - } - } - }catch(const JavaException& exn){ - exn.raiseInJava(env); - } - return QMetaType::UnknownType; -} -/** - * new implementation according to Qt5's meta object API - */ -extern "C" Q_DECL_EXPORT int JNICALL -QTJAMBI_FUNCTION_PREFIX(Java_io_qt_internal_QtJambiInternal__1_1qt_1registerMetaType) -(JNIEnv *env, jclass, jclass clazz, jboolean isPointer, jboolean isReference) -{ - try{ - return qtjambi_register_metatype(env, clazz, isPointer, isReference); - }catch(const JavaException& exn){ - exn.raiseInJava(env); - return 0; - } -} - -extern "C" Q_DECL_EXPORT int JNICALL -QTJAMBI_FUNCTION_PREFIX(Java_io_qt_internal_QtJambiInternal__1_1qt_1registerMetaType2) +extern "C" Q_DECL_EXPORT jint JNICALL +QTJAMBI_FUNCTION_PREFIX(Java_io_qt_internal_QtJambiInternal_registerRefMetaType) (JNIEnv *env, jclass, jint id, jboolean isPointer, jboolean isReference) { try{ QMetaType metaType(id); + if(metaType==qtjambiMetaType() + || metaType==qtjambiMetaType() + || metaType==qtjambiMetaType() + || metaType==qtjambiMetaType() + || metaType==qtjambiMetaType() + || metaType==qtjambiMetaType() + || metaType==qtjambiMetaType() + || metaType==qtjambiMetaType() + || metaType==qtjambiMetaType() + || metaType==qtjambiMetaType() + || metaType==qtjambiMetaType() + || metaType==qtjambiMetaType() + || metaType==qtjambiMetaType() + || metaType==qtjambiMetaType()) + return id; QByteArray typeName(metaType.name()); if(isPointer){ #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) @@ -1592,9 +1249,12 @@ QTJAMBI_FUNCTION_PREFIX(Java_io_qt_internal_QtJambiInternal__1_1qt_1registerMeta /*.alignment=*/ alignof(void*), /*.typeId=*/ QMetaType::UnknownType, /*.flags=*/ QMetaType::TypeFlags(flags), - metaType.metaObject(), - nullptr); + nullptr, + QMetaType(metaType).iface()->metaObjectFn); _metaType.id(); + if(jclass clazz = qtjambi_class_for_metatype(env, metaType)){ + registerConverterVariant(env, _metaType, typeName, qtjambi_class_name(env, clazz).replace('.', '/'), clazz); + } return _metaType.id(); #endif } @@ -1622,18 +1282,21 @@ QTJAMBI_FUNCTION_PREFIX(Java_io_qt_internal_QtJambiInternal__1_1qt_1registerMeta } } -QByteArray registeredJavaClassForCustomMetaType(int metaType); +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) +QByteArray registeredJavaClassForCustomMetaType(QMetaType metaType); +#else +QByteArray registeredJavaClassForCustomMetaType(const QMetaType& metaType); +#endif -jclass qtjambi_class_for_metatype(JNIEnv *env, int id) +jclass qtjambi_class_for_metatype(JNIEnv *env, const QMetaType& metaType) { - QMetaType metaType(id); QByteArray typeName(metaType.name()); const char* name(nullptr); - if(const std::type_info* typeId = getTypeByMetaType(id)){ + if(const std::type_info* typeId = getTypeByMetaType(metaType.id())){ name = getJavaName(*typeId); } if(!name){ - QByteArray name = registeredJavaClassForCustomMetaType(id); + QByteArray name = registeredJavaClassForCustomMetaType(metaType); if(!name.isEmpty()){ return resolveClass(env, name); } @@ -1651,69 +1314,71 @@ jclass qtjambi_class_for_metatype(JNIEnv *env, int id) typeName.chop(1); } return resolveClass(env, typeName.replace("::", ".")); - }catch(const JavaException&){} + }catch(const JavaException&){ + QStringList typeNameSplit = QString(QLatin1String(typeName)).split(QStringLiteral("::")); + QString name; + while(!typeNameSplit.isEmpty()){ + if(!name.isEmpty()) + name += QStringLiteral("::"); + name += typeNameSplit.takeFirst(); + try { + resolveClass(env, qPrintable(name)); + name += QStringLiteral("$")+typeNameSplit.join(QStringLiteral("$")); + return resolveClass(env, qPrintable(name)); + }catch(const JavaException&){} + } + } return nullptr; } -extern "C" Q_DECL_EXPORT jobject JNICALL -QTJAMBI_FUNCTION_PREFIX(Java_io_qt_internal_QtJambiInternal__1_1qt_1createMetaType) -(JNIEnv *env, jclass, jint id, jobject copy) -{ - try{ -#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) -#define QTJAMBI_METATYPE(id) id +QVariant qtjambi_convert_checked_object_to_qvariant(JNIEnv *env, jobject object, const QMetaType& metaType){ + if(env->IsSameObject(object, nullptr)){ +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + return QVariant(metaType, nullptr); #else -#define QTJAMBI_METATYPE(id) QMetaType(id) + return QVariant(metaType.id(), nullptr); #endif - if(QByteArray(QMetaType::typeName(id)).endsWith("*")){ - return nullptr; - } - if(copy){ - if(QSharedPointer link = QtJambiLink::findLinkForJavaInterface(env, copy)){ -#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) && QT_VERSION < QT_VERSION_CHECK(6, 4, 0) - if(!QMetaType(id).iface()->copyCtr){ - JavaException::raiseUnsupportedOperationException(env, qPrintable(QString("Unable to create value of meta type %1 due to missing copy constructor.").arg(QLatin1String(QMetaType::typeName(id)))) QTJAMBI_STACKTRACEINFO ); - } + } + if(QSharedPointer link = QtJambiLink::findLinkForJavaInterface(env, object)){ + jclass typeClass = qtjambi_class_for_metatype(env, metaType); + if(typeClass && env->IsInstanceOf(object, typeClass)){ +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) +#if QT_VERSION < QT_VERSION_CHECK(6, 4, 0) + if(!QMetaType(metaType).iface()->copyCtr){ + JavaException::raiseUnsupportedOperationException(env, qPrintable(QString("Unable to create value of meta type %1 due to missing copy constructor.").arg(QLatin1String(metaType.name()))) QTJAMBI_STACKTRACEINFO ); + } #endif - QVariant variant(QTJAMBI_METATYPE(id), link->pointer()); - return qtjambi_from_qvariant(env, variant); + if(metaType.flags() & QMetaType::IsPointer){ + void* ptr = link->pointer(); + return QVariant(metaType, &ptr); }else{ - if(Java::QtJambi::QtObjectInterface::isInstanceOf(env, copy)) - Java::QtJambi::QNoNativeResourcesException::throwNew(env, QString("Incomplete object of type: %1").arg(qtjambi_object_class_name(env, copy).replace("$", ".")) QTJAMBI_STACKTRACEINFO ); - QVariant variant = qtjambi_to_qvariant(env, copy); - if(variant.userType()!=id){ - if(variant.convert(id)){ - variant = QVariant(QTJAMBI_METATYPE(id), variant.data()); - return qtjambi_from_qvariant(env, variant); - } - }else{ - variant = QVariant(QTJAMBI_METATYPE(id), variant.data()); - return qtjambi_from_qvariant(env, variant); - } + return QVariant(metaType, link->pointer()); } +#else + if(metaType.name().endsWith("*")){ + void* ptr = link->pointer(); + return QVariant(metaType.id(), &ptr); + }else{ + return QVariant(metaType.id(), link->pointer()); + } +#endif } -#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) && QT_VERSION < QT_VERSION_CHECK(6, 4, 0) - if(!QMetaType(id).iface()->defaultCtr){ - JavaException::raiseUnsupportedOperationException(env, qPrintable(QString("Unable to create value of meta type %1 due to missing default constructor.").arg(QLatin1String(QMetaType::typeName(id)))) QTJAMBI_STACKTRACEINFO ); - } + }else if(Java::QtJambi::QtObjectInterface::isInstanceOf(env, object)) + Java::QtJambi::QNoNativeResourcesException::throwNew(env, QString("Incomplete object of type: %1").arg(qtjambi_object_class_name(env, object).replace("$", ".")) QTJAMBI_STACKTRACEINFO ); + QVariant variant = qtjambi_to_qvariant(env, object); +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + if(variant.metaType()!=metaType){ + if(variant.convert(metaType)){ +#else + if(variant.userType()!=metaType.id()){ + if(variant.convert(metaType.id())){ #endif - QVariant variant(QTJAMBI_METATYPE(id), nullptr); - return qtjambi_from_qvariant(env, variant); - }catch(const JavaException& exn){ - exn.raiseInJava(env); - return nullptr; - } -} - -extern "C" Q_DECL_EXPORT jclass JNICALL -QTJAMBI_FUNCTION_PREFIX(Java_io_qt_internal_QtJambiInternal_javaTypeForMetaTypeId) -(JNIEnv *env, jclass, jint id) -{ - try{ - return qtjambi_class_for_metatype(env, id); - }catch(const JavaException& exn){ - exn.raiseInJava(env); - return nullptr; + return variant; + } + JavaException::raiseIllegalArgumentException(env, qPrintable(QString("Object of type %1 incompatible with meta type %2.").arg(qtjambi_object_class_name(env, object).replace("$", "."), QLatin1String(metaType.name()))) QTJAMBI_STACKTRACEINFO ); + return QVariant(); + }else{ + return variant; } } @@ -1731,51 +1396,82 @@ QTJAMBI_FUNCTION_PREFIX(Java_io_qt_internal_QtJambiInternal_getRegisteredTypeSiz } } -extern "C" Q_DECL_EXPORT int JNICALL -QTJAMBI_FUNCTION_PREFIX(Java_io_qt_internal_QtJambiInternal__1_1qt_1registerContainerMetaType) -(JNIEnv *env, jclass, jclass containerType, jintArray instantiations) +int qtjambiMetaTypeId(JNIEnv *env, jclass clazz, jobjectArray instantiations, QString* templateName); + +int qtjambiRegisterMetaType(JNIEnv *env, jclass containerType, jobjectArray instantiations) { + QString templateName; + int registeredId = qtjambiMetaTypeId(env, containerType, instantiations, &templateName); + if(registeredId==registerMetaType("JEnumWrapper") + || registeredId==registerMetaType("JObjectWrapper") + || registeredId==registerMetaType("JCollectionWrapper") + || registeredId==registerMetaType("JMapWrapper") + || registeredId==registerMetaType("JIteratorWrapper")){ + registeredId = QMetaType::UnknownType; + } + if(registeredId!=QMetaType::UnknownType) + return registeredId; try{ - const JIntArrayWrapper _instantiations(env, instantiations); + const JObjectArrayWrapper _instantiations(env, instantiations); QStringList names; AbstractContainerAccess* containerAccess = nullptr; switch(_instantiations.length()){ case 1: { ContainerType type; - if(Java::QtCore::QQueue::isAssignableFrom(env, containerType)){ + if(templateName.startsWith(QStringLiteral("QQueue<"))){ type = ContainerType::QQueue; - names << "QQueue<%1>"; + names << templateName; + }else if(templateName.startsWith(QStringLiteral("QStack<"))){ + type = ContainerType::QStack; + names << templateName; +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) + }else if(templateName.startsWith(QStringLiteral("QLinkedList<"))){ + type = ContainerType::QLinkedList; + names << templateName; + }else if(templateName.startsWith(QStringLiteral("QVector<"))){ + type = ContainerType::QVector; + names << templateName; +#endif + }else if(templateName.startsWith(QStringLiteral("QList<"))){ + type = ContainerType::QList; + names << templateName; + }else if(templateName.startsWith(QStringLiteral("QSet<"))){ + type = ContainerType::QSet; + names << templateName; + }else if(Java::QtCore::QQueue::isAssignableFrom(env, containerType)){ + type = ContainerType::QQueue; + names << QStringLiteral("QQueue<%1>"); }else if(Java::QtCore::QStack::isAssignableFrom(env, containerType) || Java::Runtime::Deque::isAssignableFrom(env, containerType)){ type = ContainerType::QStack; - names << "QStack<%1>"; - #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) + names << QStringLiteral("QStack<%1>"); +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) }else if(Java::QtCore::QLinkedList::isAssignableFrom(env, containerType)){ type = ContainerType::QLinkedList; - names << "QLinkedList<%1>"; + names << QStringLiteral("QLinkedList<%1>"); }else if(Java::QtCore::QVector::isAssignableFrom(env, containerType)){ type = ContainerType::QVector; - names << "QVector<%1>"; - #endif + names << QStringLiteral("QVector<%1>"); +#endif }else if(Java::QtCore::QList::isAssignableFrom(env, containerType) || Java::Runtime::List::isAssignableFrom(env, containerType)){ type = ContainerType::QList; - names << "QList<%1>"; + names << QStringLiteral("QList<%1>"); }else if(Java::QtCore::QSet::isAssignableFrom(env, containerType) || Java::Runtime::Set::isAssignableFrom(env, containerType)){ type = ContainerType::QSet; - names << "QSet<%1>"; + names << QStringLiteral("QSet<%1>"); }else{ return qtjambi_register_metatype(env, containerType, false, false); } - QMetaType metaType1(_instantiations[0]); + const QMetaType& metaType1 = qtjambi_cast(env, _instantiations[0].object()); QString elementType = QLatin1String(metaType1.name()); for(QString& name : names){ name = name.arg(EXCLUDE_GT_END(elementType)); } containerAccess = qtjambi_create_container_access(env, type, metaType1); if(!containerAccess){ - jclass elementClass = qtjambi_class_for_metatype(env, _instantiations[0]); + jclass elementClass = qtjambi_class_for_metatype(env, metaType1); bool isPointer = qtjambi_is_pointer_type(metaType1); size_t size = 0; size_t align = 0; @@ -1795,8 +1491,8 @@ QTJAMBI_FUNCTION_PREFIX(Java_io_qt_internal_QtJambiInternal__1_1qt_1registerCont #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) isStaticType = QtJambiTypeManager::isStaticType(elementType); #endif - if(_instantiations[0] != QMetaType::UnknownType){ - int sz = QMetaType::sizeOf(_instantiations[0]); + if(metaType1.id() != QMetaType::UnknownType){ + int sz = metaType1.sizeOf(); size = sz<0 ? 0 : size_t(sz); } } @@ -1814,9 +1510,9 @@ QTJAMBI_FUNCTION_PREFIX(Java_io_qt_internal_QtJambiInternal__1_1qt_1registerCont env, elementClass, elementType, metaType1); - QHashFunction hashFunction = QtJambiTypeManager::findHashFunction(isPointer, _instantiations[0]); + QHashFunction hashFunction = QtJambiTypeManager::findHashFunction(isPointer, metaType1.id()); containerAccess = qtjambi_create_container_access(env, type, - QMetaType(_instantiations[0]), + metaType1, align, size, #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) isStaticType, @@ -1852,43 +1548,57 @@ QTJAMBI_FUNCTION_PREFIX(Java_io_qt_internal_QtJambiInternal__1_1qt_1registerCont return id; } case 2: { + const QMetaType& metaType1 = qtjambi_cast(env, _instantiations[0].object()); + const QMetaType& metaType2 = qtjambi_cast(env, _instantiations[1].object()); MapType type; - if(Java::QtCore::QPair::isAssignableFrom(env, containerType)){ + if(templateName.startsWith(QStringLiteral("QMultiMap<"))){ + type = MapType::QMultiMap; + names << templateName; + }else if(templateName.startsWith(QStringLiteral("QMap<"))){ + type = MapType::QMap; + names << templateName; + }else if(templateName.startsWith(QStringLiteral("QMultiHash<"))){ + type = MapType::QMultiHash; + names << templateName; + }else if(templateName.startsWith(QStringLiteral("QHash<"))){ + type = MapType::QHash; + names << templateName; + }else if(Java::QtCore::QPair::isAssignableFrom(env, containerType)){ type = MapType::QPair; #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) - names << "QPair<%1,%2>"; + names << QStringLiteral("QPair<%1,%2>"); #else - names << "std::pair<%1,%2>"; + names << QStringLiteral("std::pair<%1,%2>"); #endif }else if(Java::QtCore::QMultiMap::isAssignableFrom(env, containerType)){ type = MapType::QMultiMap; - names << "QMultiMap<%1,%2>"; + names << QStringLiteral("QMultiMap<%1,%2>"); }else if(Java::QtCore::QMap::isAssignableFrom(env, containerType) || Java::Runtime::NavigableMap::isAssignableFrom(env, containerType)){ type = MapType::QMap; - names << "QMap<%1,%2>"; + names << QStringLiteral("QMap<%1,%2>"); }else if(Java::QtCore::QMultiHash::isAssignableFrom(env, containerType)){ type = MapType::QMultiHash; - names << "QMultiHash<%1,%2>"; + names << QStringLiteral("QMultiHash<%1,%2>"); }else if(Java::QtCore::QHash::isAssignableFrom(env, containerType) || Java::Runtime::Map::isAssignableFrom(env, containerType)){ type = MapType::QHash; - names << "QHash<%1,%2>"; + names << QStringLiteral("QHash<%1,%2>"); }else{ return qtjambi_register_metatype(env, containerType, false, false); } - QString keyType = QLatin1String(QMetaType::typeName(_instantiations[0])); - QString valueType = QLatin1String(QMetaType::typeName(_instantiations[1])); + QString keyType = QLatin1String(metaType1.name()); + QString valueType = QLatin1String(metaType2.name()); for(QString& name : names){ name = name.arg(keyType, EXCLUDE_GT_END(valueType)); } - jclass keyClass = qtjambi_class_for_metatype(env, _instantiations[0]); - jclass valueClass = qtjambi_class_for_metatype(env, _instantiations[1]); - bool isPointer1 = qtjambi_is_pointer_type(QMetaType(_instantiations[0])); + jclass keyClass = qtjambi_class_for_metatype(env, metaType1); + jclass valueClass = qtjambi_class_for_metatype(env, metaType2); + bool isPointer1 = qtjambi_is_pointer_type(metaType1); size_t size1 = 0; size_t align1 = 0; - bool isPointer2 = qtjambi_is_pointer_type(QMetaType(_instantiations[1])); + bool isPointer2 = qtjambi_is_pointer_type(metaType2); size_t size2 = 0; size_t align2 = 0; if(!isPointer1){ @@ -1896,8 +1606,8 @@ QTJAMBI_FUNCTION_PREFIX(Java_io_qt_internal_QtJambiInternal__1_1qt_1registerCont size1 = getValueSize(*t); align1 = getValueAlignment(*t); }else{ - if(_instantiations[0] != QMetaType::UnknownType){ - int sz = QMetaType::sizeOf(_instantiations[0]); + if(metaType1.id() != QMetaType::UnknownType){ + int sz = metaType1.sizeOf(); size1 = sz<0 ? 0 : size_t(sz); } } @@ -1911,8 +1621,8 @@ QTJAMBI_FUNCTION_PREFIX(Java_io_qt_internal_QtJambiInternal__1_1qt_1registerCont size2 = getValueSize(*t); align2 = getValueAlignment(*t); }else{ - if(_instantiations[1] != QMetaType::UnknownType){ - int sz = QMetaType::sizeOf(_instantiations[1]); + if(metaType2.id() != QMetaType::UnknownType){ + int sz = metaType2.sizeOf(); size2 = sz<0 ? 0 : size_t(sz); } } @@ -1922,12 +1632,10 @@ QTJAMBI_FUNCTION_PREFIX(Java_io_qt_internal_QtJambiInternal__1_1qt_1registerCont align2 = QtJambiTypeManager::getInternalAlignment(valueType); } - QMetaType metaType1(_instantiations[0]); - QMetaType metaType2(_instantiations[1]); containerAccess = qtjambi_create_container_access(env, type, metaType1, metaType2); if(!containerAccess){ - QHashFunction hashFunction1 = QtJambiTypeManager::findHashFunction(isPointer1, _instantiations[0]); - QHashFunction hashFunction2 = QtJambiTypeManager::findHashFunction(isPointer2, _instantiations[1]); + QHashFunction hashFunction1 = QtJambiTypeManager::findHashFunction(isPointer1, metaType1.id()); + QHashFunction hashFunction2 = QtJambiTypeManager::findHashFunction(isPointer2, metaType2.id()); InternalToExternalConverter memberConverter1 = QtJambiTypeManager::getInternalToExternalConverter( env, keyType, @@ -1996,11 +1704,30 @@ QTJAMBI_FUNCTION_PREFIX(Java_io_qt_internal_QtJambiInternal__1_1qt_1registerCont } } -int qtjambi_metaTypeId(JNIEnv *env, jclass clazz) +int qtjambiMetaTypeId(JNIEnv *env, jclass clazz, jobjectArray instantiations){ + return qtjambiMetaTypeId(env, clazz, instantiations, nullptr); +} + +int qtjambiMetaTypeId(JNIEnv *env, jclass clazz, jobjectArray instantiations, QString* templateName) { int id = QMetaType::UnknownType; if(clazz){ - if(Java::Runtime::Class::isArray(env, clazz)){ + if(jobject result = Java::QtJambi::QtJambiInternal::analyzeExpectedTemplateName(env, clazz, instantiations)){ + if(Java::Runtime::String::isInstanceOf(env, result)){ + QString templName = qtjambi_to_qstring(env, jstring(result)); +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) + id = QMetaType::type(qPrintable(templName)); +#else + id = QMetaType::fromName(templName.toUtf8()).id(); +#endif + if(templateName) + *templateName = templName; + }else if(Java::QtJambi::QtEnumerator::isInstanceOf(env, result)){ + id = Java::QtJambi::QtEnumerator::value(env, result); + } + } + if(id!=QMetaType::UnknownType){// ok so far + }else if(Java::Runtime::Class::isArray(env, clazz)){ jclass componentType = Java::Runtime::Class::getComponentType(env, clazz); if(Java::Runtime::Integer::isPrimitiveType(env, componentType)){ return registerMetaType("JIntArrayWrapper"); @@ -2019,7 +1746,7 @@ int qtjambi_metaTypeId(JNIEnv *env, jclass clazz) }else if(Java::Runtime::Float::isPrimitiveType(env, componentType)){ return registerMetaType("JFloatArrayWrapper"); }else{ - return registerMetaType("JObjectWrapper"); + return registerMetaType("JObjectArrayWrapper"); } }else if(Java::Runtime::Integer::isSameClass(env, clazz) || Java::Runtime::Integer::isPrimitiveType(env, clazz)){ return QMetaType::Int; @@ -2054,24 +1781,30 @@ int qtjambi_metaTypeId(JNIEnv *env, jclass clazz) break; default: break; } +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) id = QMetaType::type(qtType); +#else + id = QMetaType::fromName(qtType).id(); +#endif } } if(id==QMetaType::UnknownType){ - id = QMetaType::type(qPrintable(javaClassName.replace("/", "::"))); - } - if(id==QMetaType::UnknownType){ - if(Java::Runtime::Enum::isAssignableFrom(env, clazz)){ - return registerMetaType("JEnumWrapper"); - }else if(Java::QtJambi::QFlags::isAssignableFrom(env, clazz)){ - return registerMetaType("JObjectWrapper"); - }else if(Java::Runtime::Collection::isAssignableFrom(env, clazz)){ - return registerMetaType("JCollectionWrapper"); - }else if(Java::Runtime::Map::isAssignableFrom(env, clazz)){ - return registerMetaType("JMapWrapper"); - }else if(Java::Runtime::Iterator::isAssignableFrom(env, clazz)){ - return registerMetaType("JIteratorWrapper"); +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) + id = QMetaType::type(qPrintable(javaClassName.replace("/", "::").replace("$", "::"))); +#else + id = QMetaType::fromName(javaClassName.toUtf8().replace("/", "::").replace("$", "::")).id(); +#endif + if(id==QMetaType::UnknownType + && !Java::Runtime::Cloneable::isAssignableFrom(env, clazz) + && !Java::Runtime::Enum::isAssignableFrom(env, clazz) + && !Java::QtJambi::QFlags::isAssignableFrom(env, clazz)){ +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) + id = QMetaType::type(qPrintable(javaClassName.replace("/", "::").replace("$", "::").append("*"))); +#else + id = QMetaType::fromName(javaClassName.toUtf8().replace("/", "::").replace("$", "::").append("*")).id(); +#endif } + } } }else{ @@ -2099,18 +1832,6 @@ QTJAMBI_FUNCTION_PREFIX(Java_io_qt_internal_QtJambiInternal_findMetaType) } } -extern "C" Q_DECL_EXPORT int JNICALL -QTJAMBI_FUNCTION_PREFIX(Java_io_qt_internal_QtJambiInternal__1_1qt_1metaTypeId) -(JNIEnv *env, jclass, jclass clazz) -{ - try{ - return qtjambi_metaTypeId(env, clazz); - }catch(const JavaException& exn){ - exn.raiseInJava(env); - return 0; - } -} - const std::type_info* getTypeByMetaType(int metaType); extern "C" Q_DECL_EXPORT jboolean JNICALL @@ -3953,7 +3674,7 @@ extern "C" Q_DECL_EXPORT void JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_interna return pointer->data(); } , qHash(className) * 31 + qHash(json.value("Keys"))); - registerPlugin(instanceFunction, className.replace(".", "::"), json, iids); + registerPlugin(instanceFunction, className.replace(".", "::").replace("$", "::"), json, iids); }catch(const JavaException& exn){ exn.raiseInJava(__jni_env); } @@ -3993,7 +3714,7 @@ extern "C" Q_DECL_EXPORT void JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_interna return nullptr; } , qHash(className) * 31 + qHash(json.value("Keys"))); - registerPlugin(instanceFunction, className.replace(".", "::"), json, iids); + registerPlugin(instanceFunction, className.replace(".", "::").replace("$", "::"), json, iids); } }catch(const JavaException& exn){ exn.raiseInJava(__jni_env); @@ -4052,7 +3773,7 @@ extern "C" Q_DECL_EXPORT void JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_interna QtPluginInstanceFunction instanceFunction = qtjambi_function_pointer<16,QObject*()>( Functor(__jni_env, classSupplier), qHash(className) * 31 + qHash(metaData.value("Keys"))); - registerPlugin(instanceFunction, className.replace(".", "::"), metaData, {iid}, pluginInfo); + registerPlugin(instanceFunction, className.replace(".", "::").replace("$", "::"), metaData, {iid}, pluginInfo); }catch(const JavaException& exn){ exn.raiseInJava(__jni_env); } @@ -4369,7 +4090,7 @@ void convertArgumentList(QVector>& cleaners, QVector if(!argMetaType->isValid()){ argMetaType = nullptr; }else - argClassType = qtjambi_class_for_metatype(__jni_env, argMetaType->id()); + argClassType = qtjambi_class_for_metatype(__jni_env, *argMetaType); } }else{ arg = Java::JNA::Pointer::newInstance(__jni_env, 0); @@ -4574,7 +4295,7 @@ void convertArgumentList(QVector>& cleaners, QVector argClassType = __jni_env->GetObjectClass(entry); argMetaType = nullptr; }else{ - argClassType = qtjambi_class_for_metatype(__jni_env, argMetaType->id()); + argClassType = qtjambi_class_for_metatype(__jni_env, *argMetaType); break; } } @@ -4690,7 +4411,7 @@ void convertArgumentList(QVector>& cleaners, QVector argMetaType->construct(ptr, nullptr); if(!qtjambi_convert_to_native(__jni_env, *typeId, entry, ptr)){ if(Java::Runtime::Map::isInstanceOf(__jni_env, entry) || Java::Runtime::Collection::isInstanceOf(__jni_env, entry)){ - QVariant variant = qtjambi_to_qvariant(__jni_env, entry); + QVariant variant = qtjambi_convert_checked_object_to_qvariant(__jni_env, entry, *argMetaType); #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) if(variant.metaType()==*argMetaType || variant.convert(*argMetaType)){ #else @@ -4801,7 +4522,7 @@ void convertArgumentList(QVector>& cleaners, QVector argMetaType->construct(ptr, nullptr); if(!typeId || !qtjambi_convert_to_native(__jni_env, *typeId, entry, ptr)){ if(Java::Runtime::Map::isInstanceOf(__jni_env, entry) || Java::Runtime::Collection::isInstanceOf(__jni_env, entry)){ - QVariant variant = qtjambi_to_qvariant(__jni_env, entry); + QVariant variant = qtjambi_convert_checked_object_to_qvariant(__jni_env, entry, *argMetaType); #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) if(variant.metaType()==*argMetaType || variant.convert(*argMetaType)){ #else @@ -4954,7 +4675,7 @@ void convertArgumentList(QVector>& cleaners, QVector ptr = argMetaType->create(nullptr); if(!qtjambi_convert_to_native(__jni_env, *typeId, val, ptr)){ if(Java::Runtime::Map::isInstanceOf(__jni_env, val) || Java::Runtime::Collection::isInstanceOf(__jni_env, val)){ - QVariant variant = qtjambi_to_qvariant(__jni_env, val); + QVariant variant = qtjambi_convert_checked_object_to_qvariant(__jni_env, val, *argMetaType); #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) if(variant.metaType()==*argMetaType || variant.convert(*argMetaType)){ #else @@ -5092,7 +4813,7 @@ void convertArgumentList(QVector>& cleaners, QVector ptr = argMetaType->create(nullptr); if(!typeId || !qtjambi_convert_to_native(__jni_env, *typeId, val, ptr)){ if(Java::Runtime::Map::isInstanceOf(__jni_env, val) || Java::Runtime::Collection::isInstanceOf(__jni_env, val)){ - QVariant variant = qtjambi_to_qvariant(__jni_env, val); + QVariant variant = qtjambi_convert_checked_object_to_qvariant(__jni_env, val, *argMetaType); #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) if(variant.metaType()==*argMetaType || variant.convert(*argMetaType)){ #else @@ -5998,7 +5719,7 @@ jobject qtjambi_function_pointer_convert_return(JNIEnv * __jni_env, jobject retu ptr = returnMetaType->create(nullptr); if(!qtjambi_convert_to_native(__jni_env, *returnTypeId, result, ptr)){ if(Java::Runtime::Map::isInstanceOf(__jni_env, result) || Java::Runtime::Collection::isInstanceOf(__jni_env, result)){ - QVariant variant = qtjambi_to_qvariant(__jni_env, result); + QVariant variant = qtjambi_convert_checked_object_to_qvariant(__jni_env, result, *returnMetaType); #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) if(variant.metaType()==*returnMetaType || variant.convert(*returnMetaType)){ #else @@ -6101,7 +5822,7 @@ jobject qtjambi_function_pointer_convert_return(JNIEnv * __jni_env, jobject retu ptr = returnMetaType->create(nullptr); if(!returnTypeId || !qtjambi_convert_to_native(__jni_env, *returnTypeId, result, ptr)){ if(Java::Runtime::Map::isInstanceOf(__jni_env, result) || Java::Runtime::Collection::isInstanceOf(__jni_env, result)){ - QVariant variant = qtjambi_to_qvariant(__jni_env, result); + QVariant variant = qtjambi_convert_checked_object_to_qvariant(__jni_env, result, *returnMetaType); #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) if(variant.metaType()==*returnMetaType || variant.convert(*returnMetaType)){ #else @@ -6728,7 +6449,7 @@ void qtjambi_function_pointer_convert_parameters(JNIEnv * __jni_env, jobjectArra Java::QtJambi::QUnsuccessfulInvocationException::throwNew(__jni_env, QString("Type %1 not supported.").arg(qtjambi_object_class_name(__jni_env, oldValue).replace(QLatin1Char('$'), QLatin1Char('.'))) QTJAMBI_STACKTRACEINFO ); } }else{ - QVariant variant = qtjambi_to_qvariant(__jni_env, oldValue); + QVariant variant = qtjambi_convert_checked_object_to_qvariant(__jni_env, oldValue, *argMetaType); #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) if(variant.metaType()==*argMetaType || variant.convert(*argMetaType)){ #else diff --git a/src/cpp/qtjambi/qtjambi_jobjectwrapper.cpp b/src/cpp/qtjambi/qtjambi_jobjectwrapper.cpp index fa9aa5b5..82999bce 100644 --- a/src/cpp/qtjambi/qtjambi_jobjectwrapper.cpp +++ b/src/cpp/qtjambi/qtjambi_jobjectwrapper.cpp @@ -1482,4 +1482,3 @@ void jobjectwrapper_load(QDataStream &stream, void *_jObjectWrapper) } } } - diff --git a/src/cpp/qtjambi/qtjambi_jobjectwrapper.h b/src/cpp/qtjambi/qtjambi_jobjectwrapper.h index 42d1a336..69550152 100644 --- a/src/cpp/qtjambi/qtjambi_jobjectwrapper.h +++ b/src/cpp/qtjambi/qtjambi_jobjectwrapper.h @@ -47,6 +47,14 @@ inline bool operator < (const QVariant& v1, const QVariant& v2){ } return false; } + +namespace QtJambi{ + QTJAMBI_EXPORT QMetaObject::Connection connect(const QObject *sender, const char *signal, + const QObject *receiver, const char *member, Qt::ConnectionType = Qt::AutoConnection); + QTJAMBI_EXPORT QMetaObject::Connection connect(const QObject *sender, const QMetaMethod &signal, + const QObject *receiver, const QMetaMethod &method, + Qt::ConnectionType type = Qt::AutoConnection); +} #endif class JObjectWrapperData : public QSharedData{ diff --git a/src/cpp/qtjambi/qtjambi_qml.h b/src/cpp/qtjambi/qtjambi_qml.h index 9fa86090..3c2328f6 100644 --- a/src/cpp/qtjambi/qtjambi_qml.h +++ b/src/cpp/qtjambi/qtjambi_qml.h @@ -23,6 +23,8 @@ QTJAMBI_EXPORT jmethodID resolveMethod(JNIEnv *env, const char *methodName, cons #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) QTJAMBI_EXPORT void registerJavaClassForCustomMetaType(int metaType, const QByteArray& javaClass); #else +QTJAMBI_EXPORT int qtjambi_register_metatype(JNIEnv *env, jclass clazz, const QString& javaClassName); +QTJAMBI_EXPORT int qtjambi_register_list_metatype(JNIEnv *env, const QMetaType& elementType); QTJAMBI_EXPORT int registerQmlMetaType(const QByteArray& javaClass, const QByteArray& typeName, QtPrivate::QMetaTypeInterface::DefaultCtrFn defaultCtr, diff --git a/src/cpp/qtjambi/qtjambi_registry.cpp b/src/cpp/qtjambi/qtjambi_registry.cpp index 835356c7..0067e485 100644 --- a/src/cpp/qtjambi/qtjambi_registry.cpp +++ b/src/cpp/qtjambi/qtjambi_registry.cpp @@ -77,10 +77,18 @@ typedef QSet HashSet; Q_GLOBAL_STATIC(HashSet, gFunctionalHash) typedef QMap DeleterHash; Q_GLOBAL_STATIC(DeleterHash, gDeleterHash) +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) +typedef QHash MetaTypeJavaTypeHash; +typedef QMultiHash JavaTypeMetaTypesHash; +typedef QSet JObjectWrappedMetaTypeHash; +#else typedef QHash MetaTypeJavaTypeHash; -Q_GLOBAL_STATIC(MetaTypeJavaTypeHash, gMetaTypeJavaTypeHash) typedef QMultiHash JavaTypeMetaTypesHash; +typedef QSet JObjectWrappedMetaTypeHash; +#endif +Q_GLOBAL_STATIC(MetaTypeJavaTypeHash, gMetaTypeJavaTypeHash) Q_GLOBAL_STATIC(JavaTypeMetaTypesHash, gJavaTypeMetaTypesHash) +Q_GLOBAL_STATIC(JObjectWrappedMetaTypeHash, gJObjectWrappedMetaTypes) typedef QMap OwnerFunctionHash; Q_GLOBAL_STATIC(OwnerFunctionHash, gOwnerFunctionHash) @@ -748,8 +756,6 @@ void registerMetaTypeID(const std::type_info& typeId, int qtMetaType) #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) -void registerJavaClassForCustomMetaType(const QMetaType& metaType, const QByteArray& javaClass); - const char* registerMetaTypeName(const QByteArray& typeName){ QWriteLocker locker(gLock()); Q_UNUSED(locker) @@ -1807,21 +1813,27 @@ void registerMediaControlInfo(const std::type_info& typeId, const char *media_co gMediaControlIIDClassHash->insert(media_control_iid, &typeId); } +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) void registerJavaClassForCustomMetaType(int metaType, const QByteArray& javaClass){ + return registerJavaClassForCustomMetaType(metaType, javaClass, false); +} + +void registerJavaClassForCustomMetaType(int metaType, const QByteArray& javaClass, bool isJObjectWrapped){ QWriteLocker locker(gLock()); Q_UNUSED(locker) gMetaTypeJavaTypeHash->insert(metaType, javaClass); gJavaTypeMetaTypesHash->insert(javaClass, metaType); + if(isJObjectWrapped) + gJObjectWrappedMetaTypes->insert(metaType); } -void registerJavaClassForCustomMetaType(const QMetaType& metaType, const QByteArray& javaClass){ - registerJavaClassForCustomMetaType(metaType.id(), javaClass); +void registerJavaClassForCustomMetaType(const QMetaType& metaType, const QByteArray& javaClass, bool isJObjectWrapped){ + registerJavaClassForCustomMetaType(metaType.id(), javaClass, isJObjectWrapped); } -QList registeredCustomMetaTypesForJavaClass(const QByteArray& javaClass){ +bool isJObjectWrappedMetaType(const QMetaType& metaType){ QReadLocker locker(gLock()); - Q_UNUSED(locker) - return gJavaTypeMetaTypesHash->values(javaClass); + return gJObjectWrappedMetaTypes->contains(metaType.id()); } QByteArray registeredJavaClassForCustomMetaType(int metaType){ @@ -1834,6 +1846,68 @@ QByteArray registeredJavaClassForCustomMetaType(const QMetaType& metaType){ return registeredJavaClassForCustomMetaType(metaType.id()); } +QList registeredCustomMetaTypesForJavaClass(const QByteArray& javaClass){ + QReadLocker locker(gLock()); + Q_UNUSED(locker) + return gJavaTypeMetaTypesHash->values(javaClass); +} +#else +void registerJavaClassForCustomMetaType(QMetaType metaType, const QByteArray& javaClass, bool isJObjectWrapped){ + const QtPrivate::QMetaTypeInterface * iface = metaType.iface(); + QWriteLocker locker(gLock()); + Q_UNUSED(locker) + gMetaTypeJavaTypeHash->insert(iface, javaClass); + gJavaTypeMetaTypesHash->insert(javaClass, metaType); + if(isJObjectWrapped) + gJObjectWrappedMetaTypes->insert(iface); +} + +bool isJObjectWrappedMetaType(QMetaType metaType){ + QReadLocker locker(gLock()); + return gJObjectWrappedMetaTypes->contains(metaType.iface()); +} + +QByteArray registeredJavaClassForCustomMetaType(const QtPrivate::QMetaTypeInterface * metaType){ + QReadLocker locker(gLock()); + Q_UNUSED(locker) + return gMetaTypeJavaTypeHash->value(metaType); +} + +QByteArray registeredJavaClassForCustomMetaType(QMetaType metaType){ + return registeredJavaClassForCustomMetaType(metaType.iface()); +} + +const QMetaObject *findWrappersMetaObject(const QtPrivate::QMetaTypeInterface *iface){ + if(JNIEnv* env = qtjambi_current_environment()){ + QTJAMBI_JNI_LOCAL_FRAME(env, 200) + try { + QByteArray className; + { + QReadLocker locker(gLock()); + className = (*gMetaTypeJavaTypeHash)[iface]; + } + if(!className.isEmpty()){ + jclass clazz = resolveClass(env, className); + const QMetaObject* meta_object = qtjambi_metaobject_for_class(env, clazz); + if(!meta_object){ + const_cast(iface)->flags = QtPrivate::QMetaTypeTypeFlags::Flags | QMetaType::PointerToGadget; + registerMetaObjectByMetaTypeInterface(iface, meta_object); + } + const_cast(iface)->metaObjectFn = &metaobjectByMetaTypeInterface; + } + }catch(const JavaException&){ + } + } + return nullptr; +} + +QList registeredCustomMetaTypesForJavaClass(const QByteArray& javaClass){ + QReadLocker locker(gLock()); + Q_UNUSED(locker) + return gJavaTypeMetaTypesHash->values(javaClass); +} +#endif + QList getInterfaceIIDs(JNIEnv *env, jclass javaType){ QList iids; QString className; @@ -2094,14 +2168,17 @@ jclass findClass(JNIEnv *env, const char *qualifiedName, jobject classLoader = n } if (returned == nullptr && exception) #endif + { #ifdef QTJAMBI_STACKTRACE - if(qtClassName=="io.qt.internal.QtJambiInternal") - JavaException(env, exception).raise(); - else - JavaException(env, exception).raise( QTJAMBI_STACKTRACEINFO_ENV(env) ); + if(qtClassName=="io.qt.internal.QtJambiInternal"){ + JavaException(env, exception).raise(); + }else{ + JavaException(env, exception).raise( QTJAMBI_STACKTRACEINFO_ENV(env) ); + } #else JavaException(env, exception).raise(); #endif + } } } } @@ -2558,3 +2635,1412 @@ bool JObjectWrapperConverter::convert(const AbstractConverterFunction *converter return true; } #endif + + +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + +struct JObjectValueWrapperPrivate{ + jclass clazz = nullptr; + jmethodID constructor = 0; + jmethodID clone = 0; + jmethodID writeTo = 0; + jmethodID readFrom = 0; + bool isSerializable = false; + QByteArray name; + const QMetaObject * metaObject = reinterpret_cast(quintptr(std::numeric_limits::max())); + static constexpr auto metaObjectFn = &JObjectValueWrapper::metaObject; + static constexpr auto defaultCtr = &JObjectValueWrapper::defaultCtr; + static constexpr auto copyCtr = &JObjectValueWrapper::copyCtr; + static constexpr auto moveCtr = &JObjectValueWrapper::moveCtr; + static constexpr auto dtor = &JObjectValueWrapper::dtor; + static constexpr auto equals = &JObjectValueWrapper::equals; + static constexpr auto lessThan = &JObjectValueWrapper::lessThan; + static constexpr auto debugStream = &JObjectValueWrapper::debugStream; + static constexpr auto dataStreamOut = &JObjectValueWrapper::dataStreamOut; + static constexpr auto dataStreamIn = &JObjectValueWrapper::dataStreamIn; + static constexpr auto serializableDataStreamOut = &JObjectValueWrapper::serializableDataStreamOut; + static constexpr auto serializableDataStreamIn = &JObjectValueWrapper::serializableDataStreamIn; +}; + +JObjectWrapper qtjambiCreateObject(const JObjectValueWrapperPrivate* methods){ + if(methods){ + if(JNIEnv* env = qtjambi_current_environment()){ + QTJAMBI_JNI_LOCAL_FRAME(env, 200) + try{ + return JObjectWrapper(env, env->NewObject(methods->clazz, methods->constructor)); + }catch(const JavaException& exn){ + exn.report(env); + } + } + } + return JObjectWrapper(); +} + +JObjectWrapper qtjambiCopyObject(JNIEnv* env, const JObjectValueWrapperPrivate* methods, const JObjectWrapper& other){ + if(methods && env){ + try{ + return JObjectWrapper(env, env->CallObjectMethod(other.object(), methods->clone)); + }catch(const JavaException& exn){ + exn.report(env); + } + } + return JObjectWrapper(other); +} + +JObjectWrapper qtjambiCopyObject(const JObjectValueWrapperPrivate* methods, const JObjectWrapper& other){ + if(JNIEnv* env = qtjambi_current_environment()){ + QTJAMBI_JNI_LOCAL_FRAME(env, 200) + return qtjambiCopyObject(env, methods, other); + } + return JObjectWrapper(other); +} + +typedef QMap ClassMetaTypeInterfaceHash; +Q_GLOBAL_STATIC(ClassMetaTypeInterfaceHash, gClassMetaTypeInterfaces) +typedef QMap MetaTypeInterfacesHash; +Q_GLOBAL_STATIC(MetaTypeInterfacesHash, gMetaTypeInterfaces) +typedef QMap MetaTypeEnumClassesHash; +Q_GLOBAL_STATIC(MetaTypeEnumClassesHash, gMetaTypeEnumClasses) + +bool JObjectValueWrapper::isValueType(QMetaType metaType){ + const JObjectValueWrapperPrivate* methods{nullptr}; + { + QReadLocker locker(gLock()); + if(gMetaTypeInterfaces->contains(metaType.iface())) + methods = &(*gMetaTypeInterfaces)[metaType.iface()]; + } + return methods; +} + +bool JObjectValueWrapper::hasCustomDebugStreamOperator(QMetaType metaType){ + return metaType.iface()->debugStream!=JObjectValueWrapper::debugStream; +} + +JObjectValueWrapper JObjectValueWrapper::create(JNIEnv* env, jobject object, QMetaType metaType){ + const JObjectValueWrapperPrivate* methods{nullptr}; + { + QReadLocker locker(gLock()); + if(gMetaTypeInterfaces->contains(metaType.iface())) + methods = &(*gMetaTypeInterfaces)[metaType.iface()]; + } + if(methods){ + return JObjectValueWrapper(env, env->IsSameObject(object, nullptr) ? nullptr : env->CallObjectMethod(object, methods->clone), methods); + } + return {}; +} + +JObjectValueWrapper::JObjectValueWrapper() : JObjectWrapper(), p(nullptr) {} +JObjectValueWrapper::JObjectValueWrapper(const JObjectValueWrapperPrivate* _p) + : JObjectWrapper(qtjambiCreateObject(_p)), + p(_p){} + +JObjectValueWrapper::JObjectValueWrapper(JNIEnv* env, jobject object, const JObjectValueWrapperPrivate* _p) + : JObjectWrapper(env, object), + p(_p){} + +JObjectValueWrapper::JObjectValueWrapper(JObjectWrapper&& object, const JObjectValueWrapperPrivate* _p) + : JObjectWrapper(std::move(object)), + p(_p){} + + +JObjectValueWrapper::JObjectValueWrapper(const JObjectValueWrapper& other) + : JObjectWrapper(qtjambiCopyObject(other.p, other)), + p(other.p){} + +JObjectValueWrapper::JObjectValueWrapper(JObjectValueWrapper&& other) + : JObjectWrapper(std::move(other)), + p(other.p){} + +JObjectValueWrapper::~JObjectValueWrapper() {} + +jobject JObjectValueWrapper::value(JNIEnv* env) const{ + return env->CallObjectMethod(object(), p->clone); +} + +JObjectValueWrapper& JObjectValueWrapper::operator=(const JObjectValueWrapper &wrapper){ + JObjectWrapper::operator=(qtjambiCopyObject(wrapper.p, wrapper)); + p = wrapper.p; + return *this; +} + +JObjectValueWrapper& JObjectValueWrapper::operator=(JObjectValueWrapper &&wrapper){ + JObjectWrapper::operator=(std::move(wrapper)); + p = wrapper.p; + return *this; +} + +JObjectValueWrapper& JObjectValueWrapper::operator=(const JObjectWrapper &wrapper){ + if(const JObjectValueWrapper* _wrapper = dynamic_cast(&wrapper)){ + return operator=(*_wrapper); + }else if(p){ + if(JNIEnv* env = qtjambi_current_environment()){ + QTJAMBI_JNI_LOCAL_FRAME(env, 200) + if(env->IsInstanceOf(wrapper.object(), p->clazz)){ + return operator=(JObjectValueWrapper(qtjambiCopyObject(env, p, wrapper.object()), p)); + } + } + } + return *this; +} + +JObjectValueWrapper& JObjectValueWrapper::operator=(JObjectWrapper &&wrapper){ + if(JObjectValueWrapper* _wrapper = dynamic_cast(&wrapper)){ + return operator=(std::move(*_wrapper)); + }else{ + if(JNIEnv* env = qtjambi_current_environment()){ + QTJAMBI_JNI_LOCAL_FRAME(env, 200) + if(env->IsInstanceOf(wrapper.object(), p->clazz)){ + return operator=(JObjectValueWrapper(std::move(wrapper), p)); + } + } + } + return *this; +} + +JObjectValueWrapper& JObjectValueWrapper::operator=(jobject obj){ + if(p){ + if(JNIEnv* env = qtjambi_current_environment()){ + QTJAMBI_JNI_LOCAL_FRAME(env, 200) + if(env->IsInstanceOf(obj, p->clazz)){ + JObjectWrapper::operator=(obj); + } + } + } + return *this; +} + +bool JObjectValueWrapper::operator==(const JObjectValueWrapper &other) const{ + return p==other.p && JObjectWrapper::operator==(other); +} + +bool JObjectValueWrapper::operator<(const JObjectValueWrapper &other) const{ + return p==other.p && JObjectWrapper::operator<(other); + +} + +bool JObjectValueWrapper::isNull()const{return !p;} + +void JObjectValueWrapper::writeTo(QDataStream &d)const{ + if(JNIEnv* env = qtjambi_current_environment()){ + QTJAMBI_JNI_LOCAL_FRAME(env, 200) + try{ + jobject _d = qtjambi_from_object(env, &d, false); + QTJAMBI_INVALIDATE_AFTER_USE(env, _d); + env->CallVoidMethod(object(), p->writeTo, _d); + }catch(const JavaException& exn){ + exn.report(env); + } + } +} +void JObjectValueWrapper::readFrom(QDataStream &d){ + if(JNIEnv* env = qtjambi_current_environment()){ + QTJAMBI_JNI_LOCAL_FRAME(env, 200) + try{ + jobject _d = qtjambi_from_object(env, &d, false); + QTJAMBI_INVALIDATE_AFTER_USE(env, _d); + env->CallVoidMethod(object(), p->readFrom, _d); + }catch(const JavaException& exn){ + exn.report(env); + } + } +} + +void JObjectValueWrapper::serializeTo(QDataStream &d)const{ + if(JNIEnv* env = qtjambi_current_environment()){ + QTJAMBI_JNI_LOCAL_FRAME(env, 200) + try{ + jobject _d = qtjambi_from_object(env, &d, false); + QTJAMBI_INVALIDATE_AFTER_USE(env, _d); + Java::QtJambi::QtJambiInternal::writeSerializableJavaObject(env, _d, object()); + }catch(const JavaException& exn){ + exn.report(env); + } + } +} +void JObjectValueWrapper::serializeFrom(QDataStream &d){ + if(JNIEnv* env = qtjambi_current_environment()){ + QTJAMBI_JNI_LOCAL_FRAME(env, 200) + try{ + jobject _d = qtjambi_from_object(env, &d, false); + QTJAMBI_INVALIDATE_AFTER_USE(env, _d); + jobject newValue = Java::QtJambi::QtJambiInternal::readSerializableJavaObject(env, _d); + *this = JObjectValueWrapper(env, newValue, p); + }catch(const JavaException& exn){ + exn.report(env); + } + } +} + +const QMetaObject *JObjectValueWrapper::metaObject(const QtPrivate::QMetaTypeInterface *iface){ + const JObjectValueWrapperPrivate* methods{nullptr}; + { + QReadLocker locker(gLock()); + if(gMetaTypeInterfaces->contains(iface)) + methods = &(*gMetaTypeInterfaces)[iface]; + } + if(methods){ + if(quintptr(methods->metaObject) == std::numeric_limits::max()){ + if(JNIEnv* env = qtjambi_current_environment()){ + QTJAMBI_JNI_LOCAL_FRAME(env, 200) + const_cast(methods)->metaObject = qtjambi_metaobject_for_class(env, methods->clazz); + if(!methods->metaObject){ + const_cast(iface)->flags &= ~QMetaType::IsGadget; + const_cast(iface)->flags &= ~QMetaType::PointerToGadget; + } + }else return nullptr; + } + return methods->metaObject; + } + return nullptr; +} + +void JObjectValueWrapper::defaultCtr(const QtPrivate::QMetaTypeInterface *iface, void *target){ + const JObjectValueWrapperPrivate* methods{nullptr}; + { + QReadLocker locker(gLock()); + if(gMetaTypeInterfaces->contains(iface)) + methods = &(*gMetaTypeInterfaces)[iface]; + } + new (target) JObjectValueWrapper(qtjambiCreateObject(methods), methods); +} + +void JObjectValueWrapper::copyCtr(const QtPrivate::QMetaTypeInterface *, void *target, const void *other){ + const JObjectValueWrapper* _other = reinterpret_cast(other); + new (target) JObjectValueWrapper(*_other); +} + +void JObjectValueWrapper::moveCtr(const QtPrivate::QMetaTypeInterface *, void *target, void *other){ + JObjectValueWrapper* _other = reinterpret_cast(other); + new (target) JObjectValueWrapper(std::move(*_other)); +} + +void JObjectValueWrapper::dtor(const QtPrivate::QMetaTypeInterface *, void *target){ + reinterpret_cast(target)->~JObjectValueWrapper(); +} + +bool JObjectValueWrapper::equals(const QtPrivate::QMetaTypeInterface *iface, const void *value1, const void *value2){ + const JObjectValueWrapper* _value1 = reinterpret_cast(value1); + const JObjectValueWrapper* _value2 = reinterpret_cast(value2); + if(_value1->isNull() || _value2->isNull()){ + const JObjectValueWrapperPrivate* methods{nullptr}; + { + QReadLocker locker(gLock()); + if(gMetaTypeInterfaces->contains(iface)) + methods = &(*gMetaTypeInterfaces)[iface]; + } + if(methods){ + if(_value1->isNull()) + *const_cast(_value1) = JObjectValueWrapper(methods); + if(_value2->isNull()) + *const_cast(_value2) = JObjectValueWrapper(methods); + }else return false; + } + try{ + return *_value1 == *_value2; + }catch(const JavaException& exn){ + exn.report(qtjambi_current_environment()); + return false; + } +} + +bool JObjectValueWrapper::lessThan(const QtPrivate::QMetaTypeInterface *iface, const void *value1, const void *value2){ + const JObjectValueWrapper* _value1 = reinterpret_cast(value1); + const JObjectValueWrapper* _value2 = reinterpret_cast(value2); + if(_value1->isNull() || _value2->isNull()){ + const JObjectValueWrapperPrivate* methods{nullptr}; + { + QReadLocker locker(gLock()); + if(gMetaTypeInterfaces->contains(iface)) + methods = &(*gMetaTypeInterfaces)[iface]; + } + if(methods){ + if(_value1->isNull()) + *const_cast(_value1) = JObjectValueWrapper(methods); + if(_value2->isNull()) + *const_cast(_value2) = JObjectValueWrapper(methods); + }else return false; + } + try{ + return *_value1 < *_value2; + }catch(const JavaException& exn){ + exn.report(qtjambi_current_environment()); + return false; + } +} + +void JObjectValueWrapper::debugStream(const QtPrivate::QMetaTypeInterface *iface, QDebug &d, const void *value){ + const JObjectValueWrapper* _value = reinterpret_cast(value); + if(_value->isNull()){ + const JObjectValueWrapperPrivate* methods{nullptr}; + { + QReadLocker locker(gLock()); + if(gMetaTypeInterfaces->contains(iface)) + methods = &(*gMetaTypeInterfaces)[iface]; + } + if(methods) + *const_cast(_value) = JObjectValueWrapper(methods); + else return; + } + try{ + bool ok = false; + QString strg = _value->toString(&ok); + if(ok) + d << strg; + }catch(const JavaException& exn){ + exn.report(qtjambi_current_environment()); + } +} + +void JObjectValueWrapper::dataStreamOut(const QtPrivate::QMetaTypeInterface *iface, QDataStream &d, const void *value){ + try{ + const JObjectValueWrapper* _value = reinterpret_cast(value); + if(_value->isNull()){ + const JObjectValueWrapperPrivate* methods{nullptr}; + { + QReadLocker locker(gLock()); + if(gMetaTypeInterfaces->contains(iface)) + methods = &(*gMetaTypeInterfaces)[iface]; + } + if(methods) + *const_cast(_value) = JObjectValueWrapper(methods); + else return; + } + _value->writeTo(d); + }catch(const JavaException& exn){ + exn.report(qtjambi_current_environment()); + } +} + +void JObjectValueWrapper::dataStreamIn(const QtPrivate::QMetaTypeInterface *iface, QDataStream &d, void *value){ + try{ + JObjectValueWrapper* _value = reinterpret_cast(value); + if(_value->isNull()){ + const JObjectValueWrapperPrivate* methods{nullptr}; + { + QReadLocker locker(gLock()); + if(gMetaTypeInterfaces->contains(iface)) + methods = &(*gMetaTypeInterfaces)[iface]; + } + if(methods) + *_value = JObjectValueWrapper(methods); + else return; + } + _value->readFrom(d); + }catch(const JavaException& exn){ + exn.report(qtjambi_current_environment()); + } +} + +void JObjectValueWrapper::serializableDataStreamOut(const QtPrivate::QMetaTypeInterface *iface, QDataStream &d, const void *value){ + try{ + const JObjectValueWrapper* _value = reinterpret_cast(value); + if(_value->isNull()){ + const JObjectValueWrapperPrivate* methods{nullptr}; + { + QReadLocker locker(gLock()); + if(gMetaTypeInterfaces->contains(iface)) + methods = &(*gMetaTypeInterfaces)[iface]; + } + if(methods) + *const_cast(_value) = JObjectValueWrapper(methods); + else return; + } + _value->serializeTo(d); + }catch(const JavaException& exn){ + exn.report(qtjambi_current_environment()); + } +} + +void JObjectValueWrapper::serializableDataStreamIn(const QtPrivate::QMetaTypeInterface *iface, QDataStream &d, void *value){ + try{ + JObjectValueWrapper* _value = reinterpret_cast(value); + if(_value->isNull()){ + const JObjectValueWrapperPrivate* methods{nullptr}; + { + QReadLocker locker(gLock()); + if(gMetaTypeInterfaces->contains(iface)) + methods = &(*gMetaTypeInterfaces)[iface]; + } + if(methods) + *_value = JObjectValueWrapper(methods); + else return; + } + _value->serializeFrom(d); + }catch(const JavaException& exn){ + exn.report(qtjambi_current_environment()); + } +} + +void registerConverterVariant(JNIEnv *env, const QMetaType& metaType, const QString& qtName, const QString& fullJavaName, jclass clazz); + +int qtjambi_register_list_metatype(JNIEnv *env, const QMetaType& elementType){ + int result = 0; + AbstractListAccess* listAccess = dynamic_cast(qtjambi_create_container_access(env, ContainerType::QList, elementType)); + if(!listAccess){ + QHashFunction hashFunction; + InternalToExternalConverter internalToExternalConverter; + ExternalToInternalConverter externalToInternalConverter; + const JObjectValueWrapperPrivate* methods{nullptr}; + { + const QtPrivate::QMetaTypeInterface *iface = QMetaType(elementType).iface(); + QReadLocker locker(gLock()); + if(gMetaTypeInterfaces->contains(iface)) + methods = &(*gMetaTypeInterfaces)[iface]; + } + if(methods){ + hashFunction = [](const void* ptr, hash_type seed)->hash_type{ + if(JNIEnv* env = qtjambi_current_environment()){ + QTJAMBI_JNI_LOCAL_FRAME(env, 200) + try{ + seed = qHash(Java::Runtime::Object::hashCode(env, reinterpret_cast(ptr)->object()), seed); + }catch(const JavaException& exn){ + exn.report(env); + } + } + return seed; + }; + internalToExternalConverter = QtJambiTypeManager::getInternalToExternalConverter(env, QLatin1String(elementType.name()), elementType, methods->clazz); + externalToInternalConverter = QtJambiTypeManager::getExternalToInternalConverter(env, methods->clazz, QLatin1String(elementType.name()), elementType); + }else{ + const std::type_info* typeId; + { + QReadLocker locker(gLock()); + typeId = gMetaTypeIDHash->value(elementType.id()); + } + if(typeId) + hashFunction = registeredHashFunction(*typeId); + if(jclass clazz = qtjambi_class_for_metatype(env, elementType)){ + internalToExternalConverter = QtJambiTypeManager::getInternalToExternalConverter(env, QLatin1String(elementType.name()), elementType, clazz); + externalToInternalConverter = QtJambiTypeManager::getExternalToInternalConverter(env, clazz, QLatin1String(elementType.name()), elementType); + } + } + listAccess = dynamic_cast(qtjambi_create_container_access( + env, + ContainerType::QList, + elementType, + elementType.alignOf(), + elementType.sizeOf(), + false, + hashFunction, + internalToExternalConverter, + externalToInternalConverter + )); + } + if(listAccess){ + result = listAccess->registerContainer(QStringLiteral("QList<%1>").arg(QLatin1String(elementType.name())).toUtf8()); + listAccess->dispose(); + } + return result; +} + +template +int qtjambi_register_enum_meta_type(JNIEnv *env, jclass clazz, const QString& javaClassName, const QByteArray& javaTypeName){ + enum E:INT{}; + typedef typename std::conditional,E>::type EnumOrFlags; + typedef typename std::conditional::type Wrapper; + QtPrivate::QMetaTypeInterface* metaTypeInterface = new QtPrivate::QMetaTypeInterface{ + /*.revision=*/ 0, + /*.alignment=*/ alignof(EnumOrFlags), + /*.size=*/ sizeof(EnumOrFlags), + /*.flags=*/ uint(QtPrivate::QMetaTypeTypeFlags::Flags), + /*.typeId=*/ QMetaType::UnknownType, + /*.metaObject=*/ nullptr, + /*.name=*/ registerMetaTypeName(javaTypeName), + /*.defaultCtr=*/ QtJambiPrivate::QMetaTypeInterfaceFunctions::defaultCtr, + /*.copyCtr=*/ QtJambiPrivate::QMetaTypeInterfaceFunctions::copyCtr, + /*.moveCtr=*/ QtJambiPrivate::QMetaTypeInterfaceFunctions::moveCtr, + /*.dtor=*/ QtJambiPrivate::QMetaTypeInterfaceFunctions::dtor, + /*.equals=*/ QtPrivate::QEqualityOperatorForType::equals, + /*.lessThan=*/ QtPrivate::QLessThanOperatorForType::lessThan, + /*.debugStream=*/ QtPrivate::QDebugStreamOperatorForType::debugStream, + /*.dataStreamOut=*/ QtPrivate::QDataStreamOperatorForType::dataStreamOut, + /*.dataStreamIn=*/ QtPrivate::QDataStreamOperatorForType::dataStreamIn, + /*.legacyRegisterOp=*/ QtJambiPrivate::QMetaTypeInterfaceFunctions::legacyRegisterOp + }; + { + QWriteLocker locker(gLock()); + if(const QtPrivate::QMetaTypeInterface * iface = gClassMetaTypeInterfaces->value(qHash(javaClassName))){ + delete metaTypeInterface; + return iface->typeId; + } + gClassMetaTypeInterfaces->insert(qHash(javaClassName), metaTypeInterface); + (*gMetaTypeEnumClasses)[metaTypeInterface] = getGlobalClassRef(env, clazz, qPrintable(javaClassName)); + } + QMetaType metaType(metaTypeInterface); + int result = metaType.id(); + auto conv = [metaTypeInterface](const void *src, void *target) -> bool { + if(src){ + jclass clazz; + { + QReadLocker locker(gLock()); + clazz = (*gMetaTypeEnumClasses)[metaTypeInterface]; + } + if(clazz){ + if(JNIEnv* env = qtjambi_current_environment()){ + QTJAMBI_JNI_LOCAL_FRAME(env, 200) + try{ + if constexpr(isQtEnum0OrFlag1==0){ + new (target)Wrapper(qtjambi_from_enum(env, *reinterpret_cast(src), clazz)); + }else if constexpr(isQtEnum0OrFlag1==1){ + new (target)Wrapper(qtjambi_from_flags(env, *reinterpret_cast(src), clazz)); + }else{ + jobjectArray enumConstants = Java::Runtime::Class::getEnumConstants(env, clazz); + jobject e = env->GetObjectArrayElement(enumConstants, *reinterpret_cast(src)); + new (target)Wrapper(e); + } + }catch(const JavaException& exn){ + exn.report(env); + return false; + } + }else{ + return false; + } + } + }else{ + new (target)Wrapper(); + } + return true; + }; + QMetaType::registerConverterFunction(conv, metaType, QMetaType::fromType()); + if constexpr(isQtEnum0OrFlag1!=1){ + QMetaType::registerConverterFunction(conv, metaType, QMetaType::fromType()); + } + auto iconv = [](const void *src, void *target) -> bool { + if(src){ + new (target)typename QIntegerForSizeof::Signed(*reinterpret_cast(src)); + }else{ + new (target)typename QIntegerForSizeof::Signed(); + } + return true; + }; + QMetaType::registerConverterFunction(iconv, metaType, QMetaType::fromType::Signed>()); + QMetaType::registerConverterFunction(iconv, metaType, QMetaType::fromType::Unsigned>()); + QMetaType::registerConverterFunction(iconv, QMetaType::fromType::Signed>(), metaType); + QMetaType::registerConverterFunction(iconv, QMetaType::fromType::Unsigned>(), metaType); + registerJavaClassForCustomMetaType(metaType, javaClassName.toUtf8()); + return result; +} +#else +void * pointerConstructHelper(void * where, const void *pointer); +void destructHelper(void *); + +template +void * constructHelper(void * where, const void *pointer) +{ + memcpy(where, pointer, SIZE); + return where; +} + +typedef void*(*ConstructorFn)(void*, const void*); +ConstructorFn findEnumConstructor(int size){ + switch(size){ + case 1: return &constructHelper<1>; + case 2: return &constructHelper<2>; + case 4: return &constructHelper<4>; + case 8: return &constructHelper<8>; + default: + return nullptr; + } +} +#endif + +int qtjambiMetaTypeId(JNIEnv *env, jclass clazz, jobjectArray instantiations); + +int qtjambi_register_metatype(JNIEnv *env, jclass clazz, jboolean isPointer, jboolean isReference, const QString* javaClassNamePtr) +{ + try{ + int id = qtjambiMetaTypeId(env, clazz, nullptr); + if(id!=QMetaType::UnknownType) + return id; + if(Java::Runtime::Class::isArray(env, clazz) && !isPointer){ + jclass componentType = Java::Runtime::Class::getComponentType(env, clazz); + if(Java::Runtime::Integer::isPrimitiveType(env, componentType)){ + return registerMetaType("JIntArrayWrapper"); + }else if(Java::Runtime::Short::isPrimitiveType(env, componentType)){ + return registerMetaType("JShortArrayWrapper"); + }else if(Java::Runtime::Byte::isPrimitiveType(env, componentType)){ + return registerMetaType("JByteArrayWrapper"); + }else if(Java::Runtime::Long::isPrimitiveType(env, componentType)){ + return registerMetaType("JLongArrayWrapper"); + }else if(Java::Runtime::Character::isPrimitiveType(env, componentType)){ + return registerMetaType("JCharArrayWrapper"); + }else if(Java::Runtime::Boolean::isPrimitiveType(env, componentType)){ + return registerMetaType("JBooleanArrayWrapper"); + }else if(Java::Runtime::Double::isPrimitiveType(env, componentType)){ + return registerMetaType("JDoubleArrayWrapper"); + }else if(Java::Runtime::Float::isPrimitiveType(env, componentType)){ + return registerMetaType("JFloatArrayWrapper"); + }else{ + return registerMetaType("JObjectArrayWrapper"); + } + }else if((Java::Runtime::Integer::isSameClass(env, clazz) || Java::Runtime::Integer::isPrimitiveType(env, clazz)) && !isPointer){ + return QMetaType::Int; + }else if((Java::Runtime::Long::isSameClass(env, clazz) || Java::Runtime::Long::isPrimitiveType(env, clazz)) && !isPointer){ + return QMetaType::LongLong; + }else if((Java::Runtime::Short::isSameClass(env, clazz) || Java::Runtime::Short::isPrimitiveType(env, clazz)) && !isPointer){ + return QMetaType::Short; + }else if((Java::Runtime::Byte::isSameClass(env, clazz) || Java::Runtime::Byte::isPrimitiveType(env, clazz)) && !isPointer){ + return QMetaType::SChar; + }else if((Java::Runtime::Boolean::isSameClass(env, clazz) || Java::Runtime::Boolean::isPrimitiveType(env, clazz)) && !isPointer){ + return QMetaType::Bool; + }else if((Java::Runtime::Character::isSameClass(env, clazz) || Java::Runtime::Character::isPrimitiveType(env, clazz)) && !isPointer){ + return QMetaType::QChar; + }else if((Java::Runtime::Float::isSameClass(env, clazz) || Java::Runtime::Float::isPrimitiveType(env, clazz)) && !isPointer){ + return QMetaType::Float; + }else if((Java::Runtime::Double::isSameClass(env, clazz) || Java::Runtime::Double::isPrimitiveType(env, clazz)) && !isPointer){ + return QMetaType::Double; + }else if((Java::Runtime::Void::isPrimitiveType(env, clazz)) && !isPointer){ + return QMetaType::Void; + }else{ + QString javaClassName = javaClassNamePtr ? *javaClassNamePtr : qtjambi_class_name(env, clazz).replace('.', '/'); +#if QT_VERSION >= QT_VERSION_CHECK(6,0,0) + { + QReadLocker locker(gLock()); + if(const QtPrivate::QMetaTypeInterface * iface = gClassMetaTypeInterfaces->value(qHash(javaClassName))){ + return iface->typeId; + } + } +#endif + if(const std::type_info* typeId = getTypeByJavaName(javaClassName)){ + QByteArray qtType = getQtName(*typeId); + if((!isPointer || qtType.endsWith("*")) && (!isReference || !qtType.endsWith("*"))){ + int id = registeredMetaTypeID(*typeId); + if(id!=QMetaType::UnknownType) + return id; + } + const QMetaObject *const original_meta_object = registeredOriginalMetaObject(*typeId); + QMetaType::TypeFlags flags = QMetaType::MovableType | QMetaType::NeedsDestruction | QMetaType::NeedsConstruction; + QByteArray typeName = QMetaObject::normalizedType(qtType); + EntryTypes entryType = getEntryType(*typeId); + if(isReference){ + switch(entryType){ + case EntryTypes::ObjectTypeInfo: + case EntryTypes::QObjectTypeInfo: + if(typeName.endsWith("*")){ + typeName.chop(1); + } + entryType = EntryTypes::ValueTypeInfo; break; + case EntryTypes::InterfaceTypeInfo: + if(typeName.endsWith("*")){ + typeName.chop(1); + } + entryType = EntryTypes::InterfaceValueTypeInfo; break; + default: break; + } + }else if(isPointer){ + switch(entryType){ + case EntryTypes::ValueTypeInfo: + entryType = EntryTypes::ObjectTypeInfo; break; + case EntryTypes::InterfaceValueTypeInfo: + entryType = EntryTypes::InterfaceTypeInfo; break; + default: break; + } + } + switch(entryType){ + case EntryTypes::ObjectTypeInfo: + case EntryTypes::QObjectTypeInfo: + case EntryTypes::InterfaceTypeInfo: + case EntryTypes::FunctionalTypeInfo: { +#if QT_VERSION >= QT_VERSION_CHECK(6,0,0) + flags |= QMetaType::IsPointer; +#endif + if(entryType!=EntryTypes::FunctionalTypeInfo && !typeName.endsWith("*")){ + typeName = QMetaObject::normalizedType(typeName + "*"); + } + if(Java::QtCore::QObject::isAssignableFrom(env, clazz)){ + flags |= QMetaType::PointerToQObject; + }else if(original_meta_object){ + flags |= QMetaType::PointerToGadget; + } +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) + QMetaType::Destructor destructor = &destructHelper; + QMetaType::Constructor constructor = &pointerConstructHelper; + int typeId = QMetaType::registerNormalizedType( + typeName, + destructor, + constructor, + sizeof(void*), + flags, + original_meta_object + ); + qtjambi_register_comparator(new QtPrivate::BuiltInComparatorFunction(), typeId); + registerJavaClassForCustomMetaType(typeId, javaClassName.toLatin1()); + return typeId; +#else + QMetaType metaType = createMetaType(typeName, + true, + /*.defaultCtr=*/ QtJambiPrivate::QMetaTypeInterfaceFunctions::defaultCtr, + /*.copyCtr=*/ QtJambiPrivate::QMetaTypeInterfaceFunctions::copyCtr, + /*.moveCtr=*/ QtJambiPrivate::QMetaTypeInterfaceFunctions::moveCtr, + /*.dtor=*/ QtJambiPrivate::QMetaTypeInterfaceFunctions::dtor, + /*.equals=*/ QtPrivate::QEqualityOperatorForType::equals, + /*.lessThan=*/ QtPrivate::QLessThanOperatorForType::lessThan, + /*.debugStream=*/ QtPrivate::QDebugStreamOperatorForType::debugStream, + /*.dataStreamOut=*/ QtPrivate::QDataStreamOperatorForType::dataStreamOut, + /*.dataStreamIn=*/ QtPrivate::QDataStreamOperatorForType::dataStreamIn, + /*.legacyRegisterOp=*/ QtJambiPrivate::QMetaTypeInterfaceFunctions::legacyRegisterOp, + /*.size=*/ sizeof(void*), + /*.alignment=*/ alignof(void*), + /*.typeId=*/ QMetaType::UnknownType, + /*.flags=*/ QMetaType::TypeFlags(flags), + original_meta_object, + nullptr); + metaType.id(); + registerJavaClassForCustomMetaType(metaType, javaClassName.toLatin1()); + registerConverterVariant(env, metaType, typeName, javaClassName, clazz); + return metaType.id(); +#endif + } + case EntryTypes::EnumTypeInfo:{ + flags |= QMetaType::IsEnumeration; + if(Java::QtJambi::QtShortEnumerator::isAssignableFrom(env, clazz)){ +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) + int typeId = QMetaType::registerNormalizedType( + typeName, + &destructHelper, + findEnumConstructor(sizeof(qint16)), + sizeof(sizeof(qint16)), + flags, + original_meta_object + ); + qtjambi_register_comparator(new QtPrivate::BuiltInComparatorFunction(), typeId); + registerJavaClassForCustomMetaType(typeId, javaClassName.toLatin1()); + return typeId; +#else + QMetaType metaType = createMetaType(typeName, + true, + /*.defaultCtr=*/ QtJambiPrivate::QMetaTypeInterfaceFunctions::defaultCtr, + /*.copyCtr=*/ QtJambiPrivate::QMetaTypeInterfaceFunctions::copyCtr, + /*.moveCtr=*/ QtJambiPrivate::QMetaTypeInterfaceFunctions::moveCtr, + /*.dtor=*/ QtJambiPrivate::QMetaTypeInterfaceFunctions::dtor, + /*.equals=*/ QtPrivate::QEqualityOperatorForType::equals, + /*.lessThan=*/ QtPrivate::QLessThanOperatorForType::lessThan, + /*.debugStream=*/ QtPrivate::QDebugStreamOperatorForType::debugStream, + /*.dataStreamOut=*/ QtPrivate::QDataStreamOperatorForType::dataStreamOut, + /*.dataStreamIn=*/ QtPrivate::QDataStreamOperatorForType::dataStreamIn, + /*.legacyRegisterOp=*/ QtJambiPrivate::QMetaTypeInterfaceFunctions::legacyRegisterOp, + /*.size=*/ sizeof(qint16), + /*.alignment=*/ alignof(qint16), + /*.typeId=*/ QMetaType::UnknownType, + /*.flags=*/ QMetaType::TypeFlags(flags), + original_meta_object, + nullptr); + int _id = metaType.id(); + registerJavaClassForCustomMetaType(metaType, javaClassName.toLatin1()); + return _id; +#endif + }else if(Java::QtJambi::QtLongEnumerator::isAssignableFrom(env, clazz)){ +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) + int typeId = QMetaType::registerNormalizedType( + typeName, + &destructHelper, + findEnumConstructor(sizeof(qint64)), + sizeof(sizeof(qint64)), + flags, + original_meta_object + ); + qtjambi_register_comparator(new QtPrivate::BuiltInComparatorFunction(), typeId); + registerJavaClassForCustomMetaType(typeId, javaClassName.toLatin1()); + return typeId; +#else + QMetaType metaType = createMetaType(typeName, + true, + /*.defaultCtr=*/ QtJambiPrivate::QMetaTypeInterfaceFunctions::defaultCtr, + /*.copyCtr=*/ QtJambiPrivate::QMetaTypeInterfaceFunctions::copyCtr, + /*.moveCtr=*/ QtJambiPrivate::QMetaTypeInterfaceFunctions::moveCtr, + /*.dtor=*/ QtJambiPrivate::QMetaTypeInterfaceFunctions::dtor, + /*.equals=*/ QtPrivate::QEqualityOperatorForType::equals, + /*.lessThan=*/ QtPrivate::QLessThanOperatorForType::lessThan, + /*.debugStream=*/ QtPrivate::QDebugStreamOperatorForType::debugStream, + /*.dataStreamOut=*/ QtPrivate::QDataStreamOperatorForType::dataStreamOut, + /*.dataStreamIn=*/ QtPrivate::QDataStreamOperatorForType::dataStreamIn, + /*.legacyRegisterOp=*/ QtJambiPrivate::QMetaTypeInterfaceFunctions::legacyRegisterOp, + /*.size=*/ sizeof(qint64), + /*.alignment=*/ alignof(qint64), + /*.typeId=*/ QMetaType::UnknownType, + /*.flags=*/ QMetaType::TypeFlags(flags), + original_meta_object, + nullptr); + int _id = metaType.id(); + registerJavaClassForCustomMetaType(metaType, javaClassName.toLatin1()); + return _id; +#endif + }else if(Java::QtJambi::QtByteEnumerator::isAssignableFrom(env, clazz)){ +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) + int typeId = QMetaType::registerNormalizedType( + typeName, + &destructHelper, + findEnumConstructor(sizeof(qint8)), + sizeof(sizeof(qint8)), + flags, + original_meta_object + ); + qtjambi_register_comparator(new QtPrivate::BuiltInComparatorFunction(), typeId); + registerJavaClassForCustomMetaType(typeId, javaClassName.toLatin1()); + return typeId; +#else + QMetaType metaType = createMetaType(typeName, + true, + /*.defaultCtr=*/ QtJambiPrivate::QMetaTypeInterfaceFunctions::defaultCtr, + /*.copyCtr=*/ QtJambiPrivate::QMetaTypeInterfaceFunctions::copyCtr, + /*.moveCtr=*/ QtJambiPrivate::QMetaTypeInterfaceFunctions::moveCtr, + /*.dtor=*/ QtJambiPrivate::QMetaTypeInterfaceFunctions::dtor, + /*.equals=*/ QtPrivate::QEqualityOperatorForType::equals, + /*.lessThan=*/ QtPrivate::QLessThanOperatorForType::lessThan, + /*.debugStream=*/ QtPrivate::QDebugStreamOperatorForType::debugStream, + /*.dataStreamOut=*/ QtPrivate::QDataStreamOperatorForType::dataStreamOut, + /*.dataStreamIn=*/ QtPrivate::QDataStreamOperatorForType::dataStreamIn, + /*.legacyRegisterOp=*/ QtJambiPrivate::QMetaTypeInterfaceFunctions::legacyRegisterOp, + /*.size=*/ sizeof(qint8), + /*.alignment=*/ alignof(qint8), + /*.typeId=*/ QMetaType::UnknownType, + /*.flags=*/ QMetaType::TypeFlags(flags), + original_meta_object, + nullptr); + int _id = metaType.id(); + registerJavaClassForCustomMetaType(metaType, javaClassName.toLatin1()); + return _id; +#endif + }else /*if(Java::Runtime::Enum::isAssignableFrom(env, clazz) + || Java::QtJambi::QtEnumerator::isAssignableFrom(env, clazz))*/ { +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) + int typeId = QMetaType::registerNormalizedType( + typeName, + &destructHelper, + findEnumConstructor(sizeof(qint32)), + sizeof(sizeof(qint32)), + flags, + original_meta_object + ); + qtjambi_register_comparator(new QtPrivate::BuiltInComparatorFunction(), typeId); + registerJavaClassForCustomMetaType(typeId, javaClassName.toLatin1()); + return typeId; +#else + enum E:qint32{}; + QMetaType metaType = createMetaType(typeName, + true, + /*.defaultCtr=*/ QtJambiPrivate::QMetaTypeInterfaceFunctions::defaultCtr, + /*.copyCtr=*/ QtJambiPrivate::QMetaTypeInterfaceFunctions::copyCtr, + /*.moveCtr=*/ QtJambiPrivate::QMetaTypeInterfaceFunctions::moveCtr, + /*.dtor=*/ QtJambiPrivate::QMetaTypeInterfaceFunctions::dtor, + /*.equals=*/ QtPrivate::QEqualityOperatorForType::equals, + /*.lessThan=*/ QtPrivate::QLessThanOperatorForType::lessThan, + /*.debugStream=*/ QtPrivate::QDebugStreamOperatorForType::debugStream, + /*.dataStreamOut=*/ QtPrivate::QDataStreamOperatorForType::dataStreamOut, + /*.dataStreamIn=*/ QtPrivate::QDataStreamOperatorForType::dataStreamIn, + /*.legacyRegisterOp=*/ QtJambiPrivate::QMetaTypeInterfaceFunctions::legacyRegisterOp, + /*.size=*/ sizeof(E), + /*.alignment=*/ alignof(E), + /*.typeId=*/ QMetaType::UnknownType, + /*.flags=*/ QMetaType::TypeFlags(QtPrivate::QMetaTypeTypeFlags::Flags), + original_meta_object, + nullptr); + int _id = metaType.id(); + registerJavaClassForCustomMetaType(metaType, javaClassName.toLatin1()); + return _id; +#endif + } + } + case EntryTypes::FlagsTypeInfo:{ +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) + int typeId = QMetaType::registerNormalizedType( + typeName, + &destructHelper, + findEnumConstructor(sizeof(qint32)), + sizeof(sizeof(qint32)), + flags, + original_meta_object + ); + qtjambi_register_comparator(new QtPrivate::BuiltInComparatorFunction(), typeId); + registerJavaClassForCustomMetaType(typeId, javaClassName.toLatin1()); + return typeId; +#else + enum E:qint32{}; + QMetaType metaType = createMetaType(typeName, + true, + /*.defaultCtr=*/ QtJambiPrivate::QMetaTypeInterfaceFunctions>::defaultCtr, + /*.copyCtr=*/ QtJambiPrivate::QMetaTypeInterfaceFunctions>::copyCtr, + /*.moveCtr=*/ QtJambiPrivate::QMetaTypeInterfaceFunctions>::moveCtr, + /*.dtor=*/ QtJambiPrivate::QMetaTypeInterfaceFunctions>::dtor, + /*.equals=*/ QtPrivate::QEqualityOperatorForType>::equals, + /*.lessThan=*/ QtPrivate::QLessThanOperatorForType>::lessThan, + /*.debugStream=*/ QtPrivate::QDebugStreamOperatorForType>::debugStream, + /*.dataStreamOut=*/ QtPrivate::QDataStreamOperatorForType>::dataStreamOut, + /*.dataStreamIn=*/ QtPrivate::QDataStreamOperatorForType>::dataStreamIn, + /*.legacyRegisterOp=*/ QtJambiPrivate::QMetaTypeInterfaceFunctions>::legacyRegisterOp, + /*.size=*/ sizeof(QFlags), + /*.alignment=*/ alignof(QFlags), + /*.typeId=*/ QMetaType::UnknownType, + /*.flags=*/ QMetaType::TypeFlags(QtPrivate::QMetaTypeTypeFlags>::Flags), + original_meta_object, + nullptr); + int _id = metaType.id(); + registerJavaClassForCustomMetaType(metaType, javaClassName.toLatin1()); + return _id; +#endif + } + case EntryTypes::InterfaceValueTypeInfo: + case EntryTypes::ValueTypeInfo:{ + int id = qRegisterMetaType("JObjectWrapper"); +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) + int typeId = QMetaType::registerNormalizedTypedef(typeName, id); + qtjambi_register_comparator(new QtPrivate::BuiltInEqualsComparatorFunction(), typeId); + registerJavaClassForCustomMetaType(typeId, javaClassName.toLatin1()); + return typeId; +#else + QMetaType::registerNormalizedTypedef(typeName, QMetaType(id)); + return id; +#endif + } + default: break; + } + }else{ + const SuperTypeInfos& superTypes = getSuperTypeInfos(env, clazz); + QByteArray metaTypeName = javaClassName.toUtf8().replace("/", "::").replace("$", "::"); + if(superTypes.isEmpty()){ +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) + int id; + if(Java::QtJambi::QtShortEnumerator::isAssignableFrom(env, clazz) + || Java::QtJambi::QtLongEnumerator::isAssignableFrom(env, clazz) + || Java::QtJambi::QtByteEnumerator::isAssignableFrom(env, clazz) + || Java::QtJambi::QtEnumerator::isAssignableFrom(env, clazz) + || Java::Runtime::Enum::isAssignableFrom(env, clazz)){ + id = qRegisterMetaType("JEnumWrapper"); + }else if(Java::Runtime::Map::isAssignableFrom(env, clazz)){ + id = qRegisterMetaType("JMapWrapper"); + }else if(Java::Runtime::Collection::isAssignableFrom(env, clazz)){ + id = qRegisterMetaType("JCollectionWrapper"); + }else if(Java::Runtime::Iterator::isAssignableFrom(env, clazz)){ + id = qRegisterMetaType("JIteratorWrapper"); + }else{ + id = qRegisterMetaType("JObjectWrapper"); + } + int typeId = QMetaType::registerNormalizedTypedef(metaTypeName, id); + qtjambi_register_comparator(new QtPrivate::BuiltInEqualsComparatorFunction(), typeId); + registerJavaClassForCustomMetaType(typeId, javaClassName.toLatin1()); + return typeId; +#else + if(Java::Runtime::Enum::isAssignableFrom(env, clazz)){ + if(Java::QtJambi::QtShortEnumerator::isAssignableFrom(env, clazz)){ + return qtjambi_register_enum_meta_type(env, clazz, javaClassName, metaTypeName); + }else if(Java::QtJambi::QtLongEnumerator::isAssignableFrom(env, clazz)){ + return qtjambi_register_enum_meta_type(env, clazz, javaClassName, metaTypeName); + }else if(Java::QtJambi::QtByteEnumerator::isAssignableFrom(env, clazz)){ + return qtjambi_register_enum_meta_type(env, clazz, javaClassName, metaTypeName); + }else if(Java::QtJambi::QtEnumerator::isAssignableFrom(env, clazz)){ + return qtjambi_register_enum_meta_type(env, clazz, javaClassName, metaTypeName); + }else{ + return qtjambi_register_enum_meta_type(env, clazz, javaClassName, metaTypeName); + } + }else if(Java::QtJambi::QFlags::isAssignableFrom(env, clazz) && !Java::QtJambi::QFlags::isSameClass(env, clazz)){ + return qtjambi_register_enum_meta_type(env, clazz, javaClassName, metaTypeName); + }else{ + JObjectValueWrapperPrivate p; + p.constructor = env->GetMethodID(clazz, "", "()V"); + if(env->ExceptionCheck()) + env->ExceptionClear(); + p.clone = env->GetMethodID(clazz, "clone", qPrintable(QString("()L%1;").arg(javaClassName))); + if(env->ExceptionCheck()) + env->ExceptionClear(); + if(!p.clone && p.constructor && Java::Runtime::Cloneable::isAssignableFrom(env, clazz)){ + jobject newObject = env->NewObject(clazz, p.constructor); + if(env->ExceptionCheck()) + env->ExceptionClear(); + if(!newObject){ + p.constructor = nullptr; + }else{ + p.clone = Java::Runtime::Object::clone_ID(env); + jobject clonedObject = env->CallObjectMethod(newObject, p.clone); + if(env->ExceptionCheck()) + env->ExceptionClear(); + if(!env->IsInstanceOf(clonedObject, clazz)) + p.clone = nullptr; + } + } + if(p.constructor && p.clone){ + p.writeTo = env->GetMethodID(clazz, "writeTo", "(Lio/qt/core/QDataStream;)V"); + if(env->ExceptionCheck()) + env->ExceptionClear(); + p.readFrom = env->GetMethodID(clazz, "readFrom", "(Lio/qt/core/QDataStream;)V"); + if(env->ExceptionCheck()) + env->ExceptionClear(); + if(!p.writeTo && !p.readFrom){ + p.isSerializable = Java::Runtime::Serializable::isAssignableFrom(env, clazz); + } + p.clazz = getGlobalClassRef(env, clazz, qPrintable(javaClassName)); + p.name = metaTypeName; + uint flags = QtPrivate::QMetaTypeTypeFlags::Flags; + flags |= QMetaType::IsGadget; + QtPrivate::QMetaTypeInterface* metaTypeInterface = new QtPrivate::QMetaTypeInterface{ + /*.revision=*/ 0, + /*.alignment=*/ alignof(JObjectValueWrapper), + /*.size=*/ sizeof(JObjectValueWrapper), + /*.flags=*/ flags, + /*.typeId=*/ QMetaType::UnknownType, + /*.metaObject=*/ JObjectValueWrapperPrivate::metaObjectFn, + /*.name=*/ p.name.constData(), + /*.defaultCtr=*/ JObjectValueWrapperPrivate::defaultCtr, + /*.copyCtr=*/ JObjectValueWrapperPrivate::copyCtr, + /*.moveCtr=*/ JObjectValueWrapperPrivate::moveCtr, + /*.dtor=*/ JObjectValueWrapperPrivate::dtor, + /*.equals=*/ JObjectValueWrapperPrivate::equals, + /*.lessThan=*/ Java::Runtime::Comparable::isInstanceOf(env, clazz) ? JObjectValueWrapperPrivate::lessThan : nullptr, + /*.debugStream=*/ JObjectValueWrapperPrivate::debugStream, + /*.dataStreamOutFn=*/ p.writeTo ? JObjectValueWrapperPrivate::dataStreamOut : (p.isSerializable ? JObjectValueWrapperPrivate::serializableDataStreamOut : nullptr), + /*.dataStreamInFn=*/ p.readFrom ? JObjectValueWrapperPrivate::dataStreamIn : (p.isSerializable ? JObjectValueWrapperPrivate::serializableDataStreamIn : nullptr), + /*.legacyRegisterOp=*/ nullptr + }; + { + QWriteLocker locker(gLock()); + if(const QtPrivate::QMetaTypeInterface * iface = gClassMetaTypeInterfaces->value(qHash(javaClassName))){ + delete metaTypeInterface; + return iface->typeId; + } + gClassMetaTypeInterfaces->insert(qHash(javaClassName), metaTypeInterface); + (*gMetaTypeInterfaces)[metaTypeInterface] = std::move(p); + } + QMetaType metaType(metaTypeInterface); + int result = metaType.id(); + QMetaType::registerConverterFunction([](const void *src, void *target) -> bool { + if(src){ + new (target)JObjectWrapper(*reinterpret_cast(src)); + }else{ + new (target)JObjectWrapper(); + } + return true; + }, metaType, QMetaType::fromType()); + QMetaType::registerConverterFunction([metaType](const void *src, void *target) -> bool { + if(src){ + jobject value = reinterpret_cast(src)->object(); + if(value!=nullptr){ + if(JNIEnv* env = qtjambi_current_environment()){ + QTJAMBI_JNI_LOCAL_FRAME(env, 200) + const JObjectValueWrapperPrivate* methods{nullptr}; + { + QReadLocker locker(gLock()); + if(gMetaTypeInterfaces->contains(QMetaType(metaType).iface())) + methods = &(*gMetaTypeInterfaces)[QMetaType(metaType).iface()]; + } + if(!methods || !env->IsInstanceOf(value, methods->clazz)) + return false; + new (target)JObjectValueWrapper(JObjectValueWrapper::create(env, *reinterpret_cast(src), metaType)); + return true; + }else{ + return false; + } + } + } + new (target)JObjectValueWrapper(); + return true; + }, QMetaType::fromType(), metaType); + registerConverterVariant(env, metaType, QLatin1String(metaTypeInterface->name), javaClassName, clazz); + registerJavaClassForCustomMetaType(metaType, javaClassName.toLatin1()); + return result; + } + if(Java::Runtime::Collection::isAssignableFrom(env, clazz)){ + return QMetaType::fromType().id(); + }else if(Java::Runtime::Map::isAssignableFrom(env, clazz)){ + return QMetaType::fromType().id(); + } + QMetaType metaType = createMetaType(metaTypeName+"*", + true, + /*.defaultCtr=*/ QtJambiPrivate::QMetaTypeInterfaceFunctions::defaultCtr, + /*.copyCtr=*/ QtJambiPrivate::QMetaTypeInterfaceFunctions::copyCtr, + /*.moveCtr=*/ QtJambiPrivate::QMetaTypeInterfaceFunctions::moveCtr, + /*.dtor=*/ QtJambiPrivate::QMetaTypeInterfaceFunctions::dtor, + /*.equals=*/ QtPrivate::QEqualityOperatorForType::equals, + /*.lessThan=*/ QtPrivate::QLessThanOperatorForType::lessThan, + /*.debugStream=*/ QtPrivate::QDebugStreamOperatorForType::debugStream, + /*.dataStreamOut=*/ QtPrivate::QDataStreamOperatorForType::dataStreamOut, + /*.dataStreamIn=*/ QtPrivate::QDataStreamOperatorForType::dataStreamIn, + /*.legacyRegisterOp=*/ QtJambiPrivate::QMetaTypeInterfaceFunctions::legacyRegisterOp, + /*.size=*/ sizeof(JObjectWrapper), + /*.alignment=*/ alignof(JObjectWrapper), + /*.typeId=*/ QMetaType::UnknownType, + /*.flags=*/ QMetaType::TypeFlags(QtPrivate::QMetaTypeTypeFlags::Flags), + nullptr, &findWrappersMetaObject); + int result = metaType.id(); + registerJavaClassForCustomMetaType(metaType, javaClassName.toLatin1(), true); + QMetaType::registerConverterFunction([](const void *src, void *target) -> bool { + if(src){ + new (target)JObjectWrapper(*reinterpret_cast(src)); + }else{ + new (target)JObjectWrapper(); + } + return true; + }, metaType, QMetaType::fromType()); + JObjectWrapper classWrapper(env, clazz); + QMetaType::registerConverterFunction([classWrapper](const void *src, void *target) -> bool { + if(src){ + jobject value = reinterpret_cast(src)->object(); + if(value!=nullptr){ + if(JNIEnv* env = qtjambi_current_environment()){ + QTJAMBI_JNI_LOCAL_FRAME(env, 200) + if(!env->IsInstanceOf(value, jclass(classWrapper.object()))) + return false; + } + } + new (target)JObjectWrapper(*reinterpret_cast(src)); + }else{ + new (target)JObjectWrapper(); + } + return true; + }, QMetaType::fromType(), metaType); + return result; + } +#endif + }else{ + int id = qtjambi_register_metatype(env, superTypes[0].javaClass(), isPointer, isReference, &superTypes[0].className()); +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) + int typeId = QMetaType::registerNormalizedTypedef(metaTypeName, id); + qtjambi_register_comparator(new QtPrivate::BuiltInEqualsComparatorFunction(), typeId); + return typeId; +#else + if(id!=QMetaType::UnknownType){ + QMetaType superMetaType(id); + if(superMetaType.flags() & QMetaType::IsPointer){ + metaTypeName += "*"; + QMetaType metaType = createMetaType(metaTypeName, + true, + /*.defaultCtr=*/ superMetaType.iface()->defaultCtr, + /*.copyCtr=*/ superMetaType.iface()->copyCtr, + /*.moveCtr=*/ superMetaType.iface()->moveCtr, + /*.dtor=*/ superMetaType.iface()->dtor, + /*.equals=*/ superMetaType.iface()->equals, + /*.lessThan=*/ superMetaType.iface()->lessThan, + /*.debugStream=*/ superMetaType.iface()->debugStream, + /*.dataStreamOut=*/ superMetaType.iface()->dataStreamOut, + /*.dataStreamIn=*/ superMetaType.iface()->dataStreamIn, + /*.legacyRegisterOp=*/ superMetaType.iface()->legacyRegisterOp, + /*.size=*/ superMetaType.iface()->size, + /*.alignment=*/ superMetaType.iface()->alignment, + /*.typeId=*/ QMetaType::UnknownType, + /*.flags=*/ QMetaType::TypeFlags(superMetaType.iface()->flags), + nullptr, &findWrappersMetaObject); + id = metaType.id(); + registerJavaClassForCustomMetaType(metaType, javaClassName.toLatin1()); + registerConverterVariant(env, metaType, QLatin1String(metaTypeName), javaClassName, clazz); + return id; + }else{ + JObjectValueWrapperPrivate p; + p.constructor = env->GetMethodID(clazz, "", "()V"); + if(env->ExceptionCheck()) + env->ExceptionClear(); + p.clone = env->GetMethodID(clazz, "clone", qPrintable(QString("()L%1;").arg(javaClassName))); + if(env->ExceptionCheck()) + env->ExceptionClear(); + if(!p.clone && p.constructor && Java::Runtime::Cloneable::isAssignableFrom(env, clazz)){ + jobject newObject = env->NewObject(clazz, p.constructor); + if(env->ExceptionCheck()) + env->ExceptionClear(); + if(!newObject){ + p.constructor = nullptr; + }else{ + p.clone = Java::Runtime::Object::clone_ID(env); + jobject clonedObject = env->CallObjectMethod(newObject, p.clone); + if(env->ExceptionCheck()) + env->ExceptionClear(); + if(!env->IsInstanceOf(clonedObject, clazz)) + p.clone = nullptr; + } + } + if(p.constructor && p.clone){ + p.writeTo = env->GetMethodID(clazz, "writeTo", "(Lio/qt/core/QDataStream;)V"); + if(env->ExceptionCheck()) + env->ExceptionClear(); + p.readFrom = env->GetMethodID(clazz, "readFrom", "(Lio/qt/core/QDataStream;)V"); + if(env->ExceptionCheck()) + env->ExceptionClear(); + if(!p.writeTo && !p.readFrom){ + p.isSerializable = Java::Runtime::Serializable::isAssignableFrom(env, clazz); + } + p.clazz = getGlobalClassRef(env, clazz, qPrintable(javaClassName)); + p.name = metaTypeName; + uint flags = QtPrivate::QMetaTypeTypeFlags::Flags; + flags |= QMetaType::IsGadget; + QtPrivate::QMetaTypeInterface* metaTypeInterface = new QtPrivate::QMetaTypeInterface{ + /*.revision=*/ 0, + /*.alignment=*/ alignof(JObjectValueWrapper), + /*.size=*/ sizeof(JObjectValueWrapper), + /*.flags=*/ flags, + /*.typeId=*/ QMetaType::UnknownType, + /*.metaObject=*/ JObjectValueWrapperPrivate::metaObjectFn, + /*.name=*/ p.name.constData(), + /*.defaultCtr=*/ JObjectValueWrapperPrivate::defaultCtr, + /*.copyCtr=*/ JObjectValueWrapperPrivate::copyCtr, + /*.moveCtr=*/ JObjectValueWrapperPrivate::moveCtr, + /*.dtor=*/ JObjectValueWrapperPrivate::dtor, + /*.equals=*/ JObjectValueWrapperPrivate::equals, + /*.lessThan=*/ Java::Runtime::Comparable::isInstanceOf(env, clazz) ? JObjectValueWrapperPrivate::lessThan : nullptr, + /*.debugStream=*/ JObjectValueWrapperPrivate::debugStream, + /*.dataStreamOutFn=*/ p.writeTo ? JObjectValueWrapperPrivate::dataStreamOut : (p.isSerializable ? JObjectValueWrapperPrivate::serializableDataStreamOut : nullptr), + /*.dataStreamInFn=*/ p.readFrom ? JObjectValueWrapperPrivate::dataStreamIn : (p.isSerializable ? JObjectValueWrapperPrivate::serializableDataStreamIn : nullptr), + /*.legacyRegisterOp=*/ nullptr + }; + { + QWriteLocker locker(gLock()); + if(const QtPrivate::QMetaTypeInterface * iface = gClassMetaTypeInterfaces->value(qHash(javaClassName))){ + delete metaTypeInterface; + return iface->typeId; + } + gClassMetaTypeInterfaces->insert(qHash(javaClassName), metaTypeInterface); + (*gMetaTypeInterfaces)[metaTypeInterface] = std::move(p); + } + QMetaType metaType(metaTypeInterface); + int result = metaType.id(); + QMetaType::registerConverterFunction([](const void *src, void *target) -> bool { + if(src){ + new (target)JObjectWrapper(*reinterpret_cast(src)); + }else{ + new (target)JObjectWrapper(); + } + return true; + }, metaType, QMetaType::fromType()); + QMetaType::registerConverterFunction([metaType](const void *src, void *target) -> bool { + if(src){ + jobject value = reinterpret_cast(src)->object(); + if(value!=nullptr){ + if(JNIEnv* env = qtjambi_current_environment()){ + QTJAMBI_JNI_LOCAL_FRAME(env, 200) + const JObjectValueWrapperPrivate* methods{nullptr}; + { + QReadLocker locker(gLock()); + if(gMetaTypeInterfaces->contains(QMetaType(metaType).iface())) + methods = &(*gMetaTypeInterfaces)[QMetaType(metaType).iface()]; + } + if(!methods || !env->IsInstanceOf(value, methods->clazz)) + return false; + new (target)JObjectValueWrapper(JObjectValueWrapper::create(env, *reinterpret_cast(src), metaType)); + return true; + }else{ + return false; + } + } + } + new (target)JObjectValueWrapper(); + return true; + }, QMetaType::fromType(), metaType); + registerConverterVariant(env, metaType, QLatin1String(metaTypeInterface->name), javaClassName, clazz); + registerJavaClassForCustomMetaType(metaType, javaClassName.toLatin1()); + return result; + } + if(Java::Runtime::Collection::isAssignableFrom(env, clazz)){ + return QMetaType::fromType().id(); + }else if(Java::Runtime::Map::isAssignableFrom(env, clazz)){ + return QMetaType::fromType().id(); + } + QMetaType metaType = createMetaType(metaTypeName+"*", + true, + /*.defaultCtr=*/ QtJambiPrivate::QMetaTypeInterfaceFunctions::defaultCtr, + /*.copyCtr=*/ QtJambiPrivate::QMetaTypeInterfaceFunctions::copyCtr, + /*.moveCtr=*/ QtJambiPrivate::QMetaTypeInterfaceFunctions::moveCtr, + /*.dtor=*/ QtJambiPrivate::QMetaTypeInterfaceFunctions::dtor, + /*.equals=*/ QtPrivate::QEqualityOperatorForType::equals, + /*.lessThan=*/ QtPrivate::QLessThanOperatorForType::lessThan, + /*.debugStream=*/ QtPrivate::QDebugStreamOperatorForType::debugStream, + /*.dataStreamOut=*/ QtPrivate::QDataStreamOperatorForType::dataStreamOut, + /*.dataStreamIn=*/ QtPrivate::QDataStreamOperatorForType::dataStreamIn, + /*.legacyRegisterOp=*/ QtJambiPrivate::QMetaTypeInterfaceFunctions::legacyRegisterOp, + /*.size=*/ sizeof(JObjectWrapper), + /*.alignment=*/ alignof(JObjectWrapper), + /*.typeId=*/ QMetaType::UnknownType, + /*.flags=*/ QMetaType::TypeFlags(QtPrivate::QMetaTypeTypeFlags::Flags), + nullptr, &findWrappersMetaObject); + int result = metaType.id(); + registerJavaClassForCustomMetaType(metaType, javaClassName.toLatin1(), true); + QMetaType::registerConverterFunction([](const void *src, void *target) -> bool { + if(src){ + new (target)JObjectWrapper(*reinterpret_cast(src)); + }else{ + new (target)JObjectWrapper(); + } + return true; + }, metaType, QMetaType::fromType()); + JObjectWrapper classWrapper(env, clazz); + QMetaType::registerConverterFunction([classWrapper](const void *src, void *target) -> bool { + if(src){ + jobject value = reinterpret_cast(src)->object(); + if(value!=nullptr){ + if(JNIEnv* env = qtjambi_current_environment()){ + QTJAMBI_JNI_LOCAL_FRAME(env, 200) + if(!env->IsInstanceOf(value, jclass(classWrapper.object()))) + return false; + } + } + new (target)JObjectWrapper(*reinterpret_cast(src)); + }else{ + new (target)JObjectWrapper(); + } + return true; + }, QMetaType::fromType(), metaType); + return result; + } + }else{ + if(Java::Runtime::Collection::isAssignableFrom(env, clazz)){ + return QMetaType::fromType().id(); + }else if(Java::Runtime::Map::isAssignableFrom(env, clazz)){ + return QMetaType::fromType().id(); + } + QMetaType metaType = createMetaType(metaTypeName+"*", + true, + /*.defaultCtr=*/ QtJambiPrivate::QMetaTypeInterfaceFunctions::defaultCtr, + /*.copyCtr=*/ QtJambiPrivate::QMetaTypeInterfaceFunctions::copyCtr, + /*.moveCtr=*/ QtJambiPrivate::QMetaTypeInterfaceFunctions::moveCtr, + /*.dtor=*/ QtJambiPrivate::QMetaTypeInterfaceFunctions::dtor, + /*.equals=*/ QtPrivate::QEqualityOperatorForType::equals, + /*.lessThan=*/ QtPrivate::QLessThanOperatorForType::lessThan, + /*.debugStream=*/ QtPrivate::QDebugStreamOperatorForType::debugStream, + /*.dataStreamOut=*/ QtPrivate::QDataStreamOperatorForType::dataStreamOut, + /*.dataStreamIn=*/ QtPrivate::QDataStreamOperatorForType::dataStreamIn, + /*.legacyRegisterOp=*/ QtJambiPrivate::QMetaTypeInterfaceFunctions::legacyRegisterOp, + /*.size=*/ sizeof(JObjectWrapper), + /*.alignment=*/ alignof(JObjectWrapper), + /*.typeId=*/ QMetaType::UnknownType, + /*.flags=*/ QMetaType::TypeFlags(QtPrivate::QMetaTypeTypeFlags::Flags), + nullptr, &findWrappersMetaObject); + int result = metaType.id(); + registerJavaClassForCustomMetaType(metaType, javaClassName.toLatin1(), true); + QMetaType::registerConverterFunction([](const void *src, void *target) -> bool { + if(src){ + new (target)JObjectWrapper(*reinterpret_cast(src)); + }else{ + new (target)JObjectWrapper(); + } + return true; + }, metaType, QMetaType::fromType()); + JObjectWrapper classWrapper(env, clazz); + QMetaType::registerConverterFunction([classWrapper](const void *src, void *target) -> bool { + if(src){ + jobject value = reinterpret_cast(src)->object(); + if(value!=nullptr){ + if(JNIEnv* env = qtjambi_current_environment()){ + QTJAMBI_JNI_LOCAL_FRAME(env, 200) + if(!env->IsInstanceOf(value, jclass(classWrapper.object()))) + return false; + } + } + new (target)JObjectWrapper(*reinterpret_cast(src)); + }else{ + new (target)JObjectWrapper(); + } + return true; + }, QMetaType::fromType(), metaType); + return result; + } +#endif + } + } + } + }catch(const JavaException& exn){ + exn.raiseInJava(env); + } + return QMetaType::UnknownType; +} + +int qtjambi_register_metatype(JNIEnv *env, jclass clazz, jboolean isPointer, jboolean isReference){ + return qtjambi_register_metatype(env, clazz, isPointer, isReference, nullptr); +} + +int qtjambi_register_metatype(JNIEnv *env, jclass clazz, const QString& javaClassName){ + return qtjambi_register_metatype(env, clazz, false, false, &javaClassName); +} diff --git a/src/cpp/qtjambi/qtjambi_registry_p.h b/src/cpp/qtjambi/qtjambi_registry_p.h index b410e4bf..cd25f9d3 100644 --- a/src/cpp/qtjambi/qtjambi_registry_p.h +++ b/src/cpp/qtjambi/qtjambi_registry_p.h @@ -36,6 +36,9 @@ #include "qtjambi_containeraccess.h" #include "qtjambi_registry.h" #include "qtjambi_typeinfo_p.h" +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) +#include "qtjambi_jobjectwrapper.h" +#endif #include #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) @@ -108,6 +111,14 @@ QHashFunctionPtr registeredHashFunction(const std::type_info& typeId); const QtJambiTypeInfo* getQTypeInfo(const std::type_info& typeId); jfieldID resolveField(JNIEnv *env, const char *fieldName, const char *signature, jclass clazz, bool isStatic = false); jfieldID resolveField(JNIEnv *env, const char *fieldName, const char *signature, const char *className, bool isStatic = false); +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) +void registerJavaClassForCustomMetaType(const QMetaType& metaType, const QByteArray& javaClass, bool isJObjectWrapped = false); +void registerJavaClassForCustomMetaType(int metaType, const QByteArray& javaClass, bool isJObjectWrapped); +bool isJObjectWrappedMetaType(const QMetaType& metaType); +#else +void registerJavaClassForCustomMetaType(QMetaType metaType, const QByteArray& javaClass, bool isJObjectWrapped = false); +bool isJObjectWrappedMetaType(QMetaType metaType); +#endif #ifdef JOBJECT_REFCOUNT # include @@ -148,6 +159,49 @@ T hashSum(std::initializer_list list){ } #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) +struct JObjectValueWrapperPrivate; + +class JObjectValueWrapper : public JObjectWrapper{ +public: + JObjectValueWrapper(); + JObjectValueWrapper(const JObjectValueWrapper& other); + JObjectValueWrapper(JObjectValueWrapper&& other); + ~JObjectValueWrapper() override; + JObjectValueWrapper& operator=(const JObjectWrapper &wrapper)override; + JObjectValueWrapper& operator=(JObjectWrapper &&wrapper)override; + JObjectValueWrapper& operator=(const JObjectValueWrapper &wrapper); + JObjectValueWrapper& operator=(JObjectValueWrapper &&wrapper); + JObjectValueWrapper& operator=(jobject obj)override; + bool operator==(const JObjectValueWrapper &other) const; + bool operator<(const JObjectValueWrapper &other) const; + void writeTo(QDataStream &d)const; + void readFrom(QDataStream &d); + void serializeTo(QDataStream &d)const; + void serializeFrom(QDataStream &d); + bool isNull() const; + jobject value(JNIEnv* env) const; + static bool isValueType(QMetaType metaType); + static bool hasCustomDebugStreamOperator(QMetaType metaType); + static JObjectValueWrapper create(JNIEnv* env, jobject object, QMetaType metaType); +private: + JObjectValueWrapper(const JObjectValueWrapperPrivate* methods); + JObjectValueWrapper(JNIEnv* env, jobject object, const JObjectValueWrapperPrivate* methods); + JObjectValueWrapper(JObjectWrapper&& object, const JObjectValueWrapperPrivate* methods); + static const QMetaObject *metaObject(const QtPrivate::QMetaTypeInterface *iface); + static void defaultCtr(const QtPrivate::QMetaTypeInterface *iface, void *target); + static void copyCtr(const QtPrivate::QMetaTypeInterface *, void *target, const void *other); + static void moveCtr(const QtPrivate::QMetaTypeInterface *, void *target, void *other); + static void dtor(const QtPrivate::QMetaTypeInterface *, void *target); + static bool equals(const QtPrivate::QMetaTypeInterface *iface, const void *value1, const void *value2); + static bool lessThan(const QtPrivate::QMetaTypeInterface *iface, const void *value1, const void *value2); + static void debugStream(const QtPrivate::QMetaTypeInterface *iface, QDebug &d, const void *value); + static void dataStreamOut(const QtPrivate::QMetaTypeInterface *iface, QDataStream &d, const void *value); + static void dataStreamIn(const QtPrivate::QMetaTypeInterface *iface, QDataStream &d, void *value); + static void serializableDataStreamOut(const QtPrivate::QMetaTypeInterface *iface, QDataStream &d, const void *value); + static void serializableDataStreamIn(const QtPrivate::QMetaTypeInterface *iface, QDataStream &d, void *value); + friend JObjectValueWrapperPrivate; + const JObjectValueWrapperPrivate* p; +}; QMetaType createMetaType(QByteArrayView typeName, bool copyName, diff --git a/src/cpp/qtjambi/qtjambi_repository.cpp b/src/cpp/qtjambi/qtjambi_repository.cpp index 6350692c..baa21d84 100644 --- a/src/cpp/qtjambi/qtjambi_repository.cpp +++ b/src/cpp/qtjambi/qtjambi_repository.cpp @@ -321,6 +321,7 @@ QTJAMBI_REPOSITORY_DEFINE_CLASS(java/lang,Double, QTJAMBI_REPOSITORY_DEFINE_CLASS(java/lang,Long, QTJAMBI_REPOSITORY_DEFINE_STATIC_METHOD(valueOf,(J)Ljava/lang/Long;) + QTJAMBI_REPOSITORY_DEFINE_STATIC_METHOD(hashCode,(J)I) DEFINE_CLASS_REF(TYPE) ) @@ -756,9 +757,7 @@ QTJAMBI_REPOSITORY_DEFINE_EMPTY_CLASS(io/qt/core,QObject) QTJAMBI_REPOSITORY_DEFINE_FIELD(peer,J)) QTJAMBI_REPOSITORY_DEFINE_CLASS(io/qt/core,QVariant, - QTJAMBI_REPOSITORY_DEFINE_CONSTRUCTOR(ILjava/lang/Object;Z) - QTJAMBI_REPOSITORY_DEFINE_METHOD(userType,()I) - QTJAMBI_REPOSITORY_DEFINE_METHOD(value,()Ljava/lang/Object;) + QTJAMBI_REPOSITORY_DEFINE_CONSTRUCTOR(Lio/qt/QtObject$QPrivateConstructor;) ) } @@ -846,6 +845,10 @@ QTJAMBI_REPOSITORY_DEFINE_CLASS(java/lang,RuntimeException, QTJAMBI_REPOSITORY_DEFINE_CONSTRUCTOR(Ljava/lang/String;) ) +QTJAMBI_REPOSITORY_DEFINE_CLASS(java/lang,ArithmeticException, + QTJAMBI_REPOSITORY_DEFINE_CONSTRUCTOR(Ljava/lang/String;) +) + QTJAMBI_REPOSITORY_DEFINE_CLASS(java/lang,UnsupportedOperationException, QTJAMBI_REPOSITORY_DEFINE_CONSTRUCTOR(Ljava/lang/String;) ) @@ -918,12 +921,14 @@ QTJAMBI_REPOSITORY_DEFINE_CLASS(java/lang,Object, QTJAMBI_REPOSITORY_DEFINE_METHOD(equals,(Ljava/lang/Object;)Z) QTJAMBI_REPOSITORY_DEFINE_METHOD(toString,()Ljava/lang/String;) QTJAMBI_REPOSITORY_DEFINE_METHOD(hashCode,()I) + QTJAMBI_REPOSITORY_DEFINE_METHOD(clone,()Ljava/lang/Object;) ) QTJAMBI_REPOSITORY_DEFINE_CLASS(java/lang,Class, QTJAMBI_REPOSITORY_DEFINE_METHOD(getName,()Ljava/lang/String;) QTJAMBI_REPOSITORY_DEFINE_METHOD(cast,(Ljava/lang/Object;)Ljava/lang/Object;) QTJAMBI_REPOSITORY_DEFINE_METHOD(getDeclaredMethods,()[Ljava/lang/reflect/Method;) + QTJAMBI_REPOSITORY_DEFINE_METHOD(getDeclaredMethod,(Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method;) QTJAMBI_REPOSITORY_DEFINE_METHOD(getDeclaredField,(Ljava/lang/String;)Ljava/lang/reflect/Field;) QTJAMBI_REPOSITORY_DEFINE_METHOD(getEnumConstants,()[Ljava/lang/Object;) QTJAMBI_REPOSITORY_DEFINE_METHOD(getClassLoader,()Ljava/lang/ClassLoader;) @@ -943,6 +948,7 @@ QTJAMBI_REPOSITORY_DEFINE_CLASS(java/util,Optional, QTJAMBI_REPOSITORY_DEFINE_STATIC_METHOD(empty,()Ljava/util/Optional;) QTJAMBI_REPOSITORY_DEFINE_METHOD(get,()Ljava/lang/Object;) QTJAMBI_REPOSITORY_DEFINE_METHOD(isPresent,()Z) + QTJAMBI_REPOSITORY_DEFINE_STATIC_METHOD(of,(Ljava/lang/Object;)Ljava/util/Optional;) QTJAMBI_REPOSITORY_DEFINE_STATIC_METHOD(ofNullable,(Ljava/lang/Object;)Ljava/util/Optional;) ) @@ -1004,6 +1010,10 @@ QTJAMBI_REPOSITORY_DEFINE_CLASS(java/lang,ClassLoader, QTJAMBI_REPOSITORY_DEFINE_METHOD(loadClass,(Ljava/lang/String;)Ljava/lang/Class;) ) +QTJAMBI_REPOSITORY_DEFINE_CLASS(java/lang,Cloneable,) + +QTJAMBI_REPOSITORY_DEFINE_CLASS(java/io,Serializable,) + QTJAMBI_REPOSITORY_DEFINE_CLASS(java/lang,NumberFormatException, QTJAMBI_REPOSITORY_DEFINE_CONSTRUCTOR(Ljava/lang/String;) ) @@ -1105,6 +1115,8 @@ QTJAMBI_REPOSITORY_DEFINE_CLASS(io/qt/internal,QtJambiInternal, QTJAMBI_REPOSITORY_DEFINE_STATIC_METHOD(findAssociation,(Ljava/lang/Object;)Ljava/lang/Object;) QTJAMBI_REPOSITORY_DEFINE_STATIC_METHOD(objectToString,(Ljava/lang/Object;)Ljava/lang/String;) QTJAMBI_REPOSITORY_DEFINE_STATIC_METHOD(terminateCleanupThread,()V) + QTJAMBI_REPOSITORY_DEFINE_STATIC_METHOD(initializePackage,(Ljava/lang/Class;)Z) + QTJAMBI_REPOSITORY_DEFINE_STATIC_METHOD(analyzeExpectedTemplateName,(Ljava/lang/Class;[Lio/qt/core/QMetaType;)Ljava/lang/Object;) QTJAMBI_REPOSITORY_DEFINE_STATIC_FIELD(internalAccess,Lio/qt/InternalAccess;) ) diff --git a/src/cpp/qtjambi/qtjambi_repository.h b/src/cpp/qtjambi/qtjambi_repository.h index 892865eb..0dee87fc 100644 --- a/src/cpp/qtjambi/qtjambi_repository.h +++ b/src/cpp/qtjambi/qtjambi_repository.h @@ -84,7 +84,39 @@ namespace Runtime QTJAMBI_REPOSITORY_DECLARE_CONSTRUCTOR() QTJAMBI_REPOSITORY_DECLARE_BOOLEAN_METHOD(equals) QTJAMBI_REPOSITORY_DECLARE_INT_METHOD(hashCode) - QTJAMBI_REPOSITORY_DECLARE_STRING_METHOD(toString)) + QTJAMBI_REPOSITORY_DECLARE_STRING_METHOD(toString) + QTJAMBI_REPOSITORY_DECLARE_OBJECT_METHOD(clone) + QTJAMBI_REPOSITORY_DECLARE_METHOD_ID(clone) + ) + + QTJAMBI_REPOSITORY_DECLARE_CLASS(ClassCastException, + QTJAMBI_REPOSITORY_DECLARE_THROWABLE_CONSTRUCTOR()) + + QTJAMBI_REPOSITORY_DECLARE_CLASS(IllegalAccessException, + QTJAMBI_REPOSITORY_DECLARE_THROWABLE_CONSTRUCTOR()) + QTJAMBI_REPOSITORY_DECLARE_CLASS(MissingResourceException, + QTJAMBI_REPOSITORY_DECLARE_THROWABLE_CONSTRUCTOR()) + + QTJAMBI_REPOSITORY_DECLARE_CLASS(NumberFormatException, QTJAMBI_REPOSITORY_DECLARE_THROWABLE_CONSTRUCTOR()) + + QTJAMBI_REPOSITORY_DECLARE_CLASS(IllegalArgumentException, QTJAMBI_REPOSITORY_DECLARE_THROWABLE_CONSTRUCTOR()) + + QTJAMBI_REPOSITORY_DECLARE_CLASS(IllegalStateException, QTJAMBI_REPOSITORY_DECLARE_THROWABLE_CONSTRUCTOR()) + + QTJAMBI_REPOSITORY_DECLARE_CLASS(IllegalAccessError, + QTJAMBI_REPOSITORY_DECLARE_THROWABLE_CONSTRUCTOR()) + + QTJAMBI_REPOSITORY_DECLARE_CLASS(UnsupportedOperationException, + QTJAMBI_REPOSITORY_DECLARE_THROWABLE_CONSTRUCTOR()) + + QTJAMBI_REPOSITORY_DECLARE_CLASS(RuntimeException, + QTJAMBI_REPOSITORY_DECLARE_THROWABLE_CONSTRUCTOR()) + + QTJAMBI_REPOSITORY_DECLARE_CLASS(Error, + QTJAMBI_REPOSITORY_DECLARE_THROWABLE_CONSTRUCTOR()) + + QTJAMBI_REPOSITORY_DECLARE_CLASS(ArithmeticException, + QTJAMBI_REPOSITORY_DECLARE_THROWABLE_CONSTRUCTOR()) QTJAMBI_REPOSITORY_DECLARE_CLASS(Supplier, QTJAMBI_REPOSITORY_DECLARE_OBJECT_METHOD(get)) @@ -171,6 +203,31 @@ namespace Runtime QTJAMBI_REPOSITORY_DECLARE_CLASS(LongBinaryOperator, QTJAMBI_REPOSITORY_DECLARE_LONG_METHOD(applyAsLong)) + QTJAMBI_REPOSITORY_DECLARE_CLASS(Optional, + QTJAMBI_REPOSITORY_DECLARE_STATIC_OBJECT_METHOD(empty) + QTJAMBI_REPOSITORY_DECLARE_OBJECT_METHOD(get) + QTJAMBI_REPOSITORY_DECLARE_BOOLEAN_METHOD(isPresent) + QTJAMBI_REPOSITORY_DECLARE_STATIC_OBJECT_METHOD(of) + QTJAMBI_REPOSITORY_DECLARE_STATIC_OBJECT_METHOD(ofNullable)) + + QTJAMBI_REPOSITORY_DECLARE_CLASS(OptionalInt, + QTJAMBI_REPOSITORY_DECLARE_STATIC_OBJECT_METHOD(empty) + QTJAMBI_REPOSITORY_DECLARE_INT_METHOD(getAsInt) + QTJAMBI_REPOSITORY_DECLARE_BOOLEAN_METHOD(isPresent) + QTJAMBI_REPOSITORY_DECLARE_STATIC_OBJECT_METHOD(of)) + + QTJAMBI_REPOSITORY_DECLARE_CLASS(OptionalLong, + QTJAMBI_REPOSITORY_DECLARE_STATIC_OBJECT_METHOD(empty) + QTJAMBI_REPOSITORY_DECLARE_LONG_METHOD(getAsLong) + QTJAMBI_REPOSITORY_DECLARE_BOOLEAN_METHOD(isPresent) + QTJAMBI_REPOSITORY_DECLARE_STATIC_OBJECT_METHOD(of)) + + QTJAMBI_REPOSITORY_DECLARE_CLASS(OptionalDouble, + QTJAMBI_REPOSITORY_DECLARE_STATIC_OBJECT_METHOD(empty) + QTJAMBI_REPOSITORY_DECLARE_DOUBLE_METHOD(getAsDouble) + QTJAMBI_REPOSITORY_DECLARE_BOOLEAN_METHOD(isPresent) + QTJAMBI_REPOSITORY_DECLARE_STATIC_OBJECT_METHOD(of)) + QTJAMBI_REPOSITORY_DECLARE_CLASS(Number, QTJAMBI_REPOSITORY_DECLARE_INT_METHOD(intValue) QTJAMBI_REPOSITORY_DECLARE_DOUBLE_METHOD(doubleValue) @@ -195,6 +252,7 @@ namespace Runtime QTJAMBI_REPOSITORY_DECLARE_CLASS(Long, QTJAMBI_REPOSITORY_DECLARE_STATIC_OBJECT_METHOD(valueOf) + QTJAMBI_REPOSITORY_DECLARE_STATIC_INT_METHOD(hashCode) DECLARE_CLASS_REF(TYPE)) QTJAMBI_REPOSITORY_DECLARE_CLASS(Float, @@ -301,6 +359,8 @@ namespace QtCore{ QTJAMBI_REPOSITORY_DECLARE_CLASS(QCoreApplication, QTJAMBI_REPOSITORY_DECLARE_STATIC_BOOLEAN_FIELD(__qt_isInitializing)) + QTJAMBI_REPOSITORY_DECLARE_EMPTY_CLASS(QObject) + QTJAMBI_REPOSITORY_DECLARE_CLASS(QObject$QDeclarativeConstructor, QTJAMBI_REPOSITORY_DECLARE_CONSTRUCTOR() QTJAMBI_REPOSITORY_DECLARE_LONG_FIELD(placement) diff --git a/src/cpp/qtjambi/qtjambi_repository_p.h b/src/cpp/qtjambi/qtjambi_repository_p.h index 4b3730a3..0f03f657 100644 --- a/src/cpp/qtjambi/qtjambi_repository_p.h +++ b/src/cpp/qtjambi/qtjambi_repository_p.h @@ -61,8 +61,6 @@ namespace Java{ QTJAMBI_REPOSITORY_DECLARE_OBJECT_FIELD(value) QTJAMBI_REPOSITORY_DECLARE_STATIC_OBJECT_METHOD(metaType)) - QTJAMBI_REPOSITORY_DECLARE_EMPTY_CLASS(QObject) - QTJAMBI_REPOSITORY_DECLARE_EMPTY_CLASS(QByteArray) QTJAMBI_REPOSITORY_DECLARE_CLASS(QtMessageHandler, @@ -177,8 +175,6 @@ namespace Java{ QTJAMBI_REPOSITORY_DECLARE_CONSTRUCTOR()) QTJAMBI_REPOSITORY_DECLARE_CLASS(QVariant, QTJAMBI_REPOSITORY_DECLARE_CONSTRUCTOR() - QTJAMBI_REPOSITORY_DECLARE_INT_METHOD(userType) - QTJAMBI_REPOSITORY_DECLARE_OBJECT_METHOD(value) ) } @@ -197,6 +193,7 @@ namespace Java{ QTJAMBI_REPOSITORY_DECLARE_STRING_METHOD(getName) QTJAMBI_REPOSITORY_DECLARE_OBJECT_METHOD(cast) QTJAMBI_REPOSITORY_DECLARE_OBJECT_METHOD(getDeclaredMethods) + QTJAMBI_REPOSITORY_DECLARE_OBJECT_METHOD(getDeclaredMethod) QTJAMBI_REPOSITORY_DECLARE_OBJECT_METHOD(getDeclaredField) QTJAMBI_REPOSITORY_DECLARE_OBJECTARRAY_METHOD(getEnumConstants) QTJAMBI_REPOSITORY_DECLARE_OBJECT_METHOD(getClassLoader) @@ -210,11 +207,16 @@ namespace Java{ QTJAMBI_REPOSITORY_DECLARE_BOOLEAN_METHOD(isPrimitive) QTJAMBI_REPOSITORY_DECLARE_BOOLEAN_METHOD(isSynthetic) QTJAMBI_REPOSITORY_DECLARE_BOOLEAN_METHOD(isInterface) - public: static inline jstring tryGetName(JNIEnv* env,jobject object){ + public: static inline jstring tryGetName(JNIEnv* env,jclass object){ auto _this = __qt_get_this(env); jobject result = env->CallObjectMethod(object,_this.__getName); return jstring(result); } + public: static inline jobject tryGetDeclaredMethod(JNIEnv* env,jclass object,jstring name,jobjectArray parameters){ + auto _this = __qt_get_this(env); + jobject result = env->CallObjectMethod(object,_this.__getDeclaredMethod, name, parameters); + return jstring(result); + } ) QTJAMBI_REPOSITORY_DECLARE_CLASS(ClassLoader, @@ -226,29 +228,9 @@ namespace Java{ } ) - QTJAMBI_REPOSITORY_DECLARE_CLASS(Optional, - QTJAMBI_REPOSITORY_DECLARE_STATIC_OBJECT_METHOD(empty) - QTJAMBI_REPOSITORY_DECLARE_OBJECT_METHOD(get) - QTJAMBI_REPOSITORY_DECLARE_BOOLEAN_METHOD(isPresent) - QTJAMBI_REPOSITORY_DECLARE_STATIC_OBJECT_METHOD(ofNullable)) - - QTJAMBI_REPOSITORY_DECLARE_CLASS(OptionalInt, - QTJAMBI_REPOSITORY_DECLARE_STATIC_OBJECT_METHOD(empty) - QTJAMBI_REPOSITORY_DECLARE_INT_METHOD(getAsInt) - QTJAMBI_REPOSITORY_DECLARE_BOOLEAN_METHOD(isPresent) - QTJAMBI_REPOSITORY_DECLARE_STATIC_OBJECT_METHOD(of)) - - QTJAMBI_REPOSITORY_DECLARE_CLASS(OptionalLong, - QTJAMBI_REPOSITORY_DECLARE_STATIC_OBJECT_METHOD(empty) - QTJAMBI_REPOSITORY_DECLARE_LONG_METHOD(getAsLong) - QTJAMBI_REPOSITORY_DECLARE_BOOLEAN_METHOD(isPresent) - QTJAMBI_REPOSITORY_DECLARE_STATIC_OBJECT_METHOD(of)) - - QTJAMBI_REPOSITORY_DECLARE_CLASS(OptionalDouble, - QTJAMBI_REPOSITORY_DECLARE_STATIC_OBJECT_METHOD(empty) - QTJAMBI_REPOSITORY_DECLARE_DOUBLE_METHOD(getAsDouble) - QTJAMBI_REPOSITORY_DECLARE_BOOLEAN_METHOD(isPresent) - QTJAMBI_REPOSITORY_DECLARE_STATIC_OBJECT_METHOD(of)) + QTJAMBI_REPOSITORY_DECLARE_CLASS(Cloneable,) + + QTJAMBI_REPOSITORY_DECLARE_CLASS(Serializable,) QTJAMBI_REPOSITORY_DECLARE_CLASS(System, QTJAMBI_REPOSITORY_DECLARE_STATIC_VOID_METHOD(gc) @@ -419,32 +401,6 @@ namespace Java{ } ) - QTJAMBI_REPOSITORY_DECLARE_CLASS(IllegalAccessException, - QTJAMBI_REPOSITORY_DECLARE_THROWABLE_CONSTRUCTOR()) - QTJAMBI_REPOSITORY_DECLARE_CLASS(MissingResourceException, - QTJAMBI_REPOSITORY_DECLARE_THROWABLE_CONSTRUCTOR()) - - QTJAMBI_REPOSITORY_DECLARE_CLASS(NumberFormatException, QTJAMBI_REPOSITORY_DECLARE_THROWABLE_CONSTRUCTOR()) - - QTJAMBI_REPOSITORY_DECLARE_CLASS(IllegalArgumentException, QTJAMBI_REPOSITORY_DECLARE_THROWABLE_CONSTRUCTOR()) - - QTJAMBI_REPOSITORY_DECLARE_CLASS(IllegalStateException, QTJAMBI_REPOSITORY_DECLARE_THROWABLE_CONSTRUCTOR()) - - QTJAMBI_REPOSITORY_DECLARE_CLASS(IllegalAccessError, - QTJAMBI_REPOSITORY_DECLARE_THROWABLE_CONSTRUCTOR()) - - QTJAMBI_REPOSITORY_DECLARE_CLASS(UnsupportedOperationException, - QTJAMBI_REPOSITORY_DECLARE_THROWABLE_CONSTRUCTOR()) - - QTJAMBI_REPOSITORY_DECLARE_CLASS(ClassCastException, - QTJAMBI_REPOSITORY_DECLARE_THROWABLE_CONSTRUCTOR()) - - QTJAMBI_REPOSITORY_DECLARE_CLASS(RuntimeException, - QTJAMBI_REPOSITORY_DECLARE_THROWABLE_CONSTRUCTOR()) - - QTJAMBI_REPOSITORY_DECLARE_CLASS(Error, - QTJAMBI_REPOSITORY_DECLARE_THROWABLE_CONSTRUCTOR()) - QTJAMBI_REPOSITORY_DECLARE_CLASS(Arrays, QTJAMBI_REPOSITORY_DECLARE_STATIC_OBJECTARRAY_METHOD(copyOf)) @@ -487,7 +443,9 @@ namespace Java{ QTJAMBI_REPOSITORY_DECLARE_STATIC_OBJECT_METHOD(findAssociation) QTJAMBI_REPOSITORY_DECLARE_STATIC_STRING_METHOD(objectToString) QTJAMBI_REPOSITORY_DECLARE_STATIC_VOID_METHOD(terminateCleanupThread) + QTJAMBI_REPOSITORY_DECLARE_STATIC_BOOLEAN_METHOD(initializePackage) QTJAMBI_REPOSITORY_DECLARE_STATIC_OBJECT_FIELD(internalAccess) + QTJAMBI_REPOSITORY_DECLARE_STATIC_OBJECT_METHOD(analyzeExpectedTemplateName) ) QTJAMBI_REPOSITORY_DECLARE_CLASS(NativeLibraryManager, diff --git a/src/cpp/qtjambi/qtjambilink.cpp b/src/cpp/qtjambi/qtjambilink.cpp index db8400cd..8ef5d98a 100644 --- a/src/cpp/qtjambi/qtjambilink.cpp +++ b/src/cpp/qtjambi/qtjambilink.cpp @@ -2446,14 +2446,6 @@ void PointerToQObjectLink::init(JNIEnv* env){ QObject* object = qobject(); Q_ASSERT(object); const QMetaObject* metaObject = object->metaObject(); - /* - //if we use dynamic meta object: - if(QMetaObjectPrivate::get(metaObject)->flags & DynamicMetaObject){ - QObjectPrivate* p = QObjectPrivate::get(object); - if(p && !p->metaObject) - p->metaObject = const_cast(static_cast(metaObject)); - } - */ { bool _isValueOwner = isValueOwner(metaObject); QWriteLocker locker(QtJambiLinkUserData::lock()); @@ -3181,9 +3173,12 @@ jobject PointerToQObjectLink::getExtraSignal(JNIEnv*, const QMetaMethod&) const{ } PointerToPendingQObjectLink::PointerToPendingQObjectLink(JNIEnv *env, jobject nativeLink, jobject jobj, const QMetaObject* metaObject, QObject *ptr, bool created_by_java, bool isDeclarativeCall, bool is_shell, JavaException& ocurredException) - : PointerToQObjectLink(env, nativeLink, jobj, metaObject, ptr, created_by_java, isDeclarativeCall, is_shell, ocurredException), - m_metaObject(metaObject) + : PointerToQObjectLink(env, nativeLink, jobj, metaObject, ptr, created_by_java, isDeclarativeCall, is_shell, ocurredException) { + m_flags.setFlag(Flag::IsPendingValueOwner, isValueOwner(metaObject)); +#if defined(QTJAMBI_DEBUG_TOOLS) || defined(QTJAMBI_LINK_NAME) || !defined(QT_NO_DEBUG) + m_qtTypeName = metaObject->className(); +#endif } void PointerToPendingQObjectLink::init(JNIEnv* env){ @@ -3191,15 +3186,11 @@ void PointerToPendingQObjectLink::init(JNIEnv* env){ QtJambiLink::init(env); QObject* object = qobject(); Q_ASSERT(object); -#if defined(QTJAMBI_DEBUG_TOOLS) || defined(QTJAMBI_LINK_NAME) || !defined(QT_NO_DEBUG) - m_qtTypeName = m_metaObject->className(); -#endif { - bool _isValueOwner = isValueOwner(m_metaObject); QWriteLocker locker(QtJambiLinkUserData::lock()); Q_UNUSED(locker) QTJAMBI_SET_OBJECTUSERDATA(QtJambiLinkUserData, object, new QtJambiLinkUserData(getWeakPointer())); - if(_isValueOwner && !QTJAMBI_GET_OBJECTUSERDATA(ValueOwnerUserData, object)){ + if(m_flags.testFlag(Flag::IsPendingValueOwner) && !QTJAMBI_GET_OBJECTUSERDATA(ValueOwnerUserData, object)){ QTJAMBI_SET_OBJECTUSERDATA(ValueOwnerUserData, object, new ValueOwnerUserData(object)); } } @@ -3241,9 +3232,12 @@ jobject PointerToPendingQObjectLink::getExtraSignal(JNIEnv * env, const QMetaMet } PointerToPendingQObjectInterfaceLink::PointerToPendingQObjectInterfaceLink(JNIEnv *env, jobject nativeLink, jobject jobj, const QMap& interfaceOffsets, const QSet& interfaces, const QMap>& inheritedInterfaces, const QMetaObject* metaObject, QObject *ptr, bool created_by_java, bool isDeclarativeCall, bool is_shell, JavaException& ocurredException) - : PointerToQObjectInterfaceLink(env, nativeLink, jobj, interfaceOffsets, interfaces, inheritedInterfaces, metaObject, ptr, created_by_java, isDeclarativeCall, is_shell, ocurredException), - m_metaObject(metaObject) + : PointerToQObjectInterfaceLink(env, nativeLink, jobj, interfaceOffsets, interfaces, inheritedInterfaces, metaObject, ptr, created_by_java, isDeclarativeCall, is_shell, ocurredException) { + m_flags.setFlag(Flag::IsPendingValueOwner, isValueOwner(metaObject)); +#if defined(QTJAMBI_DEBUG_TOOLS) || defined(QTJAMBI_LINK_NAME) || !defined(QT_NO_DEBUG) + m_qtTypeName = metaObject->className(); +#endif } void PointerToPendingQObjectInterfaceLink::init(JNIEnv* env){ @@ -3251,15 +3245,11 @@ void PointerToPendingQObjectInterfaceLink::init(JNIEnv* env){ QtJambiLink::init(env); QObject* object = qobject(); Q_ASSERT(object); -#if defined(QTJAMBI_DEBUG_TOOLS) || defined(QTJAMBI_LINK_NAME) || !defined(QT_NO_DEBUG) - m_qtTypeName = m_metaObject->className(); -#endif { - bool _isValueOwner = isValueOwner(m_metaObject); QWriteLocker locker(QtJambiLinkUserData::lock()); Q_UNUSED(locker) QTJAMBI_SET_OBJECTUSERDATA(QtJambiLinkUserData, object, new QtJambiLinkUserData(getWeakPointer())); - if(_isValueOwner && !QTJAMBI_GET_OBJECTUSERDATA(ValueOwnerUserData, object)){ + if(m_flags.testFlag(Flag::IsPendingValueOwner) && !QTJAMBI_GET_OBJECTUSERDATA(ValueOwnerUserData, object)){ QTJAMBI_SET_OBJECTUSERDATA(ValueOwnerUserData, object, new ValueOwnerUserData(object)); } } @@ -3457,8 +3447,7 @@ jobject PointerContainerWithExtraSignals::getExtraSignal(JNIEnv * env, const QSh PointerContainerWithPendingExtraSignals::PointerContainerWithPendingExtraSignals(JNIEnv* env, jobject jobj, const QMetaObject* metaObject, const QSharedPointer& link, void* ptr_shared_pointer, bool isShell, PointerDeleter shared_pointer_deleter, PointerQObjectGetterFunction pointerGetter, JavaException& ocurredException) : PointerContainer(env, jobj, metaObject, link, ptr_shared_pointer, isShell, shared_pointer_deleter, pointerGetter, ocurredException), - m_extraSignals(), - m_metaObject(metaObject) + m_extraSignals() { } diff --git a/src/cpp/qtjambi/qtjambilink_p.h b/src/cpp/qtjambi/qtjambilink_p.h index b29a20ed..fbf0663f 100644 --- a/src/cpp/qtjambi/qtjambilink_p.h +++ b/src/cpp/qtjambi/qtjambilink_p.h @@ -183,7 +183,6 @@ class PointerContainerWithPendingExtraSignals : public PointerContainer{ jobject getExtraSignal(JNIEnv * env, const QSharedPointerToQObjectLink* link, const QMetaMethod& method) const override; private: mutable QHash m_extraSignals; - mutable const QMetaObject* m_metaObject; }; class QtJambiLink{ @@ -271,7 +270,8 @@ class QtJambiLink{ IsListed = 0x010000, // Weak ref to java object, deleteNativeObject deletes c++ object #endif HasDisposedSignal = 0x020000, - IsPendingObjectResolved = 0x040000 + IsPendingObjectResolved = 0x040000, + IsPendingValueOwner = 0x080000 }; typedef QFlags Flags; @@ -644,7 +644,6 @@ class PointerToPendingQObjectLink : public PointerToQObjectLink{ void init(JNIEnv* env) override; private: mutable QHash m_extraSignals; - mutable const QMetaObject* m_metaObject; friend QtJambiLink; }; @@ -767,7 +766,6 @@ class PointerToPendingQObjectInterfaceLink : public PointerToQObjectInterfaceLin void init(JNIEnv* env) override; private: mutable QHash m_extraSignals; - mutable const QMetaObject* m_metaObject; friend QtJambiLink; }; @@ -856,6 +854,8 @@ class QtJambiLinkScope : public QtJambiScope{ public: QtJambiLinkScope(const QSharedPointer& _link); Q_DISABLE_COPY_MOVE(QtJambiLinkScope) + + QtJambiLink * link() const; }; #endif // QTJAMBILINK_P_H diff --git a/src/cpp/qtjambi/qtjambimetaobject.cpp b/src/cpp/qtjambi/qtjambimetaobject.cpp index 3896cc1b..52c01170 100644 --- a/src/cpp/qtjambi/qtjambimetaobject.cpp +++ b/src/cpp/qtjambi/qtjambimetaobject.cpp @@ -84,6 +84,7 @@ struct JMemberInfo{ jValueType type = jValueType::l; ParameterTypeInfo memberTypeInfo; bool canWrite = false; + jclass staticAccessContext = nullptr; }; struct JSignalInfo{ @@ -290,7 +291,7 @@ void static_metacall_any_type(const QtJambiMetaObject* q, QObject * o, QMetaObje default: break; } - if(jobject object = reinterpret_cast(o)){ + if(jobject object = reinterpret_cast(o)->object()){ switch(cl){ #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) case QMetaObject::QueryPropertyUser: @@ -357,10 +358,10 @@ StaticMetaCallFunction create_static_metacall(const QtJambiMetaObject* q, Static class QtJambiMetaObjectPrivate { public: - QtJambiMetaObjectPrivate(QtJambiMetaObject *q, JNIEnv *env, jclass java_class, const QMetaObject *original_meta_object, bool hasCustomMetaObject, JavaException& exceptionHandler); + QtJambiMetaObjectPrivate(QtJambiMetaObject *q, JNIEnv *env, jclass java_class); ~QtJambiMetaObjectPrivate(); - void initialize(JNIEnv *jni_env, jclass java_class, const QMetaObject *original_meta_object, bool hasCustomMetaObject); + void initialize(JNIEnv *jni_env, const QMetaObject *original_meta_object, bool hasCustomMetaObject); void invokeMethod(JNIEnv *env, jobject object, const JMethodInfo& methodInfo, void **_a, bool forceObjectType = false) const; void invokeConstructor(JNIEnv *env, const JMethodInfo& methodInfo, void **_a) const; @@ -419,7 +420,7 @@ class QtJambiMetaObjectPrivate friend const QMetaObject *qtjambi_metaobject_for_class(JNIEnv *env, jclass object_class, const std::function& original_meta_object_provider); }; -QtJambiMetaObjectPrivate::QtJambiMetaObjectPrivate(QtJambiMetaObject *q, JNIEnv *env, jclass java_class, const QMetaObject *original_meta_object, bool hasCustomMetaObject, JavaException& exceptionHandler) +QtJambiMetaObjectPrivate::QtJambiMetaObjectPrivate(QtJambiMetaObject *q, JNIEnv *env, jclass java_class) : q_ptr(q), m_this_ptr(q), m_method_count(-1), m_signal_count(0), m_constructor_count(0), m_property_count(0), m_clazz(getGlobalClassRef(env, java_class)), @@ -440,11 +441,6 @@ QtJambiMetaObjectPrivate::QtJambiMetaObjectPrivate(QtJambiMetaObject *q, JNIEnv { Q_ASSERT(env); Q_ASSERT(java_class); - try{ - initialize(env, java_class, original_meta_object, hasCustomMetaObject); - }catch(const JavaException& exn){ - exceptionHandler.addSuppressed(env, exn); - } } QtJambiMetaObjectPrivate::~QtJambiMetaObjectPrivate() @@ -569,13 +565,13 @@ void analyze_methods(JNIEnv *env, jobject classLoader, int count, jobject method } } -void QtJambiMetaObjectPrivate::initialize(JNIEnv *env, jclass java_class, const QMetaObject *original_meta_object, bool hasCustomMetaObject) +void QtJambiMetaObjectPrivate::initialize(JNIEnv *env, const QMetaObject *original_meta_object, bool hasCustomMetaObject) { Q_Q(QtJambiMetaObject); QTJAMBI_JNI_LOCAL_FRAME(env, 1000) - jobject classLoader = Java::Runtime::Class::getClassLoader(env, java_class); - jobject meta_data_struct = Java::QtJambi::MetaObjectTools::buildMetaData(env, java_class); + jobject classLoader = Java::Runtime::Class::getClassLoader(env, m_clazz); + jobject meta_data_struct = Java::QtJambi::MetaObjectTools::buildMetaData(env, m_clazz); if (!meta_data_struct) return; jobject meta_data = Java::QtJambi::MetaObjectTools$MetaData::metaData(env, meta_data_struct); @@ -642,7 +638,7 @@ void QtJambiMetaObjectPrivate::initialize(JNIEnv *env, jclass java_class, const #endif //QT_VERSION < QT_VERSION_CHECK(6, 0, 0) { - jclass java_super_class = env->GetSuperclass(java_class); + jclass java_super_class = env->GetSuperclass(m_clazz); #if QT_VERSION < QT_VERSION_CHECK(5,14,0) if(java_super_class) q->d.superdata = qtjambi_metaobject_for_class(env, java_super_class, original_meta_object, hasCustomMetaObject); @@ -907,6 +903,10 @@ void QtJambiMetaObjectPrivate::initialize(JNIEnv *env, jclass java_class, const jclass fieldType = Java::Runtime::Field::getType(env, fieldObject); m_propertyMembers[i].member = env->FromReflectedField(fieldObject); m_propertyMembers[i].canWrite = !Java::Runtime::Modifier::isFinal(env, Java::Runtime::Field::getModifiers(env, fieldObject)); + if(Java::Runtime::Modifier::isStatic(env, Java::Runtime::Field::getModifiers(env, fieldObject))){ + m_propertyMembers[i].staticAccessContext = Java::Runtime::Field::getDeclaringClass(env, fieldObject); + m_propertyMembers[i].staticAccessContext = getGlobalClassRef(env, m_propertyMembers[i].staticAccessContext); + } if(Java::Runtime::Boolean::isPrimitiveType(env, fieldType)){ m_propertyMembers[i].type = jValueType::z; }else if(Java::Runtime::Byte::isPrimitiveType(env, fieldType)){ @@ -982,9 +982,9 @@ void QtJambiMetaObjectPrivate::initialize(JNIEnv *env, jclass java_class, const bool hasStaticMembers = Java::QtJambi::MetaObjectTools$MetaData::hasStaticMembers(env,meta_data_struct); const QMetaObjectPrivate* priv = QMetaObjectPrivate::get(q); if(hasStaticMembers || (priv->flags & PropertyAccessInStaticMetaCall) == PropertyAccessInStaticMetaCall){ - if(Java::QtCore::QObject::isAssignableFrom(env, java_class)){ + if(Java::QtCore::QObject::isAssignableFrom(env, m_clazz)){ q->d.static_metacall = create_static_metacall(q, &static_metacall_QObject); - }else if(Java::QtJambi::QtObjectInterface::isAssignableFrom(env, java_class)){ + }else if(Java::QtJambi::QtObjectInterface::isAssignableFrom(env, m_clazz)){ q->d.static_metacall = create_static_metacall(q, &static_metacall_QtSubType); }else{ q->d.static_metacall = create_static_metacall(q, &static_metacall_any_type); @@ -1140,8 +1140,12 @@ void QtJambiMetaObjectPrivate::invokeConstructor(JNIEnv *env, const JMethodInfo& } -QtJambiMetaObject::QtJambiMetaObject(JNIEnv *jni_env, jclass java_class, const QMetaObject *original_meta_object, bool hasCustomMetaObject, JavaException& exceptionHandler) - : d_ptr(new QtJambiMetaObjectPrivate(this, jni_env, java_class, original_meta_object, hasCustomMetaObject, exceptionHandler)) { +QtJambiMetaObject::QtJambiMetaObject(JNIEnv *jni_env, jclass java_class) + : d_ptr(new QtJambiMetaObjectPrivate(this, jni_env, java_class)) { +} + +void QtJambiMetaObject::initialize(JNIEnv *env, const QMetaObject *original_meta_object, bool hasCustomMetaObject){ + d_ptr->initialize(env, original_meta_object, hasCustomMetaObject); } QtJambiMetaObject::~QtJambiMetaObject() @@ -2027,47 +2031,92 @@ int QtJambiMetaObject::readProperty(JNIEnv *env, jobject object, int _id, void * }else if (d->m_propertyMembers[_id].member){ QtJambiExceptionHandler __exceptionHandler; try{ - switch(d->m_propertyMembers[_id].type){ - case jValueType::z: - *reinterpret_cast(_a[0]) = env->GetBooleanField(object, d->m_propertyMembers[_id].member); - qtjambi_throw_java_exception(env); - break; - case jValueType::b: - *reinterpret_cast(_a[0]) = env->GetByteField(object, d->m_propertyMembers[_id].member); - qtjambi_throw_java_exception(env); - break; - case jValueType::s: - *reinterpret_cast(_a[0]) = env->GetShortField(object, d->m_propertyMembers[_id].member); - qtjambi_throw_java_exception(env); - break; - case jValueType::i: - *reinterpret_cast(_a[0]) = env->GetIntField(object, d->m_propertyMembers[_id].member); - qtjambi_throw_java_exception(env); - break; - case jValueType::j: - *reinterpret_cast(_a[0]) = env->GetLongField(object, d->m_propertyMembers[_id].member); - qtjambi_throw_java_exception(env); - break; - case jValueType::f: - *reinterpret_cast(_a[0]) = env->GetFloatField(object, d->m_propertyMembers[_id].member); - qtjambi_throw_java_exception(env); - break; - case jValueType::d: - *reinterpret_cast(_a[0]) = env->GetDoubleField(object, d->m_propertyMembers[_id].member); - qtjambi_throw_java_exception(env); - break; - case jValueType::c: - *reinterpret_cast(_a[0]) = env->GetCharField(object, d->m_propertyMembers[_id].member); - qtjambi_throw_java_exception(env); - break; - case jValueType::l:{ - jvalue value; - value.l = env->GetObjectField(object, d->m_propertyMembers[_id].member); + if(jclass context = d->m_propertyMembers[_id].staticAccessContext){ + switch(d->m_propertyMembers[_id].type){ + case jValueType::z: + *reinterpret_cast(_a[0]) = env->GetStaticBooleanField(context, d->m_propertyMembers[_id].member); + qtjambi_throw_java_exception(env); + break; + case jValueType::b: + *reinterpret_cast(_a[0]) = env->GetStaticByteField(context, d->m_propertyMembers[_id].member); + qtjambi_throw_java_exception(env); + break; + case jValueType::s: + *reinterpret_cast(_a[0]) = env->GetStaticShortField(context, d->m_propertyMembers[_id].member); + qtjambi_throw_java_exception(env); + break; + case jValueType::i: + *reinterpret_cast(_a[0]) = env->GetStaticIntField(context, d->m_propertyMembers[_id].member); + qtjambi_throw_java_exception(env); + break; + case jValueType::j: + *reinterpret_cast(_a[0]) = env->GetStaticLongField(context, d->m_propertyMembers[_id].member); + qtjambi_throw_java_exception(env); + break; + case jValueType::f: + *reinterpret_cast(_a[0]) = env->GetStaticFloatField(context, d->m_propertyMembers[_id].member); + qtjambi_throw_java_exception(env); + break; + case jValueType::d: + *reinterpret_cast(_a[0]) = env->GetStaticDoubleField(context, d->m_propertyMembers[_id].member); + qtjambi_throw_java_exception(env); + break; + case jValueType::c: + *reinterpret_cast(_a[0]) = env->GetStaticCharField(context, d->m_propertyMembers[_id].member); qtjambi_throw_java_exception(env); - QtJambiScope scope; - d->m_propertyMembers[_id].memberTypeInfo.convertExternalToInternal(env, &scope, value, _a[0], jValueType::l); + break; + case jValueType::l:{ + jvalue value; + value.l = env->GetStaticObjectField(context, d->m_propertyMembers[_id].member); + qtjambi_throw_java_exception(env); + QtJambiScope scope; + d->m_propertyMembers[_id].memberTypeInfo.convertExternalToInternal(env, &scope, value, _a[0], jValueType::l); + } + break; + } + }else{ + switch(d->m_propertyMembers[_id].type){ + case jValueType::z: + *reinterpret_cast(_a[0]) = env->GetBooleanField(object, d->m_propertyMembers[_id].member); + qtjambi_throw_java_exception(env); + break; + case jValueType::b: + *reinterpret_cast(_a[0]) = env->GetByteField(object, d->m_propertyMembers[_id].member); + qtjambi_throw_java_exception(env); + break; + case jValueType::s: + *reinterpret_cast(_a[0]) = env->GetShortField(object, d->m_propertyMembers[_id].member); + qtjambi_throw_java_exception(env); + break; + case jValueType::i: + *reinterpret_cast(_a[0]) = env->GetIntField(object, d->m_propertyMembers[_id].member); + qtjambi_throw_java_exception(env); + break; + case jValueType::j: + *reinterpret_cast(_a[0]) = env->GetLongField(object, d->m_propertyMembers[_id].member); + qtjambi_throw_java_exception(env); + break; + case jValueType::f: + *reinterpret_cast(_a[0]) = env->GetFloatField(object, d->m_propertyMembers[_id].member); + qtjambi_throw_java_exception(env); + break; + case jValueType::d: + *reinterpret_cast(_a[0]) = env->GetDoubleField(object, d->m_propertyMembers[_id].member); + qtjambi_throw_java_exception(env); + break; + case jValueType::c: + *reinterpret_cast(_a[0]) = env->GetCharField(object, d->m_propertyMembers[_id].member); + qtjambi_throw_java_exception(env); + break; + case jValueType::l:{ + jvalue value; + value.l = env->GetObjectField(object, d->m_propertyMembers[_id].member); + qtjambi_throw_java_exception(env); + QtJambiScope scope; + d->m_propertyMembers[_id].memberTypeInfo.convertExternalToInternal(env, &scope, value, _a[0], jValueType::l); + } + break; } - break; } }catch(const JavaException& exn){ __exceptionHandler.handle(env, exn, nullptr); @@ -2101,48 +2150,94 @@ int QtJambiMetaObject::writeProperty(JNIEnv *env, jobject object, int _id, void }else if (d->m_propertyMembers[_id].member && d->m_propertyMembers[_id].canWrite){ QtJambiExceptionHandler __exceptionHandler; try{ - switch(d->m_propertyMembers[_id].type){ - case jValueType::z: - env->SetBooleanField(object, d->m_propertyMembers[_id].member, *reinterpret_cast(_a[0])); - qtjambi_throw_java_exception(env); - break; - case jValueType::b: - env->SetByteField(object, d->m_propertyMembers[_id].member, *reinterpret_cast(_a[0])); - qtjambi_throw_java_exception(env); - break; - case jValueType::s: - env->SetShortField(object, d->m_propertyMembers[_id].member, *reinterpret_cast(_a[0])); - qtjambi_throw_java_exception(env); - break; - case jValueType::i: - env->SetIntField(object, d->m_propertyMembers[_id].member, *reinterpret_cast(_a[0])); - qtjambi_throw_java_exception(env); - break; - case jValueType::j: - env->SetLongField(object, d->m_propertyMembers[_id].member, *reinterpret_cast(_a[0])); - qtjambi_throw_java_exception(env); - break; - case jValueType::f: - env->SetFloatField(object, d->m_propertyMembers[_id].member, *reinterpret_cast(_a[0])); - qtjambi_throw_java_exception(env); - break; - case jValueType::d: - env->SetDoubleField(object, d->m_propertyMembers[_id].member, *reinterpret_cast(_a[0])); - qtjambi_throw_java_exception(env); - break; - case jValueType::c: - env->SetCharField(object, d->m_propertyMembers[_id].member, jchar(*reinterpret_cast(_a[0]))); - qtjambi_throw_java_exception(env); - break; - case jValueType::l: - jvalue value; - value.l = nullptr; - if (d->m_propertyMembers[_id].memberTypeInfo.convertInternalToExternal(env, nullptr, _a[0], &value, true)) { - env->SetObjectField(object, d->m_propertyMembers[_id].member, value.l); + if(jclass context = d->m_propertyMembers[_id].staticAccessContext){ + switch(d->m_propertyMembers[_id].type){ + case jValueType::z: + env->SetStaticBooleanField(context, d->m_propertyMembers[_id].member, *reinterpret_cast(_a[0])); + qtjambi_throw_java_exception(env); + break; + case jValueType::b: + env->SetStaticByteField(context, d->m_propertyMembers[_id].member, *reinterpret_cast(_a[0])); + qtjambi_throw_java_exception(env); + break; + case jValueType::s: + env->SetStaticShortField(context, d->m_propertyMembers[_id].member, *reinterpret_cast(_a[0])); + qtjambi_throw_java_exception(env); + break; + case jValueType::i: + env->SetStaticIntField(context, d->m_propertyMembers[_id].member, *reinterpret_cast(_a[0])); + qtjambi_throw_java_exception(env); + break; + case jValueType::j: + env->SetStaticLongField(context, d->m_propertyMembers[_id].member, *reinterpret_cast(_a[0])); + qtjambi_throw_java_exception(env); + break; + case jValueType::f: + env->SetStaticFloatField(context, d->m_propertyMembers[_id].member, *reinterpret_cast(_a[0])); qtjambi_throw_java_exception(env); break; + case jValueType::d: + env->SetStaticDoubleField(context, d->m_propertyMembers[_id].member, *reinterpret_cast(_a[0])); + qtjambi_throw_java_exception(env); + break; + case jValueType::c: + env->SetStaticCharField(context, d->m_propertyMembers[_id].member, jchar(*reinterpret_cast(_a[0]))); + qtjambi_throw_java_exception(env); + break; + case jValueType::l: + jvalue value; + value.l = nullptr; + if (d->m_propertyMembers[_id].memberTypeInfo.convertInternalToExternal(env, nullptr, _a[0], &value, true)) { + env->SetStaticObjectField(context, d->m_propertyMembers[_id].member, value.l); + qtjambi_throw_java_exception(env); + break; + } + break; + } + }else{ + switch(d->m_propertyMembers[_id].type){ + case jValueType::z: + env->SetBooleanField(object, d->m_propertyMembers[_id].member, *reinterpret_cast(_a[0])); + qtjambi_throw_java_exception(env); + break; + case jValueType::b: + env->SetByteField(object, d->m_propertyMembers[_id].member, *reinterpret_cast(_a[0])); + qtjambi_throw_java_exception(env); + break; + case jValueType::s: + env->SetShortField(object, d->m_propertyMembers[_id].member, *reinterpret_cast(_a[0])); + qtjambi_throw_java_exception(env); + break; + case jValueType::i: + env->SetIntField(object, d->m_propertyMembers[_id].member, *reinterpret_cast(_a[0])); + qtjambi_throw_java_exception(env); + break; + case jValueType::j: + env->SetLongField(object, d->m_propertyMembers[_id].member, *reinterpret_cast(_a[0])); + qtjambi_throw_java_exception(env); + break; + case jValueType::f: + env->SetFloatField(object, d->m_propertyMembers[_id].member, *reinterpret_cast(_a[0])); + qtjambi_throw_java_exception(env); + break; + case jValueType::d: + env->SetDoubleField(object, d->m_propertyMembers[_id].member, *reinterpret_cast(_a[0])); + qtjambi_throw_java_exception(env); + break; + case jValueType::c: + env->SetCharField(object, d->m_propertyMembers[_id].member, jchar(*reinterpret_cast(_a[0]))); + qtjambi_throw_java_exception(env); + break; + case jValueType::l: + jvalue value; + value.l = nullptr; + if (d->m_propertyMembers[_id].memberTypeInfo.convertInternalToExternal(env, nullptr, _a[0], &value, true)) { + env->SetObjectField(object, d->m_propertyMembers[_id].member, value.l); + qtjambi_throw_java_exception(env); + break; + } + break; } - break; } }catch(const JavaException& exn){ __exceptionHandler.handle(env, exn, nullptr); @@ -2394,6 +2489,7 @@ QSharedPointer QtJambiMetaObject::dispose(JNIEnv * env) const QMetaObject *qtjambi_metaobject_for_class(JNIEnv *env, jclass object_class, const std::function& original_meta_object_provider) { Q_ASSERT(object_class != nullptr); + Java::QtJambi::QtJambiInternal::initializePackage(env, object_class); // If original_meta_object is null then we have to look it up @@ -2414,13 +2510,15 @@ const QMetaObject *qtjambi_metaobject_for_class(JNIEnv *env, jclass object_class returned = original_meta_object_provider(basedOnCustomMetaObject); if(!returned && !basedOnCustomMetaObject){ JavaException exceptionHandler; - dynamicResult = new QtJambiMetaObject(env, object_class, nullptr, false, exceptionHandler); - if(exceptionHandler.object()){ - dynamicResult->dispose(env); - exceptionHandler.raise(); - }else{ - returned = dynamicResult; + dynamicResult = new QtJambiMetaObject(env, object_class); + try{ + dynamicResult->initialize(env, nullptr, false); + }catch(const JavaException& exn){ + (void)dynamicResult->dispose(env); + exn.raise(); + throw; } + returned = dynamicResult; } } else { const QMetaObject *original_meta_object = original_meta_object_provider(basedOnCustomMetaObject); @@ -2431,17 +2529,21 @@ const QMetaObject *qtjambi_metaobject_for_class(JNIEnv *env, jclass object_class #endif returned = original_meta_object; }else { - JavaException exceptionHandler; - dynamicResult = new QtJambiMetaObject(env, object_class, original_meta_object, basedOnCustomMetaObject, exceptionHandler); - if(exceptionHandler.object()){ - dynamicResult->dispose(env); - exceptionHandler.raise(); - }else if(basedOnCustomMetaObject){ - if(dynamicResult->d_ptr->m_signal_count>0){ + dynamicResult = new QtJambiMetaObject(env, object_class); + try{ + dynamicResult->initialize(env, original_meta_object, basedOnCustomMetaObject); + }catch(const JavaException& exn){ + (void)dynamicResult->dispose(env); + exn.raise(); + throw; + } + if(basedOnCustomMetaObject){ + int signal_count = dynamicResult->d_ptr->m_signal_count>0; + (void)dynamicResult->dispose(env); + if(signal_count>0){ QString class_name = qtjambi_class_name(env, object_class).replace("$", "."); JavaException::raiseUnsupportedOperationException(env, qPrintable(QString("Cannot define signals in class %1 because it extends type with dynamic meta object.").arg(class_name)) QTJAMBI_STACKTRACEINFO ); } - dynamicResult->dispose(env); returned = original_meta_object; }else{ returned = dynamicResult; @@ -2452,7 +2554,7 @@ const QMetaObject *qtjambi_metaobject_for_class(JNIEnv *env, jclass object_class Q_UNUSED(locker) // check if someone added a meta object meanwhile if(const QMetaObject *_returned = gMetaObjects->value(classHash, nullptr)){ - if(dynamicResult){ + if(dynamicResult && dynamicResult!=_returned){ dynamicResult->dispose(env); } return _returned; diff --git a/src/cpp/qtjambi/qtjambimetaobject_p.h b/src/cpp/qtjambi/qtjambimetaobject_p.h index 74da3c1a..6289b73f 100644 --- a/src/cpp/qtjambi/qtjambimetaobject_p.h +++ b/src/cpp/qtjambi/qtjambimetaobject_p.h @@ -72,8 +72,6 @@ class ParameterTypeInfo{ class QtJambiMetaObject final : public QMetaObject { public: - QtJambiMetaObject(JNIEnv *jni_env, jclass java_class, const QMetaObject *original_meta_object, bool hasCustomMetaObject, JavaException& exceptionHandler); - int invokeSignalOrSlot(JNIEnv *env, jobject object, int _id, void **_a, bool direct = false) const; int readProperty(JNIEnv *env, jobject object, int _id, void **_a, bool direct = false) const; int writeProperty(JNIEnv *env, jobject object, int _id, void **_a, bool direct = false) const; @@ -128,6 +126,8 @@ class QtJambiMetaObject final : public QMetaObject static const QList& methodParameterInfo(JNIEnv * env, const QMetaMethod& method); static jobject toReflected(JNIEnv * env, const QMetaMethod& method); private: + QtJambiMetaObject(JNIEnv *jni_env, jclass java_class); + void initialize(JNIEnv *env, const QMetaObject *original_meta_object, bool hasCustomMetaObject); void objectDestroyed(QObject *) /*override*/ {} ~QtJambiMetaObject() /*override*/; int metaCall(QObject *, QMetaObject::Call c, int _id, void **a) /*override*/; @@ -142,6 +142,7 @@ class QtJambiMetaObject final : public QMetaObject friend class DynamicMetaObjectFunctionTable; friend class DynamicMetaObjectInterfaceFunctionTable; friend QtSharedPointer::CustomDeleter; + friend const QMetaObject *qtjambi_metaobject_for_class(JNIEnv *env, jclass object_class, const std::function& original_meta_object_provider); }; #endif // QTDYNAMICMETAOBJECT_P_H diff --git a/src/cpp/qtjambi/qtjambishell.cpp b/src/cpp/qtjambi/qtjambishell.cpp index 6d7e680e..45c8b52c 100644 --- a/src/cpp/qtjambi/qtjambishell.cpp +++ b/src/cpp/qtjambi/qtjambishell.cpp @@ -153,7 +153,7 @@ void * QtJambiShell::qt_metacast(const char *className, bool* ok) if (jobject java_object = link->getJavaObjectLocalRef(env)) { QString name = qtjambi_object_class_name(env, java_object); if(name==className - || QString(name).replace(".", "::")==className + || QString(name).replace(".", "::").replace("$", "::")==className || QString(name).replace(".", "/")==className) // string compare rv = link->pointer(); // reuse the Shell } diff --git a/src/cpp/qtjambi/qtjambisignals.cpp b/src/cpp/qtjambi/qtjambisignals.cpp index c75d30a7..2af67aa6 100644 --- a/src/cpp/qtjambi/qtjambisignals.cpp +++ b/src/cpp/qtjambi/qtjambisignals.cpp @@ -744,39 +744,38 @@ void NativeSlotObject::impl(int which, QSlotObjectBase *this_, QObject *, void * break; case Call:{ NativeSlotObject* _this = static_cast(this_); - if(QSharedPointer link = _this->m_link.toStrongRef()){ + QSharedPointer link = _this->m_link.toStrongRef(); + if(link && link->isQObject()){ if(JNIEnv* env = qtjambi_current_environment()){ QTJAMBI_JNI_LOCAL_FRAME(env, 200) - QtJambiLinkScope scope(link); QtJambiExceptionHandler __qt_exnhandler; try{ - if(link->isQObject()){ - const QList& parameterTypeInfos = QtJambiMetaObject::methodParameterInfo(env, _this->m_signal); - if(parameterTypeInfos.size()){ - QVector converted_arguments(_this->m_argumentCount<0 ? parameterTypeInfos.size()-1 : qMin(_this->m_argumentCount, parameterTypeInfos.size()-1)); - - bool success = true; - for (int i = 0; i < converted_arguments.size(); ++i) { - const ParameterTypeInfo& parameterTypeInfo = parameterTypeInfos[i+1]; - converted_arguments[i].l = nullptr; - if(!parameterTypeInfo.convertInternalToExternal(env, &scope, a[i+1], &converted_arguments[i], true)){ - success = false; - break; - } + QtJambiLinkScope scope(link); + const QList& parameterTypeInfos = QtJambiMetaObject::methodParameterInfo(env, _this->m_signal); + if(parameterTypeInfos.size()){ + QVector converted_arguments(_this->m_argumentCount<0 ? parameterTypeInfos.size()-1 : qMin(_this->m_argumentCount, parameterTypeInfos.size()-1)); + + bool success = true; + for (int i = 0; i < converted_arguments.size(); ++i) { + const ParameterTypeInfo& parameterTypeInfo = parameterTypeInfos[i+1]; + converted_arguments[i].l = nullptr; + if(!parameterTypeInfo.convertInternalToExternal(env, &scope, a[i+1], &converted_arguments[i], true)){ + success = false; + break; } - if (success) { - jobjectArray args = Java::Runtime::Object::newArray(env, jsize(converted_arguments.size())); - for (int i=0; iSetObjectArrayElement(args, i, converted_arguments[i].l); - qtjambi_throw_java_exception(env); - } - Java::QtJambi::QtJambiSignals$AbstractConnection::invoke(env,_this->m_connection.object(), args); - } else { - qWarning("SlotObject::CallSignal: Failed to convert arguments"); + } + if (success) { + jobjectArray args = Java::Runtime::Object::newArray(env, jsize(converted_arguments.size())); + for (int i=0; iSetObjectArrayElement(args, i, converted_arguments[i].l); + qtjambi_throw_java_exception(env); } - }else{ - qWarning()<< "SlotObject::CallSignal: Failed to convert method types for signal " << _this->m_signal.methodSignature(); + Java::QtJambi::QtJambiSignals$AbstractConnection::invoke(env,_this->m_connection.object(), args); + } else { + qWarning("SlotObject::CallSignal: Failed to convert arguments"); } + }else{ + qWarning()<< "SlotObject::CallSignal: Failed to convert method types for signal " << _this->m_signal.methodSignature(); } } catch (const JavaException& exn) { if(_this->m_nothrow){ @@ -797,3 +796,279 @@ void NativeSlotObject::impl(int which, QSlotObjectBase *this_, QObject *, void * case NumOperations: ; } } + + +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + +typedef QVarLengthArray QArgumentTypeArray; + +namespace QtJambi{ + + class ConvertingSlotObject : public QtPrivate::QSlotObjectBase + { + public: + ConvertingSlotObject(const QMetaMethod& signal, const QMetaMethod& method, Qt::ConnectionType type, QSet&& converter); + ~ConvertingSlotObject(); + int* types(); + private: + static void impl(int which, QSlotObjectBase *this_, QObject *r, void **a, bool *ret); + QMetaMethod m_signal; + QMetaMethod m_method; + QSet m_converter; + int* const m_types; + }; + + ConvertingSlotObject::ConvertingSlotObject(const QMetaMethod& _signal, const QMetaMethod& method, Qt::ConnectionType type, QSet&& converter) + : QSlotObjectBase(&ConvertingSlotObject::impl), + m_signal(_signal), + m_method(method), + m_converter(std::move(converter)), + m_types( + [](const QMetaMethod& signal, jint connectionType)->int*{ + if (connectionType == Qt::QueuedConnection || connectionType == Qt::BlockingQueuedConnection){ + int *types = new int[size_t(signal.parameterCount())]; + for (int i = 0; i < signal.parameterCount(); ++i) { + if(i == signal.parameterCount()-1){ + types[i] = 0; + }else{ + types[i] = signal.parameterType(i); + } + } + return types; + } + return nullptr; + }(_signal, type) + ) + { + } + + ConvertingSlotObject::~ConvertingSlotObject() + { + if(m_types) + delete[] m_types; + } + + int* ConvertingSlotObject::types() { return m_types; } + + void ConvertingSlotObject::impl(int which, QSlotObjectBase *this_, QObject *receiver, void **a, bool *ret){ + switch (which) { + case Destroy: + delete static_cast(this_); + break; + case Call:{ + ConvertingSlotObject* _this = static_cast(this_); + QList variants; + QList newArgs; + if(!_this->m_converter.isEmpty()){ + newArgs.resize(_this->m_method.parameterCount()+1); + variants.resize(_this->m_method.parameterCount()); + newArgs[0] = a[0]; + for(int i=0; i<_this->m_method.parameterCount(); ++i){ + if(_this->m_converter.contains(i)){ + QMetaType sourceType = _this->m_signal.parameterMetaType(i); + QMetaType targetType = _this->m_method.parameterMetaType(i); + variants[i] = QVariant(sourceType, a[i+1]); + variants[i].convert(targetType); + newArgs[i+1] = variants[i].data(); + }else{ + newArgs[i+1] = a[i+1]; + } + } + a = newArgs.data(); + } + QObjectPrivate::StaticMetaCallFunction callFunction = _this->m_method.enclosingMetaObject()->d.static_metacall; + if (callFunction) { + callFunction(receiver, QMetaObject::InvokeMetaMethod, _this->m_method.methodIndex() - _this->m_method.enclosingMetaObject()->methodOffset(), a); + } else { + QMetaObject::metacall(receiver, QMetaObject::InvokeMetaMethod, _this->m_method.methodIndex(), a); + } + } + break; + case Compare:{ + ConvertingSlotObject* _this = static_cast(this_); + ConvertingSlotObject* other = static_cast(a[0]); + *ret = other->m_method==_this->m_method && other->m_signal==_this->m_signal; + } + break; + case NumOperations: ; + } + } + + inline int extract_code(const char *member) + { + // extract code, ensure QMETHOD_CODE <= code <= QSIGNAL_CODE + return (((int)(*member) - '0') & 0x3); + } + + bool check_signal_macro(const char *signal) + { + int sigcode = extract_code(signal); + if (sigcode != QSIGNAL_CODE) { + return false; + } + return true; + } + + int *queuedConnectionTypes(const QMetaMethod &method) + { + const auto parameterCount = method.parameterCount(); + int *typeIds = new int[parameterCount + 1]; + Q_CHECK_PTR(typeIds); + for (int i = 0; i < parameterCount; ++i) { + const QMetaType metaType = method.parameterMetaType(i); + if (metaType.flags() & QMetaType::IsPointer) + typeIds[i] = QMetaType::VoidStar; + else + typeIds[i] = metaType.id(); + if (!typeIds[i]) { + delete[] typeIds; + return nullptr; + } + } + typeIds[parameterCount] = 0; + + return typeIds; + } + + int *queuedConnectionTypes(const QArgumentType *argumentTypes, int argc) + { + auto types = std::make_unique(argc + 1); + for (int i = 0; i < argc; ++i) { + const QArgumentType &type = argumentTypes[i]; + if (type.type()) + types[i] = type.type(); + else if (type.name().endsWith('*')) + types[i] = QMetaType::VoidStar; + else + types[i] = QMetaType::fromName(type.name()).id(); + + if (!types[i]) { + return nullptr; + } + } + types[argc] = 0; + + return types.release(); + } + + bool checkConnectArgs(const QMetaMethod &signal, + const QMetaMethod &method, QSet& converter){ + if(method.parameterCount()<=signal.parameterCount()){ + for(int i=0; i()){ + if(JNIEnv* env = qtjambi_current_environment()){ + QTJAMBI_JNI_LOCAL_FRAME(env, 200) + jclass clazz = qtjambi_class_for_metatype(env, sourceType); + if(Java::QtJambi::QFlags::isAssignableFrom(env, clazz)){ + converter.insert(i); + continue; + } + } + if(!isJObjectWrappedMetaType(sourceType) && !JObjectValueWrapper::isValueType(sourceType)){ + return false; + } + }else if(targetType==QMetaType::fromType() + || targetType==QMetaType::fromType() + || targetType==QMetaType::fromType()){ + if(!isJObjectWrappedMetaType(sourceType) && !JObjectValueWrapper::isValueType(sourceType)){ + return false; + } + }else if(targetType==QMetaType::fromType()){ + converter.insert(i); + } + } + return true; + } + return false; + } + + QMetaObject::Connection connect(const QObject *sender, const char *signal, + const QObject *receiver, const char *method, + Qt::ConnectionType type){ + if (sender == nullptr || receiver == nullptr || signal == nullptr || method == nullptr) { + return QObject::connect(sender, signal, receiver, method, type); + } + QByteArray tmp_signal_name; + + if (!check_signal_macro(signal)) + return QObject::connect(sender, signal, receiver, method, type); + const QMetaObject *smeta = sender->metaObject(); + ++signal; // skip code + QArgumentTypeArray signalTypes; + Q_ASSERT(QMetaObjectPrivate::get(smeta)->revision >= 7); + int signal_index = smeta->indexOfMethod(signal); + if (signal_index < 0) { + // check for normalized signatures + tmp_signal_name = QMetaObject::normalizedSignature(signal - 1); + signal = tmp_signal_name.constData() + 1; + signalTypes.clear(); + smeta = sender->metaObject(); + signal_index = smeta->indexOfMethod(signal); + } + if (signal_index < 0) { + return QObject::connect(sender, signal, receiver, method, type); + } + QMetaMethod msignal = smeta->method(signal_index); + + QByteArray tmp_method_name; + int membcode = extract_code(method); + + if (membcode != QSLOT_CODE && membcode != QSIGNAL_CODE) + return QObject::connect(sender, signal, receiver, method, type); + ++method; // skip code + + const QMetaObject *rmeta = receiver->metaObject(); + int method_index = rmeta->indexOfMethod(method); + if (method_index < 0) { + // check for normalized methods + tmp_method_name = QMetaObject::normalizedSignature(method); + method = tmp_method_name.constData(); + method_index = rmeta->indexOfMethod(method); + } + + if (method_index < 0) { + return QObject::connect(sender, signal, receiver, method, type); + } + QMetaMethod mmethod = rmeta->method(method_index); + return connect(sender, msignal, receiver, mmethod, type); + } + + QMetaObject::Connection connect(const QObject *sender, const QMetaMethod &signal, + const QObject *receiver, const QMetaMethod &method, + Qt::ConnectionType type){ + if (sender == nullptr + || receiver == nullptr + || signal.methodType() != QMetaMethod::Signal + || method.methodType() == QMetaMethod::Constructor) { + return QObject::connect(sender, signal, receiver, method, type); + } + + int signal_index = QMetaObjectPrivate::signalIndex(signal); + int method_index = method.methodIndex(); + + if (signal_index == -1 || method_index == -1) { + return QObject::connect(sender, signal, receiver, method, type); + } + + if (!QMetaObject::checkConnectArgs(signal.methodSignature().constData(), + method.methodSignature().constData())) { + QSet converter; + if(checkConnectArgs(signal, method, converter)){ + ConvertingSlotObject *slotObj = new ConvertingSlotObject(signal, method, type, std::move(converter)); + return QObjectPrivate::connectImpl(sender, + signal_index, + receiver, + nullptr, + slotObj, + type, + slotObj->types(), + signal.enclosingMetaObject()); + } + } + return QObject::connect(sender, signal, receiver, method, type); + } +} + +#endif diff --git a/src/cpp/qtjambi/qtjambitypemanager.cpp b/src/cpp/qtjambi/qtjambitypemanager.cpp index f9db1043..24353881 100644 --- a/src/cpp/qtjambi/qtjambitypemanager.cpp +++ b/src/cpp/qtjambi/qtjambitypemanager.cpp @@ -74,7 +74,9 @@ QT_WARNING_DISABLE_GCC("-Winit-list-lifetime") #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) #define QtJambiMetaType QMetaType +#define METATYPE_ID(metaType) metaType.id() #else +#define METATYPE_ID(metaTypeId) metaTypeId class QtJambiMetaType{ public: inline QtJambiMetaType() : m_metaType(new QMetaType()) {} @@ -487,7 +489,12 @@ QStringList QtJambiTypeManager::parseSignature(const QString &signature, QString return returned; } +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) QList registeredCustomMetaTypesForJavaClass(const QByteArray& javaClass); +#else +QList registeredCustomMetaTypesForJavaClass(const QByteArray& javaClass); +#endif + EntryTypes getEntryType(const std::type_info& typeId); QString QtJambiTypeManager::getInternalTypeName(JNIEnv* env, jclass externalClass, bool useNextSuperclass) { @@ -570,11 +577,18 @@ QString QtJambiTypeManager::getInternalTypeName(JNIEnv* env, jclass externalClas return qtName; } }else{ +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) QList metaTypeIDs = registeredCustomMetaTypesForJavaClass(externalTypeName.toLatin1()); if(metaTypeIDs.size()==1 && metaTypeIDs[0]!=0){ return QLatin1String(QMetaType(metaTypeIDs[0]).name()); } - QString internalTypeName = QString(externalTypeName).replace(QLatin1String("/"), QLatin1String("::")); +#else + QList metaTypeIDs = registeredCustomMetaTypesForJavaClass(externalTypeName.toLatin1()); + if(metaTypeIDs.size()==1 && metaTypeIDs[0].isValid()){ + return QLatin1String(metaTypeIDs[0].name()); + } +#endif + QString internalTypeName = QString(externalTypeName).replace(QLatin1String("/"), QLatin1String("::")).replace(QLatin1String("$"), QLatin1String("::")); if(QMetaType::type(qPrintable(internalTypeName))!=QMetaType::UnknownType){ return internalTypeName; } @@ -582,7 +596,7 @@ QString QtJambiTypeManager::getInternalTypeName(JNIEnv* env, jclass externalClas if(QMetaType::type(qPrintable(internalTypeName))!=QMetaType::UnknownType){ return internalTypeName; } - internalTypeName = QString(externalTypeName).replace(QLatin1String("/"), QLatin1String("::")) + QLatin1String("&"); + internalTypeName = QString(externalTypeName).replace(QLatin1String("/"), QLatin1String("::")).replace(QLatin1String("$"), QLatin1String("::")) + QLatin1String("&"); if(QMetaType::type(qPrintable(internalTypeName))!=QMetaType::UnknownType){ return internalTypeName; } @@ -598,21 +612,7 @@ QString QtJambiTypeManager::getInternalTypeName(JNIEnv* env, jclass externalClas return qtName; } } - if(Java::Runtime::Map::isAssignableFrom(env, externalClass)){ - return QLatin1String("JMapWrapper"); - }else if(Java::Runtime::Collection::isAssignableFrom(env, externalClass)){ - return QLatin1String("JCollectionWrapper"); - }else if(Java::Runtime::Iterator::isAssignableFrom(env, externalClass)){ - return QLatin1String("JIteratorWrapper"); - }else if(Java::Runtime::Enum::isAssignableFrom(env, externalClass) - || Java::QtJambi::QtEnumerator::isAssignableFrom(env, externalClass) - || Java::QtJambi::QtLongEnumerator::isAssignableFrom(env, externalClass) - || Java::QtJambi::QtShortEnumerator::isAssignableFrom(env, externalClass) - || Java::QtJambi::QtByteEnumerator::isAssignableFrom(env, externalClass)){ - return QLatin1String("JEnumWrapper"); - }else{ - return QLatin1String("JObjectWrapper"); - } + return {}; } } } @@ -669,7 +669,11 @@ QString QtJambiTypeManager::getExternalTypeName(JNIEnv *env, const QString &inte return result; } +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) +QByteArray registeredJavaClassForCustomMetaType(QMetaType metaType); +#else QByteArray registeredJavaClassForCustomMetaType(const QMetaType& metaType); +#endif QString QtJambiTypeManager::getExternalTypeName(JNIEnv* environment, const QString &_internalTypeName, const QMetaType& metaType) { switch(metaType.id()){ @@ -1104,6 +1108,18 @@ InternalToExternalConverter QtJambiTypeManager::getInternalToExternalConverterIm return [](JNIEnv*, QtJambiScope*, const void*, jvalue*, bool)->bool{ return false; }; +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + }else if(JObjectValueWrapper::isValueType(internalMetaType)){ + return [](JNIEnv* env, QtJambiScope*, const void* in, jvalue* p, bool)->bool{ + p->l = reinterpret_cast(in)->value(env); + return true; + }; + }else if(isJObjectWrappedMetaType(internalMetaType)){ + return [](JNIEnv* env, QtJambiScope*, const void* in, jvalue* p, bool)->bool{ + p->l = env->NewLocalRef(reinterpret_cast(in)->object()); + return true; + }; +#endif } bool isArrayClass = externalClass ? Java::Runtime::Class::isArray(_env, externalClass) : false; @@ -2422,6 +2438,12 @@ InternalToExternalConverter QtJambiTypeManager::getInternalToExternalConverterIm typeId = getTypeByMetaType(internalMetaType); } } + if(!typeId){ + const SuperTypeInfos& superTypeInfos = getSuperTypeInfos(_env, externalClass); + if(!superTypeInfos.isEmpty()){ + typeId = &superTypeInfos[0].typeId(); + } + } if(typeId){ if (Java::QtCore::QObject::isAssignableFrom(_env,externalClass)) { if(pointerType == PointerType::SharedPointer){ @@ -3076,6 +3098,37 @@ ExternalToInternalConverter QtJambiTypeManager::getExternalToInternalConverterIm return [](JNIEnv*, QtJambiScope*, const jvalue&, void* &, jValueType) -> bool{ return false; }; +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + }else if(JObjectValueWrapper::isValueType(internalMetaType)){ + QMetaType _internalMetaType = internalMetaType; + return [_internalMetaType, externalClass](JNIEnv* env, QtJambiScope* scope, const jvalue& val, void* &out, jValueType) -> bool{ + if(val.l && !env->IsInstanceOf(val.l, externalClass)) + Java::Runtime::IllegalArgumentException::throwNew(env, QString("Wrong argument given: %1, expected: %2").arg(qtjambi_object_class_name(env, val.l).replace("$", ".")).arg(qtjambi_class_name(env, externalClass).replace("$", ".")) QTJAMBI_STACKTRACEINFO ); + if(scope && !out){ + JObjectValueWrapper* ptr; + out = ptr = new JObjectValueWrapper; + scope->addDeletion(ptr); + } + if(!out) + return false; + *reinterpret_cast(out) = JObjectValueWrapper::create(env, val.l, _internalMetaType); + return true; + }; + }else if(isJObjectWrappedMetaType(internalMetaType)){ + return [externalClass](JNIEnv* env, QtJambiScope* scope, const jvalue& val, void* &out, jValueType) -> bool{ + if(val.l && !env->IsInstanceOf(val.l, externalClass)) + Java::Runtime::IllegalArgumentException::throwNew(env, QString("Wrong argument given: %1, expected: %2").arg(qtjambi_object_class_name(env, val.l).replace("$", ".")).arg(qtjambi_class_name(env, externalClass).replace("$", ".")) QTJAMBI_STACKTRACEINFO ); + if(scope && !out){ + JObjectWrapper* ptr; + out = ptr = new JObjectWrapper; + scope->addDeletion(ptr); + } + if(!out) + return false; + *reinterpret_cast(out) = JObjectWrapper(env, val.l); + return true; + }; +#endif } bool isArrayClass = Java::Runtime::Class::isArray(_env, externalClass); @@ -3930,8 +3983,13 @@ ExternalToInternalConverter QtJambiTypeManager::getExternalToInternalConverterIm }; } } else if (Java::QtCore::QMetaType$GenericValue::isSameClass(_env,externalClass)) { +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) int _internalMetaType = internalMetaType.id(); - if(internalTypeName.endsWith("*")){ + if(qtjambi_is_pointer_type(internalTypeName)){ +#else + QMetaType _internalMetaType = internalMetaType; + if(internalMetaType.flags() & QMetaType::IsPointer){ +#endif return [_internalMetaType](JNIEnv* env, QtJambiScope* scope, const jvalue& val, void* &out, jValueType) -> bool{ void* ptr = nullptr; if(val.l){ @@ -3939,11 +3997,11 @@ ExternalToInternalConverter QtJambiTypeManager::getExternalToInternalConverterIm QString className = qtjambi_object_class_name(env, val.l); bool matches = false; if(const std::type_info* typeId = getTypeByJavaName(className)){ - if(registeredMetaTypeID(*typeId)==_internalMetaType) + if(registeredMetaTypeID(*typeId)==METATYPE_ID(_internalMetaType)) matches = true; } if(!matches){ - for(int mtype : registeredCustomMetaTypesForJavaClass(className.toLatin1())){ + for(auto mtype : registeredCustomMetaTypesForJavaClass(className.toLatin1())){ if(mtype==_internalMetaType) matches = true; } @@ -3951,10 +4009,17 @@ ExternalToInternalConverter QtJambiTypeManager::getExternalToInternalConverterIm if(!matches) Java::Runtime::IllegalArgumentException::throwNew(env, QString("Wrong argument given: %1, expected: %2").arg(qtjambi_object_class_name(env, val.l).replace("$", ".")).arg(qtjambi_class_name(env, Java::QtCore::QMetaType$GenericValue::getClass(env)).replace("$", ".")) QTJAMBI_STACKTRACEINFO ); }else{ +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) int given = qtjambi_cast(env, Java::QtCore::QMetaType$GenericTypeInterface::metaType(env, val.l)).id(); if(_internalMetaType!=given){ JavaException::raiseIllegalArgumentException(env, qPrintable(QString("Wrong argument given: %1, expected: %2").arg(QMetaType::typeName(given)).arg(QMetaType::typeName(_internalMetaType))) QTJAMBI_STACKTRACEINFO ); } +#else + const QMetaType& given = qtjambi_cast(env, Java::QtCore::QMetaType$GenericTypeInterface::metaType(env, val.l)); + if(_internalMetaType!=given){ + JavaException::raiseIllegalArgumentException(env, qPrintable(QString("Wrong argument given: %1, expected: %2").arg(given.name()).arg(_internalMetaType.name())) QTJAMBI_STACKTRACEINFO ); + } +#endif } if(const QSharedPointer& link = QtJambiLink::findLinkForJavaObject(env, val.l)){ ptr = link->pointer(); @@ -3978,11 +4043,11 @@ ExternalToInternalConverter QtJambiTypeManager::getExternalToInternalConverterIm QString className = qtjambi_object_class_name(env, val.l); bool matches = false; if(const std::type_info* typeId = getTypeByJavaName(className)){ - if(registeredMetaTypeID(*typeId)==_internalMetaType) + if(registeredMetaTypeID(*typeId)==METATYPE_ID(_internalMetaType)) matches = true; } if(!matches){ - for(int mtype : registeredCustomMetaTypesForJavaClass(className.toLatin1())){ + for(auto mtype : registeredCustomMetaTypesForJavaClass(className.toLatin1())){ if(mtype==_internalMetaType) matches = true; } @@ -3990,35 +4055,56 @@ ExternalToInternalConverter QtJambiTypeManager::getExternalToInternalConverterIm if(!matches) Java::Runtime::IllegalArgumentException::throwNew(env, QString("Wrong argument given: %1, expected: %2").arg(qtjambi_object_class_name(env, val.l).replace("$", ".")).arg(qtjambi_class_name(env, Java::QtCore::QMetaType$GenericValue::getClass(env)).replace("$", ".")) QTJAMBI_STACKTRACEINFO ); }else{ +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) int given = qtjambi_cast(env, Java::QtCore::QMetaType$GenericTypeInterface::metaType(env, val.l)).id(); if(_internalMetaType!=given){ JavaException::raiseIllegalArgumentException(env, qPrintable(QString("Wrong argument given: %1, expected: %2").arg(QMetaType::typeName(given)).arg(QMetaType::typeName(_internalMetaType))) QTJAMBI_STACKTRACEINFO ); } +#else + const QMetaType& given = qtjambi_cast(env, Java::QtCore::QMetaType$GenericTypeInterface::metaType(env, val.l)); + if(_internalMetaType!=given){ + JavaException::raiseIllegalArgumentException(env, qPrintable(QString("Wrong argument given: %1, expected: %2").arg(given.name()).arg(_internalMetaType.name())) QTJAMBI_STACKTRACEINFO ); + } +#endif } if(const QSharedPointer& link = QtJambiLink::findLinkForJavaObject(env, val.l)){ void* nptr = link->pointer(); if(scope && !out){ void* ptr; - out = ptr = QMetaType::create(_internalMetaType, nptr); #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) + out = ptr = QMetaType::create(_internalMetaType, nptr); scope->addDeletion(_internalMetaType, ptr); #else - scope->addDeletion(QMetaType(_internalMetaType), ptr); + out = ptr = _internalMetaType.create(nptr); + scope->addDeletion(_internalMetaType, ptr); #endif }else if(out){ +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) QMetaType::destruct(_internalMetaType, out); if(QMetaType::construct(_internalMetaType, out, nptr)!=out){ +#else + _internalMetaType.destruct(out); + if(_internalMetaType.construct(out, nptr)!=out){ +#endif QByteArray ba; bool saved; /* write the copy to the stream */ { QDataStream stream(&ba, QIODevice::WriteOnly); +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) saved = QMetaType::save(stream, _internalMetaType, nptr); +#else + saved = _internalMetaType.save(stream, nptr); +#endif } /* read it back into the destination */ if(saved){ QDataStream stream(&ba, QIODevice::ReadOnly); +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) QMetaType::load(stream, _internalMetaType, out); +#else + _internalMetaType.load(stream, out); +#endif }else{ return false; } @@ -4033,11 +4119,12 @@ ExternalToInternalConverter QtJambiTypeManager::getExternalToInternalConverterIm }else{ if(scope && !out){ void* ptr; - out = ptr = QMetaType::create(_internalMetaType); #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) + out = ptr = QMetaType::create(_internalMetaType); scope->addDeletion(_internalMetaType, ptr); #else - scope->addDeletion(QMetaType(_internalMetaType), ptr); + out = ptr = _internalMetaType.create(); + scope->addDeletion(_internalMetaType, ptr); #endif } return out; @@ -4045,8 +4132,13 @@ ExternalToInternalConverter QtJambiTypeManager::getExternalToInternalConverterIm }; } } else if (Java::QtCore::QMetaType$GenericObject::isSameClass(_env,externalClass)) { +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) int _internalMetaType = internalMetaType.id(); if(qtjambi_is_pointer_type(internalTypeName)){ +#else + QMetaType _internalMetaType = internalMetaType; + if(internalMetaType.flags() & QMetaType::IsPointer){ +#endif return [_internalMetaType](JNIEnv* env, QtJambiScope* scope, const jvalue& val, void* &out, jValueType) -> bool{ void* ptr = nullptr; if(val.l){ @@ -4054,11 +4146,11 @@ ExternalToInternalConverter QtJambiTypeManager::getExternalToInternalConverterIm QString className = qtjambi_object_class_name(env, val.l); bool matches = false; if(const std::type_info* typeId = getTypeByJavaName(className)){ - if(registeredMetaTypeID(*typeId)==_internalMetaType) + if(registeredMetaTypeID(*typeId)==METATYPE_ID(_internalMetaType)) matches = true; } if(!matches){ - for(int mtype : registeredCustomMetaTypesForJavaClass(className.toLatin1())){ + for(auto mtype : registeredCustomMetaTypesForJavaClass(className.toLatin1())){ if(mtype==_internalMetaType) matches = true; } @@ -4066,10 +4158,17 @@ ExternalToInternalConverter QtJambiTypeManager::getExternalToInternalConverterIm if(!matches) Java::Runtime::IllegalArgumentException::throwNew(env, QString("Wrong argument given: %1, expected: %2").arg(qtjambi_object_class_name(env, val.l).replace("$", ".")).arg(qtjambi_class_name(env, Java::QtCore::QMetaType$GenericObject::getClass(env)).replace("$", ".")) QTJAMBI_STACKTRACEINFO ); }else{ +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) int given = qtjambi_cast(env, Java::QtCore::QMetaType$GenericTypeInterface::metaType(env, val.l)).id(); if(_internalMetaType!=given){ JavaException::raiseIllegalArgumentException(env, qPrintable(QString("Wrong argument given: %1, expected: %2").arg(QMetaType::typeName(given)).arg(QMetaType::typeName(_internalMetaType))) QTJAMBI_STACKTRACEINFO ); } +#else + const QMetaType& given = qtjambi_cast(env, Java::QtCore::QMetaType$GenericTypeInterface::metaType(env, val.l)); + if(_internalMetaType!=given){ + JavaException::raiseIllegalArgumentException(env, qPrintable(QString("Wrong argument given: %1, expected: %2").arg(given.name()).arg(_internalMetaType.name())) QTJAMBI_STACKTRACEINFO ); + } +#endif } if(const QSharedPointer& link = QtJambiLink::findLinkForJavaObject(env, val.l)){ ptr = link->pointer(); @@ -4093,11 +4192,11 @@ ExternalToInternalConverter QtJambiTypeManager::getExternalToInternalConverterIm QString className = qtjambi_object_class_name(env, val.l); bool matches = false; if(const std::type_info* typeId = getTypeByJavaName(className)){ - if(registeredMetaTypeID(*typeId)==_internalMetaType) + if(registeredMetaTypeID(*typeId)==METATYPE_ID(_internalMetaType)) matches = true; } if(!matches){ - for(int mtype : registeredCustomMetaTypesForJavaClass(className.toLatin1())){ + for(auto mtype : registeredCustomMetaTypesForJavaClass(className.toLatin1())){ if(mtype==_internalMetaType) matches = true; } @@ -4105,35 +4204,56 @@ ExternalToInternalConverter QtJambiTypeManager::getExternalToInternalConverterIm if(!matches) Java::Runtime::IllegalArgumentException::throwNew(env, QString("Wrong argument given: %1, expected: %2").arg(qtjambi_object_class_name(env, val.l).replace("$", ".")).arg(qtjambi_class_name(env, Java::QtCore::QMetaType$GenericObject::getClass(env)).replace("$", ".")) QTJAMBI_STACKTRACEINFO ); }else{ +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) int given = qtjambi_cast(env, Java::QtCore::QMetaType$GenericTypeInterface::metaType(env, val.l)).id(); if(_internalMetaType!=given){ JavaException::raiseIllegalArgumentException(env, qPrintable(QString("Wrong argument given: %1, expected: %2").arg(QMetaType::typeName(given)).arg(QMetaType::typeName(_internalMetaType))) QTJAMBI_STACKTRACEINFO ); } +#else + const QMetaType& given = qtjambi_cast(env, Java::QtCore::QMetaType$GenericTypeInterface::metaType(env, val.l)); + if(_internalMetaType!=given){ + JavaException::raiseIllegalArgumentException(env, qPrintable(QString("Wrong argument given: %1, expected: %2").arg(given.name()).arg(_internalMetaType.name())) QTJAMBI_STACKTRACEINFO ); + } +#endif } if(const QSharedPointer& link = QtJambiLink::findLinkForJavaObject(env, val.l)){ void* nptr = link->pointer(); if(scope && !out){ void* ptr; - out = ptr = QMetaType::create(_internalMetaType, nptr); #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) + out = ptr = QMetaType::create(_internalMetaType, nptr); scope->addDeletion(_internalMetaType, ptr); #else - scope->addDeletion(QMetaType(_internalMetaType), ptr); + out = ptr = _internalMetaType.create(nptr); + scope->addDeletion(_internalMetaType, ptr); #endif }else if(out){ +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) QMetaType::destruct(_internalMetaType, out); if(QMetaType::construct(_internalMetaType, out, nptr)!=out){ +#else + _internalMetaType.destruct(out); + if(_internalMetaType.construct(out, nptr)!=out){ +#endif QByteArray ba; bool saved; /* write the copy to the stream */ { QDataStream stream(&ba, QIODevice::WriteOnly); +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) saved = QMetaType::save(stream, _internalMetaType, nptr); +#else + saved = _internalMetaType.save(stream, nptr); +#endif } /* read it back into the destination */ if(saved){ QDataStream stream(&ba, QIODevice::ReadOnly); +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) QMetaType::load(stream, _internalMetaType, out); +#else + _internalMetaType.load(stream, out); +#endif }else{ return false; } @@ -4148,11 +4268,12 @@ ExternalToInternalConverter QtJambiTypeManager::getExternalToInternalConverterIm }else{ if(scope && !out){ void* ptr; - out = ptr = QMetaType::create(_internalMetaType); #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) + out = ptr = QMetaType::create(_internalMetaType); scope->addDeletion(_internalMetaType, ptr); #else - scope->addDeletion(QMetaType(_internalMetaType), ptr); + out = ptr = _internalMetaType.create(); + scope->addDeletion(_internalMetaType, ptr); #endif } return out; @@ -4160,19 +4281,23 @@ ExternalToInternalConverter QtJambiTypeManager::getExternalToInternalConverterIm }; } } else if (Java::QtCore::QMetaType$GenericGadget::isSameClass(_env,externalClass)) { +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) + int _internalMetaType = internalMetaType.id(); +#else + QMetaType _internalMetaType = internalMetaType; +#endif if(internalTypeName.endsWith("&")){ - int _internalMetaType = internalMetaType.id(); return [_internalMetaType](JNIEnv* env, QtJambiScope*, const jvalue& val, void* &out, jValueType) -> bool{ if(val.l){ if(!Java::QtCore::QMetaType$GenericGadget::isInstanceOf(env, val.l)){ QString className = qtjambi_object_class_name(env, val.l); bool matches = false; if(const std::type_info* typeId = getTypeByJavaName(className)){ - if(registeredMetaTypeID(*typeId)==_internalMetaType) + if(registeredMetaTypeID(*typeId)==METATYPE_ID(_internalMetaType)) matches = true; } if(!matches){ - for(int mtype : registeredCustomMetaTypesForJavaClass(className.toLatin1())){ + for(auto mtype : registeredCustomMetaTypesForJavaClass(className.toLatin1())){ if(mtype==_internalMetaType) matches = true; } @@ -4180,10 +4305,17 @@ ExternalToInternalConverter QtJambiTypeManager::getExternalToInternalConverterIm if(!matches) Java::Runtime::IllegalArgumentException::throwNew(env, QString("Wrong argument given: %1, expected: %2").arg(qtjambi_object_class_name(env, val.l).replace("$", ".")).arg(qtjambi_class_name(env, Java::QtCore::QMetaType$GenericGadget::getClass(env)).replace("$", ".")) QTJAMBI_STACKTRACEINFO ); }else{ +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) int given = qtjambi_cast(env, Java::QtCore::QMetaType$GenericTypeInterface::metaType(env, val.l)).id(); if(_internalMetaType!=given){ JavaException::raiseIllegalArgumentException(env, qPrintable(QString("Wrong argument given: %1, expected: %2").arg(QMetaType::typeName(given)).arg(QMetaType::typeName(_internalMetaType))) QTJAMBI_STACKTRACEINFO ); } +#else + const QMetaType& given = qtjambi_cast(env, Java::QtCore::QMetaType$GenericTypeInterface::metaType(env, val.l)); + if(_internalMetaType!=given){ + JavaException::raiseIllegalArgumentException(env, qPrintable(QString("Wrong argument given: %1, expected: %2").arg(given.name()).arg(_internalMetaType.name())) QTJAMBI_STACKTRACEINFO ); + } +#endif } if(const QSharedPointer& link = QtJambiLink::findLinkForJavaObject(env, val.l)){ out = link->pointer(); @@ -4196,7 +4328,6 @@ ExternalToInternalConverter QtJambiTypeManager::getExternalToInternalConverterIm return true; }; }else{ - int _internalMetaType = internalMetaType.id(); return [_internalMetaType](JNIEnv* env, QtJambiScope* scope, const jvalue& val, void* &out, jValueType) -> bool{ void* ptr = nullptr; if(val.l){ @@ -4204,11 +4335,11 @@ ExternalToInternalConverter QtJambiTypeManager::getExternalToInternalConverterIm QString className = qtjambi_object_class_name(env, val.l); bool matches = false; if(const std::type_info* typeId = getTypeByJavaName(className)){ - if(registeredMetaTypeID(*typeId)==_internalMetaType) + if(registeredMetaTypeID(*typeId)==METATYPE_ID(_internalMetaType)) matches = true; } if(!matches){ - for(int mtype : registeredCustomMetaTypesForJavaClass(className.toLatin1())){ + for(auto mtype : registeredCustomMetaTypesForJavaClass(className.toLatin1())){ if(mtype==_internalMetaType) matches = true; } @@ -4216,10 +4347,17 @@ ExternalToInternalConverter QtJambiTypeManager::getExternalToInternalConverterIm if(!matches) Java::Runtime::IllegalArgumentException::throwNew(env, QString("Wrong argument given: %1, expected: %2").arg(qtjambi_object_class_name(env, val.l).replace("$", ".")).arg(qtjambi_class_name(env, Java::QtCore::QMetaType$GenericGadget::getClass(env)).replace("$", ".")) QTJAMBI_STACKTRACEINFO ); }else{ +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) int given = qtjambi_cast(env, Java::QtCore::QMetaType$GenericTypeInterface::metaType(env, val.l)).id(); if(_internalMetaType!=given){ JavaException::raiseIllegalArgumentException(env, qPrintable(QString("Wrong argument given: %1, expected: %2").arg(QMetaType::typeName(given)).arg(QMetaType::typeName(_internalMetaType))) QTJAMBI_STACKTRACEINFO ); } +#else + const QMetaType& given = qtjambi_cast(env, Java::QtCore::QMetaType$GenericTypeInterface::metaType(env, val.l)); + if(_internalMetaType!=given){ + JavaException::raiseIllegalArgumentException(env, qPrintable(QString("Wrong argument given: %1, expected: %2").arg(given.name()).arg(_internalMetaType.name())) QTJAMBI_STACKTRACEINFO ); + } +#endif } if(const QSharedPointer& link = QtJambiLink::findLinkForJavaObject(env, val.l)){ ptr = link->pointer(); @@ -4262,15 +4400,26 @@ ExternalToInternalConverter QtJambiTypeManager::getExternalToInternalConverterIm return true; }; }else if(Java::QtCore::QMetaType$GenericFlags::isSameClass(_env,externalClass)){ +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) int _internalMetaType = internalMetaType.id(); +#else + QMetaType _internalMetaType = internalMetaType; +#endif return [_internalMetaType](JNIEnv* env, QtJambiScope* scope, const jvalue& val, void* &out, jValueType valueType) -> bool{ switch(valueType){ case jValueType::l: if(Java::QtCore::QMetaType$GenericFlags::isInstanceOf(env,val.l)){ +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) int given = qtjambi_cast(env, Java::QtCore::QMetaType$GenericTypeInterface::metaType(env, val.l)).id(); if(_internalMetaType!=given){ JavaException::raiseIllegalArgumentException(env, qPrintable(QString("Wrong argument given: %1, expected: %2").arg(QMetaType::typeName(given)).arg(QMetaType::typeName(_internalMetaType))) QTJAMBI_STACKTRACEINFO ); } +#else + const QMetaType& given = qtjambi_cast(env, Java::QtCore::QMetaType$GenericTypeInterface::metaType(env, val.l)); + if(_internalMetaType!=given){ + JavaException::raiseIllegalArgumentException(env, qPrintable(QString("Wrong argument given: %1, expected: %2").arg(given.name()).arg(_internalMetaType.name())) QTJAMBI_STACKTRACEINFO ); + } +#endif if(scope && !out){ qint32* ptr; out = ptr = new qint32; @@ -4284,11 +4433,11 @@ ExternalToInternalConverter QtJambiTypeManager::getExternalToInternalConverterIm QString className = qtjambi_object_class_name(env, val.l); bool matches = false; if(const std::type_info* typeId = getTypeByJavaName(className)){ - if(registeredMetaTypeID(*typeId)==_internalMetaType) + if(registeredMetaTypeID(*typeId)==METATYPE_ID(_internalMetaType)) matches = true; } if(!matches){ - for(int mtype : registeredCustomMetaTypesForJavaClass(className.toLatin1())){ + for(auto mtype : registeredCustomMetaTypesForJavaClass(className.toLatin1())){ if(mtype==_internalMetaType) matches = true; } @@ -4320,15 +4469,26 @@ ExternalToInternalConverter QtJambiTypeManager::getExternalToInternalConverterIm return true; }; }else { +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) int _internalMetaType = internalMetaType.id(); +#else + QMetaType _internalMetaType = internalMetaType; +#endif return [_internalMetaType, externalClass](JNIEnv* env, QtJambiScope* scope, const jvalue& val, void* &out, jValueType valueType) -> bool{ switch(valueType){ case jValueType::l: if(Java::QtCore::QMetaType$GenericTypeInterface::isInstanceOf(env,val.l)){ +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) int given = qtjambi_cast(env, Java::QtCore::QMetaType$GenericTypeInterface::metaType(env, val.l)).id(); if(_internalMetaType!=given){ JavaException::raiseIllegalArgumentException(env, qPrintable(QString("Wrong argument given: %1, expected: %2").arg(QMetaType::typeName(given)).arg(QMetaType::typeName(_internalMetaType))) QTJAMBI_STACKTRACEINFO ); } +#else + const QMetaType& given = qtjambi_cast(env, Java::QtCore::QMetaType$GenericTypeInterface::metaType(env, val.l)); + if(_internalMetaType!=given){ + JavaException::raiseIllegalArgumentException(env, qPrintable(QString("Wrong argument given: %1, expected: %2").arg(given.name()).arg(_internalMetaType.name())) QTJAMBI_STACKTRACEINFO ); + } +#endif if(scope && !out){ qint32* ptr; out = ptr = new qint32; @@ -4391,7 +4551,11 @@ ExternalToInternalConverter QtJambiTypeManager::getExternalToInternalConverterIm return true; }; }else if(internalMetaType.isValid()){ +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) int _internalMetaType = internalMetaType.id(); +#else + QMetaType _internalMetaType = internalMetaType; +#endif if(Java::QtCore::QMetaType$GenericEnumerator::isSameClass(_env, externalClass) || Java::QtCore::QMetaType$GenericByteEnumerator::isSameClass(_env, externalClass) || Java::QtCore::QMetaType$GenericShortEnumerator::isSameClass(_env, externalClass) @@ -4401,21 +4565,28 @@ ExternalToInternalConverter QtJambiTypeManager::getExternalToInternalConverterIm switch(valueType){ case jValueType::l:{ if(Java::QtCore::QMetaType$GenericTypeInterface::isInstanceOf(env,val.l)){ - int given = qtjambi_cast(env, Java::QtCore::QMetaType$GenericTypeInterface::metaType(env, val.l)).id(); - if(_internalMetaType!=given){ - JavaException::raiseIllegalArgumentException(env, qPrintable(QString("Wrong argument given: %1, expected: %2").arg(QMetaType::typeName(given)).arg(QMetaType::typeName(_internalMetaType))) QTJAMBI_STACKTRACEINFO ); - } +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) + int given = qtjambi_cast(env, Java::QtCore::QMetaType$GenericTypeInterface::metaType(env, val.l)).id(); + if(_internalMetaType!=given){ + JavaException::raiseIllegalArgumentException(env, qPrintable(QString("Wrong argument given: %1, expected: %2").arg(QMetaType::typeName(given)).arg(QMetaType::typeName(_internalMetaType))) QTJAMBI_STACKTRACEINFO ); + } +#else + const QMetaType& given = qtjambi_cast(env, Java::QtCore::QMetaType$GenericTypeInterface::metaType(env, val.l)); + if(_internalMetaType!=given){ + JavaException::raiseIllegalArgumentException(env, qPrintable(QString("Wrong argument given: %1, expected: %2").arg(given.name()).arg(_internalMetaType.name())) QTJAMBI_STACKTRACEINFO ); + } +#endif value = int_for_QtEnumerator_or_QFlags(env, val.l); }else{ if(val.l){ QString className = qtjambi_object_class_name(env, val.l); bool matches = false; if(const std::type_info* typeId = getTypeByJavaName(className)){ - if(registeredMetaTypeID(*typeId)==_internalMetaType) + if(registeredMetaTypeID(*typeId)==METATYPE_ID(_internalMetaType)) matches = true; } if(!matches){ - for(int mtype : registeredCustomMetaTypesForJavaClass(className.toLatin1())){ + for(auto mtype : registeredCustomMetaTypesForJavaClass(className.toLatin1())){ if(mtype==_internalMetaType) matches = true; } @@ -4457,29 +4628,44 @@ ExternalToInternalConverter QtJambiTypeManager::getExternalToInternalConverterIm break; } if(scope && !out){ +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) out = QMetaType::create(_internalMetaType, value.data()); void* ptr = out; -#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) scope->addDeletion(_internalMetaType, ptr); #else + out = _internalMetaType.create(value.data()); + void* ptr = out; scope->addDeletion(QMetaType(_internalMetaType), ptr); #endif }else{ if(!out) return false; +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) QMetaType::destruct(_internalMetaType, out); if(QMetaType::construct(_internalMetaType, out, value.data())!=out){ +#else + _internalMetaType.destruct(out); + if(_internalMetaType.construct(out, value.data())!=out){ +#endif QByteArray ba; bool saved; /* write the copy to the stream */ { QDataStream stream(&ba, QIODevice::WriteOnly); +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) saved = QMetaType::save(stream, _internalMetaType, value.data()); +#else + saved = _internalMetaType.save(stream, value.data()); +#endif } /* read it back into the destination */ if(saved){ QDataStream stream(&ba, QIODevice::ReadOnly); +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) QMetaType::load(stream, _internalMetaType, out); +#else + _internalMetaType.load(stream, out); +#endif }else{ return false; } @@ -4493,10 +4679,17 @@ ExternalToInternalConverter QtJambiTypeManager::getExternalToInternalConverterIm switch(valueType){ case jValueType::l:{ if(Java::QtCore::QMetaType$GenericTypeInterface::isInstanceOf(env,val.l)){ - int given = qtjambi_cast(env, Java::QtCore::QMetaType$GenericTypeInterface::metaType(env, val.l)).id(); - if(_internalMetaType!=given){ - JavaException::raiseIllegalArgumentException(env, qPrintable(QString("Wrong argument given: %1, expected: %2").arg(QMetaType::typeName(given)).arg(QMetaType::typeName(_internalMetaType))) QTJAMBI_STACKTRACEINFO ); - } +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) + int given = qtjambi_cast(env, Java::QtCore::QMetaType$GenericTypeInterface::metaType(env, val.l)).id(); + if(_internalMetaType!=given){ + JavaException::raiseIllegalArgumentException(env, qPrintable(QString("Wrong argument given: %1, expected: %2").arg(QMetaType::typeName(given)).arg(QMetaType::typeName(_internalMetaType))) QTJAMBI_STACKTRACEINFO ); + } +#else + const QMetaType& given = qtjambi_cast(env, Java::QtCore::QMetaType$GenericTypeInterface::metaType(env, val.l)); + if(_internalMetaType!=given){ + JavaException::raiseIllegalArgumentException(env, qPrintable(QString("Wrong argument given: %1, expected: %2").arg(given.name()).arg(_internalMetaType.name())) QTJAMBI_STACKTRACEINFO ); + } +#endif value = int_for_QtEnumerator_or_QFlags(env, val.l); }else{ if(!env->IsInstanceOf(val.l, externalClass)) @@ -4531,29 +4724,44 @@ ExternalToInternalConverter QtJambiTypeManager::getExternalToInternalConverterIm break; } if(scope && !out){ +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) out = QMetaType::create(_internalMetaType, value.data()); void* ptr = out; -#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) scope->addDeletion(_internalMetaType, ptr); #else + out = _internalMetaType.create(value.data()); + void* ptr = out; scope->addDeletion(QMetaType(_internalMetaType), ptr); #endif }else{ if(!out) return false; +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) QMetaType::destruct(_internalMetaType, out); if(QMetaType::construct(_internalMetaType, out, value.data())!=out){ +#else + _internalMetaType.destruct(out); + if(_internalMetaType.construct(out, value.data())!=out){ +#endif QByteArray ba; bool saved; /* write the copy to the stream */ { QDataStream stream(&ba, QIODevice::WriteOnly); +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) saved = QMetaType::save(stream, _internalMetaType, value.data()); +#else + saved = _internalMetaType.save(stream, value.data()); +#endif } /* read it back into the destination */ if(saved){ QDataStream stream(&ba, QIODevice::ReadOnly); +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) QMetaType::load(stream, _internalMetaType, out); +#else + _internalMetaType.load(stream, out); +#endif }else{ return false; } @@ -6321,6 +6529,12 @@ ExternalToInternalConverter QtJambiTypeManager::getExternalToInternalConverterIm typeId = getTypeByMetaType(internalMetaType); } } + if(!typeId){ + const SuperTypeInfos& superTypeInfos = getSuperTypeInfos(_env, externalClass); + if(!superTypeInfos.isEmpty()){ + typeId = &superTypeInfos[0].typeId(); + } + } if(typeId){ bool isInterface = false; bool isPointer = false; diff --git a/src/cpp/qtjambi_concurrent/qtjambi_concurrent_repository.cpp b/src/cpp/qtjambi_concurrent/qtjambi_concurrent_repository.cpp index 3d06ec91..13d7dcf6 100644 --- a/src/cpp/qtjambi_concurrent/qtjambi_concurrent_repository.cpp +++ b/src/cpp/qtjambi_concurrent/qtjambi_concurrent_repository.cpp @@ -3,6 +3,10 @@ namespace Java{ namespace QtConcurrent{ +QTJAMBI_REPOSITORY_DEFINE_CLASS(io/qt/concurrent,QtConcurrent, + QTJAMBI_REPOSITORY_DEFINE_METHOD(computeDefaultResult,(Lio/qt/concurrent/QtConcurrent$ReduceFunctor;)Ljava/lang/Object;) +) + QTJAMBI_REPOSITORY_DEFINE_CLASS(io/qt/concurrent,QtConcurrent$MapFunctor, QTJAMBI_REPOSITORY_DEFINE_METHOD(map,(Ljava/lang/Object;)V) ) @@ -11,9 +15,8 @@ QTJAMBI_REPOSITORY_DEFINE_CLASS(io/qt/concurrent,QtConcurrent$MappedFunctor, QTJAMBI_REPOSITORY_DEFINE_METHOD(map,(Ljava/lang/Object;)Ljava/lang/Object;) ) -QTJAMBI_REPOSITORY_DEFINE_CLASS(io/qt/concurrent,QtConcurrent$ReducedFunctor, - QTJAMBI_REPOSITORY_DEFINE_METHOD(reduce,(Ljava/lang/Object;Ljava/lang/Object;)V) - QTJAMBI_REPOSITORY_DEFINE_METHOD(defaultResult,()Ljava/lang/Object;) +QTJAMBI_REPOSITORY_DEFINE_CLASS(io/qt/concurrent,QtConcurrent$ReduceFunctor, + QTJAMBI_REPOSITORY_DEFINE_METHOD(reduce,(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;) ) QTJAMBI_REPOSITORY_DEFINE_CLASS(io/qt/concurrent,QtConcurrent$FilteredFunctor, diff --git a/src/cpp/qtjambi_concurrent/qtjambi_concurrent_repository.h b/src/cpp/qtjambi_concurrent/qtjambi_concurrent_repository.h index 03cc7e09..94824d58 100644 --- a/src/cpp/qtjambi_concurrent/qtjambi_concurrent_repository.h +++ b/src/cpp/qtjambi_concurrent/qtjambi_concurrent_repository.h @@ -7,15 +7,17 @@ namespace Java{ namespace QtConcurrent{ +QTJAMBI_REPOSITORY_DECLARE_CLASS(QtConcurrent, + QTJAMBI_REPOSITORY_DECLARE_OBJECT_METHOD(computeDefaultResult)) + QTJAMBI_REPOSITORY_DECLARE_CLASS(QtConcurrent$MapFunctor, QTJAMBI_REPOSITORY_DECLARE_VOID_METHOD(map)) QTJAMBI_REPOSITORY_DECLARE_CLASS(QtConcurrent$MappedFunctor, QTJAMBI_REPOSITORY_DECLARE_OBJECT_METHOD(map)) - QTJAMBI_REPOSITORY_DECLARE_CLASS(QtConcurrent$ReducedFunctor, - QTJAMBI_REPOSITORY_DECLARE_VOID_METHOD(reduce) - QTJAMBI_REPOSITORY_DECLARE_OBJECT_METHOD(defaultResult)) + QTJAMBI_REPOSITORY_DECLARE_CLASS(QtConcurrent$ReduceFunctor, + QTJAMBI_REPOSITORY_DECLARE_OBJECT_METHOD(reduce)) QTJAMBI_REPOSITORY_DECLARE_CLASS(QtConcurrent$FilteredFunctor, QTJAMBI_REPOSITORY_DECLARE_BOOLEAN_METHOD(filter)) diff --git a/src/cpp/qtjambi_concurrent/qtjambiconcurrent.cpp b/src/cpp/qtjambi_concurrent/qtjambiconcurrent.cpp index 6a7ecac0..8cd290f1 100644 --- a/src/cpp/qtjambi_concurrent/qtjambiconcurrent.cpp +++ b/src/cpp/qtjambi_concurrent/qtjambiconcurrent.cpp @@ -1,3154 +1,3106 @@ -/**************************************************************************** -** -** Copyright (C) 1992-2009 Nokia. All rights reserved. -** -** This file is part of Qt Jambi. -** -** ** $BEGIN_LICENSE$ -** Commercial Usage -** Licensees holding valid Qt Commercial licenses may use this file in -** accordance with the Qt Commercial License Agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Nokia. -** -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this -** package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** If you are unsure which license is appropriate for your use, please -** contact the sales department at qt-sales@nokia.com. -** $END_LICENSE$ - -** -** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -** -****************************************************************************/ - -#define QFUTURE_TEST -#include -#include -#include "qtjambiconcurrent_p.h" -#include "qtjambi_concurrent_repository.h" - -#include -#include - -#ifndef QT_NO_CONCURRENT - -class Functor { -public: - Functor(JNIEnv *env, jobject functor) : m_functor(env, functor) - { - } - - Functor(const Functor &other) : m_functor(other.m_functor) - { - } - - Functor(Functor &&other) : m_functor(std::move(other.m_functor)) - { - } - - Functor& operator=(const Functor &other) = delete; - Functor& operator=(Functor &&other) = delete; - - virtual ~Functor() - { - } - -protected: - const JObjectWrapper m_functor; - -private: -}; - -class MapFunctor: public Functor { -public: - MapFunctor(JNIEnv *env, jobject javaMapFunctor) : Functor(env, javaMapFunctor) {} - MapFunctor(const MapFunctor &other) : Functor(other) {} - MapFunctor(MapFunctor &&other) : Functor(std::move(other)) {} - - void operator ()(const QVariant &wrapper) - { - if (JNIEnv *env = qtjambi_current_environment()) { - QTJAMBI_JNI_LOCAL_FRAME(env, 200) - if(jobject functor = qtjambi_from_jobjectwrapper(env, m_functor)){ - if (jobject javaObject = qtjambi_cast(env, wrapper)){ - try { - Java::QtConcurrent::QtConcurrent$MapFunctor::map(env, functor, javaObject); - } catch (const JavaException& exn) { - exn.report(env); - } - } - } else { - qWarning("Map functor called with invalid data. JNI Environment == %p, java functor object == %p", - env, m_functor.object()); - } - } - } -}; - -class MappedFunctor: public Functor { -public: - typedef QVariant result_type; - - MappedFunctor(JNIEnv *env, jobject javaMappedFunctor) : Functor(env, javaMappedFunctor) {} - MappedFunctor(const MappedFunctor &other) : Functor(other) {} - MappedFunctor(MappedFunctor &&other) : Functor(std::move(other)) {} - - QVariant operator ()(const QVariant &wrapper) - { - if (JNIEnv *env = qtjambi_current_environment()) { - QTJAMBI_JNI_LOCAL_FRAME(env, 200) - if(jobject functor = qtjambi_from_jobjectwrapper(env, m_functor)){ - jobject javaObject = qtjambi_cast(env, wrapper); - jobject javaResult = nullptr; - try { - javaResult = Java::QtConcurrent::QtConcurrent$MappedFunctor::map(env, functor, javaObject); - } catch (const JavaException& exn) { - exn.report(env); - } - return QVariant::fromValue(JObjectWrapper(env, javaResult)); - } else { - qWarning("Mapped functor called with invalid data. JNI Environment == %p, java functor object == %p", - env, m_functor.object()); - } - } - return QVariant(); - } -}; - -class ReducedFunctor: public Functor { -public: - ReducedFunctor(JNIEnv *env, jobject javaReducedFunctor) : Functor(env, javaReducedFunctor), m_first_call(true) {} - ReducedFunctor(const ReducedFunctor &other) : Functor(other), m_first_call(other.m_first_call) {} - ReducedFunctor(ReducedFunctor &&other) : Functor(std::move(other)), m_first_call(other.m_first_call) {} - - void operator()(QVariant &result, const QVariant &wrapper) - { - if (JNIEnv *env = qtjambi_current_environment()) { - QTJAMBI_JNI_LOCAL_FRAME(env, 200) - if(jobject functor = qtjambi_from_jobjectwrapper(env, m_functor)){ - // reduce() is synchronous, so while this data is static in terms - // of the map/reduce operation, it does not need to be protected - if (m_first_call) { - m_first_call = false; - jobject javaResult = nullptr; - try { - javaResult = Java::QtConcurrent::QtConcurrent$ReducedFunctor::defaultResult(env, functor); - } catch (const JavaException& exn) { - exn.report(env); - } - result = QVariant::fromValue(JObjectWrapper(env, javaResult)); - } - - try { - Java::QtConcurrent::QtConcurrent$ReducedFunctor::reduce(env, functor, qtjambi_cast(env, result), qtjambi_cast(env, wrapper)); - } catch (const JavaException& exn) { - exn.report(env); - } - } else { - qWarning("Reduce functor called with invalid data. JNI Environment == %p, java functor object == %p", - env, m_functor.object()); - } - } - } - -private: - uint m_first_call : 1; - -}; - -class FilteredFunctor: public Functor { -public: - FilteredFunctor(JNIEnv *env, jobject javaFilteredFunctor) : Functor(env, javaFilteredFunctor) {} - FilteredFunctor(const FilteredFunctor &other) : Functor(other) {} - FilteredFunctor(FilteredFunctor &&other) : Functor(std::move(other)) {} - - bool operator()(const QVariant &wrapper) { - if (JNIEnv *env = qtjambi_current_environment()) { - QTJAMBI_JNI_LOCAL_FRAME(env, 200) - if(jobject functor = qtjambi_from_jobjectwrapper(env, m_functor)){ - bool result = false; - try { - result = Java::QtConcurrent::QtConcurrent$FilteredFunctor::filter(env, functor, qtjambi_cast(env, wrapper)); - } catch (const JavaException& exn) { - exn.report(env); - } - return result; - } else { - qWarning("Filtered functor called with invalid data. JNI Environment == %p, java functor object == %p", - env, m_functor.object()); - } - } - return false; - } -}; - -enum class PromisePolicy{ - NoPromise -#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) - ,VoidPromise, - TypedPromise -#endif -}; - -template -struct RunFunctorInvoker{ - static void run(JNIEnv *, jobject, ...){ - } -}; - -template<> -struct RunFunctorInvoker<0,PromisePolicy::NoPromise> : Java::Runtime::Runnable{ -}; - -template<> -struct RunFunctorInvoker<1,PromisePolicy::NoPromise> : Java::QtConcurrent::QtConcurrent$Runnable1{ -}; - -template<> -struct RunFunctorInvoker<2,PromisePolicy::NoPromise> : Java::QtConcurrent::QtConcurrent$Runnable2{ -}; - -template<> -struct RunFunctorInvoker<3,PromisePolicy::NoPromise> : Java::QtConcurrent::QtConcurrent$Runnable3{ -}; - -template<> -struct RunFunctorInvoker<4,PromisePolicy::NoPromise> : Java::QtConcurrent::QtConcurrent$Runnable4{ -}; - -template<> -struct RunFunctorInvoker<5,PromisePolicy::NoPromise> : Java::QtConcurrent::QtConcurrent$Runnable5{ -}; - -#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) -template<> -struct RunFunctorInvoker<6,PromisePolicy::NoPromise> : Java::QtConcurrent::QtConcurrent$Runnable6{ -}; - -template<> -struct RunFunctorInvoker<7,PromisePolicy::NoPromise> : Java::QtConcurrent::QtConcurrent$Runnable7{ -}; - -template<> -struct RunFunctorInvoker<8,PromisePolicy::NoPromise> : Java::QtConcurrent::QtConcurrent$Runnable8{ -}; - -template<> -struct RunFunctorInvoker<9,PromisePolicy::NoPromise> : Java::QtConcurrent::QtConcurrent$Runnable9{ -}; - -template<> -struct RunFunctorInvoker<0,PromisePolicy::VoidPromise> : Java::QtConcurrent::QtConcurrent$RunnableWithVoidPromise{ -}; - -template<> -struct RunFunctorInvoker<1,PromisePolicy::VoidPromise> : Java::QtConcurrent::QtConcurrent$RunnableWithVoidPromise1{ -}; - -template<> -struct RunFunctorInvoker<2,PromisePolicy::VoidPromise> : Java::QtConcurrent::QtConcurrent$RunnableWithVoidPromise2{ -}; - -template<> -struct RunFunctorInvoker<3,PromisePolicy::VoidPromise> : Java::QtConcurrent::QtConcurrent$RunnableWithVoidPromise3{ -}; - -template<> -struct RunFunctorInvoker<4,PromisePolicy::VoidPromise> : Java::QtConcurrent::QtConcurrent$RunnableWithVoidPromise4{ -}; - -template<> -struct RunFunctorInvoker<5,PromisePolicy::VoidPromise> : Java::QtConcurrent::QtConcurrent$RunnableWithVoidPromise5{ -}; - -template<> -struct RunFunctorInvoker<6,PromisePolicy::VoidPromise> : Java::QtConcurrent::QtConcurrent$RunnableWithVoidPromise6{ -}; - -template<> -struct RunFunctorInvoker<7,PromisePolicy::VoidPromise> : Java::QtConcurrent::QtConcurrent$RunnableWithVoidPromise7{ -}; - -template<> -struct RunFunctorInvoker<8,PromisePolicy::VoidPromise> : Java::QtConcurrent::QtConcurrent$RunnableWithVoidPromise8{ -}; - -template<> -struct RunFunctorInvoker<9,PromisePolicy::VoidPromise> : Java::QtConcurrent::QtConcurrent$RunnableWithVoidPromise9{ -}; - -template<> -struct RunFunctorInvoker<0,PromisePolicy::TypedPromise> : Java::QtConcurrent::QtConcurrent$RunnableWithPromise{ -}; - -template<> -struct RunFunctorInvoker<1,PromisePolicy::TypedPromise> : Java::QtConcurrent::QtConcurrent$RunnableWithPromise1{ -}; - -template<> -struct RunFunctorInvoker<2,PromisePolicy::TypedPromise> : Java::QtConcurrent::QtConcurrent$RunnableWithPromise2{ -}; - -template<> -struct RunFunctorInvoker<3,PromisePolicy::TypedPromise> : Java::QtConcurrent::QtConcurrent$RunnableWithPromise3{ -}; - -template<> -struct RunFunctorInvoker<4,PromisePolicy::TypedPromise> : Java::QtConcurrent::QtConcurrent$RunnableWithPromise4{ -}; - -template<> -struct RunFunctorInvoker<5,PromisePolicy::TypedPromise> : Java::QtConcurrent::QtConcurrent$RunnableWithPromise5{ -}; - -template<> -struct RunFunctorInvoker<6,PromisePolicy::TypedPromise> : Java::QtConcurrent::QtConcurrent$RunnableWithPromise6{ -}; - -template<> -struct RunFunctorInvoker<7,PromisePolicy::TypedPromise> : Java::QtConcurrent::QtConcurrent$RunnableWithPromise7{ -}; - -template<> -struct RunFunctorInvoker<8,PromisePolicy::TypedPromise> : Java::QtConcurrent::QtConcurrent$RunnableWithPromise8{ -}; - -template<> -struct RunFunctorInvoker<9,PromisePolicy::TypedPromise> : Java::QtConcurrent::QtConcurrent$RunnableWithPromise9{ -}; -#endif - -template -struct RunFunctorInvocationDecider : RunFunctorInvoker{ -#if defined(Q_OS_ANDROID) && QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) - static void handleException(QSharedPointer& future, std::exception_ptr exception, Args...){ - while(!future->isValid()) - QThread::msleep(50); - future->reportException(exception); - } -#endif -}; - -#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) -template -struct RunFunctorInvocationDecider&, Args...> : RunFunctorInvoker{ -#ifdef Q_OS_ANDROID - static void handleException(QSharedPointer&, std::exception_ptr exception, QPromise& promise, Args...){ - QFutureInterfaceBase& future = reinterpret_cast(promise); - future.reportException(exception); - } -#endif -}; - -template -struct RunFunctorInvocationDecider&, Args...> : RunFunctorInvoker{ -#ifdef Q_OS_ANDROID - static void handleException(QSharedPointer&, std::exception_ptr exception, QPromise& promise, Args...){ - QFutureInterfaceBase& future = reinterpret_cast(promise); - future.reportException(exception); - } -#endif -}; -#endif - -template -class RunFunctor: public Functor { -public: - typedef void result_type; - RunFunctor(JNIEnv *env, jobject javaMapFunctor, const QSharedPointer& futurePointer) - : Functor(env, javaMapFunctor), - future(futurePointer) {} - RunFunctor(const RunFunctor &other) : Functor(other), future(other.future) {} - RunFunctor(RunFunctor &&other) : Functor(std::move(other)), future(std::move(other.future)) {} - - void operator ()(Args... args) - { - if (JNIEnv *env = qtjambi_current_environment()) { - QTJAMBI_JNI_LOCAL_FRAME(env, 200) - if(jobject functor = qtjambi_from_jobjectwrapper(env, m_functor)){ - QtJambiScope scope; -#if defined(Q_OS_ANDROID) && QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) - try { -#endif - RunFunctorInvocationDecider::run(env, functor, qtjambi_cast(env, scope, args)...); -#if defined(Q_OS_ANDROID) && QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) - } catch (const JavaException& exn) { - RunFunctorInvocationDecider::handleException(future, std::make_exception_ptr(QUnhandledException(std::make_exception_ptr(exn))), args...); - } catch (...) { - RunFunctorInvocationDecider::handleException(future, std::current_exception(), args...); - } -#endif - } else { - qWarning("Run functor called with invalid data. JNI Environment == %p, method id == %p", - env, m_functor.object()); - } - } - } -private: - QSharedPointer future; -}; - -template -struct CallableFunctorInvoker{ - static jobject call(JNIEnv *, jobject, ...){ - return nullptr; - } -}; - -template<> -struct CallableFunctorInvoker<0> : Java::Runtime::Callable{ -}; - -template<> -struct CallableFunctorInvoker<1> : Java::QtConcurrent::QtConcurrent$Callable1{ -}; - -template<> -struct CallableFunctorInvoker<2> : Java::QtConcurrent::QtConcurrent$Callable2{ -}; - -template<> -struct CallableFunctorInvoker<3> : Java::QtConcurrent::QtConcurrent$Callable3{ -}; - -template<> -struct CallableFunctorInvoker<4> : Java::QtConcurrent::QtConcurrent$Callable4{ -}; - -template<> -struct CallableFunctorInvoker<5> : Java::QtConcurrent::QtConcurrent$Callable5{ -}; - -#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) -template<> -struct CallableFunctorInvoker<6> : Java::QtConcurrent::QtConcurrent$Callable6{ -}; - -template<> -struct CallableFunctorInvoker<7> : Java::QtConcurrent::QtConcurrent$Callable7{ -}; - -template<> -struct CallableFunctorInvoker<8> : Java::QtConcurrent::QtConcurrent$Callable8{ -}; - -template<> -struct CallableFunctorInvoker<9> : Java::QtConcurrent::QtConcurrent$Callable9{ -}; -#endif - -template -class CallableFunctor: public Functor { -public: - typedef QVariant result_type; - CallableFunctor(JNIEnv *env, jobject javaMapFunctor, const QSharedPointer& futurePointer) - : Functor(env, javaMapFunctor), - future(futurePointer) { - } - CallableFunctor(const CallableFunctor &other) : Functor(other), future(other.future) {} - CallableFunctor(CallableFunctor &&other) : Functor(std::move(other)), future(std::move(other.future)) {} - - QVariant operator ()(Args... args) - { - if (JNIEnv *env = qtjambi_current_environment()) { - QTJAMBI_JNI_LOCAL_FRAME(env, 200) - if(jobject functor = qtjambi_from_jobjectwrapper(env, m_functor)){ - jobject javaResult = nullptr; - QtJambiScope scope; -#if defined(Q_OS_ANDROID) && QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) - try { -#endif - javaResult = CallableFunctorInvoker::call(env, functor, qtjambi_cast(env, scope, args)...); -#if defined(Q_OS_ANDROID) && QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) - } catch (const JavaException& exn) { - RunFunctorInvocationDecider::handleException(future, std::make_exception_ptr(QUnhandledException(std::make_exception_ptr(exn))), args...); - } catch (...) { - RunFunctorInvocationDecider::handleException(future, std::current_exception(), args...); - } -#endif - return javaResult ? QVariant::fromValue(JObjectWrapper(env, javaResult)) : QVariant(); - } else { - qWarning("Run functor called with invalid data. JNI Environment == %p, method id == %p", - env, m_functor.object()); - } - } - return QVariant(); - } -private: - QSharedPointer future; -}; - -struct JavaSequence{ - typedef QVariant value_type; - - class const_iterator{ - public: - typedef std::forward_iterator_tag iterator_category; - typedef qptrdiff difference_type; - typedef QVariant value_type; - typedef const QVariant *pointer; - typedef const QVariant &reference; - - const_iterator(); - const_iterator(const const_iterator& other); - - const_iterator operator ++(int); - const_iterator operator --(int); - const_iterator& operator ++(); - const_iterator& operator --(); - - const QVariant &operator*() const; - const QVariant *operator->() const; - inline operator const QVariant *() const { return operator->(); } - bool operator<(const const_iterator& o) const; - bool operator>(const const_iterator& o) const; - bool operator<=(const const_iterator& o) const; - bool operator>=(const const_iterator& o) const; - bool operator==(const const_iterator& o) const; - inline bool operator!=(const const_iterator& o) const { - return !(*this == o); - } - private: - const_iterator(const JCollectionWrapper& collection, int cursor = 0); - JCollectionWrapper m_collection; - int m_cursor; - mutable QVariant m_current; - friend JavaSequence; - }; - - JavaSequence(); - - JavaSequence(const JavaSequence& other); - - JavaSequence(JavaSequence&& other); - - JavaSequence(JNIEnv* env, jobject collection, bool canOverwrite = false); - - JavaSequence& operator=(const JavaSequence& other); - JavaSequence& operator=(std::initializer_list args); - - const_iterator begin() const; - - const_iterator end() const; - - inline const_iterator cbegin() const {return begin();} - - inline const_iterator cend() const {return end();} - - void push_back(const QVariant& value); - - jobject object() const; -private: - bool m_canOverwrite; - mutable JCollectionWrapper m_collection; -}; - -JavaSequence::JavaSequence() : m_collection() {} - -JavaSequence::JavaSequence(const JavaSequence& other) : m_canOverwrite(other.m_canOverwrite), m_collection(other.m_collection){} - -JavaSequence::JavaSequence(JavaSequence&& other) : m_canOverwrite(other.m_canOverwrite), m_collection(std::move(other.m_collection)){} - -JavaSequence::JavaSequence(JNIEnv* env, jobject collection, bool canOverwrite) : m_canOverwrite(canOverwrite), m_collection(env, collection) {} - -jobject JavaSequence::object() const{ - jobject object = m_collection.object(); - if(!object){ - if(JNIEnv *env = qtjambi_current_environment()){ - QTJAMBI_JNI_LOCAL_FRAME(env, 200) - m_collection = JCollectionWrapper(env, qtjambi_arraylist_new(env, 0)); - object = m_collection.object(); - } - } - return object; -} - -JavaSequence& JavaSequence::operator=(const JavaSequence& other){ - if(m_canOverwrite){ - jobject _object = object(); - if(JNIEnv *env = qtjambi_current_environment()){ - QTJAMBI_JNI_LOCAL_FRAME(env, 200) - qtjambi_collection_clear(env, _object); - if(other.m_collection.object()){ - jobject iterator = qtjambi_collection_iterator(env, other.m_collection.object()); - while(qtjambi_iterator_has_next(env, iterator)){ - qtjambi_collection_add(env, _object, qtjambi_iterator_next(env, iterator)); - } - } - } - }else{ - m_collection = other.m_collection; - } - return *this; -} - -JavaSequence& JavaSequence::operator=(std::initializer_list args){ - jobject _object = object(); - if(JNIEnv *env = qtjambi_current_environment()){ - QTJAMBI_JNI_LOCAL_FRAME(env, 200) - qtjambi_collection_clear(env, _object); - for(const QVariant& arg : args){ - qtjambi_collection_add(env, _object, qtjambi_cast(env, arg)); - } - } - return *this; -} - -void JavaSequence::push_back(const QVariant& value){ - if(JNIEnv *env = qtjambi_current_environment()){ - QTJAMBI_JNI_LOCAL_FRAME(env, 200) - jobject _object = object(); - qtjambi_collection_add(env, _object, qtjambi_cast(env, value)); - } -} - -JavaSequence::const_iterator JavaSequence::begin() const { - (void)object(); - return JavaSequence::const_iterator(m_collection, 0); -} - -JavaSequence::const_iterator JavaSequence::end() const { - (void)object(); - return JavaSequence::const_iterator(m_collection, -1); -} - -JavaSequence::const_iterator JavaSequence::const_iterator::operator ++(int){ - JavaSequence::const_iterator result(*this); - ++m_cursor; - if(m_cursor>=m_collection.size()){ - m_cursor = -1; - } - return result; -} - -JavaSequence::const_iterator& JavaSequence::const_iterator::operator ++(){ - ++m_cursor; - if(m_cursor>=m_collection.size()){ - m_cursor = -1; - } - return *this; -} - -JavaSequence::const_iterator JavaSequence::const_iterator::operator --(int){ - JavaSequence::const_iterator result(*this); - if(m_cursor>0){ - --m_cursor; - if(m_cursor>=m_collection.size()){ - m_cursor = -1; - } - } - return result; -} - -JavaSequence::const_iterator& JavaSequence::const_iterator::operator --(){ - if(m_cursor>0){ - --m_cursor; - if(m_cursor>=m_collection.size()){ - m_cursor = -1; - } - } - return *this; -} - -const QVariant &JavaSequence::const_iterator::operator*() const{ - if(m_cursor>=0 && m_cursor() const{ - return &operator*(); -} - -bool JavaSequence::const_iterator::operator==(const JavaSequence::const_iterator& o) const { - JNIEnv* env = qtjambi_current_environment(); - QTJAMBI_JNI_LOCAL_FRAME(env, 300) - return env->IsSameObject(m_collection.object(), o.m_collection.object()) && m_cursor==o.m_cursor; -} - -bool JavaSequence::const_iterator::operator<(const JavaSequence::const_iterator& o) const { - JNIEnv* env = qtjambi_current_environment(); - QTJAMBI_JNI_LOCAL_FRAME(env, 300) - return env->IsSameObject(m_collection.object(), o.m_collection.object()) && m_cursor(const JavaSequence::const_iterator& o) const { - JNIEnv* env = qtjambi_current_environment(); - QTJAMBI_JNI_LOCAL_FRAME(env, 300) - return env->IsSameObject(m_collection.object(), o.m_collection.object()) && m_cursor>o.m_cursor; -} - -bool JavaSequence::const_iterator::operator<=(const JavaSequence::const_iterator& o) const { - JNIEnv* env = qtjambi_current_environment(); - QTJAMBI_JNI_LOCAL_FRAME(env, 300) - return env->IsSameObject(m_collection.object(), o.m_collection.object()) && m_cursor<=o.m_cursor; -} - -bool JavaSequence::const_iterator::operator>=(const JavaSequence::const_iterator& o) const { - JNIEnv* env = qtjambi_current_environment(); - QTJAMBI_JNI_LOCAL_FRAME(env, 300) - return env->IsSameObject(m_collection.object(), o.m_collection.object()) && m_cursor>=o.m_cursor; -} - -JavaSequence::const_iterator::const_iterator() - : m_collection(), m_cursor(-1), m_current() {} - -JavaSequence::const_iterator::const_iterator(const JavaSequence::const_iterator& other) - : m_collection(other.m_collection), m_cursor(other.m_cursor), m_current() {} - -JavaSequence::const_iterator::const_iterator(const JCollectionWrapper& collection, int cursor) - : m_collection(collection), m_cursor(cursor), m_current() {} - -template -struct FutureWatcher - : QFutureWatcher -{ - FutureWatcher(JNIEnv* env, jobject collection, bool canOverwrite = true); - JavaSequence sequence; -}; - -template -FutureWatcher::FutureWatcher(JNIEnv* env, jobject collection, bool canOverwrite) - : QFutureWatcher(), - sequence(env, collection, canOverwrite) -{ - QObject::connect(this, &QFutureWatcherBase::finished, this, &FutureWatcher::deleteLater, Qt::DirectConnection); - QObject::connect(this, &QFutureWatcherBase::canceled, this, &FutureWatcher::deleteLater, Qt::DirectConnection); -} - -#if QT_VERSION < QT_VERSION_CHECK(6,0,0) -#define THREADPOOL(_threadPool) Q_UNUSED(_threadPool) -#else -#define THREADPOOL(_threadPool) QThreadPool *threadPool = qtjambi_to_QObject(env, _threadPool); -#endif - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent__1map) -(JNIEnv *env, - jclass, - jobject _threadPool, - jobject javaSequence, - jobject javaMapFunctor) -{ - try{ - THREADPOOL(_threadPool) - FutureWatcher* watcher = new FutureWatcher(env, javaSequence, true); -#if QT_VERSION >= QT_VERSION_CHECK(6,0,0) - if(threadPool) - watcher->setFuture(QtConcurrent::map(threadPool, watcher->sequence, MapFunctor(env, javaMapFunctor))); - else -#endif - watcher->setFuture(QtConcurrent::map(watcher->sequence, MapFunctor(env, javaMapFunctor))); - return qtjambi_cast(env, watcher->future()); - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT void JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent__1blockingMap) -(JNIEnv *env, - jclass, - jobject _threadPool, - jobject javaSequence, - jobject javaMapFunctor) -{ - try{ - THREADPOOL(_threadPool) - JavaSequence sequence(env, javaSequence); -#if QT_VERSION >= QT_VERSION_CHECK(6,0,0) - if(threadPool) - QtConcurrent::blockingMap(threadPool, sequence, MapFunctor(env, javaMapFunctor)); - else -#endif - QtConcurrent::blockingMap(sequence, MapFunctor(env, javaMapFunctor)); - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent__1mapped) -(JNIEnv *env, - jclass, - jobject _threadPool, - jobject javaSequence, - jobject javaMappedFunctor) -{ - try{ - THREADPOOL(_threadPool) - FutureWatcher* watcher = new FutureWatcher(env, javaSequence, false); -#if QT_VERSION >= QT_VERSION_CHECK(6,0,0) - if(threadPool) - watcher->setFuture(QtConcurrent::mapped(threadPool, watcher->sequence, MappedFunctor(env, javaMappedFunctor))); - else -#endif - watcher->setFuture(QtConcurrent::mapped(watcher->sequence, MappedFunctor(env, javaMappedFunctor))); - return qtjambi_cast(env, watcher->future()); - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent__1blockingMapped) -(JNIEnv *env, - jclass, - jobject _threadPool, - jobject javaSequence, - jobject javaMappedFunctor) -{ - try{ - THREADPOOL(_threadPool) - JavaSequence sequence(env, javaSequence); - JavaSequence result = -#if QT_VERSION >= QT_VERSION_CHECK(6,0,0) - threadPool ? QtConcurrent::blockingMapped(threadPool, sequence, MappedFunctor(env, javaMappedFunctor)) : -#endif - QtConcurrent::blockingMapped(sequence, MappedFunctor(env, javaMappedFunctor)); - return env->NewLocalRef(result.object()); - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent__1blockingMappedReduced) -(JNIEnv *env, - jclass, - jobject _threadPool, - jobject javaSequence, - jobject javaMappedFunctor, - jobject javaReducedFunctor, - jint options) -{ - try{ - THREADPOOL(_threadPool) - QVariant result = -#if QT_VERSION >= QT_VERSION_CHECK(6,0,0) - threadPool ? QtConcurrent::blockingMappedReduced( - threadPool, - JavaSequence(env, javaSequence), - MappedFunctor(env, javaMappedFunctor), - ReducedFunctor(env, javaReducedFunctor), - QtConcurrent::ReduceOptions(options)) : -#endif - QtConcurrent::blockingMappedReduced( - JavaSequence(env, javaSequence), - MappedFunctor(env, javaMappedFunctor), - ReducedFunctor(env, javaReducedFunctor), - QtConcurrent::ReduceOptions(options)); - return qtjambi_cast(env, result); - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent__1mappedReduced) -(JNIEnv *env, - jclass, - jobject _threadPool, - jobject javaSequence, - jobject javaMappedFunctor, - jobject javaReducedFunctor, - jint options) -{ - try{ - THREADPOOL(_threadPool) - QFuture result = -#if QT_VERSION >= QT_VERSION_CHECK(6,0,0) - threadPool ? QtConcurrent::mappedReduced( - threadPool, - JavaSequence(env, javaSequence), - MappedFunctor(env, javaMappedFunctor), - ReducedFunctor(env, javaReducedFunctor), - QtConcurrent::ReduceOptions(options)) : -#endif - QtConcurrent::mappedReduced( - JavaSequence(env, javaSequence), - MappedFunctor(env, javaMappedFunctor), - ReducedFunctor(env, javaReducedFunctor), - QtConcurrent::ReduceOptions(options)); - return qtjambi_cast(env, result); - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent__1filter) -(JNIEnv *env, - jclass, - jobject _threadPool, - jobject javaSequence, - jobject javaFilteredFunctor) -{ - try{ - THREADPOOL(_threadPool) - FutureWatcher* watcher = new FutureWatcher(env, javaSequence); -#if QT_VERSION >= QT_VERSION_CHECK(6,0,0) - if(threadPool) - watcher->setFuture(QtConcurrent::filter(threadPool, watcher->sequence, FilteredFunctor(env, javaFilteredFunctor))); - else -#endif - watcher->setFuture(QtConcurrent::filter(watcher->sequence, FilteredFunctor(env, javaFilteredFunctor))); - return qtjambi_cast(env, watcher->future()); - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent__1filtered) -(JNIEnv *env, - jclass, - jobject _threadPool, - jobject javaSequence, - jobject javaFilteredFunctor) -{ - try{ - THREADPOOL(_threadPool) - FutureWatcher* watcher = new FutureWatcher(env, javaSequence, false); -#if QT_VERSION >= QT_VERSION_CHECK(6,0,0) - if(threadPool) - watcher->setFuture(QtConcurrent::filtered(threadPool, watcher->sequence, FilteredFunctor(env, javaFilteredFunctor))); - else -#endif - watcher->setFuture(QtConcurrent::filtered(watcher->sequence, FilteredFunctor(env, javaFilteredFunctor))); - return qtjambi_cast(env, watcher->future()); - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent__1blockingFiltered) -(JNIEnv *env, - jclass, - jobject _threadPool, - jobject javaSequence, - jobject javaFilteredFunctor) -{ - try{ - THREADPOOL(_threadPool) - JavaSequence result = -#if QT_VERSION >= QT_VERSION_CHECK(6,0,0) - threadPool ? QtConcurrent::blockingFiltered(threadPool, JavaSequence(env, javaSequence), FilteredFunctor(env, javaFilteredFunctor)) : -#endif - QtConcurrent::blockingFiltered(JavaSequence(env, javaSequence), FilteredFunctor(env, javaFilteredFunctor)); - return env->NewLocalRef(result.object()); - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT void JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent__1blockingFilter) -(JNIEnv *env, - jclass, - jobject _threadPool, - jobject javaSequence, - jobject javaFilteredFunctor) -{ - try{ - THREADPOOL(_threadPool) - JavaSequence sequence(env, javaSequence, true); -#if QT_VERSION >= QT_VERSION_CHECK(6,0,0) - if(threadPool) - QtConcurrent::blockingFilter(threadPool, sequence, FilteredFunctor(env, javaFilteredFunctor)); - else -#endif - QtConcurrent::blockingFilter(sequence, FilteredFunctor(env, javaFilteredFunctor)); - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent__1filteredReduced) -(JNIEnv *env, - jclass, - jobject _threadPool, - jobject javaSequence, - jobject javaFilteredFunctor, - jobject javaReducedFunctor, - jint options) -{ - try{ - THREADPOOL(_threadPool) - QFuture result = -#if QT_VERSION >= QT_VERSION_CHECK(6,0,0) - threadPool ? QtConcurrent::filteredReduced( - threadPool, - JavaSequence(env, javaSequence), - FilteredFunctor(env, javaFilteredFunctor), - ReducedFunctor(env, javaReducedFunctor), - QtConcurrent::ReduceOptions(options)) : -#endif - QtConcurrent::filteredReduced( - JavaSequence(env, javaSequence), - FilteredFunctor(env, javaFilteredFunctor), - ReducedFunctor(env, javaReducedFunctor), - QtConcurrent::ReduceOptions(options)); - return qtjambi_cast(env, result); - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent__1blockingFilteredReduced) -(JNIEnv *env, - jclass, - jobject _threadPool, - jobject javaSequence, - jobject javaFilteredFunctor, - jobject javaReducedFunctor, - jint options) -{ - try{ - THREADPOOL(_threadPool) - QVariant result = -#if QT_VERSION >= QT_VERSION_CHECK(6,0,0) - threadPool ? QtConcurrent::blockingFilteredReduced( - threadPool, - JavaSequence(env, javaSequence), FilteredFunctor(env, javaFilteredFunctor), - ReducedFunctor(env, javaReducedFunctor), - QtConcurrent::ReduceOptions(options)) : -#endif - QtConcurrent::blockingFilteredReduced( - JavaSequence(env, javaSequence), FilteredFunctor(env, javaFilteredFunctor), - ReducedFunctor(env, javaReducedFunctor), - QtConcurrent::ReduceOptions(options)); - return qtjambi_cast(env, result); - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_runVoid0) -(JNIEnv *env, jclass, jobject _threadPool, jobject javaRunnable) -{ - try{ - QThreadPool *threadPool = qtjambi_to_QObject(env, _threadPool); - QSharedPointer futurePointer(new QFutureInterfaceBase); - QFuture result = threadPool ? QtConcurrent::run(threadPool, RunFunctor<>(env, javaRunnable, futurePointer)) - : QtConcurrent::run(RunFunctor<>(env, javaRunnable, futurePointer)); - *futurePointer = result.d; - return qtjambi_cast(env, result); - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_runVoid1) -(JNIEnv *env, jclass, jobject _threadPool, jobject javaRunnable, jobject a) -{ - try{ - QThreadPool *threadPool = qtjambi_to_QObject(env, _threadPool); - QSharedPointer futurePointer(new QFutureInterfaceBase); - QFuture result = threadPool ? QtConcurrent::run(threadPool, - RunFunctor(env, javaRunnable, futurePointer), - QVariant::fromValue(JObjectWrapper(env, a))) - : QtConcurrent::run(RunFunctor(env, javaRunnable, futurePointer), - QVariant::fromValue(JObjectWrapper(env, a))); - *futurePointer = result.d; - return qtjambi_cast(env, result); - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_runVoid2) -(JNIEnv *env, jclass, jobject _threadPool, jobject javaRunnable, jobject a, jobject b) -{ - try{ - QThreadPool *threadPool = qtjambi_to_QObject(env, _threadPool); - QSharedPointer futurePointer(new QFutureInterfaceBase); - QFuture result = threadPool ? QtConcurrent::run(threadPool, - RunFunctor(env, javaRunnable, futurePointer), - QVariant::fromValue(JObjectWrapper(env, a)), - QVariant::fromValue(JObjectWrapper(env, b))) - : QtConcurrent::run(RunFunctor(env, javaRunnable, futurePointer), - QVariant::fromValue(JObjectWrapper(env, a)), - QVariant::fromValue(JObjectWrapper(env, b))); - *futurePointer = result.d; - return qtjambi_cast(env, result); - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_runVoid3) -(JNIEnv *env, jclass, jobject _threadPool, jobject javaRunnable, jobject a, jobject b, jobject c) -{ - try{ - QThreadPool *threadPool = qtjambi_to_QObject(env, _threadPool); - QSharedPointer futurePointer(new QFutureInterfaceBase); - QFuture result = threadPool ? QtConcurrent::run(threadPool, - RunFunctor(env, javaRunnable, futurePointer), - QVariant::fromValue(JObjectWrapper(env, a)), - QVariant::fromValue(JObjectWrapper(env, b)), - QVariant::fromValue(JObjectWrapper(env, c))) - : QtConcurrent::run(RunFunctor(env, javaRunnable, futurePointer), - QVariant::fromValue(JObjectWrapper(env, a)), - QVariant::fromValue(JObjectWrapper(env, b)), - QVariant::fromValue(JObjectWrapper(env, c))); - *futurePointer = result.d; - return qtjambi_cast(env, result); - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_runVoid4) -(JNIEnv *env, jclass, jobject _threadPool, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d) -{ - try{ - QThreadPool *threadPool = qtjambi_to_QObject(env, _threadPool); - QSharedPointer futurePointer(new QFutureInterfaceBase); - QFuture result = threadPool ? QtConcurrent::run(threadPool, - RunFunctor(env, javaRunnable, futurePointer), - QVariant::fromValue(JObjectWrapper(env, a)), - QVariant::fromValue(JObjectWrapper(env, b)), - QVariant::fromValue(JObjectWrapper(env, c)), - QVariant::fromValue(JObjectWrapper(env, d))) - : QtConcurrent::run(RunFunctor(env, javaRunnable, futurePointer), - QVariant::fromValue(JObjectWrapper(env, a)), - QVariant::fromValue(JObjectWrapper(env, b)), - QVariant::fromValue(JObjectWrapper(env, c)), - QVariant::fromValue(JObjectWrapper(env, d))); - *futurePointer = result.d; - return qtjambi_cast(env, result); - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_runVoid5) -(JNIEnv *env, jclass, jobject _threadPool, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d, jobject e) -{ - try{ - QThreadPool *threadPool = qtjambi_to_QObject(env, _threadPool); - QSharedPointer futurePointer(new QFutureInterfaceBase); - QFuture result = threadPool ? QtConcurrent::run(threadPool, - RunFunctor(env, javaRunnable, futurePointer), - QVariant::fromValue(JObjectWrapper(env, a)), - QVariant::fromValue(JObjectWrapper(env, b)), - QVariant::fromValue(JObjectWrapper(env, c)), - QVariant::fromValue(JObjectWrapper(env, d)), - QVariant::fromValue(JObjectWrapper(env, e))) - : QtConcurrent::run(RunFunctor(env, javaRunnable, futurePointer), - QVariant::fromValue(JObjectWrapper(env, a)), - QVariant::fromValue(JObjectWrapper(env, b)), - QVariant::fromValue(JObjectWrapper(env, c)), - QVariant::fromValue(JObjectWrapper(env, d)), - QVariant::fromValue(JObjectWrapper(env, e))); - *futurePointer = result.d; - return qtjambi_cast(env, result); - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -#if QT_VERSION >= QT_VERSION_CHECK(6,0,0) -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_runVoid6) -(JNIEnv *env, jclass, jobject _threadPool, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d, jobject e, jobject f) -{ - try{ - QThreadPool *threadPool = qtjambi_to_QObject(env, _threadPool); - QSharedPointer futurePointer(new QFutureInterfaceBase); - QFuture result = threadPool ? QtConcurrent::run(threadPool, - RunFunctor(env, javaRunnable, futurePointer), - QVariant::fromValue(JObjectWrapper(env, a)), - QVariant::fromValue(JObjectWrapper(env, b)), - QVariant::fromValue(JObjectWrapper(env, c)), - QVariant::fromValue(JObjectWrapper(env, d)), - QVariant::fromValue(JObjectWrapper(env, e)), - QVariant::fromValue(JObjectWrapper(env, f))) - : QtConcurrent::run(RunFunctor(env, javaRunnable, futurePointer), - QVariant::fromValue(JObjectWrapper(env, a)), - QVariant::fromValue(JObjectWrapper(env, b)), - QVariant::fromValue(JObjectWrapper(env, c)), - QVariant::fromValue(JObjectWrapper(env, d)), - QVariant::fromValue(JObjectWrapper(env, e)), - QVariant::fromValue(JObjectWrapper(env, f))); - *futurePointer = result.d; - return qtjambi_cast(env, result); - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_runVoid7) -(JNIEnv *env, jclass, jobject _threadPool, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d, jobject e, jobject f, jobject g) -{ - try{ - QThreadPool *threadPool = qtjambi_to_QObject(env, _threadPool); - QSharedPointer futurePointer(new QFutureInterfaceBase); - QFuture result = threadPool ? QtConcurrent::run(threadPool, - RunFunctor(env, javaRunnable, futurePointer), - QVariant::fromValue(JObjectWrapper(env, a)), - QVariant::fromValue(JObjectWrapper(env, b)), - QVariant::fromValue(JObjectWrapper(env, c)), - QVariant::fromValue(JObjectWrapper(env, d)), - QVariant::fromValue(JObjectWrapper(env, e)), - QVariant::fromValue(JObjectWrapper(env, f)), - QVariant::fromValue(JObjectWrapper(env, g))) - : QtConcurrent::run(RunFunctor(env, javaRunnable, futurePointer), - QVariant::fromValue(JObjectWrapper(env, a)), - QVariant::fromValue(JObjectWrapper(env, b)), - QVariant::fromValue(JObjectWrapper(env, c)), - QVariant::fromValue(JObjectWrapper(env, d)), - QVariant::fromValue(JObjectWrapper(env, e)), - QVariant::fromValue(JObjectWrapper(env, f)), - QVariant::fromValue(JObjectWrapper(env, g))); - *futurePointer = result.d; - return qtjambi_cast(env, result); - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_runVoid8) -(JNIEnv *env, jclass, jobject _threadPool, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d, jobject e, jobject f, jobject g, jobject h) -{ - try{ - QThreadPool *threadPool = qtjambi_to_QObject(env, _threadPool); - QSharedPointer futurePointer(new QFutureInterfaceBase); - QFuture result = threadPool ? QtConcurrent::run(threadPool, - RunFunctor(env, javaRunnable, futurePointer), - QVariant::fromValue(JObjectWrapper(env, a)), - QVariant::fromValue(JObjectWrapper(env, b)), - QVariant::fromValue(JObjectWrapper(env, c)), - QVariant::fromValue(JObjectWrapper(env, d)), - QVariant::fromValue(JObjectWrapper(env, e)), - QVariant::fromValue(JObjectWrapper(env, f)), - QVariant::fromValue(JObjectWrapper(env, g)), - QVariant::fromValue(JObjectWrapper(env, h))) - : QtConcurrent::run(RunFunctor(env, javaRunnable, futurePointer), - QVariant::fromValue(JObjectWrapper(env, a)), - QVariant::fromValue(JObjectWrapper(env, b)), - QVariant::fromValue(JObjectWrapper(env, c)), - QVariant::fromValue(JObjectWrapper(env, d)), - QVariant::fromValue(JObjectWrapper(env, e)), - QVariant::fromValue(JObjectWrapper(env, f)), - QVariant::fromValue(JObjectWrapper(env, g)), - QVariant::fromValue(JObjectWrapper(env, h))); - *futurePointer = result.d; - return qtjambi_cast(env, result); - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_runVoid9) -(JNIEnv *env, jclass, jobject _threadPool, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d, jobject e, jobject f, jobject g, jobject h, jobject i) -{ - try{ - QThreadPool *threadPool = qtjambi_to_QObject(env, _threadPool); - QSharedPointer futurePointer(new QFutureInterfaceBase); - QFuture result = threadPool ? QtConcurrent::run(threadPool, - RunFunctor(env, javaRunnable, futurePointer), - QVariant::fromValue(JObjectWrapper(env, a)), - QVariant::fromValue(JObjectWrapper(env, b)), - QVariant::fromValue(JObjectWrapper(env, c)), - QVariant::fromValue(JObjectWrapper(env, d)), - QVariant::fromValue(JObjectWrapper(env, e)), - QVariant::fromValue(JObjectWrapper(env, f)), - QVariant::fromValue(JObjectWrapper(env, g)), - QVariant::fromValue(JObjectWrapper(env, h)), - QVariant::fromValue(JObjectWrapper(env, i))) - : QtConcurrent::run(RunFunctor(env, javaRunnable, futurePointer), - QVariant::fromValue(JObjectWrapper(env, a)), - QVariant::fromValue(JObjectWrapper(env, b)), - QVariant::fromValue(JObjectWrapper(env, c)), - QVariant::fromValue(JObjectWrapper(env, d)), - QVariant::fromValue(JObjectWrapper(env, e)), - QVariant::fromValue(JObjectWrapper(env, f)), - QVariant::fromValue(JObjectWrapper(env, g)), - QVariant::fromValue(JObjectWrapper(env, h)), - QVariant::fromValue(JObjectWrapper(env, i))); - *futurePointer = result.d; - return qtjambi_cast(env, result); - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} -#endif - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_run0) -(JNIEnv *env, jclass, jobject _threadPool, jobject javaCallable) -{ - try{ - QThreadPool *threadPool = qtjambi_to_QObject(env, _threadPool); - QSharedPointer futurePointer(new QFutureInterfaceBase); - QFuture result = threadPool ? QtConcurrent::run(threadPool, CallableFunctor<>(env, javaCallable, futurePointer)) - : QtConcurrent::run(CallableFunctor<>(env, javaCallable, futurePointer)); - *futurePointer = result.d; - return qtjambi_cast(env, result); - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_run1) -(JNIEnv *env, jclass, jobject _threadPool, jobject javaRunnable, jobject a) -{ - try{ - QThreadPool *threadPool = qtjambi_to_QObject(env, _threadPool); - QSharedPointer futurePointer(new QFutureInterfaceBase); - QFuture result = threadPool ? QtConcurrent::run(threadPool, - CallableFunctor(env, javaRunnable, futurePointer), - QVariant::fromValue(JObjectWrapper(env, a))) - : QtConcurrent::run(CallableFunctor(env, javaRunnable, futurePointer), - QVariant::fromValue(JObjectWrapper(env, a))); - *futurePointer = result.d; - return qtjambi_cast(env, result); - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_run2) -(JNIEnv *env, jclass, jobject _threadPool, jobject javaRunnable, jobject a, jobject b) -{ - try{ - QThreadPool *threadPool = qtjambi_to_QObject(env, _threadPool); - QSharedPointer futurePointer(new QFutureInterfaceBase); - QFuture result = threadPool ? QtConcurrent::run(threadPool, - CallableFunctor(env, javaRunnable, futurePointer), - QVariant::fromValue(JObjectWrapper(env, a)), - QVariant::fromValue(JObjectWrapper(env, b))) - : QtConcurrent::run(CallableFunctor(env, javaRunnable, futurePointer), - QVariant::fromValue(JObjectWrapper(env, a)), - QVariant::fromValue(JObjectWrapper(env, b))); - *futurePointer = result.d; - return qtjambi_cast(env, result); - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_run3) -(JNIEnv *env, jclass, jobject _threadPool, jobject javaRunnable, jobject a, jobject b, jobject c) -{ - try{ - QThreadPool *threadPool = qtjambi_to_QObject(env, _threadPool); - QSharedPointer futurePointer(new QFutureInterfaceBase); - QFuture result = threadPool ? QtConcurrent::run(threadPool, - CallableFunctor(env, javaRunnable, futurePointer), - QVariant::fromValue(JObjectWrapper(env, a)), - QVariant::fromValue(JObjectWrapper(env, b)), - QVariant::fromValue(JObjectWrapper(env, c))) - : QtConcurrent::run(CallableFunctor(env, javaRunnable, futurePointer), - QVariant::fromValue(JObjectWrapper(env, a)), - QVariant::fromValue(JObjectWrapper(env, b)), - QVariant::fromValue(JObjectWrapper(env, c))); - *futurePointer = result.d; - return qtjambi_cast(env, result); - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_run4) -(JNIEnv *env, jclass, jobject _threadPool, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d) -{ - try{ - QThreadPool *threadPool = qtjambi_to_QObject(env, _threadPool); - QSharedPointer futurePointer(new QFutureInterfaceBase); - QFuture result = threadPool ? QtConcurrent::run(threadPool, - CallableFunctor(env, javaRunnable, futurePointer), - QVariant::fromValue(JObjectWrapper(env, a)), - QVariant::fromValue(JObjectWrapper(env, b)), - QVariant::fromValue(JObjectWrapper(env, c)), - QVariant::fromValue(JObjectWrapper(env, d))) - : QtConcurrent::run(CallableFunctor(env, javaRunnable, futurePointer), - QVariant::fromValue(JObjectWrapper(env, a)), - QVariant::fromValue(JObjectWrapper(env, b)), - QVariant::fromValue(JObjectWrapper(env, c)), - QVariant::fromValue(JObjectWrapper(env, d))); - *futurePointer = result.d; - return qtjambi_cast(env, result); - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_run5) -(JNIEnv *env, jclass, jobject _threadPool, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d, jobject e) -{ - try{ - QThreadPool *threadPool = qtjambi_to_QObject(env, _threadPool); - QSharedPointer futurePointer(new QFutureInterfaceBase); - QFuture result = threadPool ? QtConcurrent::run(threadPool, - CallableFunctor(env, javaRunnable, futurePointer), - QVariant::fromValue(JObjectWrapper(env, a)), - QVariant::fromValue(JObjectWrapper(env, b)), - QVariant::fromValue(JObjectWrapper(env, c)), - QVariant::fromValue(JObjectWrapper(env, d)), - QVariant::fromValue(JObjectWrapper(env, e))) - : QtConcurrent::run(CallableFunctor(env, javaRunnable, futurePointer), - QVariant::fromValue(JObjectWrapper(env, a)), - QVariant::fromValue(JObjectWrapper(env, b)), - QVariant::fromValue(JObjectWrapper(env, c)), - QVariant::fromValue(JObjectWrapper(env, d)), - QVariant::fromValue(JObjectWrapper(env, e))); - *futurePointer = result.d; - return qtjambi_cast(env, result); - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_run6) -(JNIEnv *env, jclass, jobject _threadPool, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d, jobject e, jobject f) -{ - try{ - QThreadPool *threadPool = qtjambi_to_QObject(env, _threadPool); - QSharedPointer futurePointer(new QFutureInterfaceBase); - QFuture result = threadPool ? QtConcurrent::run(threadPool, - CallableFunctor(env, javaRunnable, futurePointer), - QVariant::fromValue(JObjectWrapper(env, a)), - QVariant::fromValue(JObjectWrapper(env, b)), - QVariant::fromValue(JObjectWrapper(env, c)), - QVariant::fromValue(JObjectWrapper(env, d)), - QVariant::fromValue(JObjectWrapper(env, e)), - QVariant::fromValue(JObjectWrapper(env, f))) - : QtConcurrent::run(CallableFunctor(env, javaRunnable, futurePointer), - QVariant::fromValue(JObjectWrapper(env, a)), - QVariant::fromValue(JObjectWrapper(env, b)), - QVariant::fromValue(JObjectWrapper(env, c)), - QVariant::fromValue(JObjectWrapper(env, d)), - QVariant::fromValue(JObjectWrapper(env, e)), - QVariant::fromValue(JObjectWrapper(env, f))); - *futurePointer = result.d; - return qtjambi_cast(env, result); - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_run7) -(JNIEnv *env, jclass, jobject _threadPool, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d, jobject e, jobject f, jobject g) -{ - try{ - QThreadPool *threadPool = qtjambi_to_QObject(env, _threadPool); - QSharedPointer futurePointer(new QFutureInterfaceBase); - QFuture result = threadPool ? QtConcurrent::run(threadPool, - CallableFunctor(env, javaRunnable, futurePointer), - QVariant::fromValue(JObjectWrapper(env, a)), - QVariant::fromValue(JObjectWrapper(env, b)), - QVariant::fromValue(JObjectWrapper(env, c)), - QVariant::fromValue(JObjectWrapper(env, d)), - QVariant::fromValue(JObjectWrapper(env, e)), - QVariant::fromValue(JObjectWrapper(env, f)), - QVariant::fromValue(JObjectWrapper(env, g))) - : QtConcurrent::run(CallableFunctor(env, javaRunnable, futurePointer), - QVariant::fromValue(JObjectWrapper(env, a)), - QVariant::fromValue(JObjectWrapper(env, b)), - QVariant::fromValue(JObjectWrapper(env, c)), - QVariant::fromValue(JObjectWrapper(env, d)), - QVariant::fromValue(JObjectWrapper(env, e)), - QVariant::fromValue(JObjectWrapper(env, f)), - QVariant::fromValue(JObjectWrapper(env, g))); - *futurePointer = result.d; - return qtjambi_cast(env, result); - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_run8) -(JNIEnv *env, jclass, jobject _threadPool, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d, jobject e, jobject f, jobject g, jobject h) -{ - try{ - QThreadPool *threadPool = qtjambi_to_QObject(env, _threadPool); - QSharedPointer futurePointer(new QFutureInterfaceBase); - QFuture result = threadPool ? QtConcurrent::run(threadPool, - CallableFunctor(env, javaRunnable, futurePointer), - QVariant::fromValue(JObjectWrapper(env, a)), - QVariant::fromValue(JObjectWrapper(env, b)), - QVariant::fromValue(JObjectWrapper(env, c)), - QVariant::fromValue(JObjectWrapper(env, d)), - QVariant::fromValue(JObjectWrapper(env, e)), - QVariant::fromValue(JObjectWrapper(env, f)), - QVariant::fromValue(JObjectWrapper(env, g)), - QVariant::fromValue(JObjectWrapper(env, h))) - : QtConcurrent::run(CallableFunctor(env, javaRunnable, futurePointer), - QVariant::fromValue(JObjectWrapper(env, a)), - QVariant::fromValue(JObjectWrapper(env, b)), - QVariant::fromValue(JObjectWrapper(env, c)), - QVariant::fromValue(JObjectWrapper(env, d)), - QVariant::fromValue(JObjectWrapper(env, e)), - QVariant::fromValue(JObjectWrapper(env, f)), - QVariant::fromValue(JObjectWrapper(env, g)), - QVariant::fromValue(JObjectWrapper(env, h))); - *futurePointer = result.d; - return qtjambi_cast(env, result); - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_run9) -(JNIEnv *env, jclass, jobject _threadPool, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d, jobject e, jobject f, jobject g, jobject h, jobject i) -{ - try{ - QThreadPool *threadPool = qtjambi_to_QObject(env, _threadPool); - QSharedPointer futurePointer(new QFutureInterfaceBase); - QFuture result = threadPool ? QtConcurrent::run(threadPool, - CallableFunctor(env, javaRunnable, futurePointer), - QVariant::fromValue(JObjectWrapper(env, a)), - QVariant::fromValue(JObjectWrapper(env, b)), - QVariant::fromValue(JObjectWrapper(env, c)), - QVariant::fromValue(JObjectWrapper(env, d)), - QVariant::fromValue(JObjectWrapper(env, e)), - QVariant::fromValue(JObjectWrapper(env, f)), - QVariant::fromValue(JObjectWrapper(env, g)), - QVariant::fromValue(JObjectWrapper(env, h)), - QVariant::fromValue(JObjectWrapper(env, i))) - : QtConcurrent::run(CallableFunctor(env, javaRunnable, futurePointer), - QVariant::fromValue(JObjectWrapper(env, a)), - QVariant::fromValue(JObjectWrapper(env, b)), - QVariant::fromValue(JObjectWrapper(env, c)), - QVariant::fromValue(JObjectWrapper(env, d)), - QVariant::fromValue(JObjectWrapper(env, e)), - QVariant::fromValue(JObjectWrapper(env, f)), - QVariant::fromValue(JObjectWrapper(env, g)), - QVariant::fromValue(JObjectWrapper(env, h)), - QVariant::fromValue(JObjectWrapper(env, i))); - *futurePointer = result.d; - return qtjambi_cast(env, result); - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_runWithPromiseVoid0) -(JNIEnv *env, jclass, jobject _threadPool, jobject javaRunnable) -{ - try{ - using Fun = RunFunctor&>; - QThreadPool *pool = qtjambi_to_QObject(env, _threadPool); - if(!pool){ - pool = QThreadPool::globalInstance(); - } - QSharedPointer futurePointer(new QFutureInterfaceBase); - QFuture result = QtConcurrent::run(pool, Fun(env, javaRunnable, futurePointer)); - *futurePointer = result.d; - return qtjambi_cast(env, result); - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_runWithPromiseVoid1) -(JNIEnv *env, jclass, jobject _threadPool, jobject javaRunnable, jobject a) -{ - try{ - using Fun = RunFunctor&,QVariant>; - QThreadPool *pool = qtjambi_to_QObject(env, _threadPool); - if(!pool){ - pool = QThreadPool::globalInstance(); - } - QSharedPointer futurePointer(new QFutureInterfaceBase); - QFuture result = QtConcurrent::run(pool, Fun(env, javaRunnable, futurePointer), QVariant::fromValue(JObjectWrapper(env, a))); - *futurePointer = result.d; - return qtjambi_cast(env, result); - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_runWithPromiseVoid2) -(JNIEnv *env, jclass, jobject _threadPool, jobject javaRunnable, jobject a, jobject b) -{ - try{ - using Fun = RunFunctor&,QVariant,QVariant>; - QThreadPool *pool = qtjambi_to_QObject(env, _threadPool); - if(!pool){ - pool = QThreadPool::globalInstance(); - } - QSharedPointer futurePointer(new QFutureInterfaceBase); - QFuture result = QtConcurrent::run(pool, Fun(env, javaRunnable, futurePointer), - QVariant::fromValue(JObjectWrapper(env, a)), - QVariant::fromValue(JObjectWrapper(env, b))); - *futurePointer = result.d; - return qtjambi_cast(env, result); - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_runWithPromiseVoid3) -(JNIEnv *env, jclass, jobject _threadPool, jobject javaRunnable, jobject a, jobject b, jobject c) -{ - try{ - using Fun = RunFunctor&,QVariant,QVariant,QVariant>; - QThreadPool *pool = qtjambi_to_QObject(env, _threadPool); - if(!pool){ - pool = QThreadPool::globalInstance(); - } - QSharedPointer futurePointer(new QFutureInterfaceBase); - QFuture result = QtConcurrent::run(pool, Fun(env, javaRunnable, futurePointer), - QVariant::fromValue(JObjectWrapper(env, a)), - QVariant::fromValue(JObjectWrapper(env, b)), - QVariant::fromValue(JObjectWrapper(env, c))); - *futurePointer = result.d; - return qtjambi_cast(env, result); - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_runWithPromiseVoid4) -(JNIEnv *env, jclass, jobject _threadPool, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d) -{ - try{ - using Fun = RunFunctor&,QVariant,QVariant,QVariant,QVariant>; - QThreadPool *pool = qtjambi_to_QObject(env, _threadPool); - if(!pool){ - pool = QThreadPool::globalInstance(); - } - QSharedPointer futurePointer(new QFutureInterfaceBase); - QFuture result = QtConcurrent::run(pool, Fun(env, javaRunnable, futurePointer), - QVariant::fromValue(JObjectWrapper(env, a)), - QVariant::fromValue(JObjectWrapper(env, b)), - QVariant::fromValue(JObjectWrapper(env, c)), - QVariant::fromValue(JObjectWrapper(env, d))); - *futurePointer = result.d; - return qtjambi_cast(env, result); - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_runWithPromiseVoid5) -(JNIEnv *env, jclass, jobject _threadPool, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d, jobject e) -{ - try{ - using Fun = RunFunctor&,QVariant,QVariant,QVariant,QVariant,QVariant>; - QThreadPool *pool = qtjambi_to_QObject(env, _threadPool); - if(!pool){ - pool = QThreadPool::globalInstance(); - } - QSharedPointer futurePointer(new QFutureInterfaceBase); - QFuture result = QtConcurrent::run(pool, Fun(env, javaRunnable, futurePointer), - QVariant::fromValue(JObjectWrapper(env, a)), - QVariant::fromValue(JObjectWrapper(env, b)), - QVariant::fromValue(JObjectWrapper(env, c)), - QVariant::fromValue(JObjectWrapper(env, d)), - QVariant::fromValue(JObjectWrapper(env, e))); - *futurePointer = result.d; - return qtjambi_cast(env, result); - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_runWithPromiseVoid6) -(JNIEnv *env, jclass, jobject _threadPool, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d, jobject e, jobject f) -{ - try{ - using Fun = RunFunctor&, QVariant, QVariant, - QVariant, QVariant, - QVariant, QVariant>; - QThreadPool *pool = qtjambi_to_QObject(env, _threadPool); - if(!pool){ - pool = QThreadPool::globalInstance(); - } - QSharedPointer futurePointer(new QFutureInterfaceBase); - QFuture result = QtConcurrent::run(pool, Fun(env, javaRunnable, futurePointer), - QVariant::fromValue(JObjectWrapper(env, a)), - QVariant::fromValue(JObjectWrapper(env, b)), - QVariant::fromValue(JObjectWrapper(env, c)), - QVariant::fromValue(JObjectWrapper(env, d)), - QVariant::fromValue(JObjectWrapper(env, e)), - QVariant::fromValue(JObjectWrapper(env, f))); - *futurePointer = result.d; - return qtjambi_cast(env, result); - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_runWithPromiseVoid7) -(JNIEnv *env, jclass, jobject _threadPool, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d, jobject e, jobject f, jobject g) -{ - try{ - using Fun = RunFunctor&, QVariant, QVariant, - QVariant, QVariant, - QVariant, QVariant, - QVariant>; - QThreadPool *pool = qtjambi_to_QObject(env, _threadPool); - if(!pool){ - pool = QThreadPool::globalInstance(); - } - QSharedPointer futurePointer(new QFutureInterfaceBase); - QFuture result = QtConcurrent::run(pool, Fun(env, javaRunnable, futurePointer), - QVariant::fromValue(JObjectWrapper(env, a)), - QVariant::fromValue(JObjectWrapper(env, b)), - QVariant::fromValue(JObjectWrapper(env, c)), - QVariant::fromValue(JObjectWrapper(env, d)), - QVariant::fromValue(JObjectWrapper(env, e)), - QVariant::fromValue(JObjectWrapper(env, f)), - QVariant::fromValue(JObjectWrapper(env, g))); - *futurePointer = result.d; - return qtjambi_cast(env, result); - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_runWithPromiseVoid8) -(JNIEnv *env, jclass, jobject _threadPool, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d, jobject e, jobject f, jobject g, jobject h) -{ - try{ - using Fun = RunFunctor&, QVariant, QVariant, - QVariant, QVariant, - QVariant, QVariant, - QVariant, QVariant>; - QThreadPool *pool = qtjambi_to_QObject(env, _threadPool); - if(!pool){ - pool = QThreadPool::globalInstance(); - } - QSharedPointer futurePointer(new QFutureInterfaceBase); - QFuture result = QtConcurrent::run(pool, Fun(env, javaRunnable, futurePointer), - QVariant::fromValue(JObjectWrapper(env, a)), - QVariant::fromValue(JObjectWrapper(env, b)), - QVariant::fromValue(JObjectWrapper(env, c)), - QVariant::fromValue(JObjectWrapper(env, d)), - QVariant::fromValue(JObjectWrapper(env, e)), - QVariant::fromValue(JObjectWrapper(env, f)), - QVariant::fromValue(JObjectWrapper(env, g)), - QVariant::fromValue(JObjectWrapper(env, h))); - *futurePointer = result.d; - return qtjambi_cast(env, result); - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_runWithPromiseVoid9) -(JNIEnv *env, jclass, jobject _threadPool, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d, jobject e, jobject f, jobject g, jobject h, jobject i) -{ - try{ - using Fun = RunFunctor&, QVariant, QVariant, - QVariant, QVariant, - QVariant, QVariant, - QVariant, QVariant, QVariant>; - QThreadPool *pool = qtjambi_to_QObject(env, _threadPool); - if(!pool){ - pool = QThreadPool::globalInstance(); - } - QSharedPointer futurePointer(new QFutureInterfaceBase); - QFuture result = QtConcurrent::run(pool, Fun(env, javaRunnable, futurePointer), - QVariant::fromValue(JObjectWrapper(env, a)), - QVariant::fromValue(JObjectWrapper(env, b)), - QVariant::fromValue(JObjectWrapper(env, c)), - QVariant::fromValue(JObjectWrapper(env, d)), - QVariant::fromValue(JObjectWrapper(env, e)), - QVariant::fromValue(JObjectWrapper(env, f)), - QVariant::fromValue(JObjectWrapper(env, g)), - QVariant::fromValue(JObjectWrapper(env, h)), - QVariant::fromValue(JObjectWrapper(env, i))); - *futurePointer = result.d; - return qtjambi_cast(env, result); - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_runWithPromise0) -(JNIEnv *env, jclass, jobject _threadPool, jobject javaRunnable) -{ - try{ - using Fun = RunFunctor&>; - QThreadPool *pool = qtjambi_to_QObject(env, _threadPool); - if(!pool){ - pool = QThreadPool::globalInstance(); - } - QSharedPointer futurePointer(new QFutureInterfaceBase); - QFuture result = QtConcurrent::run(pool, Fun(env, javaRunnable, futurePointer)); - *futurePointer = result.d; - return qtjambi_cast(env, result); - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_runWithPromise1) -(JNIEnv *env, jclass, jobject _threadPool, jobject javaRunnable, jobject a) -{ - try{ - using Fun = RunFunctor&, QVariant>; - QThreadPool *pool = qtjambi_to_QObject(env, _threadPool); - if(!pool){ - pool = QThreadPool::globalInstance(); - } - QSharedPointer futurePointer(new QFutureInterfaceBase); - QFuture result = QtConcurrent::run(pool, Fun(env, javaRunnable, futurePointer), - QVariant::fromValue(JObjectWrapper(env, a))); - *futurePointer = result.d; - return qtjambi_cast(env, result); - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_runWithPromise2) -(JNIEnv *env, jclass, jobject _threadPool, jobject javaRunnable, jobject a, jobject b) -{ - try{ - using Fun = RunFunctor&, QVariant, QVariant>; - QThreadPool *pool = qtjambi_to_QObject(env, _threadPool); - if(!pool){ - pool = QThreadPool::globalInstance(); - } - QSharedPointer futurePointer(new QFutureInterfaceBase); - QFuture result = QtConcurrent::run(pool, Fun(env, javaRunnable, futurePointer), - QVariant::fromValue(JObjectWrapper(env, a)), - QVariant::fromValue(JObjectWrapper(env, b))); - *futurePointer = result.d; - return qtjambi_cast(env, result); - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_runWithPromise3) -(JNIEnv *env, jclass, jobject _threadPool, jobject javaRunnable, jobject a, jobject b, jobject c) -{ - try{ - using Fun = RunFunctor&, QVariant, QVariant, - QVariant>; - QThreadPool *pool = qtjambi_to_QObject(env, _threadPool); - if(!pool){ - pool = QThreadPool::globalInstance(); - } - QSharedPointer futurePointer(new QFutureInterfaceBase); - QFuture result = QtConcurrent::run(pool, Fun(env, javaRunnable, futurePointer), - QVariant::fromValue(JObjectWrapper(env, a)), - QVariant::fromValue(JObjectWrapper(env, b)), - QVariant::fromValue(JObjectWrapper(env, c))); - *futurePointer = result.d; - return qtjambi_cast(env, result); - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_runWithPromise4) -(JNIEnv *env, jclass, jobject _threadPool, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d) -{ - try{ - using Fun = RunFunctor&, QVariant, QVariant, - QVariant, QVariant>; - QThreadPool *pool = qtjambi_to_QObject(env, _threadPool); - if(!pool){ - pool = QThreadPool::globalInstance(); - } - QSharedPointer futurePointer(new QFutureInterfaceBase); - QFuture result = QtConcurrent::run(pool, Fun(env, javaRunnable, futurePointer), - QVariant::fromValue(JObjectWrapper(env, a)), - QVariant::fromValue(JObjectWrapper(env, b)), - QVariant::fromValue(JObjectWrapper(env, c)), - QVariant::fromValue(JObjectWrapper(env, d))); - *futurePointer = result.d; - return qtjambi_cast(env, result); - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_runWithPromise5) -(JNIEnv *env, jclass, jobject _threadPool, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d, jobject e) -{ - try{ - using Fun = RunFunctor&, QVariant, QVariant, - QVariant, QVariant, - QVariant>; - QThreadPool *pool = qtjambi_to_QObject(env, _threadPool); - if(!pool){ - pool = QThreadPool::globalInstance(); - } - QSharedPointer futurePointer(new QFutureInterfaceBase); - QFuture result = QtConcurrent::run(pool, Fun(env, javaRunnable, futurePointer), - QVariant::fromValue(JObjectWrapper(env, a)), - QVariant::fromValue(JObjectWrapper(env, b)), - QVariant::fromValue(JObjectWrapper(env, c)), - QVariant::fromValue(JObjectWrapper(env, d)), - QVariant::fromValue(JObjectWrapper(env, e))); - *futurePointer = result.d; - return qtjambi_cast(env, result); - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_runWithPromise6) -(JNIEnv *env, jclass, jobject _threadPool, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d, jobject e, jobject f) -{ - try{ - using Fun = RunFunctor&, QVariant, QVariant, - QVariant, QVariant, - QVariant, QVariant>; - QThreadPool *pool = qtjambi_to_QObject(env, _threadPool); - if(!pool){ - pool = QThreadPool::globalInstance(); - } - QSharedPointer futurePointer(new QFutureInterfaceBase); - QFuture result = QtConcurrent::run(pool, Fun(env, javaRunnable, futurePointer), - QVariant::fromValue(JObjectWrapper(env, a)), - QVariant::fromValue(JObjectWrapper(env, b)), - QVariant::fromValue(JObjectWrapper(env, c)), - QVariant::fromValue(JObjectWrapper(env, d)), - QVariant::fromValue(JObjectWrapper(env, e)), - QVariant::fromValue(JObjectWrapper(env, f))); - *futurePointer = result.d; - return qtjambi_cast(env, result); - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_runWithPromise7) -(JNIEnv *env, jclass, jobject _threadPool, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d, jobject e, jobject f, jobject g) -{ - try{ - using Fun = RunFunctor&, QVariant, QVariant, - QVariant, QVariant, - QVariant, QVariant, - QVariant>; - QThreadPool *pool = qtjambi_to_QObject(env, _threadPool); - if(!pool){ - pool = QThreadPool::globalInstance(); - } - QSharedPointer futurePointer(new QFutureInterfaceBase); - QFuture result = QtConcurrent::run(pool, Fun(env, javaRunnable, futurePointer), - QVariant::fromValue(JObjectWrapper(env, a)), - QVariant::fromValue(JObjectWrapper(env, b)), - QVariant::fromValue(JObjectWrapper(env, c)), - QVariant::fromValue(JObjectWrapper(env, d)), - QVariant::fromValue(JObjectWrapper(env, e)), - QVariant::fromValue(JObjectWrapper(env, f)), - QVariant::fromValue(JObjectWrapper(env, g))); - *futurePointer = result.d; - return qtjambi_cast(env, result); - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_runWithPromise8) -(JNIEnv *env, jclass, jobject _threadPool, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d, jobject e, jobject f, jobject g, jobject h) -{ - try{ - using Fun = RunFunctor&, QVariant, QVariant, - QVariant, QVariant, - QVariant, QVariant, - QVariant, QVariant>; - QThreadPool *pool = qtjambi_to_QObject(env, _threadPool); - if(!pool){ - pool = QThreadPool::globalInstance(); - } - QSharedPointer futurePointer(new QFutureInterfaceBase); - QFuture result = QtConcurrent::run(pool, Fun(env, javaRunnable, futurePointer), - QVariant::fromValue(JObjectWrapper(env, a)), - QVariant::fromValue(JObjectWrapper(env, b)), - QVariant::fromValue(JObjectWrapper(env, c)), - QVariant::fromValue(JObjectWrapper(env, d)), - QVariant::fromValue(JObjectWrapper(env, e)), - QVariant::fromValue(JObjectWrapper(env, f)), - QVariant::fromValue(JObjectWrapper(env, g)), - QVariant::fromValue(JObjectWrapper(env, h))); - *futurePointer = result.d; - return qtjambi_cast(env, result); - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_runWithPromise9) -(JNIEnv *env, jclass, jobject _threadPool, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d, jobject e, jobject f, jobject g, jobject h, jobject i) -{ - try{ - using Fun = RunFunctor&, QVariant, QVariant, - QVariant, QVariant, - QVariant, QVariant, - QVariant, QVariant, QVariant>; - QThreadPool *pool = qtjambi_to_QObject(env, _threadPool); - if(!pool){ - pool = QThreadPool::globalInstance(); - } - QSharedPointer futurePointer(new QFutureInterfaceBase); - QFuture result = QtConcurrent::run(pool, Fun(env, javaRunnable, futurePointer), - QVariant::fromValue(JObjectWrapper(env, a)), - QVariant::fromValue(JObjectWrapper(env, b)), - QVariant::fromValue(JObjectWrapper(env, c)), - QVariant::fromValue(JObjectWrapper(env, d)), - QVariant::fromValue(JObjectWrapper(env, e)), - QVariant::fromValue(JObjectWrapper(env, f)), - QVariant::fromValue(JObjectWrapper(env, g)), - QVariant::fromValue(JObjectWrapper(env, h)), - QVariant::fromValue(JObjectWrapper(env, i))); - *futurePointer = result.d; - return qtjambi_cast(env, result); - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_00024QTaskBuilderVoid0Arg0_spawn) -(JNIEnv *env, jclass, jobject _threadPool, jint priority, jobject javaRunnable) -{ - try{ - QSharedPointer futurePointer(new QFutureInterfaceBase); - auto task = QtConcurrent::task(RunFunctor<>(env, javaRunnable, futurePointer)) - .withPriority(priority); - if(QThreadPool* t = qtjambi_to_QObject(env, _threadPool)){ - QFuture result = task.onThreadPool(*t).spawn(); - *futurePointer = result.d; - return qtjambi_cast(env, result); - }else{ - QFuture result = task.spawn(); - *futurePointer = result.d; - return qtjambi_cast(env, result); - } - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_00024QTaskBuilderVoid1Arg1_spawn) -(JNIEnv *env, jclass, jobject _threadPool, jint priority, jobject javaRunnable, jobject a) -{ - try{ - QSharedPointer futurePointer(new QFutureInterfaceBase); - auto task = QtConcurrent::task(RunFunctor(env, javaRunnable, futurePointer)) - .withArguments(QVariant::fromValue(JObjectWrapper(env, a))) - .withPriority(priority); - if(QThreadPool* t = qtjambi_to_QObject(env, _threadPool)){ - QFuture result = task.onThreadPool(*t).spawn(); - *futurePointer = result.d; - return qtjambi_cast(env, result); - }else{ - QFuture result = task.spawn(); - *futurePointer = result.d; - return qtjambi_cast(env, result); - } - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_00024QTaskBuilderVoid2Arg2_spawn) -(JNIEnv *env, jclass, jobject _threadPool, jint priority, jobject javaRunnable, jobject a, jobject b) -{ - try{ - QSharedPointer futurePointer(new QFutureInterfaceBase); - auto task = QtConcurrent::task(RunFunctor(env, javaRunnable, futurePointer)) - .withArguments(QVariant::fromValue(JObjectWrapper(env, a)), - QVariant::fromValue(JObjectWrapper(env, b))) - .withPriority(priority); - if(QThreadPool* t = qtjambi_to_QObject(env, _threadPool)){ - QFuture result = task.onThreadPool(*t).spawn(); - *futurePointer = result.d; - return qtjambi_cast(env, result); - }else{ - QFuture result = task.spawn(); - *futurePointer = result.d; - return qtjambi_cast(env, result); - } - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_00024QTaskBuilderVoid3Arg3_spawn) -(JNIEnv *env, jclass, jobject _threadPool, jint priority, jobject javaRunnable, jobject a, jobject b, jobject c) -{ - try{ - QSharedPointer futurePointer(new QFutureInterfaceBase); - auto task = QtConcurrent::task(RunFunctor(env, javaRunnable, futurePointer)) - .withArguments(QVariant::fromValue(JObjectWrapper(env, a)), - QVariant::fromValue(JObjectWrapper(env, b)), - QVariant::fromValue(JObjectWrapper(env, c))) - .withPriority(priority); - if(QThreadPool* t = qtjambi_to_QObject(env, _threadPool)){ - QFuture result = task.onThreadPool(*t).spawn(); - *futurePointer = result.d; - return qtjambi_cast(env, result); - }else{ - QFuture result = task.spawn(); - *futurePointer = result.d; - return qtjambi_cast(env, result); - } - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_00024QTaskBuilderVoid4Arg4_spawn) -(JNIEnv *env, jclass, jobject _threadPool, jint priority, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d) -{ - try{ - QSharedPointer futurePointer(new QFutureInterfaceBase); - auto task = QtConcurrent::task(RunFunctor(env, javaRunnable, futurePointer)) - .withArguments(QVariant::fromValue(JObjectWrapper(env, a)), - QVariant::fromValue(JObjectWrapper(env, b)), - QVariant::fromValue(JObjectWrapper(env, c)), - QVariant::fromValue(JObjectWrapper(env, d))) - .withPriority(priority); - if(QThreadPool* t = qtjambi_to_QObject(env, _threadPool)){ - QFuture result = task.onThreadPool(*t).spawn(); - *futurePointer = result.d; - return qtjambi_cast(env, result); - }else{ - QFuture result = task.spawn(); - *futurePointer = result.d; - return qtjambi_cast(env, result); - } - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_00024QTaskBuilderVoid5Arg5_spawn) -(JNIEnv *env, jclass, jobject _threadPool, jint priority, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d, jobject e) -{ - try{ - QSharedPointer futurePointer(new QFutureInterfaceBase); - auto task = QtConcurrent::task(RunFunctor(env, javaRunnable, futurePointer)) - .withArguments(QVariant::fromValue(JObjectWrapper(env, a)), - QVariant::fromValue(JObjectWrapper(env, b)), - QVariant::fromValue(JObjectWrapper(env, c)), - QVariant::fromValue(JObjectWrapper(env, d)), - QVariant::fromValue(JObjectWrapper(env, e))) - .withPriority(priority); - if(QThreadPool* t = qtjambi_to_QObject(env, _threadPool)){ - QFuture result = task.onThreadPool(*t).spawn(); - *futurePointer = result.d; - return qtjambi_cast(env, result); - }else{ - QFuture result = task.spawn(); - *futurePointer = result.d; - return qtjambi_cast(env, result); - } - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_00024QTaskBuilderVoid6Arg6_spawn) -(JNIEnv *env, jclass, jobject _threadPool, jint priority, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d, jobject e, jobject f) -{ - try{ - QSharedPointer futurePointer(new QFutureInterfaceBase); - auto task = QtConcurrent::task(RunFunctor(env, javaRunnable, futurePointer)) - .withArguments(QVariant::fromValue(JObjectWrapper(env, a)), - QVariant::fromValue(JObjectWrapper(env, b)), - QVariant::fromValue(JObjectWrapper(env, c)), - QVariant::fromValue(JObjectWrapper(env, d)), - QVariant::fromValue(JObjectWrapper(env, e)), - QVariant::fromValue(JObjectWrapper(env, f))) - .withPriority(priority); - if(QThreadPool* t = qtjambi_to_QObject(env, _threadPool)){ - QFuture result = task.onThreadPool(*t).spawn(); - *futurePointer = result.d; - return qtjambi_cast(env, result); - }else{ - QFuture result = task.spawn(); - *futurePointer = result.d; - return qtjambi_cast(env, result); - } - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_00024QTaskBuilderVoid7Arg7_spawn) -(JNIEnv *env, jclass, jobject _threadPool, jint priority, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d, jobject e, jobject f, jobject g) -{ - try{ - QSharedPointer futurePointer(new QFutureInterfaceBase); - auto task = QtConcurrent::task(RunFunctor(env, javaRunnable, futurePointer)) - .withArguments(QVariant::fromValue(JObjectWrapper(env, a)), - QVariant::fromValue(JObjectWrapper(env, b)), - QVariant::fromValue(JObjectWrapper(env, c)), - QVariant::fromValue(JObjectWrapper(env, d)), - QVariant::fromValue(JObjectWrapper(env, e)), - QVariant::fromValue(JObjectWrapper(env, f)), - QVariant::fromValue(JObjectWrapper(env, g))) - .withPriority(priority); - if(QThreadPool* t = qtjambi_to_QObject(env, _threadPool)){ - QFuture result = task.onThreadPool(*t).spawn(); - *futurePointer = result.d; - return qtjambi_cast(env, result); - }else{ - QFuture result = task.spawn(); - *futurePointer = result.d; - return qtjambi_cast(env, result); - } - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_00024QTaskBuilderVoid8Arg8_spawn) -(JNIEnv *env, jclass, jobject _threadPool, jint priority, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d, jobject e, jobject f, jobject g, jobject h) -{ - try{ - QSharedPointer futurePointer(new QFutureInterfaceBase); - auto task = QtConcurrent::task(RunFunctor(env, javaRunnable, futurePointer)) - .withArguments(QVariant::fromValue(JObjectWrapper(env, a)), - QVariant::fromValue(JObjectWrapper(env, b)), - QVariant::fromValue(JObjectWrapper(env, c)), - QVariant::fromValue(JObjectWrapper(env, d)), - QVariant::fromValue(JObjectWrapper(env, e)), - QVariant::fromValue(JObjectWrapper(env, f)), - QVariant::fromValue(JObjectWrapper(env, g)), - QVariant::fromValue(JObjectWrapper(env, h))) - .withPriority(priority); - if(QThreadPool* t = qtjambi_to_QObject(env, _threadPool)){ - QFuture result = task.onThreadPool(*t).spawn(); - *futurePointer = result.d; - return qtjambi_cast(env, result); - }else{ - QFuture result = task.spawn(); - *futurePointer = result.d; - return qtjambi_cast(env, result); - } - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_00024QTaskBuilderVoid9Arg9_spawn) -(JNIEnv *env, jclass, jobject _threadPool, jint priority, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d, jobject e, jobject f, jobject g, jobject h, jobject i) -{ - try{ - QSharedPointer futurePointer(new QFutureInterfaceBase); - auto task = QtConcurrent::task(RunFunctor(env, javaRunnable, futurePointer)) - .withArguments(QVariant::fromValue(JObjectWrapper(env, a)), - QVariant::fromValue(JObjectWrapper(env, b)), - QVariant::fromValue(JObjectWrapper(env, c)), - QVariant::fromValue(JObjectWrapper(env, d)), - QVariant::fromValue(JObjectWrapper(env, e)), - QVariant::fromValue(JObjectWrapper(env, f)), - QVariant::fromValue(JObjectWrapper(env, g)), - QVariant::fromValue(JObjectWrapper(env, h)), - QVariant::fromValue(JObjectWrapper(env, i))) - .withPriority(priority); - if(QThreadPool* t = qtjambi_to_QObject(env, _threadPool)){ - QFuture result = task.onThreadPool(*t).spawn(); - *futurePointer = result.d; - return qtjambi_cast(env, result); - }else{ - QFuture result = task.spawn(); - *futurePointer = result.d; - return qtjambi_cast(env, result); - } - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_00024QTypedTaskBuilder0Arg0_spawn) -(JNIEnv *env, jclass, jobject _threadPool, jint priority, jobject javaRunnable) -{ - try{ - QSharedPointer futurePointer(new QFutureInterfaceBase); - auto task = QtConcurrent::task(CallableFunctor<>(env, javaRunnable, futurePointer)) - .withPriority(priority); - if(QThreadPool* t = qtjambi_to_QObject(env, _threadPool)){ - QFuture result = task.onThreadPool(*t).spawn(); - *futurePointer = result.d; - return qtjambi_cast(env, result); - }else{ - QFuture result = task.spawn(); - *futurePointer = result.d; - return qtjambi_cast(env, result); - } - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_00024QTypedTaskBuilder1Arg1_spawn) -(JNIEnv *env, jclass, jobject _threadPool, jint priority, jobject javaRunnable, jobject a) -{ - try{ - QSharedPointer futurePointer(new QFutureInterfaceBase); - auto task = QtConcurrent::task(CallableFunctor(env, javaRunnable, futurePointer)) - .withArguments(QVariant::fromValue(JObjectWrapper(env, a))) - .withPriority(priority); - if(QThreadPool* t = qtjambi_to_QObject(env, _threadPool)){ - QFuture result = task.onThreadPool(*t).spawn(); - *futurePointer = result.d; - return qtjambi_cast(env, result); - }else{ - QFuture result = task.spawn(); - *futurePointer = result.d; - return qtjambi_cast(env, result); - } - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_00024QTypedTaskBuilder2Arg2_spawn) -(JNIEnv *env, jclass, jobject _threadPool, jint priority, jobject javaRunnable, jobject a, jobject b) -{ - try{ - QSharedPointer futurePointer(new QFutureInterfaceBase); - auto task = QtConcurrent::task(CallableFunctor(env, javaRunnable, futurePointer)) - .withArguments(QVariant::fromValue(JObjectWrapper(env, a)), - QVariant::fromValue(JObjectWrapper(env, b))) - .withPriority(priority); - if(QThreadPool* t = qtjambi_to_QObject(env, _threadPool)){ - QFuture result = task.onThreadPool(*t).spawn(); - *futurePointer = result.d; - return qtjambi_cast(env, result); - }else{ - QFuture result = task.spawn(); - *futurePointer = result.d; - return qtjambi_cast(env, result); - } - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_00024QTypedTaskBuilder3Arg3_spawn) -(JNIEnv *env, jclass, jobject _threadPool, jint priority, jobject javaRunnable, jobject a, jobject b, jobject c) -{ - try{ - QSharedPointer futurePointer(new QFutureInterfaceBase); - auto task = QtConcurrent::task(CallableFunctor(env, javaRunnable, futurePointer)) - .withArguments(QVariant::fromValue(JObjectWrapper(env, a)), - QVariant::fromValue(JObjectWrapper(env, b)), - QVariant::fromValue(JObjectWrapper(env, c))) - .withPriority(priority); - if(QThreadPool* t = qtjambi_to_QObject(env, _threadPool)){ - QFuture result = task.onThreadPool(*t).spawn(); - *futurePointer = result.d; - return qtjambi_cast(env, result); - }else{ - QFuture result = task.spawn(); - *futurePointer = result.d; - return qtjambi_cast(env, result); - } - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_00024QTypedTaskBuilder4Arg4_spawn) -(JNIEnv *env, jclass, jobject _threadPool, jint priority, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d) -{ - try{ - QSharedPointer futurePointer(new QFutureInterfaceBase); - auto task = QtConcurrent::task(CallableFunctor(env, javaRunnable, futurePointer)) - .withArguments(QVariant::fromValue(JObjectWrapper(env, a)), - QVariant::fromValue(JObjectWrapper(env, b)), - QVariant::fromValue(JObjectWrapper(env, c)), - QVariant::fromValue(JObjectWrapper(env, d))) - .withPriority(priority); - if(QThreadPool* t = qtjambi_to_QObject(env, _threadPool)){ - QFuture result = task.onThreadPool(*t).spawn(); - *futurePointer = result.d; - return qtjambi_cast(env, result); - }else{ - QFuture result = task.spawn(); - *futurePointer = result.d; - return qtjambi_cast(env, result); - } - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_00024QTypedTaskBuilder5Arg5_spawn) -(JNIEnv *env, jclass, jobject _threadPool, jint priority, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d, jobject e) -{ - try{ - QSharedPointer futurePointer(new QFutureInterfaceBase); - auto task = QtConcurrent::task(CallableFunctor(env, javaRunnable, futurePointer)) - .withArguments(QVariant::fromValue(JObjectWrapper(env, a)), - QVariant::fromValue(JObjectWrapper(env, b)), - QVariant::fromValue(JObjectWrapper(env, c)), - QVariant::fromValue(JObjectWrapper(env, d)), - QVariant::fromValue(JObjectWrapper(env, e))) - .withPriority(priority); - if(QThreadPool* t = qtjambi_to_QObject(env, _threadPool)){ - QFuture result = task.onThreadPool(*t).spawn(); - *futurePointer = result.d; - return qtjambi_cast(env, result); - }else{ - QFuture result = task.spawn(); - *futurePointer = result.d; - return qtjambi_cast(env, result); - } - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_00024QTypedTaskBuilder6Arg6_spawn) -(JNIEnv *env, jclass, jobject _threadPool, jint priority, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d, jobject e, jobject f) -{ - try{ - QSharedPointer futurePointer(new QFutureInterfaceBase); - auto task = QtConcurrent::task(CallableFunctor(env, javaRunnable, futurePointer)) - .withArguments(QVariant::fromValue(JObjectWrapper(env, a)), - QVariant::fromValue(JObjectWrapper(env, b)), - QVariant::fromValue(JObjectWrapper(env, c)), - QVariant::fromValue(JObjectWrapper(env, d)), - QVariant::fromValue(JObjectWrapper(env, e)), - QVariant::fromValue(JObjectWrapper(env, f))) - .withPriority(priority); - if(QThreadPool* t = qtjambi_to_QObject(env, _threadPool)){ - QFuture result = task.onThreadPool(*t).spawn(); - *futurePointer = result.d; - return qtjambi_cast(env, result); - }else{ - QFuture result = task.spawn(); - *futurePointer = result.d; - return qtjambi_cast(env, result); - } - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_00024QTypedTaskBuilder7Arg7_spawn) -(JNIEnv *env, jclass, jobject _threadPool, jint priority, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d, jobject e, jobject f, jobject g) -{ - try{ - QSharedPointer futurePointer(new QFutureInterfaceBase); - auto task = QtConcurrent::task(CallableFunctor(env, javaRunnable, futurePointer)) - .withArguments(QVariant::fromValue(JObjectWrapper(env, a)), - QVariant::fromValue(JObjectWrapper(env, b)), - QVariant::fromValue(JObjectWrapper(env, c)), - QVariant::fromValue(JObjectWrapper(env, d)), - QVariant::fromValue(JObjectWrapper(env, e)), - QVariant::fromValue(JObjectWrapper(env, f)), - QVariant::fromValue(JObjectWrapper(env, g))) - .withPriority(priority); - if(QThreadPool* t = qtjambi_to_QObject(env, _threadPool)){ - QFuture result = task.onThreadPool(*t).spawn(); - *futurePointer = result.d; - return qtjambi_cast(env, result); - }else{ - QFuture result = task.spawn(); - *futurePointer = result.d; - return qtjambi_cast(env, result); - } - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_00024QTypedTaskBuilder8Arg8_spawn) -(JNIEnv *env, jclass, jobject _threadPool, jint priority, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d, jobject e, jobject f, jobject g, jobject h) -{ - try{ - QSharedPointer futurePointer(new QFutureInterfaceBase); - auto task = QtConcurrent::task(CallableFunctor(env, javaRunnable, futurePointer)) - .withArguments(QVariant::fromValue(JObjectWrapper(env, a)), - QVariant::fromValue(JObjectWrapper(env, b)), - QVariant::fromValue(JObjectWrapper(env, c)), - QVariant::fromValue(JObjectWrapper(env, d)), - QVariant::fromValue(JObjectWrapper(env, e)), - QVariant::fromValue(JObjectWrapper(env, f)), - QVariant::fromValue(JObjectWrapper(env, g)), - QVariant::fromValue(JObjectWrapper(env, h))) - .withPriority(priority); - if(QThreadPool* t = qtjambi_to_QObject(env, _threadPool)){ - QFuture result = task.onThreadPool(*t).spawn(); - *futurePointer = result.d; - return qtjambi_cast(env, result); - }else{ - QFuture result = task.spawn(); - *futurePointer = result.d; - return qtjambi_cast(env, result); - } - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_00024QTypedTaskBuilder9Arg9_spawn) -(JNIEnv *env, jclass, jobject _threadPool, jint priority, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d, jobject e, jobject f, jobject g, jobject h, jobject i) -{ - try{ - QSharedPointer futurePointer(new QFutureInterfaceBase); - auto task = QtConcurrent::task(CallableFunctor(env, javaRunnable, futurePointer)) - .withArguments(QVariant::fromValue(JObjectWrapper(env, a)), - QVariant::fromValue(JObjectWrapper(env, b)), - QVariant::fromValue(JObjectWrapper(env, c)), - QVariant::fromValue(JObjectWrapper(env, d)), - QVariant::fromValue(JObjectWrapper(env, e)), - QVariant::fromValue(JObjectWrapper(env, f)), - QVariant::fromValue(JObjectWrapper(env, g)), - QVariant::fromValue(JObjectWrapper(env, h)), - QVariant::fromValue(JObjectWrapper(env, i))) - .withPriority(priority); - if(QThreadPool* t = qtjambi_to_QObject(env, _threadPool)){ - QFuture result = task.onThreadPool(*t).spawn(); - *futurePointer = result.d; - return qtjambi_cast(env, result); - }else{ - QFuture result = task.spawn(); - *futurePointer = result.d; - return qtjambi_cast(env, result); - } - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_00024QPromiseTaskBuilderVoid0Arg0_spawn) -(JNIEnv *env, jclass, jobject _threadPool, jint priority, jobject javaRunnable) -{ - try{ - QSharedPointer futurePointer(new QFutureInterfaceBase); - auto task = QtConcurrent::task(RunFunctor&>(env, javaRunnable, futurePointer)) - .withPriority(priority); - if(QThreadPool* t = qtjambi_to_QObject(env, _threadPool)){ - QFuture result = task.onThreadPool(*t).spawn(); - *futurePointer = result.d; - return qtjambi_cast(env, result); - }else{ - QFuture result = task.spawn(); - *futurePointer = result.d; - return qtjambi_cast(env, result); - } - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_00024QPromiseTaskBuilderVoid1Arg1_spawn) -(JNIEnv *env, jclass, jobject _threadPool, jint priority, jobject javaRunnable, jobject a) -{ - try{ - QSharedPointer futurePointer(new QFutureInterfaceBase); - auto task = QtConcurrent::task(RunFunctor&,QVariant>(env, javaRunnable, futurePointer)) - .withArguments(QVariant::fromValue(JObjectWrapper(env, a))) - .withPriority(priority); - if(QThreadPool* t = qtjambi_to_QObject(env, _threadPool)){ - QFuture result = task.onThreadPool(*t).spawn(); - *futurePointer = result.d; - return qtjambi_cast(env, result); - }else{ - QFuture result = task.spawn(); - *futurePointer = result.d; - return qtjambi_cast(env, result); - } - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_00024QPromiseTaskBuilderVoid2Arg2_spawn) -(JNIEnv *env, jclass, jobject _threadPool, jint priority, jobject javaRunnable, jobject a, jobject b) -{ - try{ - QSharedPointer futurePointer(new QFutureInterfaceBase); - auto task = QtConcurrent::task(RunFunctor&,QVariant,QVariant>(env, javaRunnable, futurePointer)) - .withArguments(QVariant::fromValue(JObjectWrapper(env, a)), - QVariant::fromValue(JObjectWrapper(env, b))) - .withPriority(priority); - if(QThreadPool* t = qtjambi_to_QObject(env, _threadPool)){ - QFuture result = task.onThreadPool(*t).spawn(); - *futurePointer = result.d; - return qtjambi_cast(env, result); - }else{ - QFuture result = task.spawn(); - *futurePointer = result.d; - return qtjambi_cast(env, result); - } - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_00024QPromiseTaskBuilderVoid3Arg3_spawn) -(JNIEnv *env, jclass, jobject _threadPool, jint priority, jobject javaRunnable, jobject a, jobject b, jobject c) -{ - try{ - QSharedPointer futurePointer(new QFutureInterfaceBase); - auto task = QtConcurrent::task(RunFunctor&,QVariant,QVariant,QVariant>(env, javaRunnable, futurePointer)) - .withArguments(QVariant::fromValue(JObjectWrapper(env, a)), - QVariant::fromValue(JObjectWrapper(env, b)), - QVariant::fromValue(JObjectWrapper(env, c))) - .withPriority(priority); - if(QThreadPool* t = qtjambi_to_QObject(env, _threadPool)){ - QFuture result = task.onThreadPool(*t).spawn(); - *futurePointer = result.d; - return qtjambi_cast(env, result); - }else{ - QFuture result = task.spawn(); - *futurePointer = result.d; - return qtjambi_cast(env, result); - } - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_00024QPromiseTaskBuilderVoid4Arg4_spawn) -(JNIEnv *env, jclass, jobject _threadPool, jint priority, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d) -{ - try{ - QSharedPointer futurePointer(new QFutureInterfaceBase); - auto task = QtConcurrent::task(RunFunctor&,QVariant,QVariant,QVariant,QVariant>(env, javaRunnable, futurePointer)) - .withArguments(QVariant::fromValue(JObjectWrapper(env, a)), - QVariant::fromValue(JObjectWrapper(env, b)), - QVariant::fromValue(JObjectWrapper(env, c)), - QVariant::fromValue(JObjectWrapper(env, d))) - .withPriority(priority); - if(QThreadPool* t = qtjambi_to_QObject(env, _threadPool)){ - QFuture result = task.onThreadPool(*t).spawn(); - *futurePointer = result.d; - return qtjambi_cast(env, result); - }else{ - QFuture result = task.spawn(); - *futurePointer = result.d; - return qtjambi_cast(env, result); - } - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_00024QPromiseTaskBuilderVoid5Arg5_spawn) -(JNIEnv *env, jclass, jobject _threadPool, jint priority, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d, jobject e) -{ - try{ - QSharedPointer futurePointer(new QFutureInterfaceBase); - auto task = QtConcurrent::task(RunFunctor&,QVariant,QVariant,QVariant,QVariant,QVariant>(env, javaRunnable, futurePointer)) - .withArguments(QVariant::fromValue(JObjectWrapper(env, a)), - QVariant::fromValue(JObjectWrapper(env, b)), - QVariant::fromValue(JObjectWrapper(env, c)), - QVariant::fromValue(JObjectWrapper(env, d)), - QVariant::fromValue(JObjectWrapper(env, e))) - .withPriority(priority); - if(QThreadPool* t = qtjambi_to_QObject(env, _threadPool)){ - QFuture result = task.onThreadPool(*t).spawn(); - *futurePointer = result.d; - return qtjambi_cast(env, result); - }else{ - QFuture result = task.spawn(); - *futurePointer = result.d; - return qtjambi_cast(env, result); - } - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_00024QPromiseTaskBuilderVoid6Arg6_spawn) -(JNIEnv *env, jclass, jobject _threadPool, jint priority, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d, jobject e, jobject f) -{ - try{ - QSharedPointer futurePointer(new QFutureInterfaceBase); - auto task = QtConcurrent::task(RunFunctor&,QVariant,QVariant,QVariant,QVariant,QVariant,QVariant>(env, javaRunnable, futurePointer)) - .withArguments(QVariant::fromValue(JObjectWrapper(env, a)), - QVariant::fromValue(JObjectWrapper(env, b)), - QVariant::fromValue(JObjectWrapper(env, c)), - QVariant::fromValue(JObjectWrapper(env, d)), - QVariant::fromValue(JObjectWrapper(env, e)), - QVariant::fromValue(JObjectWrapper(env, f))) - .withPriority(priority); - if(QThreadPool* t = qtjambi_to_QObject(env, _threadPool)){ - QFuture result = task.onThreadPool(*t).spawn(); - *futurePointer = result.d; - return qtjambi_cast(env, result); - }else{ - QFuture result = task.spawn(); - *futurePointer = result.d; - return qtjambi_cast(env, result); - } - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_00024QPromiseTaskBuilderVoid7Arg7_spawn) -(JNIEnv *env, jclass, jobject _threadPool, jint priority, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d, jobject e, jobject f, jobject g) -{ - try{ - QSharedPointer futurePointer(new QFutureInterfaceBase); - auto task = QtConcurrent::task(RunFunctor&,QVariant,QVariant,QVariant,QVariant,QVariant,QVariant,QVariant>(env, javaRunnable, futurePointer)) - .withArguments(QVariant::fromValue(JObjectWrapper(env, a)), - QVariant::fromValue(JObjectWrapper(env, b)), - QVariant::fromValue(JObjectWrapper(env, c)), - QVariant::fromValue(JObjectWrapper(env, d)), - QVariant::fromValue(JObjectWrapper(env, e)), - QVariant::fromValue(JObjectWrapper(env, f)), - QVariant::fromValue(JObjectWrapper(env, g))) - .withPriority(priority); - if(QThreadPool* t = qtjambi_to_QObject(env, _threadPool)){ - QFuture result = task.onThreadPool(*t).spawn(); - *futurePointer = result.d; - return qtjambi_cast(env, result); - }else{ - QFuture result = task.spawn(); - *futurePointer = result.d; - return qtjambi_cast(env, result); - } - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_00024QPromiseTaskBuilderVoid8Arg8_spawn) -(JNIEnv *env, jclass, jobject _threadPool, jint priority, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d, jobject e, jobject f, jobject g, jobject h) -{ - try{ - QSharedPointer futurePointer(new QFutureInterfaceBase); - auto task = QtConcurrent::task(RunFunctor&,QVariant,QVariant,QVariant,QVariant,QVariant,QVariant,QVariant,QVariant>(env, javaRunnable, futurePointer)) - .withArguments(QVariant::fromValue(JObjectWrapper(env, a)), - QVariant::fromValue(JObjectWrapper(env, b)), - QVariant::fromValue(JObjectWrapper(env, c)), - QVariant::fromValue(JObjectWrapper(env, d)), - QVariant::fromValue(JObjectWrapper(env, e)), - QVariant::fromValue(JObjectWrapper(env, f)), - QVariant::fromValue(JObjectWrapper(env, g)), - QVariant::fromValue(JObjectWrapper(env, h))) - .withPriority(priority); - if(QThreadPool* t = qtjambi_to_QObject(env, _threadPool)){ - QFuture result = task.onThreadPool(*t).spawn(); - *futurePointer = result.d; - return qtjambi_cast(env, result); - }else{ - QFuture result = task.spawn(); - *futurePointer = result.d; - return qtjambi_cast(env, result); - } - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_00024QPromiseTaskBuilderVoid9Arg9_spawn) -(JNIEnv *env, jclass, jobject _threadPool, jint priority, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d, jobject e, jobject f, jobject g, jobject h, jobject i) -{ - try{ - QSharedPointer futurePointer(new QFutureInterfaceBase); - auto task = QtConcurrent::task(RunFunctor&,QVariant,QVariant,QVariant,QVariant,QVariant,QVariant,QVariant,QVariant,QVariant>(env, javaRunnable, futurePointer)) - .withArguments(QVariant::fromValue(JObjectWrapper(env, a)), - QVariant::fromValue(JObjectWrapper(env, b)), - QVariant::fromValue(JObjectWrapper(env, c)), - QVariant::fromValue(JObjectWrapper(env, d)), - QVariant::fromValue(JObjectWrapper(env, e)), - QVariant::fromValue(JObjectWrapper(env, f)), - QVariant::fromValue(JObjectWrapper(env, g)), - QVariant::fromValue(JObjectWrapper(env, h)), - QVariant::fromValue(JObjectWrapper(env, i))) - .withPriority(priority); - if(QThreadPool* t = qtjambi_to_QObject(env, _threadPool)){ - QFuture result = task.onThreadPool(*t).spawn(); - *futurePointer = result.d; - return qtjambi_cast(env, result); - }else{ - QFuture result = task.spawn(); - *futurePointer = result.d; - return qtjambi_cast(env, result); - } - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_00024QTypedPromiseTaskBuilder0Arg0_spawn) -(JNIEnv *env, jclass, jobject _threadPool, jint priority, jobject javaRunnable) -{ - try{ - QSharedPointer futurePointer(new QFutureInterfaceBase); - auto task = QtConcurrent::task(RunFunctor&>(env, javaRunnable, futurePointer)) - .withPriority(priority); - if(QThreadPool* t = qtjambi_to_QObject(env, _threadPool)){ - QFuture result = task.onThreadPool(*t).spawn(); - *futurePointer = result.d; - return qtjambi_cast(env, result); - }else{ - QFuture result = task.spawn(); - *futurePointer = result.d; - return qtjambi_cast(env, result); - } - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_00024QTypedPromiseTaskBuilder1Arg1_spawn) -(JNIEnv *env, jclass, jobject _threadPool, jint priority, jobject javaRunnable, jobject a) -{ - try{ - QSharedPointer futurePointer(new QFutureInterfaceBase); - auto task = QtConcurrent::task(RunFunctor&,QVariant>(env, javaRunnable, futurePointer)) - .withArguments(QVariant::fromValue(JObjectWrapper(env, a))) - .withPriority(priority); - if(QThreadPool* t = qtjambi_to_QObject(env, _threadPool)){ - QFuture result = task.onThreadPool(*t).spawn(); - *futurePointer = result.d; - return qtjambi_cast(env, result); - }else{ - QFuture result = task.spawn(); - *futurePointer = result.d; - return qtjambi_cast(env, result); - } - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_00024QTypedPromiseTaskBuilder2Arg2_spawn) -(JNIEnv *env, jclass, jobject _threadPool, jint priority, jobject javaRunnable, jobject a, jobject b) -{ - try{ - QSharedPointer futurePointer(new QFutureInterfaceBase); - auto task = QtConcurrent::task(RunFunctor&,QVariant,QVariant>(env, javaRunnable, futurePointer)) - .withArguments(QVariant::fromValue(JObjectWrapper(env, a)), - QVariant::fromValue(JObjectWrapper(env, b))) - .withPriority(priority); - if(QThreadPool* t = qtjambi_to_QObject(env, _threadPool)){ - QFuture result = task.onThreadPool(*t).spawn(); - *futurePointer = result.d; - return qtjambi_cast(env, result); - }else{ - QFuture result = task.spawn(); - *futurePointer = result.d; - return qtjambi_cast(env, result); - } - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_00024QTypedPromiseTaskBuilder3Arg3_spawn) -(JNIEnv *env, jclass, jobject _threadPool, jint priority, jobject javaRunnable, jobject a, jobject b, jobject c) -{ - try{ - QSharedPointer futurePointer(new QFutureInterfaceBase); - auto task = QtConcurrent::task(RunFunctor&,QVariant,QVariant,QVariant>(env, javaRunnable, futurePointer)) - .withArguments(QVariant::fromValue(JObjectWrapper(env, a)), - QVariant::fromValue(JObjectWrapper(env, b)), - QVariant::fromValue(JObjectWrapper(env, c))) - .withPriority(priority); - if(QThreadPool* t = qtjambi_to_QObject(env, _threadPool)){ - QFuture result = task.onThreadPool(*t).spawn(); - *futurePointer = result.d; - return qtjambi_cast(env, result); - }else{ - QFuture result = task.spawn(); - *futurePointer = result.d; - return qtjambi_cast(env, result); - } - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_00024QTypedPromiseTaskBuilder4Arg4_spawn) -(JNIEnv *env, jclass, jobject _threadPool, jint priority, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d) -{ - try{ - QSharedPointer futurePointer(new QFutureInterfaceBase); - auto task = QtConcurrent::task(RunFunctor&,QVariant,QVariant,QVariant,QVariant>(env, javaRunnable, futurePointer)) - .withArguments(QVariant::fromValue(JObjectWrapper(env, a)), - QVariant::fromValue(JObjectWrapper(env, b)), - QVariant::fromValue(JObjectWrapper(env, c)), - QVariant::fromValue(JObjectWrapper(env, d))) - .withPriority(priority); - if(QThreadPool* t = qtjambi_to_QObject(env, _threadPool)){ - QFuture result = task.onThreadPool(*t).spawn(); - *futurePointer = result.d; - return qtjambi_cast(env, result); - }else{ - QFuture result = task.spawn(); - *futurePointer = result.d; - return qtjambi_cast(env, result); - } - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_00024QTypedPromiseTaskBuilder5Arg5_spawn) -(JNIEnv *env, jclass, jobject _threadPool, jint priority, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d, jobject e) -{ - try{ - QSharedPointer futurePointer(new QFutureInterfaceBase); - auto task = QtConcurrent::task(RunFunctor&,QVariant,QVariant,QVariant,QVariant,QVariant>(env, javaRunnable, futurePointer)) - .withArguments(QVariant::fromValue(JObjectWrapper(env, a)), - QVariant::fromValue(JObjectWrapper(env, b)), - QVariant::fromValue(JObjectWrapper(env, c)), - QVariant::fromValue(JObjectWrapper(env, d)), - QVariant::fromValue(JObjectWrapper(env, e))) - .withPriority(priority); - if(QThreadPool* t = qtjambi_to_QObject(env, _threadPool)){ - QFuture result = task.onThreadPool(*t).spawn(); - *futurePointer = result.d; - return qtjambi_cast(env, result); - }else{ - QFuture result = task.spawn(); - *futurePointer = result.d; - return qtjambi_cast(env, result); - } - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_00024QTypedPromiseTaskBuilder6Arg6_spawn) -(JNIEnv *env, jclass, jobject _threadPool, jint priority, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d, jobject e, jobject f) -{ - try{ - QSharedPointer futurePointer(new QFutureInterfaceBase); - auto task = QtConcurrent::task(RunFunctor&,QVariant,QVariant,QVariant,QVariant,QVariant,QVariant>(env, javaRunnable, futurePointer)) - .withArguments(QVariant::fromValue(JObjectWrapper(env, a)), - QVariant::fromValue(JObjectWrapper(env, b)), - QVariant::fromValue(JObjectWrapper(env, c)), - QVariant::fromValue(JObjectWrapper(env, d)), - QVariant::fromValue(JObjectWrapper(env, e)), - QVariant::fromValue(JObjectWrapper(env, f))) - .withPriority(priority); - if(QThreadPool* t = qtjambi_to_QObject(env, _threadPool)){ - QFuture result = task.onThreadPool(*t).spawn(); - *futurePointer = result.d; - return qtjambi_cast(env, result); - }else{ - QFuture result = task.spawn(); - *futurePointer = result.d; - return qtjambi_cast(env, result); - } - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_00024QTypedPromiseTaskBuilder7Arg7_spawn) -(JNIEnv *env, jclass, jobject _threadPool, jint priority, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d, jobject e, jobject f, jobject g) -{ - try{ - QSharedPointer futurePointer(new QFutureInterfaceBase); - auto task = QtConcurrent::task(RunFunctor&,QVariant,QVariant,QVariant,QVariant,QVariant,QVariant,QVariant>(env, javaRunnable, futurePointer)) - .withArguments(QVariant::fromValue(JObjectWrapper(env, a)), - QVariant::fromValue(JObjectWrapper(env, b)), - QVariant::fromValue(JObjectWrapper(env, c)), - QVariant::fromValue(JObjectWrapper(env, d)), - QVariant::fromValue(JObjectWrapper(env, e)), - QVariant::fromValue(JObjectWrapper(env, f)), - QVariant::fromValue(JObjectWrapper(env, g))) - .withPriority(priority); - if(QThreadPool* t = qtjambi_to_QObject(env, _threadPool)){ - QFuture result = task.onThreadPool(*t).spawn(); - *futurePointer = result.d; - return qtjambi_cast(env, result); - }else{ - QFuture result = task.spawn(); - *futurePointer = result.d; - return qtjambi_cast(env, result); - } - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_00024QTypedPromiseTaskBuilder8Arg8_spawn) -(JNIEnv *env, jclass, jobject _threadPool, jint priority, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d, jobject e, jobject f, jobject g, jobject h) -{ - try{ - QSharedPointer futurePointer(new QFutureInterfaceBase); - auto task = QtConcurrent::task(RunFunctor&,QVariant,QVariant,QVariant,QVariant,QVariant,QVariant,QVariant,QVariant>(env, javaRunnable, futurePointer)) - .withArguments(QVariant::fromValue(JObjectWrapper(env, a)), - QVariant::fromValue(JObjectWrapper(env, b)), - QVariant::fromValue(JObjectWrapper(env, c)), - QVariant::fromValue(JObjectWrapper(env, d)), - QVariant::fromValue(JObjectWrapper(env, e)), - QVariant::fromValue(JObjectWrapper(env, f)), - QVariant::fromValue(JObjectWrapper(env, g)), - QVariant::fromValue(JObjectWrapper(env, h))) - .withPriority(priority); - if(QThreadPool* t = qtjambi_to_QObject(env, _threadPool)){ - QFuture result = task.onThreadPool(*t).spawn(); - *futurePointer = result.d; - return qtjambi_cast(env, result); - }else{ - QFuture result = task.spawn(); - *futurePointer = result.d; - return qtjambi_cast(env, result); - } - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_00024QTypedPromiseTaskBuilder9Arg9_spawn) -(JNIEnv *env, jclass, jobject _threadPool, jint priority, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d, jobject e, jobject f, jobject g, jobject h, jobject i) -{ - try{ - QSharedPointer futurePointer(new QFutureInterfaceBase); - auto task = QtConcurrent::task(RunFunctor&,QVariant,QVariant,QVariant,QVariant,QVariant,QVariant,QVariant,QVariant,QVariant>(env, javaRunnable, futurePointer)) - .withArguments(QVariant::fromValue(JObjectWrapper(env, a)), - QVariant::fromValue(JObjectWrapper(env, b)), - QVariant::fromValue(JObjectWrapper(env, c)), - QVariant::fromValue(JObjectWrapper(env, d)), - QVariant::fromValue(JObjectWrapper(env, e)), - QVariant::fromValue(JObjectWrapper(env, f)), - QVariant::fromValue(JObjectWrapper(env, g)), - QVariant::fromValue(JObjectWrapper(env, h)), - QVariant::fromValue(JObjectWrapper(env, i))) - .withPriority(priority); - if(QThreadPool* t = qtjambi_to_QObject(env, _threadPool)){ - QFuture result = task.onThreadPool(*t).spawn(); - *futurePointer = result.d; - return qtjambi_cast(env, result); - }else{ - QFuture result = task.spawn(); - *futurePointer = result.d; - return qtjambi_cast(env, result); - } - } catch (const JavaException& exn) { - exn.raiseInJava(env); - } - return nullptr; -} - -#endif //QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) - -#endif // QT_NO_CONCURRENT - - +/**************************************************************************** +** +** Copyright (C) 1992-2009 Nokia. All rights reserved. +** +** This file is part of Qt Jambi. +** +** ** $BEGIN_LICENSE$ +** Commercial Usage +** Licensees holding valid Qt Commercial licenses may use this file in +** accordance with the Qt Commercial License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Nokia. +** +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** $END_LICENSE$ + +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +****************************************************************************/ + +#define QFUTURE_TEST +#include +#include +#include +#include "qtjambiconcurrent_p.h" +#include "qtjambi_concurrent_repository.h" + +#include +#include + +#ifndef QT_NO_CONCURRENT + +class Functor { +public: + Functor(JNIEnv *env, jobject functor) : m_functor(env, functor) + { + } + + Functor(const Functor &other) : m_functor(other.m_functor) + { + } + + Functor(Functor &&other) : m_functor(std::move(other.m_functor)) + { + } + + Functor& operator=(const Functor &other) = delete; + Functor& operator=(Functor &&other) = delete; + + virtual ~Functor() + { + } + +protected: + const JObjectWrapper m_functor; + +private: +}; + +class MapFunctor: public Functor { +public: + MapFunctor(JNIEnv *env, jobject javaMapFunctor) : Functor(env, javaMapFunctor) {} + MapFunctor(const MapFunctor &other) : Functor(other) {} + MapFunctor(MapFunctor &&other) : Functor(std::move(other)) {} + + void operator ()(const QVariant &wrapper) + { + if (JNIEnv *env = qtjambi_current_environment()) { + QTJAMBI_JNI_LOCAL_FRAME(env, 200) + if(jobject functor = qtjambi_from_jobjectwrapper(env, m_functor)){ + if (jobject javaObject = qtjambi_cast(env, wrapper)){ + try { + Java::QtConcurrent::QtConcurrent$MapFunctor::map(env, functor, javaObject); + } catch (const JavaException& exn) { + exn.report(env); + } + } + } else { + qWarning("Map functor called with invalid data. JNI Environment == %p, java functor object == %p", + env, m_functor.object()); + } + } + } +}; + +class MappedFunctor: public Functor { +public: + typedef QVariant result_type; + + MappedFunctor(JNIEnv *env, jobject javaMappedFunctor) : Functor(env, javaMappedFunctor) {} + MappedFunctor(const MappedFunctor &other) : Functor(other) {} + MappedFunctor(MappedFunctor &&other) : Functor(std::move(other)) {} + + QVariant operator ()(const QVariant &wrapper) + { + if (JNIEnv *env = qtjambi_current_environment()) { + QTJAMBI_JNI_LOCAL_FRAME(env, 200) + if(jobject functor = qtjambi_from_jobjectwrapper(env, m_functor)){ + jobject javaObject = qtjambi_cast(env, wrapper); + jobject javaResult = nullptr; + try { + javaResult = Java::QtConcurrent::QtConcurrent$MappedFunctor::map(env, functor, javaObject); + } catch (const JavaException& exn) { + exn.report(env); + } + return QVariant::fromValue(JObjectWrapper(env, javaResult)); + } else { + qWarning("Mapped functor called with invalid data. JNI Environment == %p, java functor object == %p", + env, m_functor.object()); + } + } + return QVariant(); + } +}; + +class ReduceFunctor: public Functor { +public: +#if QT_VERSION < QT_VERSION_CHECK(6,0,0) + ReduceFunctor(JNIEnv *env, jobject javaReduceFunctor, JObjectWrapper&& initialValue) : Functor(env, javaReduceFunctor), m_initialValue(new JObjectWrapper(std::move(initialValue))) {} + ReduceFunctor(const ReduceFunctor &other) : Functor(other), m_initialValue(other.m_initialValue) {} + ReduceFunctor(ReduceFunctor &&other) : Functor(std::move(other)), m_initialValue(std::move(other.m_initialValue)) {} +#else + ReduceFunctor(JNIEnv *env, jobject javaReduceFunctor) : Functor(env, javaReduceFunctor) {} + ReduceFunctor(const ReduceFunctor &other) : Functor(other) {} + ReduceFunctor(ReduceFunctor &&other) : Functor(std::move(other)) {} +#endif + void operator()(QVariant &result, const QVariant &wrapper) + { + if (JNIEnv *env = qtjambi_current_environment()) { + QTJAMBI_JNI_LOCAL_FRAME(env, 200) + if(jobject functor = qtjambi_from_jobjectwrapper(env, m_functor)){ + // reduce() is synchronous, so while this data is static in terms + // of the map/reduce operation, it does not need to be protected + jobject javaResult = nullptr; +#if QT_VERSION < QT_VERSION_CHECK(6,0,0) + if (m_initialValue) { + javaResult = env->NewLocalRef(m_initialValue->object()); + m_initialValue.reset(); + }else +#endif + { + javaResult = qtjambi_cast(env, result); + } + + try { + javaResult = Java::QtConcurrent::QtConcurrent$ReduceFunctor::reduce(env, functor, javaResult, qtjambi_cast(env, wrapper)); + } catch (const JavaException& exn) { + exn.report(env); + } + result = QVariant::fromValue(JObjectWrapper(env, javaResult)); + } else { + qWarning("Reduce functor called with invalid data. JNI Environment == %p, java functor object == %p", + env, m_functor.object()); + } + } + } +#if QT_VERSION < QT_VERSION_CHECK(6,0,0) +private: + QSharedPointer m_initialValue; +#endif +}; + +class FilteredFunctor: public Functor { +public: + FilteredFunctor(JNIEnv *env, jobject javaFilteredFunctor) : Functor(env, javaFilteredFunctor) {} + FilteredFunctor(const FilteredFunctor &other) : Functor(other) {} + FilteredFunctor(FilteredFunctor &&other) : Functor(std::move(other)) {} + + bool operator()(const QVariant &wrapper) { + if (JNIEnv *env = qtjambi_current_environment()) { + QTJAMBI_JNI_LOCAL_FRAME(env, 200) + if(jobject functor = qtjambi_from_jobjectwrapper(env, m_functor)){ + bool result = false; + try { + result = Java::QtConcurrent::QtConcurrent$FilteredFunctor::filter(env, functor, qtjambi_cast(env, wrapper)); + } catch (const JavaException& exn) { + exn.report(env); + } + return result; + } else { + qWarning("Filtered functor called with invalid data. JNI Environment == %p, java functor object == %p", + env, m_functor.object()); + } + } + return false; + } +}; + +enum class PromisePolicy{ + NoPromise +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + ,VoidPromise, + TypedPromise +#endif +}; + +template +struct RunFunctorInvoker{ + static void run(JNIEnv *, jobject, ...){ + } +}; + +template<> +struct RunFunctorInvoker<0,PromisePolicy::NoPromise> : Java::Runtime::Runnable{ +}; + +template<> +struct RunFunctorInvoker<1,PromisePolicy::NoPromise> : Java::QtConcurrent::QtConcurrent$Runnable1{ +}; + +template<> +struct RunFunctorInvoker<2,PromisePolicy::NoPromise> : Java::QtConcurrent::QtConcurrent$Runnable2{ +}; + +template<> +struct RunFunctorInvoker<3,PromisePolicy::NoPromise> : Java::QtConcurrent::QtConcurrent$Runnable3{ +}; + +template<> +struct RunFunctorInvoker<4,PromisePolicy::NoPromise> : Java::QtConcurrent::QtConcurrent$Runnable4{ +}; + +template<> +struct RunFunctorInvoker<5,PromisePolicy::NoPromise> : Java::QtConcurrent::QtConcurrent$Runnable5{ +}; + +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) +template<> +struct RunFunctorInvoker<6,PromisePolicy::NoPromise> : Java::QtConcurrent::QtConcurrent$Runnable6{ +}; + +template<> +struct RunFunctorInvoker<7,PromisePolicy::NoPromise> : Java::QtConcurrent::QtConcurrent$Runnable7{ +}; + +template<> +struct RunFunctorInvoker<8,PromisePolicy::NoPromise> : Java::QtConcurrent::QtConcurrent$Runnable8{ +}; + +template<> +struct RunFunctorInvoker<9,PromisePolicy::NoPromise> : Java::QtConcurrent::QtConcurrent$Runnable9{ +}; + +template<> +struct RunFunctorInvoker<0,PromisePolicy::VoidPromise> : Java::QtConcurrent::QtConcurrent$RunnableWithVoidPromise{ +}; + +template<> +struct RunFunctorInvoker<1,PromisePolicy::VoidPromise> : Java::QtConcurrent::QtConcurrent$RunnableWithVoidPromise1{ +}; + +template<> +struct RunFunctorInvoker<2,PromisePolicy::VoidPromise> : Java::QtConcurrent::QtConcurrent$RunnableWithVoidPromise2{ +}; + +template<> +struct RunFunctorInvoker<3,PromisePolicy::VoidPromise> : Java::QtConcurrent::QtConcurrent$RunnableWithVoidPromise3{ +}; + +template<> +struct RunFunctorInvoker<4,PromisePolicy::VoidPromise> : Java::QtConcurrent::QtConcurrent$RunnableWithVoidPromise4{ +}; + +template<> +struct RunFunctorInvoker<5,PromisePolicy::VoidPromise> : Java::QtConcurrent::QtConcurrent$RunnableWithVoidPromise5{ +}; + +template<> +struct RunFunctorInvoker<6,PromisePolicy::VoidPromise> : Java::QtConcurrent::QtConcurrent$RunnableWithVoidPromise6{ +}; + +template<> +struct RunFunctorInvoker<7,PromisePolicy::VoidPromise> : Java::QtConcurrent::QtConcurrent$RunnableWithVoidPromise7{ +}; + +template<> +struct RunFunctorInvoker<8,PromisePolicy::VoidPromise> : Java::QtConcurrent::QtConcurrent$RunnableWithVoidPromise8{ +}; + +template<> +struct RunFunctorInvoker<9,PromisePolicy::VoidPromise> : Java::QtConcurrent::QtConcurrent$RunnableWithVoidPromise9{ +}; + +template<> +struct RunFunctorInvoker<0,PromisePolicy::TypedPromise> : Java::QtConcurrent::QtConcurrent$RunnableWithPromise{ +}; + +template<> +struct RunFunctorInvoker<1,PromisePolicy::TypedPromise> : Java::QtConcurrent::QtConcurrent$RunnableWithPromise1{ +}; + +template<> +struct RunFunctorInvoker<2,PromisePolicy::TypedPromise> : Java::QtConcurrent::QtConcurrent$RunnableWithPromise2{ +}; + +template<> +struct RunFunctorInvoker<3,PromisePolicy::TypedPromise> : Java::QtConcurrent::QtConcurrent$RunnableWithPromise3{ +}; + +template<> +struct RunFunctorInvoker<4,PromisePolicy::TypedPromise> : Java::QtConcurrent::QtConcurrent$RunnableWithPromise4{ +}; + +template<> +struct RunFunctorInvoker<5,PromisePolicy::TypedPromise> : Java::QtConcurrent::QtConcurrent$RunnableWithPromise5{ +}; + +template<> +struct RunFunctorInvoker<6,PromisePolicy::TypedPromise> : Java::QtConcurrent::QtConcurrent$RunnableWithPromise6{ +}; + +template<> +struct RunFunctorInvoker<7,PromisePolicy::TypedPromise> : Java::QtConcurrent::QtConcurrent$RunnableWithPromise7{ +}; + +template<> +struct RunFunctorInvoker<8,PromisePolicy::TypedPromise> : Java::QtConcurrent::QtConcurrent$RunnableWithPromise8{ +}; + +template<> +struct RunFunctorInvoker<9,PromisePolicy::TypedPromise> : Java::QtConcurrent::QtConcurrent$RunnableWithPromise9{ +}; +#endif + +template +struct RunFunctorInvocationDecider : RunFunctorInvoker{ +#if defined(Q_OS_ANDROID) && QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + static void handleException(QSharedPointer& future, std::exception_ptr exception, Args...){ + while(!future->isValid()) + QThread::msleep(50); + future->reportException(exception); + } +#endif +}; + +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) +template +struct RunFunctorInvocationDecider&, Args...> : RunFunctorInvoker{ +#ifdef Q_OS_ANDROID + static void handleException(QSharedPointer&, std::exception_ptr exception, QPromise& promise, Args...){ + QFutureInterfaceBase& future = reinterpret_cast(promise); + future.reportException(exception); + } +#endif +}; + +template +struct RunFunctorInvocationDecider&, Args...> : RunFunctorInvoker{ +#ifdef Q_OS_ANDROID + static void handleException(QSharedPointer&, std::exception_ptr exception, QPromise& promise, Args...){ + QFutureInterfaceBase& future = reinterpret_cast(promise); + future.reportException(exception); + } +#endif +}; +#endif + +template +class RunFunctor: public Functor { +public: + typedef void result_type; + RunFunctor(JNIEnv *env, jobject javaMapFunctor, const QSharedPointer& futurePointer) + : Functor(env, javaMapFunctor), + future(futurePointer) {} + RunFunctor(const RunFunctor &other) : Functor(other), future(other.future) {} + RunFunctor(RunFunctor &&other) : Functor(std::move(other)), future(std::move(other.future)) {} + + void operator ()(Args... args) + { + if (JNIEnv *env = qtjambi_current_environment()) { + QTJAMBI_JNI_LOCAL_FRAME(env, 200) + if(jobject functor = qtjambi_from_jobjectwrapper(env, m_functor)){ + QtJambiScope scope; +#if defined(Q_OS_ANDROID) && QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + try { +#endif + RunFunctorInvocationDecider::run(env, functor, qtjambi_cast(env, scope, args)...); +#if defined(Q_OS_ANDROID) && QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + } catch (const JavaException& exn) { + RunFunctorInvocationDecider::handleException(future, std::make_exception_ptr(QUnhandledException(std::make_exception_ptr(exn))), args...); + } catch (...) { + RunFunctorInvocationDecider::handleException(future, std::current_exception(), args...); + } +#endif + } else { + qWarning("Run functor called with invalid data. JNI Environment == %p, method id == %p", + env, m_functor.object()); + } + } + } +private: + QSharedPointer future; +}; + +template +struct CallableFunctorInvoker{ + static jobject call(JNIEnv *, jobject, ...){ + return nullptr; + } +}; + +template<> +struct CallableFunctorInvoker<0> : Java::Runtime::Callable{ +}; + +template<> +struct CallableFunctorInvoker<1> : Java::QtConcurrent::QtConcurrent$Callable1{ +}; + +template<> +struct CallableFunctorInvoker<2> : Java::QtConcurrent::QtConcurrent$Callable2{ +}; + +template<> +struct CallableFunctorInvoker<3> : Java::QtConcurrent::QtConcurrent$Callable3{ +}; + +template<> +struct CallableFunctorInvoker<4> : Java::QtConcurrent::QtConcurrent$Callable4{ +}; + +template<> +struct CallableFunctorInvoker<5> : Java::QtConcurrent::QtConcurrent$Callable5{ +}; + +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) +template<> +struct CallableFunctorInvoker<6> : Java::QtConcurrent::QtConcurrent$Callable6{ +}; + +template<> +struct CallableFunctorInvoker<7> : Java::QtConcurrent::QtConcurrent$Callable7{ +}; + +template<> +struct CallableFunctorInvoker<8> : Java::QtConcurrent::QtConcurrent$Callable8{ +}; + +template<> +struct CallableFunctorInvoker<9> : Java::QtConcurrent::QtConcurrent$Callable9{ +}; +#endif + +template +class CallableFunctor: public Functor { +public: + typedef QVariant result_type; + CallableFunctor(JNIEnv *env, jobject javaMapFunctor, const QSharedPointer& futurePointer) + : Functor(env, javaMapFunctor), + future(futurePointer) { + } + CallableFunctor(const CallableFunctor &other) : Functor(other), future(other.future) {} + CallableFunctor(CallableFunctor &&other) : Functor(std::move(other)), future(std::move(other.future)) {} + + QVariant operator ()(Args... args) + { + if (JNIEnv *env = qtjambi_current_environment()) { + QTJAMBI_JNI_LOCAL_FRAME(env, 200) + if(jobject functor = qtjambi_from_jobjectwrapper(env, m_functor)){ + jobject javaResult = nullptr; + QtJambiScope scope; +#if defined(Q_OS_ANDROID) && QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + try { +#endif + javaResult = CallableFunctorInvoker::call(env, functor, qtjambi_cast(env, scope, args)...); +#if defined(Q_OS_ANDROID) && QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + } catch (const JavaException& exn) { + RunFunctorInvocationDecider::handleException(future, std::make_exception_ptr(QUnhandledException(std::make_exception_ptr(exn))), args...); + } catch (...) { + RunFunctorInvocationDecider::handleException(future, std::current_exception(), args...); + } +#endif + return javaResult ? QVariant::fromValue(JObjectWrapper(env, javaResult)) : QVariant(); + } else { + qWarning("Run functor called with invalid data. JNI Environment == %p, method id == %p", + env, m_functor.object()); + } + } + return QVariant(); + } +private: + QSharedPointer future; +}; + +struct JavaSequence{ + typedef QVariant value_type; + + class const_iterator{ + public: + typedef std::forward_iterator_tag iterator_category; + typedef qptrdiff difference_type; + typedef QVariant value_type; + typedef const QVariant *pointer; + typedef const QVariant &reference; + + const_iterator(); + const_iterator(const const_iterator& other); + + const_iterator operator ++(int); + const_iterator operator --(int); + const_iterator& operator ++(); + const_iterator& operator --(); + + const QVariant &operator*() const; + const QVariant *operator->() const; + inline operator const QVariant *() const { return operator->(); } + bool operator<(const const_iterator& o) const; + bool operator>(const const_iterator& o) const; + bool operator<=(const const_iterator& o) const; + bool operator>=(const const_iterator& o) const; + bool operator==(const const_iterator& o) const; + inline bool operator!=(const const_iterator& o) const { + return !(*this == o); + } + private: + const_iterator(const JCollectionWrapper& collection, int cursor = 0); + JCollectionWrapper m_collection; + int m_cursor; + mutable QVariant m_current; + friend JavaSequence; + }; + + JavaSequence(); + + JavaSequence(const JavaSequence& other); + + JavaSequence(JavaSequence&& other); + + JavaSequence(JNIEnv* env, jobject collection, bool canOverwrite = false); + + JavaSequence& operator=(const JavaSequence& other); + JavaSequence& operator=(std::initializer_list args); + + const_iterator begin() const; + + const_iterator end() const; + + inline const_iterator cbegin() const {return begin();} + + inline const_iterator cend() const {return end();} + + void push_back(const QVariant& value); + + jobject object() const; +private: + bool m_canOverwrite; + mutable JCollectionWrapper m_collection; +}; + +JavaSequence::JavaSequence() : m_collection() {} + +JavaSequence::JavaSequence(const JavaSequence& other) : m_canOverwrite(other.m_canOverwrite), m_collection(other.m_collection){} + +JavaSequence::JavaSequence(JavaSequence&& other) : m_canOverwrite(other.m_canOverwrite), m_collection(std::move(other.m_collection)){} + +JavaSequence::JavaSequence(JNIEnv* env, jobject collection, bool canOverwrite) : m_canOverwrite(canOverwrite), m_collection(env, collection) {} + +jobject JavaSequence::object() const{ + jobject object = m_collection.object(); + if(!object){ + if(JNIEnv *env = qtjambi_current_environment()){ + QTJAMBI_JNI_LOCAL_FRAME(env, 200) + m_collection = JCollectionWrapper(env, qtjambi_arraylist_new(env, 0)); + object = m_collection.object(); + } + } + return object; +} + +JavaSequence& JavaSequence::operator=(const JavaSequence& other){ + if(m_canOverwrite){ + jobject _object = object(); + if(JNIEnv *env = qtjambi_current_environment()){ + QTJAMBI_JNI_LOCAL_FRAME(env, 200) + qtjambi_collection_clear(env, _object); + if(other.m_collection.object()){ + jobject iterator = qtjambi_collection_iterator(env, other.m_collection.object()); + while(qtjambi_iterator_has_next(env, iterator)){ + qtjambi_collection_add(env, _object, qtjambi_iterator_next(env, iterator)); + } + } + } + }else{ + m_collection = other.m_collection; + } + return *this; +} + +JavaSequence& JavaSequence::operator=(std::initializer_list args){ + jobject _object = object(); + if(JNIEnv *env = qtjambi_current_environment()){ + QTJAMBI_JNI_LOCAL_FRAME(env, 200) + qtjambi_collection_clear(env, _object); + for(const QVariant& arg : args){ + qtjambi_collection_add(env, _object, qtjambi_cast(env, arg)); + } + } + return *this; +} + +void JavaSequence::push_back(const QVariant& value){ + if(JNIEnv *env = qtjambi_current_environment()){ + QTJAMBI_JNI_LOCAL_FRAME(env, 200) + jobject _object = object(); + qtjambi_collection_add(env, _object, qtjambi_cast(env, value)); + } +} + +JavaSequence::const_iterator JavaSequence::begin() const { + (void)object(); + return JavaSequence::const_iterator(m_collection, 0); +} + +JavaSequence::const_iterator JavaSequence::end() const { + (void)object(); + return JavaSequence::const_iterator(m_collection, -1); +} + +JavaSequence::const_iterator JavaSequence::const_iterator::operator ++(int){ + JavaSequence::const_iterator result(*this); + ++m_cursor; + if(m_cursor>=m_collection.size()){ + m_cursor = -1; + } + return result; +} + +JavaSequence::const_iterator& JavaSequence::const_iterator::operator ++(){ + ++m_cursor; + if(m_cursor>=m_collection.size()){ + m_cursor = -1; + } + return *this; +} + +JavaSequence::const_iterator JavaSequence::const_iterator::operator --(int){ + JavaSequence::const_iterator result(*this); + if(m_cursor>0){ + --m_cursor; + if(m_cursor>=m_collection.size()){ + m_cursor = -1; + } + } + return result; +} + +JavaSequence::const_iterator& JavaSequence::const_iterator::operator --(){ + if(m_cursor>0){ + --m_cursor; + if(m_cursor>=m_collection.size()){ + m_cursor = -1; + } + } + return *this; +} + +const QVariant &JavaSequence::const_iterator::operator*() const{ + if(m_cursor>=0 && m_cursor() const{ + return &operator*(); +} + +bool JavaSequence::const_iterator::operator==(const JavaSequence::const_iterator& o) const { + JNIEnv* env = qtjambi_current_environment(); + QTJAMBI_JNI_LOCAL_FRAME(env, 300) + return env->IsSameObject(m_collection.object(), o.m_collection.object()) && m_cursor==o.m_cursor; +} + +bool JavaSequence::const_iterator::operator<(const JavaSequence::const_iterator& o) const { + JNIEnv* env = qtjambi_current_environment(); + QTJAMBI_JNI_LOCAL_FRAME(env, 300) + return env->IsSameObject(m_collection.object(), o.m_collection.object()) && m_cursor(const JavaSequence::const_iterator& o) const { + JNIEnv* env = qtjambi_current_environment(); + QTJAMBI_JNI_LOCAL_FRAME(env, 300) + return env->IsSameObject(m_collection.object(), o.m_collection.object()) && m_cursor>o.m_cursor; +} + +bool JavaSequence::const_iterator::operator<=(const JavaSequence::const_iterator& o) const { + JNIEnv* env = qtjambi_current_environment(); + QTJAMBI_JNI_LOCAL_FRAME(env, 300) + return env->IsSameObject(m_collection.object(), o.m_collection.object()) && m_cursor<=o.m_cursor; +} + +bool JavaSequence::const_iterator::operator>=(const JavaSequence::const_iterator& o) const { + JNIEnv* env = qtjambi_current_environment(); + QTJAMBI_JNI_LOCAL_FRAME(env, 300) + return env->IsSameObject(m_collection.object(), o.m_collection.object()) && m_cursor>=o.m_cursor; +} + +JavaSequence::const_iterator::const_iterator() + : m_collection(), m_cursor(-1), m_current() {} + +JavaSequence::const_iterator::const_iterator(const JavaSequence::const_iterator& other) + : m_collection(other.m_collection), m_cursor(other.m_cursor), m_current() {} + +JavaSequence::const_iterator::const_iterator(const JCollectionWrapper& collection, int cursor) + : m_collection(collection), m_cursor(cursor), m_current() {} + +struct ThreadEngineStarterInterface{ + virtual ~ThreadEngineStarterInterface(); + virtual jobject startAsynchronously(JNIEnv* env) = 0; +}; + +void initialize_meta_info_util(){ + const std::type_info& typeId = registerObjectTypeInfo("ThreadEngineStarterInterface", "io/qt/concurrent/QtConcurrent$ThreadEngineStarter"); + registerDeleter(typeId, [](void *ptr, bool){ + delete reinterpret_cast(ptr); + }); +} + +ThreadEngineStarterInterface::~ThreadEngineStarterInterface(){} + +template +struct FutureWatcher + : QFutureWatcher +{ + FutureWatcher(JNIEnv* env, jobject collection, bool canOverwrite = true); + void setFuture(const QFuture& future); + void onTermination(); + JavaSequence sequence; +}; + +template +FutureWatcher::FutureWatcher(JNIEnv* env, jobject collection, bool canOverwrite) + : QFutureWatcher(), + sequence(env, collection, canOverwrite) +{ +} + +template +void FutureWatcher::setFuture(const QFuture& future){ +#if QT_VERSION >= QT_VERSION_CHECK(6,0,0) + if(future.isValid()){ + QObject::connect(this, &QFutureWatcherBase::finished, this, &FutureWatcher::onTermination, Qt::DirectConnection); + QObject::connect(this, &QFutureWatcherBase::canceled, this, &FutureWatcher::onTermination, Qt::DirectConnection); + } +#else + QObject::connect(this, &QFutureWatcherBase::finished, this, &FutureWatcher::onTermination, Qt::DirectConnection); + QObject::connect(this, &QFutureWatcherBase::canceled, this, &FutureWatcher::onTermination, Qt::DirectConnection); +#endif + QFutureWatcher::setFuture(future); +} + +template +void FutureWatcher::onTermination(){ + QObject::deleteLater(); +} + +template +struct FutureWatcherStarter : ThreadEngineStarterInterface{ + FutureWatcherStarter() + : ThreadEngineStarterInterface(), watcher(nullptr), starter(nullptr) {} + FutureWatcherStarter(JNIEnv* env, jobject collection, bool canOverwrite = true) + : ThreadEngineStarterInterface(), watcher(new FutureWatcher(env, collection, canOverwrite)), starter(nullptr) {} + jobject startAsynchronously(JNIEnv* env) override; + void setStarter(QtConcurrent::ThreadEngineStarter&& _starter); + JavaSequence& sequence(); +private: + FutureWatcher* watcher; + QtConcurrent::ThreadEngineStarter starter; +}; + +template +JavaSequence& FutureWatcherStarter::sequence(){ + Q_ASSERT(watcher); + return watcher->sequence; +} + +template +void FutureWatcherStarter::setStarter(QtConcurrent::ThreadEngineStarter&& _starter){ + starter = std::move(_starter); +} + +template +jobject FutureWatcherStarter::startAsynchronously(JNIEnv* env){ + QFuture future = starter.startAsynchronously(); + if(watcher) + watcher->setFuture(future); + return qtjambi_cast(env, future); +} + +#if QT_VERSION < QT_VERSION_CHECK(6,0,0) +#define THREADPOOL(_threadPool) Q_UNUSED(_threadPool) +#else +#define THREADPOOL(_threadPool) QThreadPool *threadPool = qtjambi_object_from_nativeId(_threadPool); +#endif + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_00024ThreadEngineStarter_startAsynchronously) +(JNIEnv *env, + jclass, + QtJambiNativeID thisId) +{ + try{ + ThreadEngineStarterInterface *starter = qtjambi_object_from_nativeId(thisId); + return starter->startAsynchronously(env); + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_startMap) +(JNIEnv *env, + jclass, + QtJambiNativeID _threadPool, + jobject javaSequence, + jobject javaMapFunctor) +{ + try{ + THREADPOOL(_threadPool) + FutureWatcherStarter* watcher = new FutureWatcherStarter(env, javaSequence, true); +#if QT_VERSION >= QT_VERSION_CHECK(6,0,0) + if(!threadPool) + threadPool = QThreadPool::globalInstance(); + watcher->setStarter(QtConcurrent::startMap(threadPool, watcher->sequence().begin(), watcher->sequence().end(), MapFunctor(env, javaMapFunctor))); +#else + watcher->setStarter(QtConcurrent::startMap(watcher->sequence().begin(), watcher->sequence().end(), MapFunctor(env, javaMapFunctor))); +#endif + return qtjambi_cast(env, static_cast(watcher)); + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_startMapped) +(JNIEnv *env, + jclass, + QtJambiNativeID _threadPool, + jobject javaSequence, + jobject javaMappedFunctor) +{ + try{ + THREADPOOL(_threadPool) + FutureWatcherStarter* watcher = new FutureWatcherStarter(); +#if QT_VERSION >= QT_VERSION_CHECK(6,0,0) + if(!threadPool) + threadPool = QThreadPool::globalInstance(); + watcher->setStarter(QtConcurrent::startMapped(threadPool, JavaSequence(env, javaSequence), MappedFunctor(env, javaMappedFunctor))); +#else + watcher->setStarter(QtConcurrent::startMapped(JavaSequence(env, javaSequence), MappedFunctor(env, javaMappedFunctor))); +#endif + return qtjambi_cast(env, static_cast(watcher)); + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_startMappedReduced) +(JNIEnv *env, + jclass, + QtJambiNativeID _threadPool, + jobject javaSequence, + jobject javaMappedFunctor, + jobject javaReduceFunctor, + jobject initialValue, + jint options) +{ + try{ + THREADPOOL(_threadPool) + FutureWatcherStarter* watcher = new FutureWatcherStarter(); +#if QT_VERSION >= QT_VERSION_CHECK(6,0,0) + if(!threadPool) + threadPool = QThreadPool::globalInstance(); + watcher->setStarter(QtConcurrent::startMappedReduced( + threadPool, + JavaSequence(env, javaSequence), + MappedFunctor(env, javaMappedFunctor), + ReduceFunctor(env, javaReduceFunctor), + QVariant::fromValue(JObjectWrapper(env, initialValue)), + QtConcurrent::ReduceOptions(options))); +#else + watcher->setStarter(QtConcurrent::startMappedReduced( + JavaSequence(env, javaSequence), + MappedFunctor(env, javaMappedFunctor), + ReduceFunctor(env, javaReduceFunctor, JObjectWrapper(env, initialValue)), + QtConcurrent::ReduceOptions(options))); +#endif + return qtjambi_cast(env, static_cast(watcher)); + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_startFiltered) +(JNIEnv *env, + jclass, + QtJambiNativeID _threadPool, + jobject javaSequence, + jobject javaFilteredFunctor) +{ + try{ + THREADPOOL(_threadPool) + FutureWatcherStarter* watcher = new FutureWatcherStarter(); +#if QT_VERSION >= QT_VERSION_CHECK(6,0,0) + if(!threadPool) + threadPool = QThreadPool::globalInstance(); + watcher->setStarter(QtConcurrent::startFiltered(threadPool, JavaSequence(env, javaSequence), FilteredFunctor(env, javaFilteredFunctor))); +#else + watcher->setStarter(QtConcurrent::startFiltered(JavaSequence(env, javaSequence), FilteredFunctor(env, javaFilteredFunctor))); +#endif + return qtjambi_cast(env, static_cast(watcher)); + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_startFilteredReduced) +(JNIEnv *env, + jclass, + QtJambiNativeID _threadPool, + jobject javaSequence, + jobject javaFilteredFunctor, + jobject javaReduceFunctor, + jobject initialValue, + jint options) +{ + try{ + THREADPOOL(_threadPool) + FutureWatcherStarter* watcher = new FutureWatcherStarter(); +#if QT_VERSION >= QT_VERSION_CHECK(6,0,0) + if(!threadPool) + threadPool = QThreadPool::globalInstance(); + watcher->setStarter(QtConcurrent::startFilteredReduced( + threadPool, + JavaSequence(env, javaSequence), + FilteredFunctor(env, javaFilteredFunctor), + ReduceFunctor(env, javaReduceFunctor), + QVariant::fromValue(JObjectWrapper(env, initialValue)), + QtConcurrent::ReduceOptions(options))); +#else + watcher->setStarter(QtConcurrent::startFilteredReduced( + JavaSequence(env, javaSequence), + FilteredFunctor(env, javaFilteredFunctor), + ReduceFunctor(env, javaReduceFunctor, JObjectWrapper(env, initialValue)), + QtConcurrent::ReduceOptions(options))); +#endif + return qtjambi_cast(env, static_cast(watcher)); + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_filter) +(JNIEnv *env, + jclass, + QtJambiNativeID _threadPool, + jobject javaSequence, + jobject javaFilteredFunctor) +{ + try{ + THREADPOOL(_threadPool) + FutureWatcher* watcher = new FutureWatcher(env, javaSequence); +#if QT_VERSION >= QT_VERSION_CHECK(6,0,0) + if(threadPool) + watcher->setFuture(QtConcurrent::filter(threadPool, watcher->sequence, FilteredFunctor(env, javaFilteredFunctor))); + else +#endif + watcher->setFuture(QtConcurrent::filter(watcher->sequence, FilteredFunctor(env, javaFilteredFunctor))); + return qtjambi_cast(env, watcher->future()); + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_runVoid0) +(JNIEnv *env, jclass, jobject _threadPool, jobject javaRunnable) +{ + try{ + QThreadPool *threadPool = qtjambi_to_QObject(env, _threadPool); + QSharedPointer futurePointer(new QFutureInterfaceBase); + QFuture result = threadPool ? QtConcurrent::run(threadPool, RunFunctor<>(env, javaRunnable, futurePointer)) + : QtConcurrent::run(RunFunctor<>(env, javaRunnable, futurePointer)); + *futurePointer = result.d; + return qtjambi_cast(env, result); + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_runVoid1) +(JNIEnv *env, jclass, jobject _threadPool, jobject javaRunnable, jobject a) +{ + try{ + QThreadPool *threadPool = qtjambi_to_QObject(env, _threadPool); + QSharedPointer futurePointer(new QFutureInterfaceBase); + QFuture result = threadPool ? QtConcurrent::run(threadPool, + RunFunctor(env, javaRunnable, futurePointer), + QVariant::fromValue(JObjectWrapper(env, a))) + : QtConcurrent::run(RunFunctor(env, javaRunnable, futurePointer), + QVariant::fromValue(JObjectWrapper(env, a))); + *futurePointer = result.d; + return qtjambi_cast(env, result); + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_runVoid2) +(JNIEnv *env, jclass, jobject _threadPool, jobject javaRunnable, jobject a, jobject b) +{ + try{ + QThreadPool *threadPool = qtjambi_to_QObject(env, _threadPool); + QSharedPointer futurePointer(new QFutureInterfaceBase); + QFuture result = threadPool ? QtConcurrent::run(threadPool, + RunFunctor(env, javaRunnable, futurePointer), + QVariant::fromValue(JObjectWrapper(env, a)), + QVariant::fromValue(JObjectWrapper(env, b))) + : QtConcurrent::run(RunFunctor(env, javaRunnable, futurePointer), + QVariant::fromValue(JObjectWrapper(env, a)), + QVariant::fromValue(JObjectWrapper(env, b))); + *futurePointer = result.d; + return qtjambi_cast(env, result); + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_runVoid3) +(JNIEnv *env, jclass, jobject _threadPool, jobject javaRunnable, jobject a, jobject b, jobject c) +{ + try{ + QThreadPool *threadPool = qtjambi_to_QObject(env, _threadPool); + QSharedPointer futurePointer(new QFutureInterfaceBase); + QFuture result = threadPool ? QtConcurrent::run(threadPool, + RunFunctor(env, javaRunnable, futurePointer), + QVariant::fromValue(JObjectWrapper(env, a)), + QVariant::fromValue(JObjectWrapper(env, b)), + QVariant::fromValue(JObjectWrapper(env, c))) + : QtConcurrent::run(RunFunctor(env, javaRunnable, futurePointer), + QVariant::fromValue(JObjectWrapper(env, a)), + QVariant::fromValue(JObjectWrapper(env, b)), + QVariant::fromValue(JObjectWrapper(env, c))); + *futurePointer = result.d; + return qtjambi_cast(env, result); + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_runVoid4) +(JNIEnv *env, jclass, jobject _threadPool, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d) +{ + try{ + QThreadPool *threadPool = qtjambi_to_QObject(env, _threadPool); + QSharedPointer futurePointer(new QFutureInterfaceBase); + QFuture result = threadPool ? QtConcurrent::run(threadPool, + RunFunctor(env, javaRunnable, futurePointer), + QVariant::fromValue(JObjectWrapper(env, a)), + QVariant::fromValue(JObjectWrapper(env, b)), + QVariant::fromValue(JObjectWrapper(env, c)), + QVariant::fromValue(JObjectWrapper(env, d))) + : QtConcurrent::run(RunFunctor(env, javaRunnable, futurePointer), + QVariant::fromValue(JObjectWrapper(env, a)), + QVariant::fromValue(JObjectWrapper(env, b)), + QVariant::fromValue(JObjectWrapper(env, c)), + QVariant::fromValue(JObjectWrapper(env, d))); + *futurePointer = result.d; + return qtjambi_cast(env, result); + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_runVoid5) +(JNIEnv *env, jclass, jobject _threadPool, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d, jobject e) +{ + try{ + QThreadPool *threadPool = qtjambi_to_QObject(env, _threadPool); + QSharedPointer futurePointer(new QFutureInterfaceBase); + QFuture result = threadPool ? QtConcurrent::run(threadPool, + RunFunctor(env, javaRunnable, futurePointer), + QVariant::fromValue(JObjectWrapper(env, a)), + QVariant::fromValue(JObjectWrapper(env, b)), + QVariant::fromValue(JObjectWrapper(env, c)), + QVariant::fromValue(JObjectWrapper(env, d)), + QVariant::fromValue(JObjectWrapper(env, e))) + : QtConcurrent::run(RunFunctor(env, javaRunnable, futurePointer), + QVariant::fromValue(JObjectWrapper(env, a)), + QVariant::fromValue(JObjectWrapper(env, b)), + QVariant::fromValue(JObjectWrapper(env, c)), + QVariant::fromValue(JObjectWrapper(env, d)), + QVariant::fromValue(JObjectWrapper(env, e))); + *futurePointer = result.d; + return qtjambi_cast(env, result); + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +#if QT_VERSION >= QT_VERSION_CHECK(6,0,0) +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_runVoid6) +(JNIEnv *env, jclass, jobject _threadPool, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d, jobject e, jobject f) +{ + try{ + QThreadPool *threadPool = qtjambi_to_QObject(env, _threadPool); + QSharedPointer futurePointer(new QFutureInterfaceBase); + QFuture result = threadPool ? QtConcurrent::run(threadPool, + RunFunctor(env, javaRunnable, futurePointer), + QVariant::fromValue(JObjectWrapper(env, a)), + QVariant::fromValue(JObjectWrapper(env, b)), + QVariant::fromValue(JObjectWrapper(env, c)), + QVariant::fromValue(JObjectWrapper(env, d)), + QVariant::fromValue(JObjectWrapper(env, e)), + QVariant::fromValue(JObjectWrapper(env, f))) + : QtConcurrent::run(RunFunctor(env, javaRunnable, futurePointer), + QVariant::fromValue(JObjectWrapper(env, a)), + QVariant::fromValue(JObjectWrapper(env, b)), + QVariant::fromValue(JObjectWrapper(env, c)), + QVariant::fromValue(JObjectWrapper(env, d)), + QVariant::fromValue(JObjectWrapper(env, e)), + QVariant::fromValue(JObjectWrapper(env, f))); + *futurePointer = result.d; + return qtjambi_cast(env, result); + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_runVoid7) +(JNIEnv *env, jclass, jobject _threadPool, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d, jobject e, jobject f, jobject g) +{ + try{ + QThreadPool *threadPool = qtjambi_to_QObject(env, _threadPool); + QSharedPointer futurePointer(new QFutureInterfaceBase); + QFuture result = threadPool ? QtConcurrent::run(threadPool, + RunFunctor(env, javaRunnable, futurePointer), + QVariant::fromValue(JObjectWrapper(env, a)), + QVariant::fromValue(JObjectWrapper(env, b)), + QVariant::fromValue(JObjectWrapper(env, c)), + QVariant::fromValue(JObjectWrapper(env, d)), + QVariant::fromValue(JObjectWrapper(env, e)), + QVariant::fromValue(JObjectWrapper(env, f)), + QVariant::fromValue(JObjectWrapper(env, g))) + : QtConcurrent::run(RunFunctor(env, javaRunnable, futurePointer), + QVariant::fromValue(JObjectWrapper(env, a)), + QVariant::fromValue(JObjectWrapper(env, b)), + QVariant::fromValue(JObjectWrapper(env, c)), + QVariant::fromValue(JObjectWrapper(env, d)), + QVariant::fromValue(JObjectWrapper(env, e)), + QVariant::fromValue(JObjectWrapper(env, f)), + QVariant::fromValue(JObjectWrapper(env, g))); + *futurePointer = result.d; + return qtjambi_cast(env, result); + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_runVoid8) +(JNIEnv *env, jclass, jobject _threadPool, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d, jobject e, jobject f, jobject g, jobject h) +{ + try{ + QThreadPool *threadPool = qtjambi_to_QObject(env, _threadPool); + QSharedPointer futurePointer(new QFutureInterfaceBase); + QFuture result = threadPool ? QtConcurrent::run(threadPool, + RunFunctor(env, javaRunnable, futurePointer), + QVariant::fromValue(JObjectWrapper(env, a)), + QVariant::fromValue(JObjectWrapper(env, b)), + QVariant::fromValue(JObjectWrapper(env, c)), + QVariant::fromValue(JObjectWrapper(env, d)), + QVariant::fromValue(JObjectWrapper(env, e)), + QVariant::fromValue(JObjectWrapper(env, f)), + QVariant::fromValue(JObjectWrapper(env, g)), + QVariant::fromValue(JObjectWrapper(env, h))) + : QtConcurrent::run(RunFunctor(env, javaRunnable, futurePointer), + QVariant::fromValue(JObjectWrapper(env, a)), + QVariant::fromValue(JObjectWrapper(env, b)), + QVariant::fromValue(JObjectWrapper(env, c)), + QVariant::fromValue(JObjectWrapper(env, d)), + QVariant::fromValue(JObjectWrapper(env, e)), + QVariant::fromValue(JObjectWrapper(env, f)), + QVariant::fromValue(JObjectWrapper(env, g)), + QVariant::fromValue(JObjectWrapper(env, h))); + *futurePointer = result.d; + return qtjambi_cast(env, result); + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_runVoid9) +(JNIEnv *env, jclass, jobject _threadPool, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d, jobject e, jobject f, jobject g, jobject h, jobject i) +{ + try{ + QThreadPool *threadPool = qtjambi_to_QObject(env, _threadPool); + QSharedPointer futurePointer(new QFutureInterfaceBase); + QFuture result = threadPool ? QtConcurrent::run(threadPool, + RunFunctor(env, javaRunnable, futurePointer), + QVariant::fromValue(JObjectWrapper(env, a)), + QVariant::fromValue(JObjectWrapper(env, b)), + QVariant::fromValue(JObjectWrapper(env, c)), + QVariant::fromValue(JObjectWrapper(env, d)), + QVariant::fromValue(JObjectWrapper(env, e)), + QVariant::fromValue(JObjectWrapper(env, f)), + QVariant::fromValue(JObjectWrapper(env, g)), + QVariant::fromValue(JObjectWrapper(env, h)), + QVariant::fromValue(JObjectWrapper(env, i))) + : QtConcurrent::run(RunFunctor(env, javaRunnable, futurePointer), + QVariant::fromValue(JObjectWrapper(env, a)), + QVariant::fromValue(JObjectWrapper(env, b)), + QVariant::fromValue(JObjectWrapper(env, c)), + QVariant::fromValue(JObjectWrapper(env, d)), + QVariant::fromValue(JObjectWrapper(env, e)), + QVariant::fromValue(JObjectWrapper(env, f)), + QVariant::fromValue(JObjectWrapper(env, g)), + QVariant::fromValue(JObjectWrapper(env, h)), + QVariant::fromValue(JObjectWrapper(env, i))); + *futurePointer = result.d; + return qtjambi_cast(env, result); + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} +#endif + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_run0) +(JNIEnv *env, jclass, jobject _threadPool, jobject javaCallable) +{ + try{ + QThreadPool *threadPool = qtjambi_to_QObject(env, _threadPool); + QSharedPointer futurePointer(new QFutureInterfaceBase); + QFuture result = threadPool ? QtConcurrent::run(threadPool, CallableFunctor<>(env, javaCallable, futurePointer)) + : QtConcurrent::run(CallableFunctor<>(env, javaCallable, futurePointer)); + *futurePointer = result.d; + return qtjambi_cast(env, result); + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_run1) +(JNIEnv *env, jclass, jobject _threadPool, jobject javaRunnable, jobject a) +{ + try{ + QThreadPool *threadPool = qtjambi_to_QObject(env, _threadPool); + QSharedPointer futurePointer(new QFutureInterfaceBase); + QFuture result = threadPool ? QtConcurrent::run(threadPool, + CallableFunctor(env, javaRunnable, futurePointer), + QVariant::fromValue(JObjectWrapper(env, a))) + : QtConcurrent::run(CallableFunctor(env, javaRunnable, futurePointer), + QVariant::fromValue(JObjectWrapper(env, a))); + *futurePointer = result.d; + return qtjambi_cast(env, result); + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_run2) +(JNIEnv *env, jclass, jobject _threadPool, jobject javaRunnable, jobject a, jobject b) +{ + try{ + QThreadPool *threadPool = qtjambi_to_QObject(env, _threadPool); + QSharedPointer futurePointer(new QFutureInterfaceBase); + QFuture result = threadPool ? QtConcurrent::run(threadPool, + CallableFunctor(env, javaRunnable, futurePointer), + QVariant::fromValue(JObjectWrapper(env, a)), + QVariant::fromValue(JObjectWrapper(env, b))) + : QtConcurrent::run(CallableFunctor(env, javaRunnable, futurePointer), + QVariant::fromValue(JObjectWrapper(env, a)), + QVariant::fromValue(JObjectWrapper(env, b))); + *futurePointer = result.d; + return qtjambi_cast(env, result); + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_run3) +(JNIEnv *env, jclass, jobject _threadPool, jobject javaRunnable, jobject a, jobject b, jobject c) +{ + try{ + QThreadPool *threadPool = qtjambi_to_QObject(env, _threadPool); + QSharedPointer futurePointer(new QFutureInterfaceBase); + QFuture result = threadPool ? QtConcurrent::run(threadPool, + CallableFunctor(env, javaRunnable, futurePointer), + QVariant::fromValue(JObjectWrapper(env, a)), + QVariant::fromValue(JObjectWrapper(env, b)), + QVariant::fromValue(JObjectWrapper(env, c))) + : QtConcurrent::run(CallableFunctor(env, javaRunnable, futurePointer), + QVariant::fromValue(JObjectWrapper(env, a)), + QVariant::fromValue(JObjectWrapper(env, b)), + QVariant::fromValue(JObjectWrapper(env, c))); + *futurePointer = result.d; + return qtjambi_cast(env, result); + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_run4) +(JNIEnv *env, jclass, jobject _threadPool, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d) +{ + try{ + QThreadPool *threadPool = qtjambi_to_QObject(env, _threadPool); + QSharedPointer futurePointer(new QFutureInterfaceBase); + QFuture result = threadPool ? QtConcurrent::run(threadPool, + CallableFunctor(env, javaRunnable, futurePointer), + QVariant::fromValue(JObjectWrapper(env, a)), + QVariant::fromValue(JObjectWrapper(env, b)), + QVariant::fromValue(JObjectWrapper(env, c)), + QVariant::fromValue(JObjectWrapper(env, d))) + : QtConcurrent::run(CallableFunctor(env, javaRunnable, futurePointer), + QVariant::fromValue(JObjectWrapper(env, a)), + QVariant::fromValue(JObjectWrapper(env, b)), + QVariant::fromValue(JObjectWrapper(env, c)), + QVariant::fromValue(JObjectWrapper(env, d))); + *futurePointer = result.d; + return qtjambi_cast(env, result); + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_run5) +(JNIEnv *env, jclass, jobject _threadPool, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d, jobject e) +{ + try{ + QThreadPool *threadPool = qtjambi_to_QObject(env, _threadPool); + QSharedPointer futurePointer(new QFutureInterfaceBase); + QFuture result = threadPool ? QtConcurrent::run(threadPool, + CallableFunctor(env, javaRunnable, futurePointer), + QVariant::fromValue(JObjectWrapper(env, a)), + QVariant::fromValue(JObjectWrapper(env, b)), + QVariant::fromValue(JObjectWrapper(env, c)), + QVariant::fromValue(JObjectWrapper(env, d)), + QVariant::fromValue(JObjectWrapper(env, e))) + : QtConcurrent::run(CallableFunctor(env, javaRunnable, futurePointer), + QVariant::fromValue(JObjectWrapper(env, a)), + QVariant::fromValue(JObjectWrapper(env, b)), + QVariant::fromValue(JObjectWrapper(env, c)), + QVariant::fromValue(JObjectWrapper(env, d)), + QVariant::fromValue(JObjectWrapper(env, e))); + *futurePointer = result.d; + return qtjambi_cast(env, result); + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_run6) +(JNIEnv *env, jclass, jobject _threadPool, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d, jobject e, jobject f) +{ + try{ + QThreadPool *threadPool = qtjambi_to_QObject(env, _threadPool); + QSharedPointer futurePointer(new QFutureInterfaceBase); + QFuture result = threadPool ? QtConcurrent::run(threadPool, + CallableFunctor(env, javaRunnable, futurePointer), + QVariant::fromValue(JObjectWrapper(env, a)), + QVariant::fromValue(JObjectWrapper(env, b)), + QVariant::fromValue(JObjectWrapper(env, c)), + QVariant::fromValue(JObjectWrapper(env, d)), + QVariant::fromValue(JObjectWrapper(env, e)), + QVariant::fromValue(JObjectWrapper(env, f))) + : QtConcurrent::run(CallableFunctor(env, javaRunnable, futurePointer), + QVariant::fromValue(JObjectWrapper(env, a)), + QVariant::fromValue(JObjectWrapper(env, b)), + QVariant::fromValue(JObjectWrapper(env, c)), + QVariant::fromValue(JObjectWrapper(env, d)), + QVariant::fromValue(JObjectWrapper(env, e)), + QVariant::fromValue(JObjectWrapper(env, f))); + *futurePointer = result.d; + return qtjambi_cast(env, result); + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_run7) +(JNIEnv *env, jclass, jobject _threadPool, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d, jobject e, jobject f, jobject g) +{ + try{ + QThreadPool *threadPool = qtjambi_to_QObject(env, _threadPool); + QSharedPointer futurePointer(new QFutureInterfaceBase); + QFuture result = threadPool ? QtConcurrent::run(threadPool, + CallableFunctor(env, javaRunnable, futurePointer), + QVariant::fromValue(JObjectWrapper(env, a)), + QVariant::fromValue(JObjectWrapper(env, b)), + QVariant::fromValue(JObjectWrapper(env, c)), + QVariant::fromValue(JObjectWrapper(env, d)), + QVariant::fromValue(JObjectWrapper(env, e)), + QVariant::fromValue(JObjectWrapper(env, f)), + QVariant::fromValue(JObjectWrapper(env, g))) + : QtConcurrent::run(CallableFunctor(env, javaRunnable, futurePointer), + QVariant::fromValue(JObjectWrapper(env, a)), + QVariant::fromValue(JObjectWrapper(env, b)), + QVariant::fromValue(JObjectWrapper(env, c)), + QVariant::fromValue(JObjectWrapper(env, d)), + QVariant::fromValue(JObjectWrapper(env, e)), + QVariant::fromValue(JObjectWrapper(env, f)), + QVariant::fromValue(JObjectWrapper(env, g))); + *futurePointer = result.d; + return qtjambi_cast(env, result); + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_run8) +(JNIEnv *env, jclass, jobject _threadPool, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d, jobject e, jobject f, jobject g, jobject h) +{ + try{ + QThreadPool *threadPool = qtjambi_to_QObject(env, _threadPool); + QSharedPointer futurePointer(new QFutureInterfaceBase); + QFuture result = threadPool ? QtConcurrent::run(threadPool, + CallableFunctor(env, javaRunnable, futurePointer), + QVariant::fromValue(JObjectWrapper(env, a)), + QVariant::fromValue(JObjectWrapper(env, b)), + QVariant::fromValue(JObjectWrapper(env, c)), + QVariant::fromValue(JObjectWrapper(env, d)), + QVariant::fromValue(JObjectWrapper(env, e)), + QVariant::fromValue(JObjectWrapper(env, f)), + QVariant::fromValue(JObjectWrapper(env, g)), + QVariant::fromValue(JObjectWrapper(env, h))) + : QtConcurrent::run(CallableFunctor(env, javaRunnable, futurePointer), + QVariant::fromValue(JObjectWrapper(env, a)), + QVariant::fromValue(JObjectWrapper(env, b)), + QVariant::fromValue(JObjectWrapper(env, c)), + QVariant::fromValue(JObjectWrapper(env, d)), + QVariant::fromValue(JObjectWrapper(env, e)), + QVariant::fromValue(JObjectWrapper(env, f)), + QVariant::fromValue(JObjectWrapper(env, g)), + QVariant::fromValue(JObjectWrapper(env, h))); + *futurePointer = result.d; + return qtjambi_cast(env, result); + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_run9) +(JNIEnv *env, jclass, jobject _threadPool, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d, jobject e, jobject f, jobject g, jobject h, jobject i) +{ + try{ + QThreadPool *threadPool = qtjambi_to_QObject(env, _threadPool); + QSharedPointer futurePointer(new QFutureInterfaceBase); + QFuture result = threadPool ? QtConcurrent::run(threadPool, + CallableFunctor(env, javaRunnable, futurePointer), + QVariant::fromValue(JObjectWrapper(env, a)), + QVariant::fromValue(JObjectWrapper(env, b)), + QVariant::fromValue(JObjectWrapper(env, c)), + QVariant::fromValue(JObjectWrapper(env, d)), + QVariant::fromValue(JObjectWrapper(env, e)), + QVariant::fromValue(JObjectWrapper(env, f)), + QVariant::fromValue(JObjectWrapper(env, g)), + QVariant::fromValue(JObjectWrapper(env, h)), + QVariant::fromValue(JObjectWrapper(env, i))) + : QtConcurrent::run(CallableFunctor(env, javaRunnable, futurePointer), + QVariant::fromValue(JObjectWrapper(env, a)), + QVariant::fromValue(JObjectWrapper(env, b)), + QVariant::fromValue(JObjectWrapper(env, c)), + QVariant::fromValue(JObjectWrapper(env, d)), + QVariant::fromValue(JObjectWrapper(env, e)), + QVariant::fromValue(JObjectWrapper(env, f)), + QVariant::fromValue(JObjectWrapper(env, g)), + QVariant::fromValue(JObjectWrapper(env, h)), + QVariant::fromValue(JObjectWrapper(env, i))); + *futurePointer = result.d; + return qtjambi_cast(env, result); + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_runWithPromiseVoid0) +(JNIEnv *env, jclass, jobject _threadPool, jobject javaRunnable) +{ + try{ + using Fun = RunFunctor&>; + QThreadPool *pool = qtjambi_to_QObject(env, _threadPool); + if(!pool){ + pool = QThreadPool::globalInstance(); + } + QSharedPointer futurePointer(new QFutureInterfaceBase); + QFuture result = QtConcurrent::run(pool, Fun(env, javaRunnable, futurePointer)); + *futurePointer = result.d; + return qtjambi_cast(env, result); + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_runWithPromiseVoid1) +(JNIEnv *env, jclass, jobject _threadPool, jobject javaRunnable, jobject a) +{ + try{ + using Fun = RunFunctor&,QVariant>; + QThreadPool *pool = qtjambi_to_QObject(env, _threadPool); + if(!pool){ + pool = QThreadPool::globalInstance(); + } + QSharedPointer futurePointer(new QFutureInterfaceBase); + QFuture result = QtConcurrent::run(pool, Fun(env, javaRunnable, futurePointer), QVariant::fromValue(JObjectWrapper(env, a))); + *futurePointer = result.d; + return qtjambi_cast(env, result); + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_runWithPromiseVoid2) +(JNIEnv *env, jclass, jobject _threadPool, jobject javaRunnable, jobject a, jobject b) +{ + try{ + using Fun = RunFunctor&,QVariant,QVariant>; + QThreadPool *pool = qtjambi_to_QObject(env, _threadPool); + if(!pool){ + pool = QThreadPool::globalInstance(); + } + QSharedPointer futurePointer(new QFutureInterfaceBase); + QFuture result = QtConcurrent::run(pool, Fun(env, javaRunnable, futurePointer), + QVariant::fromValue(JObjectWrapper(env, a)), + QVariant::fromValue(JObjectWrapper(env, b))); + *futurePointer = result.d; + return qtjambi_cast(env, result); + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_runWithPromiseVoid3) +(JNIEnv *env, jclass, jobject _threadPool, jobject javaRunnable, jobject a, jobject b, jobject c) +{ + try{ + using Fun = RunFunctor&,QVariant,QVariant,QVariant>; + QThreadPool *pool = qtjambi_to_QObject(env, _threadPool); + if(!pool){ + pool = QThreadPool::globalInstance(); + } + QSharedPointer futurePointer(new QFutureInterfaceBase); + QFuture result = QtConcurrent::run(pool, Fun(env, javaRunnable, futurePointer), + QVariant::fromValue(JObjectWrapper(env, a)), + QVariant::fromValue(JObjectWrapper(env, b)), + QVariant::fromValue(JObjectWrapper(env, c))); + *futurePointer = result.d; + return qtjambi_cast(env, result); + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_runWithPromiseVoid4) +(JNIEnv *env, jclass, jobject _threadPool, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d) +{ + try{ + using Fun = RunFunctor&,QVariant,QVariant,QVariant,QVariant>; + QThreadPool *pool = qtjambi_to_QObject(env, _threadPool); + if(!pool){ + pool = QThreadPool::globalInstance(); + } + QSharedPointer futurePointer(new QFutureInterfaceBase); + QFuture result = QtConcurrent::run(pool, Fun(env, javaRunnable, futurePointer), + QVariant::fromValue(JObjectWrapper(env, a)), + QVariant::fromValue(JObjectWrapper(env, b)), + QVariant::fromValue(JObjectWrapper(env, c)), + QVariant::fromValue(JObjectWrapper(env, d))); + *futurePointer = result.d; + return qtjambi_cast(env, result); + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_runWithPromiseVoid5) +(JNIEnv *env, jclass, jobject _threadPool, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d, jobject e) +{ + try{ + using Fun = RunFunctor&,QVariant,QVariant,QVariant,QVariant,QVariant>; + QThreadPool *pool = qtjambi_to_QObject(env, _threadPool); + if(!pool){ + pool = QThreadPool::globalInstance(); + } + QSharedPointer futurePointer(new QFutureInterfaceBase); + QFuture result = QtConcurrent::run(pool, Fun(env, javaRunnable, futurePointer), + QVariant::fromValue(JObjectWrapper(env, a)), + QVariant::fromValue(JObjectWrapper(env, b)), + QVariant::fromValue(JObjectWrapper(env, c)), + QVariant::fromValue(JObjectWrapper(env, d)), + QVariant::fromValue(JObjectWrapper(env, e))); + *futurePointer = result.d; + return qtjambi_cast(env, result); + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_runWithPromiseVoid6) +(JNIEnv *env, jclass, jobject _threadPool, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d, jobject e, jobject f) +{ + try{ + using Fun = RunFunctor&, QVariant, QVariant, + QVariant, QVariant, + QVariant, QVariant>; + QThreadPool *pool = qtjambi_to_QObject(env, _threadPool); + if(!pool){ + pool = QThreadPool::globalInstance(); + } + QSharedPointer futurePointer(new QFutureInterfaceBase); + QFuture result = QtConcurrent::run(pool, Fun(env, javaRunnable, futurePointer), + QVariant::fromValue(JObjectWrapper(env, a)), + QVariant::fromValue(JObjectWrapper(env, b)), + QVariant::fromValue(JObjectWrapper(env, c)), + QVariant::fromValue(JObjectWrapper(env, d)), + QVariant::fromValue(JObjectWrapper(env, e)), + QVariant::fromValue(JObjectWrapper(env, f))); + *futurePointer = result.d; + return qtjambi_cast(env, result); + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_runWithPromiseVoid7) +(JNIEnv *env, jclass, jobject _threadPool, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d, jobject e, jobject f, jobject g) +{ + try{ + using Fun = RunFunctor&, QVariant, QVariant, + QVariant, QVariant, + QVariant, QVariant, + QVariant>; + QThreadPool *pool = qtjambi_to_QObject(env, _threadPool); + if(!pool){ + pool = QThreadPool::globalInstance(); + } + QSharedPointer futurePointer(new QFutureInterfaceBase); + QFuture result = QtConcurrent::run(pool, Fun(env, javaRunnable, futurePointer), + QVariant::fromValue(JObjectWrapper(env, a)), + QVariant::fromValue(JObjectWrapper(env, b)), + QVariant::fromValue(JObjectWrapper(env, c)), + QVariant::fromValue(JObjectWrapper(env, d)), + QVariant::fromValue(JObjectWrapper(env, e)), + QVariant::fromValue(JObjectWrapper(env, f)), + QVariant::fromValue(JObjectWrapper(env, g))); + *futurePointer = result.d; + return qtjambi_cast(env, result); + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_runWithPromiseVoid8) +(JNIEnv *env, jclass, jobject _threadPool, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d, jobject e, jobject f, jobject g, jobject h) +{ + try{ + using Fun = RunFunctor&, QVariant, QVariant, + QVariant, QVariant, + QVariant, QVariant, + QVariant, QVariant>; + QThreadPool *pool = qtjambi_to_QObject(env, _threadPool); + if(!pool){ + pool = QThreadPool::globalInstance(); + } + QSharedPointer futurePointer(new QFutureInterfaceBase); + QFuture result = QtConcurrent::run(pool, Fun(env, javaRunnable, futurePointer), + QVariant::fromValue(JObjectWrapper(env, a)), + QVariant::fromValue(JObjectWrapper(env, b)), + QVariant::fromValue(JObjectWrapper(env, c)), + QVariant::fromValue(JObjectWrapper(env, d)), + QVariant::fromValue(JObjectWrapper(env, e)), + QVariant::fromValue(JObjectWrapper(env, f)), + QVariant::fromValue(JObjectWrapper(env, g)), + QVariant::fromValue(JObjectWrapper(env, h))); + *futurePointer = result.d; + return qtjambi_cast(env, result); + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_runWithPromiseVoid9) +(JNIEnv *env, jclass, jobject _threadPool, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d, jobject e, jobject f, jobject g, jobject h, jobject i) +{ + try{ + using Fun = RunFunctor&, QVariant, QVariant, + QVariant, QVariant, + QVariant, QVariant, + QVariant, QVariant, QVariant>; + QThreadPool *pool = qtjambi_to_QObject(env, _threadPool); + if(!pool){ + pool = QThreadPool::globalInstance(); + } + QSharedPointer futurePointer(new QFutureInterfaceBase); + QFuture result = QtConcurrent::run(pool, Fun(env, javaRunnable, futurePointer), + QVariant::fromValue(JObjectWrapper(env, a)), + QVariant::fromValue(JObjectWrapper(env, b)), + QVariant::fromValue(JObjectWrapper(env, c)), + QVariant::fromValue(JObjectWrapper(env, d)), + QVariant::fromValue(JObjectWrapper(env, e)), + QVariant::fromValue(JObjectWrapper(env, f)), + QVariant::fromValue(JObjectWrapper(env, g)), + QVariant::fromValue(JObjectWrapper(env, h)), + QVariant::fromValue(JObjectWrapper(env, i))); + *futurePointer = result.d; + return qtjambi_cast(env, result); + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_runWithPromise0) +(JNIEnv *env, jclass, jobject _threadPool, jobject javaRunnable) +{ + try{ + using Fun = RunFunctor&>; + QThreadPool *pool = qtjambi_to_QObject(env, _threadPool); + if(!pool){ + pool = QThreadPool::globalInstance(); + } + QSharedPointer futurePointer(new QFutureInterfaceBase); + QFuture result = QtConcurrent::run(pool, Fun(env, javaRunnable, futurePointer)); + *futurePointer = result.d; + return qtjambi_cast(env, result); + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_runWithPromise1) +(JNIEnv *env, jclass, jobject _threadPool, jobject javaRunnable, jobject a) +{ + try{ + using Fun = RunFunctor&, QVariant>; + QThreadPool *pool = qtjambi_to_QObject(env, _threadPool); + if(!pool){ + pool = QThreadPool::globalInstance(); + } + QSharedPointer futurePointer(new QFutureInterfaceBase); + QFuture result = QtConcurrent::run(pool, Fun(env, javaRunnable, futurePointer), + QVariant::fromValue(JObjectWrapper(env, a))); + *futurePointer = result.d; + return qtjambi_cast(env, result); + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_runWithPromise2) +(JNIEnv *env, jclass, jobject _threadPool, jobject javaRunnable, jobject a, jobject b) +{ + try{ + using Fun = RunFunctor&, QVariant, QVariant>; + QThreadPool *pool = qtjambi_to_QObject(env, _threadPool); + if(!pool){ + pool = QThreadPool::globalInstance(); + } + QSharedPointer futurePointer(new QFutureInterfaceBase); + QFuture result = QtConcurrent::run(pool, Fun(env, javaRunnable, futurePointer), + QVariant::fromValue(JObjectWrapper(env, a)), + QVariant::fromValue(JObjectWrapper(env, b))); + *futurePointer = result.d; + return qtjambi_cast(env, result); + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_runWithPromise3) +(JNIEnv *env, jclass, jobject _threadPool, jobject javaRunnable, jobject a, jobject b, jobject c) +{ + try{ + using Fun = RunFunctor&, QVariant, QVariant, + QVariant>; + QThreadPool *pool = qtjambi_to_QObject(env, _threadPool); + if(!pool){ + pool = QThreadPool::globalInstance(); + } + QSharedPointer futurePointer(new QFutureInterfaceBase); + QFuture result = QtConcurrent::run(pool, Fun(env, javaRunnable, futurePointer), + QVariant::fromValue(JObjectWrapper(env, a)), + QVariant::fromValue(JObjectWrapper(env, b)), + QVariant::fromValue(JObjectWrapper(env, c))); + *futurePointer = result.d; + return qtjambi_cast(env, result); + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_runWithPromise4) +(JNIEnv *env, jclass, jobject _threadPool, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d) +{ + try{ + using Fun = RunFunctor&, QVariant, QVariant, + QVariant, QVariant>; + QThreadPool *pool = qtjambi_to_QObject(env, _threadPool); + if(!pool){ + pool = QThreadPool::globalInstance(); + } + QSharedPointer futurePointer(new QFutureInterfaceBase); + QFuture result = QtConcurrent::run(pool, Fun(env, javaRunnable, futurePointer), + QVariant::fromValue(JObjectWrapper(env, a)), + QVariant::fromValue(JObjectWrapper(env, b)), + QVariant::fromValue(JObjectWrapper(env, c)), + QVariant::fromValue(JObjectWrapper(env, d))); + *futurePointer = result.d; + return qtjambi_cast(env, result); + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_runWithPromise5) +(JNIEnv *env, jclass, jobject _threadPool, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d, jobject e) +{ + try{ + using Fun = RunFunctor&, QVariant, QVariant, + QVariant, QVariant, + QVariant>; + QThreadPool *pool = qtjambi_to_QObject(env, _threadPool); + if(!pool){ + pool = QThreadPool::globalInstance(); + } + QSharedPointer futurePointer(new QFutureInterfaceBase); + QFuture result = QtConcurrent::run(pool, Fun(env, javaRunnable, futurePointer), + QVariant::fromValue(JObjectWrapper(env, a)), + QVariant::fromValue(JObjectWrapper(env, b)), + QVariant::fromValue(JObjectWrapper(env, c)), + QVariant::fromValue(JObjectWrapper(env, d)), + QVariant::fromValue(JObjectWrapper(env, e))); + *futurePointer = result.d; + return qtjambi_cast(env, result); + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_runWithPromise6) +(JNIEnv *env, jclass, jobject _threadPool, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d, jobject e, jobject f) +{ + try{ + using Fun = RunFunctor&, QVariant, QVariant, + QVariant, QVariant, + QVariant, QVariant>; + QThreadPool *pool = qtjambi_to_QObject(env, _threadPool); + if(!pool){ + pool = QThreadPool::globalInstance(); + } + QSharedPointer futurePointer(new QFutureInterfaceBase); + QFuture result = QtConcurrent::run(pool, Fun(env, javaRunnable, futurePointer), + QVariant::fromValue(JObjectWrapper(env, a)), + QVariant::fromValue(JObjectWrapper(env, b)), + QVariant::fromValue(JObjectWrapper(env, c)), + QVariant::fromValue(JObjectWrapper(env, d)), + QVariant::fromValue(JObjectWrapper(env, e)), + QVariant::fromValue(JObjectWrapper(env, f))); + *futurePointer = result.d; + return qtjambi_cast(env, result); + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_runWithPromise7) +(JNIEnv *env, jclass, jobject _threadPool, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d, jobject e, jobject f, jobject g) +{ + try{ + using Fun = RunFunctor&, QVariant, QVariant, + QVariant, QVariant, + QVariant, QVariant, + QVariant>; + QThreadPool *pool = qtjambi_to_QObject(env, _threadPool); + if(!pool){ + pool = QThreadPool::globalInstance(); + } + QSharedPointer futurePointer(new QFutureInterfaceBase); + QFuture result = QtConcurrent::run(pool, Fun(env, javaRunnable, futurePointer), + QVariant::fromValue(JObjectWrapper(env, a)), + QVariant::fromValue(JObjectWrapper(env, b)), + QVariant::fromValue(JObjectWrapper(env, c)), + QVariant::fromValue(JObjectWrapper(env, d)), + QVariant::fromValue(JObjectWrapper(env, e)), + QVariant::fromValue(JObjectWrapper(env, f)), + QVariant::fromValue(JObjectWrapper(env, g))); + *futurePointer = result.d; + return qtjambi_cast(env, result); + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_runWithPromise8) +(JNIEnv *env, jclass, jobject _threadPool, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d, jobject e, jobject f, jobject g, jobject h) +{ + try{ + using Fun = RunFunctor&, QVariant, QVariant, + QVariant, QVariant, + QVariant, QVariant, + QVariant, QVariant>; + QThreadPool *pool = qtjambi_to_QObject(env, _threadPool); + if(!pool){ + pool = QThreadPool::globalInstance(); + } + QSharedPointer futurePointer(new QFutureInterfaceBase); + QFuture result = QtConcurrent::run(pool, Fun(env, javaRunnable, futurePointer), + QVariant::fromValue(JObjectWrapper(env, a)), + QVariant::fromValue(JObjectWrapper(env, b)), + QVariant::fromValue(JObjectWrapper(env, c)), + QVariant::fromValue(JObjectWrapper(env, d)), + QVariant::fromValue(JObjectWrapper(env, e)), + QVariant::fromValue(JObjectWrapper(env, f)), + QVariant::fromValue(JObjectWrapper(env, g)), + QVariant::fromValue(JObjectWrapper(env, h))); + *futurePointer = result.d; + return qtjambi_cast(env, result); + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_runWithPromise9) +(JNIEnv *env, jclass, jobject _threadPool, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d, jobject e, jobject f, jobject g, jobject h, jobject i) +{ + try{ + using Fun = RunFunctor&, QVariant, QVariant, + QVariant, QVariant, + QVariant, QVariant, + QVariant, QVariant, QVariant>; + QThreadPool *pool = qtjambi_to_QObject(env, _threadPool); + if(!pool){ + pool = QThreadPool::globalInstance(); + } + QSharedPointer futurePointer(new QFutureInterfaceBase); + QFuture result = QtConcurrent::run(pool, Fun(env, javaRunnable, futurePointer), + QVariant::fromValue(JObjectWrapper(env, a)), + QVariant::fromValue(JObjectWrapper(env, b)), + QVariant::fromValue(JObjectWrapper(env, c)), + QVariant::fromValue(JObjectWrapper(env, d)), + QVariant::fromValue(JObjectWrapper(env, e)), + QVariant::fromValue(JObjectWrapper(env, f)), + QVariant::fromValue(JObjectWrapper(env, g)), + QVariant::fromValue(JObjectWrapper(env, h)), + QVariant::fromValue(JObjectWrapper(env, i))); + *futurePointer = result.d; + return qtjambi_cast(env, result); + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_00024QTaskBuilderVoid0Arg0_spawn) +(JNIEnv *env, jclass, jobject _threadPool, jint priority, jobject javaRunnable) +{ + try{ + QSharedPointer futurePointer(new QFutureInterfaceBase); + auto task = QtConcurrent::task(RunFunctor<>(env, javaRunnable, futurePointer)) + .withPriority(priority); + if(QThreadPool* t = qtjambi_to_QObject(env, _threadPool)){ + QFuture result = task.onThreadPool(*t).spawn(); + *futurePointer = result.d; + return qtjambi_cast(env, result); + }else{ + QFuture result = task.spawn(); + *futurePointer = result.d; + return qtjambi_cast(env, result); + } + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_00024QTaskBuilderVoid1Arg1_spawn) +(JNIEnv *env, jclass, jobject _threadPool, jint priority, jobject javaRunnable, jobject a) +{ + try{ + QSharedPointer futurePointer(new QFutureInterfaceBase); + auto task = QtConcurrent::task(RunFunctor(env, javaRunnable, futurePointer)) + .withArguments(QVariant::fromValue(JObjectWrapper(env, a))) + .withPriority(priority); + if(QThreadPool* t = qtjambi_to_QObject(env, _threadPool)){ + QFuture result = task.onThreadPool(*t).spawn(); + *futurePointer = result.d; + return qtjambi_cast(env, result); + }else{ + QFuture result = task.spawn(); + *futurePointer = result.d; + return qtjambi_cast(env, result); + } + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_00024QTaskBuilderVoid2Arg2_spawn) +(JNIEnv *env, jclass, jobject _threadPool, jint priority, jobject javaRunnable, jobject a, jobject b) +{ + try{ + QSharedPointer futurePointer(new QFutureInterfaceBase); + auto task = QtConcurrent::task(RunFunctor(env, javaRunnable, futurePointer)) + .withArguments(QVariant::fromValue(JObjectWrapper(env, a)), + QVariant::fromValue(JObjectWrapper(env, b))) + .withPriority(priority); + if(QThreadPool* t = qtjambi_to_QObject(env, _threadPool)){ + QFuture result = task.onThreadPool(*t).spawn(); + *futurePointer = result.d; + return qtjambi_cast(env, result); + }else{ + QFuture result = task.spawn(); + *futurePointer = result.d; + return qtjambi_cast(env, result); + } + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_00024QTaskBuilderVoid3Arg3_spawn) +(JNIEnv *env, jclass, jobject _threadPool, jint priority, jobject javaRunnable, jobject a, jobject b, jobject c) +{ + try{ + QSharedPointer futurePointer(new QFutureInterfaceBase); + auto task = QtConcurrent::task(RunFunctor(env, javaRunnable, futurePointer)) + .withArguments(QVariant::fromValue(JObjectWrapper(env, a)), + QVariant::fromValue(JObjectWrapper(env, b)), + QVariant::fromValue(JObjectWrapper(env, c))) + .withPriority(priority); + if(QThreadPool* t = qtjambi_to_QObject(env, _threadPool)){ + QFuture result = task.onThreadPool(*t).spawn(); + *futurePointer = result.d; + return qtjambi_cast(env, result); + }else{ + QFuture result = task.spawn(); + *futurePointer = result.d; + return qtjambi_cast(env, result); + } + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_00024QTaskBuilderVoid4Arg4_spawn) +(JNIEnv *env, jclass, jobject _threadPool, jint priority, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d) +{ + try{ + QSharedPointer futurePointer(new QFutureInterfaceBase); + auto task = QtConcurrent::task(RunFunctor(env, javaRunnable, futurePointer)) + .withArguments(QVariant::fromValue(JObjectWrapper(env, a)), + QVariant::fromValue(JObjectWrapper(env, b)), + QVariant::fromValue(JObjectWrapper(env, c)), + QVariant::fromValue(JObjectWrapper(env, d))) + .withPriority(priority); + if(QThreadPool* t = qtjambi_to_QObject(env, _threadPool)){ + QFuture result = task.onThreadPool(*t).spawn(); + *futurePointer = result.d; + return qtjambi_cast(env, result); + }else{ + QFuture result = task.spawn(); + *futurePointer = result.d; + return qtjambi_cast(env, result); + } + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_00024QTaskBuilderVoid5Arg5_spawn) +(JNIEnv *env, jclass, jobject _threadPool, jint priority, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d, jobject e) +{ + try{ + QSharedPointer futurePointer(new QFutureInterfaceBase); + auto task = QtConcurrent::task(RunFunctor(env, javaRunnable, futurePointer)) + .withArguments(QVariant::fromValue(JObjectWrapper(env, a)), + QVariant::fromValue(JObjectWrapper(env, b)), + QVariant::fromValue(JObjectWrapper(env, c)), + QVariant::fromValue(JObjectWrapper(env, d)), + QVariant::fromValue(JObjectWrapper(env, e))) + .withPriority(priority); + if(QThreadPool* t = qtjambi_to_QObject(env, _threadPool)){ + QFuture result = task.onThreadPool(*t).spawn(); + *futurePointer = result.d; + return qtjambi_cast(env, result); + }else{ + QFuture result = task.spawn(); + *futurePointer = result.d; + return qtjambi_cast(env, result); + } + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_00024QTaskBuilderVoid6Arg6_spawn) +(JNIEnv *env, jclass, jobject _threadPool, jint priority, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d, jobject e, jobject f) +{ + try{ + QSharedPointer futurePointer(new QFutureInterfaceBase); + auto task = QtConcurrent::task(RunFunctor(env, javaRunnable, futurePointer)) + .withArguments(QVariant::fromValue(JObjectWrapper(env, a)), + QVariant::fromValue(JObjectWrapper(env, b)), + QVariant::fromValue(JObjectWrapper(env, c)), + QVariant::fromValue(JObjectWrapper(env, d)), + QVariant::fromValue(JObjectWrapper(env, e)), + QVariant::fromValue(JObjectWrapper(env, f))) + .withPriority(priority); + if(QThreadPool* t = qtjambi_to_QObject(env, _threadPool)){ + QFuture result = task.onThreadPool(*t).spawn(); + *futurePointer = result.d; + return qtjambi_cast(env, result); + }else{ + QFuture result = task.spawn(); + *futurePointer = result.d; + return qtjambi_cast(env, result); + } + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_00024QTaskBuilderVoid7Arg7_spawn) +(JNIEnv *env, jclass, jobject _threadPool, jint priority, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d, jobject e, jobject f, jobject g) +{ + try{ + QSharedPointer futurePointer(new QFutureInterfaceBase); + auto task = QtConcurrent::task(RunFunctor(env, javaRunnable, futurePointer)) + .withArguments(QVariant::fromValue(JObjectWrapper(env, a)), + QVariant::fromValue(JObjectWrapper(env, b)), + QVariant::fromValue(JObjectWrapper(env, c)), + QVariant::fromValue(JObjectWrapper(env, d)), + QVariant::fromValue(JObjectWrapper(env, e)), + QVariant::fromValue(JObjectWrapper(env, f)), + QVariant::fromValue(JObjectWrapper(env, g))) + .withPriority(priority); + if(QThreadPool* t = qtjambi_to_QObject(env, _threadPool)){ + QFuture result = task.onThreadPool(*t).spawn(); + *futurePointer = result.d; + return qtjambi_cast(env, result); + }else{ + QFuture result = task.spawn(); + *futurePointer = result.d; + return qtjambi_cast(env, result); + } + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_00024QTaskBuilderVoid8Arg8_spawn) +(JNIEnv *env, jclass, jobject _threadPool, jint priority, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d, jobject e, jobject f, jobject g, jobject h) +{ + try{ + QSharedPointer futurePointer(new QFutureInterfaceBase); + auto task = QtConcurrent::task(RunFunctor(env, javaRunnable, futurePointer)) + .withArguments(QVariant::fromValue(JObjectWrapper(env, a)), + QVariant::fromValue(JObjectWrapper(env, b)), + QVariant::fromValue(JObjectWrapper(env, c)), + QVariant::fromValue(JObjectWrapper(env, d)), + QVariant::fromValue(JObjectWrapper(env, e)), + QVariant::fromValue(JObjectWrapper(env, f)), + QVariant::fromValue(JObjectWrapper(env, g)), + QVariant::fromValue(JObjectWrapper(env, h))) + .withPriority(priority); + if(QThreadPool* t = qtjambi_to_QObject(env, _threadPool)){ + QFuture result = task.onThreadPool(*t).spawn(); + *futurePointer = result.d; + return qtjambi_cast(env, result); + }else{ + QFuture result = task.spawn(); + *futurePointer = result.d; + return qtjambi_cast(env, result); + } + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_00024QTaskBuilderVoid9Arg9_spawn) +(JNIEnv *env, jclass, jobject _threadPool, jint priority, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d, jobject e, jobject f, jobject g, jobject h, jobject i) +{ + try{ + QSharedPointer futurePointer(new QFutureInterfaceBase); + auto task = QtConcurrent::task(RunFunctor(env, javaRunnable, futurePointer)) + .withArguments(QVariant::fromValue(JObjectWrapper(env, a)), + QVariant::fromValue(JObjectWrapper(env, b)), + QVariant::fromValue(JObjectWrapper(env, c)), + QVariant::fromValue(JObjectWrapper(env, d)), + QVariant::fromValue(JObjectWrapper(env, e)), + QVariant::fromValue(JObjectWrapper(env, f)), + QVariant::fromValue(JObjectWrapper(env, g)), + QVariant::fromValue(JObjectWrapper(env, h)), + QVariant::fromValue(JObjectWrapper(env, i))) + .withPriority(priority); + if(QThreadPool* t = qtjambi_to_QObject(env, _threadPool)){ + QFuture result = task.onThreadPool(*t).spawn(); + *futurePointer = result.d; + return qtjambi_cast(env, result); + }else{ + QFuture result = task.spawn(); + *futurePointer = result.d; + return qtjambi_cast(env, result); + } + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_00024QTypedTaskBuilder0Arg0_spawn) +(JNIEnv *env, jclass, jobject _threadPool, jint priority, jobject javaRunnable) +{ + try{ + QSharedPointer futurePointer(new QFutureInterfaceBase); + auto task = QtConcurrent::task(CallableFunctor<>(env, javaRunnable, futurePointer)) + .withPriority(priority); + if(QThreadPool* t = qtjambi_to_QObject(env, _threadPool)){ + QFuture result = task.onThreadPool(*t).spawn(); + *futurePointer = result.d; + return qtjambi_cast(env, result); + }else{ + QFuture result = task.spawn(); + *futurePointer = result.d; + return qtjambi_cast(env, result); + } + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_00024QTypedTaskBuilder1Arg1_spawn) +(JNIEnv *env, jclass, jobject _threadPool, jint priority, jobject javaRunnable, jobject a) +{ + try{ + QSharedPointer futurePointer(new QFutureInterfaceBase); + auto task = QtConcurrent::task(CallableFunctor(env, javaRunnable, futurePointer)) + .withArguments(QVariant::fromValue(JObjectWrapper(env, a))) + .withPriority(priority); + if(QThreadPool* t = qtjambi_to_QObject(env, _threadPool)){ + QFuture result = task.onThreadPool(*t).spawn(); + *futurePointer = result.d; + return qtjambi_cast(env, result); + }else{ + QFuture result = task.spawn(); + *futurePointer = result.d; + return qtjambi_cast(env, result); + } + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_00024QTypedTaskBuilder2Arg2_spawn) +(JNIEnv *env, jclass, jobject _threadPool, jint priority, jobject javaRunnable, jobject a, jobject b) +{ + try{ + QSharedPointer futurePointer(new QFutureInterfaceBase); + auto task = QtConcurrent::task(CallableFunctor(env, javaRunnable, futurePointer)) + .withArguments(QVariant::fromValue(JObjectWrapper(env, a)), + QVariant::fromValue(JObjectWrapper(env, b))) + .withPriority(priority); + if(QThreadPool* t = qtjambi_to_QObject(env, _threadPool)){ + QFuture result = task.onThreadPool(*t).spawn(); + *futurePointer = result.d; + return qtjambi_cast(env, result); + }else{ + QFuture result = task.spawn(); + *futurePointer = result.d; + return qtjambi_cast(env, result); + } + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_00024QTypedTaskBuilder3Arg3_spawn) +(JNIEnv *env, jclass, jobject _threadPool, jint priority, jobject javaRunnable, jobject a, jobject b, jobject c) +{ + try{ + QSharedPointer futurePointer(new QFutureInterfaceBase); + auto task = QtConcurrent::task(CallableFunctor(env, javaRunnable, futurePointer)) + .withArguments(QVariant::fromValue(JObjectWrapper(env, a)), + QVariant::fromValue(JObjectWrapper(env, b)), + QVariant::fromValue(JObjectWrapper(env, c))) + .withPriority(priority); + if(QThreadPool* t = qtjambi_to_QObject(env, _threadPool)){ + QFuture result = task.onThreadPool(*t).spawn(); + *futurePointer = result.d; + return qtjambi_cast(env, result); + }else{ + QFuture result = task.spawn(); + *futurePointer = result.d; + return qtjambi_cast(env, result); + } + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_00024QTypedTaskBuilder4Arg4_spawn) +(JNIEnv *env, jclass, jobject _threadPool, jint priority, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d) +{ + try{ + QSharedPointer futurePointer(new QFutureInterfaceBase); + auto task = QtConcurrent::task(CallableFunctor(env, javaRunnable, futurePointer)) + .withArguments(QVariant::fromValue(JObjectWrapper(env, a)), + QVariant::fromValue(JObjectWrapper(env, b)), + QVariant::fromValue(JObjectWrapper(env, c)), + QVariant::fromValue(JObjectWrapper(env, d))) + .withPriority(priority); + if(QThreadPool* t = qtjambi_to_QObject(env, _threadPool)){ + QFuture result = task.onThreadPool(*t).spawn(); + *futurePointer = result.d; + return qtjambi_cast(env, result); + }else{ + QFuture result = task.spawn(); + *futurePointer = result.d; + return qtjambi_cast(env, result); + } + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_00024QTypedTaskBuilder5Arg5_spawn) +(JNIEnv *env, jclass, jobject _threadPool, jint priority, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d, jobject e) +{ + try{ + QSharedPointer futurePointer(new QFutureInterfaceBase); + auto task = QtConcurrent::task(CallableFunctor(env, javaRunnable, futurePointer)) + .withArguments(QVariant::fromValue(JObjectWrapper(env, a)), + QVariant::fromValue(JObjectWrapper(env, b)), + QVariant::fromValue(JObjectWrapper(env, c)), + QVariant::fromValue(JObjectWrapper(env, d)), + QVariant::fromValue(JObjectWrapper(env, e))) + .withPriority(priority); + if(QThreadPool* t = qtjambi_to_QObject(env, _threadPool)){ + QFuture result = task.onThreadPool(*t).spawn(); + *futurePointer = result.d; + return qtjambi_cast(env, result); + }else{ + QFuture result = task.spawn(); + *futurePointer = result.d; + return qtjambi_cast(env, result); + } + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_00024QTypedTaskBuilder6Arg6_spawn) +(JNIEnv *env, jclass, jobject _threadPool, jint priority, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d, jobject e, jobject f) +{ + try{ + QSharedPointer futurePointer(new QFutureInterfaceBase); + auto task = QtConcurrent::task(CallableFunctor(env, javaRunnable, futurePointer)) + .withArguments(QVariant::fromValue(JObjectWrapper(env, a)), + QVariant::fromValue(JObjectWrapper(env, b)), + QVariant::fromValue(JObjectWrapper(env, c)), + QVariant::fromValue(JObjectWrapper(env, d)), + QVariant::fromValue(JObjectWrapper(env, e)), + QVariant::fromValue(JObjectWrapper(env, f))) + .withPriority(priority); + if(QThreadPool* t = qtjambi_to_QObject(env, _threadPool)){ + QFuture result = task.onThreadPool(*t).spawn(); + *futurePointer = result.d; + return qtjambi_cast(env, result); + }else{ + QFuture result = task.spawn(); + *futurePointer = result.d; + return qtjambi_cast(env, result); + } + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_00024QTypedTaskBuilder7Arg7_spawn) +(JNIEnv *env, jclass, jobject _threadPool, jint priority, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d, jobject e, jobject f, jobject g) +{ + try{ + QSharedPointer futurePointer(new QFutureInterfaceBase); + auto task = QtConcurrent::task(CallableFunctor(env, javaRunnable, futurePointer)) + .withArguments(QVariant::fromValue(JObjectWrapper(env, a)), + QVariant::fromValue(JObjectWrapper(env, b)), + QVariant::fromValue(JObjectWrapper(env, c)), + QVariant::fromValue(JObjectWrapper(env, d)), + QVariant::fromValue(JObjectWrapper(env, e)), + QVariant::fromValue(JObjectWrapper(env, f)), + QVariant::fromValue(JObjectWrapper(env, g))) + .withPriority(priority); + if(QThreadPool* t = qtjambi_to_QObject(env, _threadPool)){ + QFuture result = task.onThreadPool(*t).spawn(); + *futurePointer = result.d; + return qtjambi_cast(env, result); + }else{ + QFuture result = task.spawn(); + *futurePointer = result.d; + return qtjambi_cast(env, result); + } + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_00024QTypedTaskBuilder8Arg8_spawn) +(JNIEnv *env, jclass, jobject _threadPool, jint priority, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d, jobject e, jobject f, jobject g, jobject h) +{ + try{ + QSharedPointer futurePointer(new QFutureInterfaceBase); + auto task = QtConcurrent::task(CallableFunctor(env, javaRunnable, futurePointer)) + .withArguments(QVariant::fromValue(JObjectWrapper(env, a)), + QVariant::fromValue(JObjectWrapper(env, b)), + QVariant::fromValue(JObjectWrapper(env, c)), + QVariant::fromValue(JObjectWrapper(env, d)), + QVariant::fromValue(JObjectWrapper(env, e)), + QVariant::fromValue(JObjectWrapper(env, f)), + QVariant::fromValue(JObjectWrapper(env, g)), + QVariant::fromValue(JObjectWrapper(env, h))) + .withPriority(priority); + if(QThreadPool* t = qtjambi_to_QObject(env, _threadPool)){ + QFuture result = task.onThreadPool(*t).spawn(); + *futurePointer = result.d; + return qtjambi_cast(env, result); + }else{ + QFuture result = task.spawn(); + *futurePointer = result.d; + return qtjambi_cast(env, result); + } + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_00024QTypedTaskBuilder9Arg9_spawn) +(JNIEnv *env, jclass, jobject _threadPool, jint priority, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d, jobject e, jobject f, jobject g, jobject h, jobject i) +{ + try{ + QSharedPointer futurePointer(new QFutureInterfaceBase); + auto task = QtConcurrent::task(CallableFunctor(env, javaRunnable, futurePointer)) + .withArguments(QVariant::fromValue(JObjectWrapper(env, a)), + QVariant::fromValue(JObjectWrapper(env, b)), + QVariant::fromValue(JObjectWrapper(env, c)), + QVariant::fromValue(JObjectWrapper(env, d)), + QVariant::fromValue(JObjectWrapper(env, e)), + QVariant::fromValue(JObjectWrapper(env, f)), + QVariant::fromValue(JObjectWrapper(env, g)), + QVariant::fromValue(JObjectWrapper(env, h)), + QVariant::fromValue(JObjectWrapper(env, i))) + .withPriority(priority); + if(QThreadPool* t = qtjambi_to_QObject(env, _threadPool)){ + QFuture result = task.onThreadPool(*t).spawn(); + *futurePointer = result.d; + return qtjambi_cast(env, result); + }else{ + QFuture result = task.spawn(); + *futurePointer = result.d; + return qtjambi_cast(env, result); + } + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_00024QPromiseTaskBuilderVoid0Arg0_spawn) +(JNIEnv *env, jclass, jobject _threadPool, jint priority, jobject javaRunnable) +{ + try{ + QSharedPointer futurePointer(new QFutureInterfaceBase); + auto task = QtConcurrent::task(RunFunctor&>(env, javaRunnable, futurePointer)) + .withPriority(priority); + if(QThreadPool* t = qtjambi_to_QObject(env, _threadPool)){ + QFuture result = task.onThreadPool(*t).spawn(); + *futurePointer = result.d; + return qtjambi_cast(env, result); + }else{ + QFuture result = task.spawn(); + *futurePointer = result.d; + return qtjambi_cast(env, result); + } + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_00024QPromiseTaskBuilderVoid1Arg1_spawn) +(JNIEnv *env, jclass, jobject _threadPool, jint priority, jobject javaRunnable, jobject a) +{ + try{ + QSharedPointer futurePointer(new QFutureInterfaceBase); + auto task = QtConcurrent::task(RunFunctor&,QVariant>(env, javaRunnable, futurePointer)) + .withArguments(QVariant::fromValue(JObjectWrapper(env, a))) + .withPriority(priority); + if(QThreadPool* t = qtjambi_to_QObject(env, _threadPool)){ + QFuture result = task.onThreadPool(*t).spawn(); + *futurePointer = result.d; + return qtjambi_cast(env, result); + }else{ + QFuture result = task.spawn(); + *futurePointer = result.d; + return qtjambi_cast(env, result); + } + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_00024QPromiseTaskBuilderVoid2Arg2_spawn) +(JNIEnv *env, jclass, jobject _threadPool, jint priority, jobject javaRunnable, jobject a, jobject b) +{ + try{ + QSharedPointer futurePointer(new QFutureInterfaceBase); + auto task = QtConcurrent::task(RunFunctor&,QVariant,QVariant>(env, javaRunnable, futurePointer)) + .withArguments(QVariant::fromValue(JObjectWrapper(env, a)), + QVariant::fromValue(JObjectWrapper(env, b))) + .withPriority(priority); + if(QThreadPool* t = qtjambi_to_QObject(env, _threadPool)){ + QFuture result = task.onThreadPool(*t).spawn(); + *futurePointer = result.d; + return qtjambi_cast(env, result); + }else{ + QFuture result = task.spawn(); + *futurePointer = result.d; + return qtjambi_cast(env, result); + } + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_00024QPromiseTaskBuilderVoid3Arg3_spawn) +(JNIEnv *env, jclass, jobject _threadPool, jint priority, jobject javaRunnable, jobject a, jobject b, jobject c) +{ + try{ + QSharedPointer futurePointer(new QFutureInterfaceBase); + auto task = QtConcurrent::task(RunFunctor&,QVariant,QVariant,QVariant>(env, javaRunnable, futurePointer)) + .withArguments(QVariant::fromValue(JObjectWrapper(env, a)), + QVariant::fromValue(JObjectWrapper(env, b)), + QVariant::fromValue(JObjectWrapper(env, c))) + .withPriority(priority); + if(QThreadPool* t = qtjambi_to_QObject(env, _threadPool)){ + QFuture result = task.onThreadPool(*t).spawn(); + *futurePointer = result.d; + return qtjambi_cast(env, result); + }else{ + QFuture result = task.spawn(); + *futurePointer = result.d; + return qtjambi_cast(env, result); + } + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_00024QPromiseTaskBuilderVoid4Arg4_spawn) +(JNIEnv *env, jclass, jobject _threadPool, jint priority, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d) +{ + try{ + QSharedPointer futurePointer(new QFutureInterfaceBase); + auto task = QtConcurrent::task(RunFunctor&,QVariant,QVariant,QVariant,QVariant>(env, javaRunnable, futurePointer)) + .withArguments(QVariant::fromValue(JObjectWrapper(env, a)), + QVariant::fromValue(JObjectWrapper(env, b)), + QVariant::fromValue(JObjectWrapper(env, c)), + QVariant::fromValue(JObjectWrapper(env, d))) + .withPriority(priority); + if(QThreadPool* t = qtjambi_to_QObject(env, _threadPool)){ + QFuture result = task.onThreadPool(*t).spawn(); + *futurePointer = result.d; + return qtjambi_cast(env, result); + }else{ + QFuture result = task.spawn(); + *futurePointer = result.d; + return qtjambi_cast(env, result); + } + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_00024QPromiseTaskBuilderVoid5Arg5_spawn) +(JNIEnv *env, jclass, jobject _threadPool, jint priority, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d, jobject e) +{ + try{ + QSharedPointer futurePointer(new QFutureInterfaceBase); + auto task = QtConcurrent::task(RunFunctor&,QVariant,QVariant,QVariant,QVariant,QVariant>(env, javaRunnable, futurePointer)) + .withArguments(QVariant::fromValue(JObjectWrapper(env, a)), + QVariant::fromValue(JObjectWrapper(env, b)), + QVariant::fromValue(JObjectWrapper(env, c)), + QVariant::fromValue(JObjectWrapper(env, d)), + QVariant::fromValue(JObjectWrapper(env, e))) + .withPriority(priority); + if(QThreadPool* t = qtjambi_to_QObject(env, _threadPool)){ + QFuture result = task.onThreadPool(*t).spawn(); + *futurePointer = result.d; + return qtjambi_cast(env, result); + }else{ + QFuture result = task.spawn(); + *futurePointer = result.d; + return qtjambi_cast(env, result); + } + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_00024QPromiseTaskBuilderVoid6Arg6_spawn) +(JNIEnv *env, jclass, jobject _threadPool, jint priority, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d, jobject e, jobject f) +{ + try{ + QSharedPointer futurePointer(new QFutureInterfaceBase); + auto task = QtConcurrent::task(RunFunctor&,QVariant,QVariant,QVariant,QVariant,QVariant,QVariant>(env, javaRunnable, futurePointer)) + .withArguments(QVariant::fromValue(JObjectWrapper(env, a)), + QVariant::fromValue(JObjectWrapper(env, b)), + QVariant::fromValue(JObjectWrapper(env, c)), + QVariant::fromValue(JObjectWrapper(env, d)), + QVariant::fromValue(JObjectWrapper(env, e)), + QVariant::fromValue(JObjectWrapper(env, f))) + .withPriority(priority); + if(QThreadPool* t = qtjambi_to_QObject(env, _threadPool)){ + QFuture result = task.onThreadPool(*t).spawn(); + *futurePointer = result.d; + return qtjambi_cast(env, result); + }else{ + QFuture result = task.spawn(); + *futurePointer = result.d; + return qtjambi_cast(env, result); + } + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_00024QPromiseTaskBuilderVoid7Arg7_spawn) +(JNIEnv *env, jclass, jobject _threadPool, jint priority, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d, jobject e, jobject f, jobject g) +{ + try{ + QSharedPointer futurePointer(new QFutureInterfaceBase); + auto task = QtConcurrent::task(RunFunctor&,QVariant,QVariant,QVariant,QVariant,QVariant,QVariant,QVariant>(env, javaRunnable, futurePointer)) + .withArguments(QVariant::fromValue(JObjectWrapper(env, a)), + QVariant::fromValue(JObjectWrapper(env, b)), + QVariant::fromValue(JObjectWrapper(env, c)), + QVariant::fromValue(JObjectWrapper(env, d)), + QVariant::fromValue(JObjectWrapper(env, e)), + QVariant::fromValue(JObjectWrapper(env, f)), + QVariant::fromValue(JObjectWrapper(env, g))) + .withPriority(priority); + if(QThreadPool* t = qtjambi_to_QObject(env, _threadPool)){ + QFuture result = task.onThreadPool(*t).spawn(); + *futurePointer = result.d; + return qtjambi_cast(env, result); + }else{ + QFuture result = task.spawn(); + *futurePointer = result.d; + return qtjambi_cast(env, result); + } + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_00024QPromiseTaskBuilderVoid8Arg8_spawn) +(JNIEnv *env, jclass, jobject _threadPool, jint priority, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d, jobject e, jobject f, jobject g, jobject h) +{ + try{ + QSharedPointer futurePointer(new QFutureInterfaceBase); + auto task = QtConcurrent::task(RunFunctor&,QVariant,QVariant,QVariant,QVariant,QVariant,QVariant,QVariant,QVariant>(env, javaRunnable, futurePointer)) + .withArguments(QVariant::fromValue(JObjectWrapper(env, a)), + QVariant::fromValue(JObjectWrapper(env, b)), + QVariant::fromValue(JObjectWrapper(env, c)), + QVariant::fromValue(JObjectWrapper(env, d)), + QVariant::fromValue(JObjectWrapper(env, e)), + QVariant::fromValue(JObjectWrapper(env, f)), + QVariant::fromValue(JObjectWrapper(env, g)), + QVariant::fromValue(JObjectWrapper(env, h))) + .withPriority(priority); + if(QThreadPool* t = qtjambi_to_QObject(env, _threadPool)){ + QFuture result = task.onThreadPool(*t).spawn(); + *futurePointer = result.d; + return qtjambi_cast(env, result); + }else{ + QFuture result = task.spawn(); + *futurePointer = result.d; + return qtjambi_cast(env, result); + } + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_00024QPromiseTaskBuilderVoid9Arg9_spawn) +(JNIEnv *env, jclass, jobject _threadPool, jint priority, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d, jobject e, jobject f, jobject g, jobject h, jobject i) +{ + try{ + QSharedPointer futurePointer(new QFutureInterfaceBase); + auto task = QtConcurrent::task(RunFunctor&,QVariant,QVariant,QVariant,QVariant,QVariant,QVariant,QVariant,QVariant,QVariant>(env, javaRunnable, futurePointer)) + .withArguments(QVariant::fromValue(JObjectWrapper(env, a)), + QVariant::fromValue(JObjectWrapper(env, b)), + QVariant::fromValue(JObjectWrapper(env, c)), + QVariant::fromValue(JObjectWrapper(env, d)), + QVariant::fromValue(JObjectWrapper(env, e)), + QVariant::fromValue(JObjectWrapper(env, f)), + QVariant::fromValue(JObjectWrapper(env, g)), + QVariant::fromValue(JObjectWrapper(env, h)), + QVariant::fromValue(JObjectWrapper(env, i))) + .withPriority(priority); + if(QThreadPool* t = qtjambi_to_QObject(env, _threadPool)){ + QFuture result = task.onThreadPool(*t).spawn(); + *futurePointer = result.d; + return qtjambi_cast(env, result); + }else{ + QFuture result = task.spawn(); + *futurePointer = result.d; + return qtjambi_cast(env, result); + } + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_00024QTypedPromiseTaskBuilder0Arg0_spawn) +(JNIEnv *env, jclass, jobject _threadPool, jint priority, jobject javaRunnable) +{ + try{ + QSharedPointer futurePointer(new QFutureInterfaceBase); + auto task = QtConcurrent::task(RunFunctor&>(env, javaRunnable, futurePointer)) + .withPriority(priority); + if(QThreadPool* t = qtjambi_to_QObject(env, _threadPool)){ + QFuture result = task.onThreadPool(*t).spawn(); + *futurePointer = result.d; + return qtjambi_cast(env, result); + }else{ + QFuture result = task.spawn(); + *futurePointer = result.d; + return qtjambi_cast(env, result); + } + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_00024QTypedPromiseTaskBuilder1Arg1_spawn) +(JNIEnv *env, jclass, jobject _threadPool, jint priority, jobject javaRunnable, jobject a) +{ + try{ + QSharedPointer futurePointer(new QFutureInterfaceBase); + auto task = QtConcurrent::task(RunFunctor&,QVariant>(env, javaRunnable, futurePointer)) + .withArguments(QVariant::fromValue(JObjectWrapper(env, a))) + .withPriority(priority); + if(QThreadPool* t = qtjambi_to_QObject(env, _threadPool)){ + QFuture result = task.onThreadPool(*t).spawn(); + *futurePointer = result.d; + return qtjambi_cast(env, result); + }else{ + QFuture result = task.spawn(); + *futurePointer = result.d; + return qtjambi_cast(env, result); + } + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_00024QTypedPromiseTaskBuilder2Arg2_spawn) +(JNIEnv *env, jclass, jobject _threadPool, jint priority, jobject javaRunnable, jobject a, jobject b) +{ + try{ + QSharedPointer futurePointer(new QFutureInterfaceBase); + auto task = QtConcurrent::task(RunFunctor&,QVariant,QVariant>(env, javaRunnable, futurePointer)) + .withArguments(QVariant::fromValue(JObjectWrapper(env, a)), + QVariant::fromValue(JObjectWrapper(env, b))) + .withPriority(priority); + if(QThreadPool* t = qtjambi_to_QObject(env, _threadPool)){ + QFuture result = task.onThreadPool(*t).spawn(); + *futurePointer = result.d; + return qtjambi_cast(env, result); + }else{ + QFuture result = task.spawn(); + *futurePointer = result.d; + return qtjambi_cast(env, result); + } + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_00024QTypedPromiseTaskBuilder3Arg3_spawn) +(JNIEnv *env, jclass, jobject _threadPool, jint priority, jobject javaRunnable, jobject a, jobject b, jobject c) +{ + try{ + QSharedPointer futurePointer(new QFutureInterfaceBase); + auto task = QtConcurrent::task(RunFunctor&,QVariant,QVariant,QVariant>(env, javaRunnable, futurePointer)) + .withArguments(QVariant::fromValue(JObjectWrapper(env, a)), + QVariant::fromValue(JObjectWrapper(env, b)), + QVariant::fromValue(JObjectWrapper(env, c))) + .withPriority(priority); + if(QThreadPool* t = qtjambi_to_QObject(env, _threadPool)){ + QFuture result = task.onThreadPool(*t).spawn(); + *futurePointer = result.d; + return qtjambi_cast(env, result); + }else{ + QFuture result = task.spawn(); + *futurePointer = result.d; + return qtjambi_cast(env, result); + } + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_00024QTypedPromiseTaskBuilder4Arg4_spawn) +(JNIEnv *env, jclass, jobject _threadPool, jint priority, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d) +{ + try{ + QSharedPointer futurePointer(new QFutureInterfaceBase); + auto task = QtConcurrent::task(RunFunctor&,QVariant,QVariant,QVariant,QVariant>(env, javaRunnable, futurePointer)) + .withArguments(QVariant::fromValue(JObjectWrapper(env, a)), + QVariant::fromValue(JObjectWrapper(env, b)), + QVariant::fromValue(JObjectWrapper(env, c)), + QVariant::fromValue(JObjectWrapper(env, d))) + .withPriority(priority); + if(QThreadPool* t = qtjambi_to_QObject(env, _threadPool)){ + QFuture result = task.onThreadPool(*t).spawn(); + *futurePointer = result.d; + return qtjambi_cast(env, result); + }else{ + QFuture result = task.spawn(); + *futurePointer = result.d; + return qtjambi_cast(env, result); + } + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_00024QTypedPromiseTaskBuilder5Arg5_spawn) +(JNIEnv *env, jclass, jobject _threadPool, jint priority, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d, jobject e) +{ + try{ + QSharedPointer futurePointer(new QFutureInterfaceBase); + auto task = QtConcurrent::task(RunFunctor&,QVariant,QVariant,QVariant,QVariant,QVariant>(env, javaRunnable, futurePointer)) + .withArguments(QVariant::fromValue(JObjectWrapper(env, a)), + QVariant::fromValue(JObjectWrapper(env, b)), + QVariant::fromValue(JObjectWrapper(env, c)), + QVariant::fromValue(JObjectWrapper(env, d)), + QVariant::fromValue(JObjectWrapper(env, e))) + .withPriority(priority); + if(QThreadPool* t = qtjambi_to_QObject(env, _threadPool)){ + QFuture result = task.onThreadPool(*t).spawn(); + *futurePointer = result.d; + return qtjambi_cast(env, result); + }else{ + QFuture result = task.spawn(); + *futurePointer = result.d; + return qtjambi_cast(env, result); + } + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_00024QTypedPromiseTaskBuilder6Arg6_spawn) +(JNIEnv *env, jclass, jobject _threadPool, jint priority, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d, jobject e, jobject f) +{ + try{ + QSharedPointer futurePointer(new QFutureInterfaceBase); + auto task = QtConcurrent::task(RunFunctor&,QVariant,QVariant,QVariant,QVariant,QVariant,QVariant>(env, javaRunnable, futurePointer)) + .withArguments(QVariant::fromValue(JObjectWrapper(env, a)), + QVariant::fromValue(JObjectWrapper(env, b)), + QVariant::fromValue(JObjectWrapper(env, c)), + QVariant::fromValue(JObjectWrapper(env, d)), + QVariant::fromValue(JObjectWrapper(env, e)), + QVariant::fromValue(JObjectWrapper(env, f))) + .withPriority(priority); + if(QThreadPool* t = qtjambi_to_QObject(env, _threadPool)){ + QFuture result = task.onThreadPool(*t).spawn(); + *futurePointer = result.d; + return qtjambi_cast(env, result); + }else{ + QFuture result = task.spawn(); + *futurePointer = result.d; + return qtjambi_cast(env, result); + } + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_00024QTypedPromiseTaskBuilder7Arg7_spawn) +(JNIEnv *env, jclass, jobject _threadPool, jint priority, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d, jobject e, jobject f, jobject g) +{ + try{ + QSharedPointer futurePointer(new QFutureInterfaceBase); + auto task = QtConcurrent::task(RunFunctor&,QVariant,QVariant,QVariant,QVariant,QVariant,QVariant,QVariant>(env, javaRunnable, futurePointer)) + .withArguments(QVariant::fromValue(JObjectWrapper(env, a)), + QVariant::fromValue(JObjectWrapper(env, b)), + QVariant::fromValue(JObjectWrapper(env, c)), + QVariant::fromValue(JObjectWrapper(env, d)), + QVariant::fromValue(JObjectWrapper(env, e)), + QVariant::fromValue(JObjectWrapper(env, f)), + QVariant::fromValue(JObjectWrapper(env, g))) + .withPriority(priority); + if(QThreadPool* t = qtjambi_to_QObject(env, _threadPool)){ + QFuture result = task.onThreadPool(*t).spawn(); + *futurePointer = result.d; + return qtjambi_cast(env, result); + }else{ + QFuture result = task.spawn(); + *futurePointer = result.d; + return qtjambi_cast(env, result); + } + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_00024QTypedPromiseTaskBuilder8Arg8_spawn) +(JNIEnv *env, jclass, jobject _threadPool, jint priority, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d, jobject e, jobject f, jobject g, jobject h) +{ + try{ + QSharedPointer futurePointer(new QFutureInterfaceBase); + auto task = QtConcurrent::task(RunFunctor&,QVariant,QVariant,QVariant,QVariant,QVariant,QVariant,QVariant,QVariant>(env, javaRunnable, futurePointer)) + .withArguments(QVariant::fromValue(JObjectWrapper(env, a)), + QVariant::fromValue(JObjectWrapper(env, b)), + QVariant::fromValue(JObjectWrapper(env, c)), + QVariant::fromValue(JObjectWrapper(env, d)), + QVariant::fromValue(JObjectWrapper(env, e)), + QVariant::fromValue(JObjectWrapper(env, f)), + QVariant::fromValue(JObjectWrapper(env, g)), + QVariant::fromValue(JObjectWrapper(env, h))) + .withPriority(priority); + if(QThreadPool* t = qtjambi_to_QObject(env, _threadPool)){ + QFuture result = task.onThreadPool(*t).spawn(); + *futurePointer = result.d; + return qtjambi_cast(env, result); + }else{ + QFuture result = task.spawn(); + *futurePointer = result.d; + return qtjambi_cast(env, result); + } + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_concurrent_QtConcurrent_00024QTypedPromiseTaskBuilder9Arg9_spawn) +(JNIEnv *env, jclass, jobject _threadPool, jint priority, jobject javaRunnable, jobject a, jobject b, jobject c, jobject d, jobject e, jobject f, jobject g, jobject h, jobject i) +{ + try{ + QSharedPointer futurePointer(new QFutureInterfaceBase); + auto task = QtConcurrent::task(RunFunctor&,QVariant,QVariant,QVariant,QVariant,QVariant,QVariant,QVariant,QVariant,QVariant>(env, javaRunnable, futurePointer)) + .withArguments(QVariant::fromValue(JObjectWrapper(env, a)), + QVariant::fromValue(JObjectWrapper(env, b)), + QVariant::fromValue(JObjectWrapper(env, c)), + QVariant::fromValue(JObjectWrapper(env, d)), + QVariant::fromValue(JObjectWrapper(env, e)), + QVariant::fromValue(JObjectWrapper(env, f)), + QVariant::fromValue(JObjectWrapper(env, g)), + QVariant::fromValue(JObjectWrapper(env, h)), + QVariant::fromValue(JObjectWrapper(env, i))) + .withPriority(priority); + if(QThreadPool* t = qtjambi_to_QObject(env, _threadPool)){ + QFuture result = task.onThreadPool(*t).spawn(); + *futurePointer = result.d; + return qtjambi_cast(env, result); + }else{ + QFuture result = task.spawn(); + *futurePointer = result.d; + return qtjambi_cast(env, result); + } + } catch (const JavaException& exn) { + exn.raiseInJava(env); + } + return nullptr; +} + +#endif //QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + +#endif // QT_NO_CONCURRENT + + diff --git a/src/cpp/qtjambi_core/QHash_shell.cpp b/src/cpp/qtjambi_core/QHash_shell.cpp index 26c4e600..664a92be 100644 --- a/src/cpp/qtjambi_core/QHash_shell.cpp +++ b/src/cpp/qtjambi_core/QHash_shell.cpp @@ -38,28 +38,6 @@ QT_WARNING_DISABLE_DEPRECATED #include #include -extern "C" Q_DECL_EXPORT void JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_Qt_qSetGlobalQHashSeed) -(JNIEnv* env,jclass, jint newSeed) -{ - QTJAMBI_TRY{ - qSetGlobalQHashSeed(newSeed); - }QTJAMBI_CATCH(const JavaException& exn){ - exn.raiseInJava(env); - }QTJAMBI_TRY_END -} - -extern "C" Q_DECL_EXPORT jint JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_Qt_qGlobalQHashSeed) -(JNIEnv* env,jclass) -{ - jint result{0}; - QTJAMBI_TRY{ - result = qGlobalQHashSeed(); - }QTJAMBI_CATCH(const JavaException& exn){ - exn.raiseInJava(env); - }QTJAMBI_TRY_END - return result; -} - extern "C" Q_DECL_EXPORT void JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QHash_initialize) (JNIEnv * env, jobject _this, jclass keyType, QtJambiNativeID keyMetaType, jclass valueType, QtJambiNativeID valueMetaType, jobject other) { diff --git a/src/cpp/qtjambi_core/qtjambi_core.pro b/src/cpp/qtjambi_core/qtjambi_core.pro index d55e1ae6..1d197eea 100644 --- a/src/cpp/qtjambi_core/qtjambi_core.pro +++ b/src/cpp/qtjambi_core/qtjambi_core.pro @@ -23,8 +23,7 @@ SOURCES +=\ qtjambi_biginteger.cpp \ qtjambi_core_future.cpp \ qtjambi_core_repository.cpp \ - qtjambi_core_util.cpp \ - qtjambi_core_variant.cpp + qtjambi_core_util.cpp QT = core core-private diff --git a/src/cpp/qtjambi_core/qtjambi_core_repository.cpp b/src/cpp/qtjambi_core/qtjambi_core_repository.cpp index 2639d841..2e27bd0e 100644 --- a/src/cpp/qtjambi_core/qtjambi_core_repository.cpp +++ b/src/cpp/qtjambi_core/qtjambi_core_repository.cpp @@ -226,10 +226,6 @@ QTJAMBI_REPOSITORY_DEFINE_CLASS(io/qt,QFlags,) } namespace Runtime{ -QTJAMBI_REPOSITORY_DEFINE_CLASS(java/lang,ArithmeticException, - QTJAMBI_REPOSITORY_DEFINE_CONSTRUCTOR(Ljava/lang/String;) -) - QTJAMBI_REPOSITORY_DEFINE_CLASS(java/math,BigInteger, QTJAMBI_REPOSITORY_DEFINE_CONSTRUCTOR(I[B) QTJAMBI_REPOSITORY_DEFINE_METHOD(abs,()Ljava/math/BigInteger;) @@ -241,12 +237,6 @@ QTJAMBI_REPOSITORY_DEFINE_CLASS(java/math,BigInteger, QTJAMBI_REPOSITORY_DEFINE_CLASS(java/lang,Class, QTJAMBI_REPOSITORY_DEFINE_METHOD(getName,()Ljava/lang/String;)) - -namespace Private{ -QTJAMBI_REPOSITORY_DEFINE_CLASS(java/lang,Long, - QTJAMBI_REPOSITORY_DEFINE_STATIC_METHOD(hashCode,(J)I)) -} - } } diff --git a/src/cpp/qtjambi_core/qtjambi_core_repository.h b/src/cpp/qtjambi_core/qtjambi_core_repository.h index 06285bc8..5a85f574 100644 --- a/src/cpp/qtjambi_core/qtjambi_core_repository.h +++ b/src/cpp/qtjambi_core/qtjambi_core_repository.h @@ -8,6 +8,21 @@ #include #endif +QObject* qtjambi_findChild(JNIEnv *env, const QObject *__qt_this, const QString& aName, Qt::FindChildOptions options); +QObject* qtjambi_findChild(JNIEnv *env, const QObject *__qt_this, jclass type, const QString& aName, Qt::FindChildOptions options); +#if QT_VERSION >= QT_VERSION_CHECK(6, 3, 0) +QList qtjambi_findChildren(JNIEnv *env, const QObject *__qt_this, Qt::FindChildOptions options); +QList qtjambi_findChildren(JNIEnv *env, const QObject *__qt_this, jclass type, Qt::FindChildOptions options); +#endif +QList qtjambi_findChildren(JNIEnv *env, const QObject *__qt_this, const QString& aName, Qt::FindChildOptions options); +QList qtjambi_findChildren(JNIEnv *env, const QObject *__qt_this, jclass type, const QString& aName, Qt::FindChildOptions options); +QList qtjambi_findChildren(JNIEnv *env, const QObject *__qt_this, const QRegularExpression& regexp, Qt::FindChildOptions options); +QList qtjambi_findChildren(JNIEnv *env, const QObject *__qt_this, jclass type, const QRegularExpression& regexp, Qt::FindChildOptions options); +#if QT_VERSION < QT_VERSION_CHECK(6,0,0) +QList qtjambi_findChildren(JNIEnv *env, const QObject *__qt_this, const QRegExp& regexp, Qt::FindChildOptions options); +QList qtjambi_findChildren(JNIEnv *env, const QObject *__qt_this, jclass type, const QRegExp& regexp, Qt::FindChildOptions options); +#endif + namespace Java{ namespace QtCore { @@ -241,9 +256,6 @@ QTJAMBI_REPOSITORY_DECLARE_CLASS(QFlags,) } namespace Runtime{ - QTJAMBI_REPOSITORY_DECLARE_CLASS(ArithmeticException, - QTJAMBI_REPOSITORY_DECLARE_THROWABLE_CONSTRUCTOR()) - QTJAMBI_REPOSITORY_DECLARE_CLASS(BigInteger, QTJAMBI_REPOSITORY_DECLARE_CONSTRUCTOR() QTJAMBI_REPOSITORY_DECLARE_OBJECT_METHOD(abs) @@ -253,10 +265,6 @@ namespace Runtime{ QTJAMBI_REPOSITORY_DECLARE_OBJECT_METHOD(toByteArray)) QTJAMBI_REPOSITORY_DECLARE_CLASS(Class, QTJAMBI_REPOSITORY_DECLARE_STRING_METHOD(getName)) - namespace Private{ - QTJAMBI_REPOSITORY_DECLARE_CLASS(Long, - QTJAMBI_REPOSITORY_DECLARE_STATIC_INT_METHOD(hashCode)) - } } } diff --git a/src/cpp/qtjambi_core/qtjambi_core_util.cpp b/src/cpp/qtjambi_core/qtjambi_core_util.cpp index afd80fa9..cf3638b0 100644 --- a/src/cpp/qtjambi_core/qtjambi_core_util.cpp +++ b/src/cpp/qtjambi_core/qtjambi_core_util.cpp @@ -42,37 +42,6 @@ extern "C" Q_DECL_EXPORT void JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QC }QTJAMBI_TRY_END } -extern "C" JNIEXPORT jboolean JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QAbstractItemModel_setData) -(JNIEnv *__jni_env, jobject, QtJambiNativeID _this_nativeId, jint row, jint col, jobject value, jint role) -{ - jboolean _result{false}; - QTJAMBI_TRY{ - QAbstractItemModel *__qt_this = qtjambi_object_from_nativeId(_this_nativeId); - qtjambi_check_resource(__jni_env, __qt_this); - QVariant qt_value = qtjambi_to_qvariant(__jni_env, value); - QModelIndex index = __qt_this->index(row, col, QModelIndex()); - _result = __qt_this->setData(index, qt_value, role); - }QTJAMBI_CATCH(const JavaException& exn){ - exn.raiseInJava(__jni_env); - }QTJAMBI_TRY_END - return _result; -} - -extern "C" JNIEXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QAbstractItemModel_data) -(JNIEnv *__jni_env, jobject, QtJambiNativeID _this_nativeId, jint row, jint col, jint role) -{ - jobject _result{nullptr}; - QTJAMBI_TRY{ - QAbstractItemModel *__qt_this = qtjambi_object_from_nativeId(_this_nativeId); - qtjambi_check_resource(__jni_env, __qt_this); - QModelIndex index = __qt_this->index(row, col, QModelIndex()); - _result = qtjambi_from_qvariant(__jni_env, __qt_this->data(index, role)); - }QTJAMBI_CATCH(const JavaException& exn){ - exn.raiseInJava(__jni_env); - }QTJAMBI_TRY_END - return _result; -} - extern "C" Q_DECL_EXPORT jint JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QCalendar_unspecified__) (JNIEnv *, jclass) { @@ -806,7 +775,7 @@ QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QLogging_qInstallMessageHandler) extern "C" Q_DECL_EXPORT void JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QLogging_showCMessageFromSupplier) -(JNIEnv *env, jclass, jint messageType, QtJambiNativeID categoryId, jobject messageSupplier) +(JNIEnv *env, jclass loggingClass, jint messageType, QtJambiNativeID categoryId, jobject messageSupplier) { #if !defined(QT_NO_DEBUG_OUTPUT) QTJAMBI_TRY{ @@ -821,13 +790,20 @@ QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QLogging_showCMessageFromSupplier) int line = 0; #if !defined (QT_NO_DEBUG) jobject invocationInfoProvider = Java::QtJambi::QtJambiInternal::invocationInfoProvider(env); - jobject invocationInfo = Java::Runtime::IntFunction::apply(env, invocationInfoProvider, 2); + jint offset = 2; + jobject invocationInfo = Java::Runtime::IntFunction::apply(env, invocationInfoProvider, offset); jclass declaringClass = Java::QtJambi::InternalAccess$CallerContext::declaringClass(env, invocationInfo); + while(env->IsSameObject(declaringClass, loggingClass)){ + invocationInfo = Java::Runtime::IntFunction::apply(env, invocationInfoProvider, ++offset); + declaringClass = Java::QtJambi::InternalAccess$CallerContext::declaringClass(env, invocationInfo); + } jstring method = Java::QtJambi::InternalAccess$CallerContext::methodName(env, invocationInfo); line = Java::QtJambi::InternalAccess$CallerContext::lineNumber(env, invocationInfo); _method = env->GetStringUTFChars(method, nullptr); jstring className = Java::Runtime::Class::getName(env, declaringClass); _className = env->GetStringUTFChars(className, nullptr); +#else + Q_UNUSED(loggingClass) #endif QtJambiExceptionRaiser __exnRaiser; QMessageLogger logger(_className, line, _method, category.categoryName()); @@ -868,7 +844,7 @@ QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QLogging_showCMessageFromSupplier) extern "C" Q_DECL_EXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QLogging_getDebug) -(JNIEnv *env, jclass, jint messageType) +(JNIEnv *env, jclass loggingClass, jint messageType) { jobject result = nullptr; #if !defined(QT_NO_DEBUG_OUTPUT) @@ -878,8 +854,13 @@ QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QLogging_getDebug) int line = 0; #if !defined (QT_NO_DEBUG) jobject invocationInfoProvider = Java::QtJambi::QtJambiInternal::invocationInfoProvider(env); - jobject invocationInfo = Java::Runtime::IntFunction::apply(env, invocationInfoProvider, 2); + jint offset = 2; + jobject invocationInfo = Java::Runtime::IntFunction::apply(env, invocationInfoProvider, offset); jclass declaringClass = Java::QtJambi::InternalAccess$CallerContext::declaringClass(env, invocationInfo); + while(env->IsSameObject(declaringClass, loggingClass)){ + invocationInfo = Java::Runtime::IntFunction::apply(env, invocationInfoProvider, ++offset); + declaringClass = Java::QtJambi::InternalAccess$CallerContext::declaringClass(env, invocationInfo); + } jstring method = Java::QtJambi::InternalAccess$CallerContext::methodName(env, invocationInfo); line = Java::QtJambi::InternalAccess$CallerContext::lineNumber(env, invocationInfo); jobject _data = qtjambi_cast(env, QByteArray()); @@ -895,6 +876,8 @@ QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QLogging_getDebug) env->ReleaseStringUTFChars(className, _className); _method = data->constData(); _className = data->constData()+size; +#else + Q_UNUSED(loggingClass) #endif QMessageLogger logger(_className, line, _method); switch(messageType){ @@ -930,7 +913,7 @@ QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QLogging_getDebug) extern "C" Q_DECL_EXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QLogging_getCDebug) -(JNIEnv *env, jclass, jint messageType, QtJambiNativeID categoryId) +(JNIEnv *env, jclass loggingClass, jint messageType, QtJambiNativeID categoryId) { jobject result = nullptr; #if !defined(QT_NO_DEBUG_OUTPUT) @@ -941,8 +924,13 @@ QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QLogging_getCDebug) int line = 0; #if !defined (QT_NO_DEBUG) jobject invocationInfoProvider = Java::QtJambi::QtJambiInternal::invocationInfoProvider(env); - jobject invocationInfo = Java::Runtime::IntFunction::apply(env, invocationInfoProvider, 2); + jint offset = 2; + jobject invocationInfo = Java::Runtime::IntFunction::apply(env, invocationInfoProvider, offset); jclass declaringClass = Java::QtJambi::InternalAccess$CallerContext::declaringClass(env, invocationInfo); + while(env->IsSameObject(declaringClass, loggingClass)){ + invocationInfo = Java::Runtime::IntFunction::apply(env, invocationInfoProvider, ++offset); + declaringClass = Java::QtJambi::InternalAccess$CallerContext::declaringClass(env, invocationInfo); + } jstring method = Java::QtJambi::InternalAccess$CallerContext::methodName(env, invocationInfo); line = Java::QtJambi::InternalAccess$CallerContext::lineNumber(env, invocationInfo); jobject _data = qtjambi_cast(env, QByteArray()); @@ -958,6 +946,8 @@ QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QLogging_getCDebug) env->ReleaseStringUTFChars(className, _className); _method = data->constData(); _className = data->constData()+size; +#else + Q_UNUSED(loggingClass) #endif QMessageLogger logger(_className, line, _method, category.categoryName()); switch(messageType){ @@ -993,7 +983,7 @@ QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QLogging_getCDebug) extern "C" Q_DECL_EXPORT void JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QLogging_showCMessage) -(JNIEnv *env, jclass, jint messageType, QtJambiNativeID categoryId, jstring message) +(JNIEnv *env, jclass loggingClass, jint messageType, QtJambiNativeID categoryId, jstring message) { #if !defined(QT_NO_DEBUG_OUTPUT) QTJAMBI_TRY{ @@ -1004,13 +994,20 @@ QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QLogging_showCMessage) int line = 0; #if !defined (QT_NO_DEBUG) jobject invocationInfoProvider = Java::QtJambi::QtJambiInternal::invocationInfoProvider(env); - jobject invocationInfo = Java::Runtime::IntFunction::apply(env, invocationInfoProvider, 2); + jint offset = 2; + jobject invocationInfo = Java::Runtime::IntFunction::apply(env, invocationInfoProvider, offset); jclass declaringClass = Java::QtJambi::InternalAccess$CallerContext::declaringClass(env, invocationInfo); + while(env->IsSameObject(declaringClass, loggingClass)){ + invocationInfo = Java::Runtime::IntFunction::apply(env, invocationInfoProvider, ++offset); + declaringClass = Java::QtJambi::InternalAccess$CallerContext::declaringClass(env, invocationInfo); + } jstring method = Java::QtJambi::InternalAccess$CallerContext::methodName(env, invocationInfo); line = Java::QtJambi::InternalAccess$CallerContext::lineNumber(env, invocationInfo); _method = env->GetStringUTFChars(method, nullptr); jstring className = Java::Runtime::Class::getName(env, declaringClass); _className = env->GetStringUTFChars(className, nullptr); +#else + Q_UNUSED(loggingClass) #endif QtJambiExceptionRaiser __exnRaiser; QMessageLogger logger(_className, line, _method, category.categoryName()); @@ -1051,7 +1048,7 @@ QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QLogging_showCMessage) extern "C" Q_DECL_EXPORT void JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QLogging_showMessageFromSupplier) -(JNIEnv *env, jclass, jint messageType, jobject messageSupplier) +(JNIEnv *env, jclass loggingClass, jint messageType, jobject messageSupplier) { #if !defined(QT_NO_DEBUG_OUTPUT) QTJAMBI_TRY{ @@ -1068,13 +1065,20 @@ QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QLogging_showMessageFromSupplier) int line = 0; #if !defined (QT_NO_DEBUG) jobject invocationInfoProvider = Java::QtJambi::QtJambiInternal::invocationInfoProvider(env); - jobject invocationInfo = Java::Runtime::IntFunction::apply(env, invocationInfoProvider, 2); + jint offset = 2; + jobject invocationInfo = Java::Runtime::IntFunction::apply(env, invocationInfoProvider, offset); jclass declaringClass = Java::QtJambi::InternalAccess$CallerContext::declaringClass(env, invocationInfo); + while(env->IsSameObject(declaringClass, loggingClass)){ + invocationInfo = Java::Runtime::IntFunction::apply(env, invocationInfoProvider, ++offset); + declaringClass = Java::QtJambi::InternalAccess$CallerContext::declaringClass(env, invocationInfo); + } jstring method = Java::QtJambi::InternalAccess$CallerContext::methodName(env, invocationInfo); line = Java::QtJambi::InternalAccess$CallerContext::lineNumber(env, invocationInfo); _method = env->GetStringUTFChars(method, nullptr); jstring className = Java::Runtime::Class::getName(env, declaringClass); _className = env->GetStringUTFChars(className, nullptr); +#else + Q_UNUSED(loggingClass) #endif QtJambiExceptionRaiser __exnRaiser; QMessageLogger logger(_className, line, _method); @@ -1115,7 +1119,7 @@ QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QLogging_showMessageFromSupplier) extern "C" Q_DECL_EXPORT void JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QLogging_showMessage) -(JNIEnv *env, jclass, jint messageType, jstring message) +(JNIEnv *env, jclass loggingClass, jint messageType, jstring message) { #if !defined(QT_NO_DEBUG_OUTPUT) QTJAMBI_TRY{ @@ -1125,13 +1129,20 @@ QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QLogging_showMessage) int line = 0; #if !defined (QT_NO_DEBUG) jobject invocationInfoProvider = Java::QtJambi::QtJambiInternal::invocationInfoProvider(env); - jobject invocationInfo = Java::Runtime::IntFunction::apply(env, invocationInfoProvider, 2); + jint offset = 2; + jobject invocationInfo = Java::Runtime::IntFunction::apply(env, invocationInfoProvider, offset); jclass declaringClass = Java::QtJambi::InternalAccess$CallerContext::declaringClass(env, invocationInfo); + while(env->IsSameObject(declaringClass, loggingClass)){ + invocationInfo = Java::Runtime::IntFunction::apply(env, invocationInfoProvider, ++offset); + declaringClass = Java::QtJambi::InternalAccess$CallerContext::declaringClass(env, invocationInfo); + } jstring method = Java::QtJambi::InternalAccess$CallerContext::methodName(env, invocationInfo); line = Java::QtJambi::InternalAccess$CallerContext::lineNumber(env, invocationInfo); _method = env->GetStringUTFChars(method, nullptr); jstring className = Java::Runtime::Class::getName(env, declaringClass); _className = env->GetStringUTFChars(className, nullptr); +#else + Q_UNUSED(loggingClass) #endif QtJambiExceptionRaiser __exnRaiser; QMessageLogger logger(_className, line, _method); @@ -1170,6 +1181,45 @@ QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QLogging_showMessage) #endif } +extern "C" Q_DECL_EXPORT void JNICALL +QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QLogging_qErrnoWarning) +(JNIEnv *env, jclass, jint code, jstring message) +{ + QTJAMBI_TRY{ + const char* _message = env->GetStringUTFChars(message, nullptr); + qErrnoWarning(code, _message); + env->ReleaseStringUTFChars(message, _message); + JavaException::check(env QTJAMBI_STACKTRACEINFO ); + }QTJAMBI_CATCH(const JavaException& exn){ + exn.raiseInJava(env); + }QTJAMBI_TRY_END +} + +extern "C" Q_DECL_EXPORT void JNICALL +QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QLogging_qSetMessagePattern) +(JNIEnv *env, jclass, jstring _pattern) +{ + QTJAMBI_TRY{ + QString pattern = qtjambi_to_qstring(env, _pattern); + qSetMessagePattern(pattern); + }QTJAMBI_CATCH(const JavaException& exn){ + exn.raiseInJava(env); + }QTJAMBI_TRY_END +} + +extern "C" Q_DECL_EXPORT void JNICALL +QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QLogging_qFormatLogMessage) +(JNIEnv *env, jclass, jint type, QtJambiNativeID context, jstring str) +{ + QTJAMBI_TRY{ + QString _str = qtjambi_to_qstring(env, str); + const QMessageLogContext& _context = qtjambi_object_from_nativeId_deref(env, context); + qFormatLogMessage(QtMsgType(type), _context, _str); + }QTJAMBI_CATCH(const JavaException& exn){ + exn.raiseInJava(env); + }QTJAMBI_TRY_END +} + // QByteArrayList::join() extern "C" Q_DECL_EXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QByteArray_join__Ljava_util_Collection_2) (JNIEnv *__jni_env, @@ -1230,6 +1280,29 @@ extern "C" Q_DECL_EXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core return _result; } +#if QT_VERSION >= QT_VERSION_CHECK(6,3,0) +// QByteArrayList::join(const QByteArrayView & sep) +extern "C" Q_DECL_EXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QByteArray_join__Ljava_util_Collection_2Lio_qt_core_QByteArrayView_2) +(JNIEnv *__jni_env, + jclass, + jobject list0, + jobject sep1) +{ + jobject _result{nullptr}; + QTJAMBI_DEBUG_METHOD_PRINT("native", "QByteArrayList::join(const QByteArray & sep)") + QTJAMBI_TRY{ + QtJambiScope __qtjambi_scope; + const QByteArrayList& __qt_list0 = qtjambi_cast(__jni_env, __qtjambi_scope, list0); + QByteArrayView __qt_sep1 = qtjambi_cast(__jni_env, sep1); + QByteArray __qt_return_value = __qt_list0.join(__qt_sep1); + _result = qtjambi_cast(__jni_env, __qt_return_value); + }QTJAMBI_CATCH(const JavaException& exn){ + exn.raiseInJava(__jni_env); + }QTJAMBI_TRY_END + return _result; +} +#endif + extern "C" Q_DECL_EXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QIODevice_fromDirectBuffer) (JNIEnv *env, @@ -1254,286 +1327,91 @@ extern "C" Q_DECL_EXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core return _result; } -// QCborValue::operator[](const QString & key) -extern "C" Q_DECL_EXPORT void JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QCborValue_setValue__Ljava_lang_String_2Lio_qt_core_QCborValue_2) -(JNIEnv *__jni_env, - jobject _this, - jstring key0, - jobject value1) -{ - QTJAMBI_DEBUG_METHOD_PRINT("native", "QCborValue::operator[](const QString & key)") - QTJAMBI_TRY{ - QCborValue *__qt_this = qtjambi_to_object(__jni_env, _this); - qtjambi_check_resource(__jni_env, __qt_this); - const QString& __qt_key0 = qtjambi_cast(__jni_env, key0); - QCborValue __qt_value1 = qtjambi_cast(__jni_env, value1); - (*__qt_this)[__qt_key0] = __qt_value1; - }QTJAMBI_CATCH(const JavaException& exn){ - exn.raiseInJava(__jni_env); - }QTJAMBI_TRY_END -} - -// QCborValue::operator[](long long key) -extern "C" Q_DECL_EXPORT void JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QCborValue_setValue__JLio_qt_core_QCborValue_2) -(JNIEnv *__jni_env, - jobject _this, - jlong key0, - jobject value1) -{ - QTJAMBI_DEBUG_METHOD_PRINT("native", "QCborValue::operator[](long long key)") - QTJAMBI_TRY{ - QCborValue *__qt_this = qtjambi_to_object(__jni_env, _this); - qtjambi_check_resource(__jni_env, __qt_this); - QCborValue __qt_value1 = qtjambi_cast(__jni_env, value1); - (*__qt_this)[static_cast(key0)] = __qt_value1; - }QTJAMBI_CATCH(const JavaException& exn){ - exn.raiseInJava(__jni_env); - }QTJAMBI_TRY_END -} - -// QCborArray::operator[](qsizetype i) -extern "C" Q_DECL_EXPORT void JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QCborArray_setValue) -(JNIEnv *__jni_env, - jobject _this, - jlong i0, - jobject value1) -{ - QTJAMBI_DEBUG_METHOD_PRINT("native", "QCborArray::operator[](qsizetype i)") - QTJAMBI_TRY{ - QCborArray *__qt_this = qtjambi_to_object(__jni_env, _this); - qtjambi_check_resource(__jni_env, __qt_this); - QCborValue __qt_value1 = qtjambi_cast(__jni_env, value1); - (*__qt_this)[static_cast(i0)] = __qt_value1; - }QTJAMBI_CATCH(const JavaException& exn){ - exn.raiseInJava(__jni_env); - }QTJAMBI_TRY_END -} - -// QCborMap::operator[](const QCborValue & key) -extern "C" Q_DECL_EXPORT void JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QCborMap_setValue__Lio_qt_core_QCborValue_2Lio_qt_core_QCborValue_2) -(JNIEnv *__jni_env, - jobject _this, - jobject key0, - jobject value1) +// QObject::metaObject() const +extern "C" Q_DECL_EXPORT jobject JNICALL +QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QObject_metaObject) + (JNIEnv * env, jobject _this) { - QTJAMBI_DEBUG_METHOD_PRINT("native", "QCborMap::operator[](const QCborValue & key)") + jobject _result{nullptr}; QTJAMBI_TRY{ - QCborMap *__qt_this = qtjambi_to_object(__jni_env, _this); - qtjambi_check_resource(__jni_env, __qt_this); - const QCborValue& __qt_key0 = qtjambi_cast(__jni_env, key0); - QCborValue __qt_value1 = qtjambi_cast(__jni_env, value1); - (*__qt_this)[__qt_key0] = __qt_value1; + QObject *__qt_this = qtjambi_to_QObject(env, _this); + qtjambi_check_resource(env, __qt_this); + _result = qtjambi_cast(env, __qt_this->metaObject()); }QTJAMBI_CATCH(const JavaException& exn){ - exn.raiseInJava(__jni_env); + exn.raiseInJava(env); }QTJAMBI_TRY_END + return _result; } -// QCborMap::operator[](const QString & key) -extern "C" Q_DECL_EXPORT void JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QCborMap_setValue__Ljava_lang_String_2Lio_qt_core_QCborValue_2) -(JNIEnv *__jni_env, - jobject _this, - jstring key0, - jobject value1) -{ - QTJAMBI_DEBUG_METHOD_PRINT("native", "QCborMap::operator[](const QString & key)") - QTJAMBI_TRY{ - QCborMap *__qt_this = qtjambi_to_object(__jni_env, _this); - qtjambi_check_resource(__jni_env, __qt_this); - const QString& __qt_key0 = qtjambi_cast(__jni_env, key0); - QCborValue __qt_value1 = qtjambi_cast(__jni_env, value1); - (*__qt_this)[__qt_key0] = __qt_value1; - }QTJAMBI_CATCH(const JavaException& exn){ - exn.raiseInJava(__jni_env); - }QTJAMBI_TRY_END +QObject* qtjambi_findChild(JNIEnv *, const QObject *__qt_this, const QString& aName, Qt::FindChildOptions options){ + return qt_qFindChild_helper(__qt_this, aName, QObject::staticMetaObject, options); } -// QCborMap::operator[](long long key) -extern "C" Q_DECL_EXPORT void JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QCborMap_setValue__JLio_qt_core_QCborValue_2) -(JNIEnv *__jni_env, - jobject _this, - jlong key0, - jobject value1) -{ - QTJAMBI_DEBUG_METHOD_PRINT("native", "QCborMap::operator[](long long key)") - QTJAMBI_TRY{ - QCborMap *__qt_this = qtjambi_to_object(__jni_env, _this); - qtjambi_check_resource(__jni_env, __qt_this); - QCborValue __qt_value1 = qtjambi_cast(__jni_env, value1); - (*__qt_this)[key0] = __qt_value1; - }QTJAMBI_CATCH(const JavaException& exn){ - exn.raiseInJava(__jni_env); - }QTJAMBI_TRY_END +QObject* qtjambi_findChild(JNIEnv *env, const QObject *__qt_this, jclass type, const QString& aName, Qt::FindChildOptions options){ + const QMetaObject *metaObject = qtjambi_metaobject_for_class(env, type); + qtjambi_check_resource(env, metaObject); + return qt_qFindChild_helper(__qt_this, aName, *metaObject, options); } -// QCborStreamReader::readByteArray() -extern "C" Q_DECL_EXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QCborStreamReader_readByteArray) -(JNIEnv *__jni_env, - jobject _this) -{ - jobject _result{nullptr}; - QTJAMBI_DEBUG_METHOD_PRINT("native", "QCborStreamReader::readByteArray()") - QTJAMBI_TRY{ - QCborStreamReader *__qt_this = qtjambi_to_object(__jni_env, _this); - qtjambi_check_resource(__jni_env, __qt_this); - QCborStreamReader::StringResult __qt_return_value = __qt_this->readByteArray(); - _result = Java::QtCore::QCborStreamReader$StringResult::newInstance(__jni_env, qtjambi_cast(__jni_env, __qt_return_value.data), qtjambi_cast(__jni_env, __qt_return_value.status)); - }QTJAMBI_CATCH(const JavaException& exn){ - exn.raiseInJava(__jni_env); - }QTJAMBI_TRY_END - return _result; +#if QT_VERSION >= QT_VERSION_CHECK(6, 3, 0) +QList qtjambi_findChildren(JNIEnv *, const QObject *__qt_this, Qt::FindChildOptions options){ + QList list; + qt_qFindChildren_helper(__qt_this, QObject::staticMetaObject, reinterpret_cast*>(&list), options); + return list; } -// QCborStreamReader::readString() -extern "C" Q_DECL_EXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QCborStreamReader_readString) -(JNIEnv *__jni_env, - jobject _this) -{ - jobject _result{nullptr}; - QTJAMBI_DEBUG_METHOD_PRINT("native", "QCborStreamReader::readString()") - QTJAMBI_TRY{ - QCborStreamReader *__qt_this = qtjambi_to_object(__jni_env, _this); - qtjambi_check_resource(__jni_env, __qt_this); - QCborStreamReader::StringResult __qt_return_value = __qt_this->readString(); - _result = Java::QtCore::QCborStreamReader$StringResult::newInstance(__jni_env, qtjambi_cast(__jni_env, __qt_return_value.data), qtjambi_cast(__jni_env, __qt_return_value.status)); - }QTJAMBI_CATCH(const JavaException& exn){ - exn.raiseInJava(__jni_env); - }QTJAMBI_TRY_END - return _result; +QList qtjambi_findChildren(JNIEnv *env, const QObject *__qt_this, jclass type, Qt::FindChildOptions options){ + const QMetaObject *metaObject = qtjambi_metaobject_for_class(env, type); + qtjambi_check_resource(env, metaObject); + QList list; + qt_qFindChildren_helper(__qt_this, *metaObject, reinterpret_cast*>(&list), options); + return list; } +#endif -// QCborStreamReader::readChunk() -extern "C" Q_DECL_EXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QCborStreamReader_readChunk) -(JNIEnv *__jni_env, - jobject _this, jobject buffer) -{ - jobject _result{nullptr}; - QTJAMBI_DEBUG_METHOD_PRINT("native", "QCborStreamReader::readChunk()") - QTJAMBI_TRY{ - QCborStreamReader *__qt_this = qtjambi_to_object(__jni_env, _this); - qtjambi_check_resource(__jni_env, __qt_this); - JBufferData __qt_buffer(__jni_env, buffer); - QCborStreamReader::StringResult __qt_return_value = __qt_this->readStringChunk(__qt_buffer, __qt_buffer.size()); - _result = Java::QtCore::QCborStreamReader$StringResult::newInstance(__jni_env, qtjambi_cast(__jni_env, __qt_return_value.data), qtjambi_cast(__jni_env, __qt_return_value.status)); - }QTJAMBI_CATCH(const JavaException& exn){ - exn.raiseInJava(__jni_env); - }QTJAMBI_TRY_END - return _result; +QList qtjambi_findChildren(JNIEnv *, const QObject *__qt_this, const QString& aName, Qt::FindChildOptions options){ + QList list; + qt_qFindChildren_helper(__qt_this, aName, QObject::staticMetaObject, reinterpret_cast*>(&list), options); + return list; } -// QObject::metaObject() const -extern "C" Q_DECL_EXPORT jobject JNICALL -QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QObject_metaObject) - (JNIEnv * env, jobject _this) -{ - jobject _result{nullptr}; - QTJAMBI_TRY{ - QObject *__qt_this = qtjambi_to_QObject(env, _this); - qtjambi_check_resource(env, __qt_this); - _result = qtjambi_cast(env, __qt_this->metaObject()); - }QTJAMBI_CATCH(const JavaException& exn){ - exn.raiseInJava(env); - }QTJAMBI_TRY_END - return _result; +QList qtjambi_findChildren(JNIEnv *env, const QObject *__qt_this, jclass type, const QString& aName, Qt::FindChildOptions options){ + const QMetaObject *metaObject = qtjambi_metaobject_for_class(env, type); + qtjambi_check_resource(env, metaObject); + QList list; + qt_qFindChildren_helper(__qt_this, aName, *metaObject, reinterpret_cast*>(&list), options); + return list; } -// QObject::findChild(const QString &name = QString(), Qt::FindChildOptions options = Qt::FindChildrenRecursively) const -extern "C" Q_DECL_EXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QObject_findChild__Ljava_lang_Class_2JLjava_lang_String_2I) -(JNIEnv *__jni_env, - jobject _this, - jclass cl0, - jlong metaObjectPointer1, - jobject name2, - jint options3) -{ - jobject _result{nullptr}; - QTJAMBI_DEBUG_METHOD_PRINT("native", "QObject::findChild(const QString &name = QString(), Qt::FindChildOptions options = Qt::FindChildrenRecursively) const") - QTJAMBI_TRY{ - QObject *__qt_this = qtjambi_to_QObject(__jni_env, _this); - qtjambi_check_resource(__jni_env, __qt_this); - const QMetaObject *__qt_metaObjectPointer1 = reinterpret_cast(metaObjectPointer1); - QString __qt_name2(qtjambi_to_qstring(__jni_env, jstring(name2))); - QObject * __qt_return = qt_qFindChild_helper(__qt_this, __qt_name2, *__qt_metaObjectPointer1, Qt::FindChildOptions(options3)); - _result = qtjambi_from_qobject(__jni_env, __qt_return, cl0); - }QTJAMBI_CATCH(const JavaException& exn){ - exn.raiseInJava(__jni_env); - }QTJAMBI_TRY_END - return _result; +QList qtjambi_findChildren(JNIEnv *, const QObject *__qt_this, const QRegularExpression& regexp, Qt::FindChildOptions options){ + QList list; + qt_qFindChildren_helper(__qt_this, regexp, QObject::staticMetaObject, reinterpret_cast*>(&list), options); + return list; } -// QObject::findChildren(const QString &name = QString(), Qt::FindChildOptions options = Qt::FindChildrenRecursively) const -extern "C" Q_DECL_EXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QObject_findChildrenString__JLjava_lang_String_2I) -(JNIEnv *__jni_env, - jobject _this, - jlong metaObjectPointer1, - jobject name2, - jint options3) -{ - jobject _result{nullptr}; - QTJAMBI_DEBUG_METHOD_PRINT("native", "QObject::findChildren(const QString &name = QString(), Qt::FindChildOptions options = Qt::FindChildrenRecursively) const") - QTJAMBI_TRY{ - QObject *__qt_this = qtjambi_to_QObject(__jni_env, _this); - qtjambi_check_resource(__jni_env, __qt_this); - const QMetaObject *__qt_metaObjectPointer1 = reinterpret_cast(metaObjectPointer1); - QString __qt_name2(qtjambi_to_qstring(__jni_env, jstring(name2))); - QList list; - qt_qFindChildren_helper(__qt_this, __qt_name2, *__qt_metaObjectPointer1, reinterpret_cast*>(&list), Qt::FindChildOptions(options3)); - _result = qtjambi_cast(__jni_env, list); - }QTJAMBI_CATCH(const JavaException& exn){ - exn.raiseInJava(__jni_env); - }QTJAMBI_TRY_END - return _result; +QList qtjambi_findChildren(JNIEnv *env, const QObject *__qt_this, jclass type, const QRegularExpression& regexp, Qt::FindChildOptions options){ + const QMetaObject *metaObject = qtjambi_metaobject_for_class(env, type); + qtjambi_check_resource(env, metaObject); + QList list; + qt_qFindChildren_helper(__qt_this, regexp, *metaObject, reinterpret_cast*>(&list), options); + return list; } #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) -// QObject::findChildren(const QRegExp ®Exp, Qt::FindChildOptions options = Qt::FindChildrenRecursively) const -extern "C" Q_DECL_EXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QObject_findChildrenQRegExp__JLio_qt_core_QRegExp_2I) -(JNIEnv *__jni_env, - jobject _this, - jlong metaObjectPointer1, - jobject regExp2, - jint options3) -{ - jobject _result{nullptr}; - QTJAMBI_DEBUG_METHOD_PRINT("native", "QObject::findChildren(const QRegExp ®Exp, Qt::FindChildOptions options = Qt::FindChildrenRecursively) const") - QTJAMBI_TRY{ - //JavaException::raiseQNoImplementationException(__jni_env, "Deprecated method removed." QTJAMBI_STACKTRACEINFO ); - QObject *__qt_this = qtjambi_to_QObject(__jni_env, _this); - qtjambi_check_resource(__jni_env, __qt_this); - const QMetaObject *__qt_metaObjectPointer1 = reinterpret_cast(metaObjectPointer1); - const QRegExp& __qt_regExp2 = qtjambi_cast(__jni_env, regExp2); - QList list; - qt_qFindChildren_helper(__qt_this, __qt_regExp2, *__qt_metaObjectPointer1, reinterpret_cast*>(&list), Qt::FindChildOptions(options3)); - _result = qtjambi_cast(__jni_env, list); - }QTJAMBI_CATCH(const JavaException& exn){ - exn.raiseInJava(__jni_env); - }QTJAMBI_TRY_END - return _result; +QList qtjambi_findChildren(JNIEnv *, const QObject *__qt_this, const QRegExp& regexp, Qt::FindChildOptions options){ + QList list; + qt_qFindChildren_helper(__qt_this, regexp, QObject::staticMetaObject, reinterpret_cast*>(&list), options); + return list; } -#endif -// QObject::findChildren(const QRegularExpression ®Exp, Qt::FindChildOptions options = Qt::FindChildrenRecursively) const -extern "C" Q_DECL_EXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QObject_findChildrenQRegularExpression__JLio_qt_core_QRegularExpression_2I) -(JNIEnv *__jni_env, - jobject _this, - jlong metaObjectPointer1, - jobject regExp2, - jint options3) -{ - jobject _result{nullptr}; - QTJAMBI_DEBUG_METHOD_PRINT("native", "QObject::findChildren(const QRegularExpression ®Exp, Qt::FindChildOptions options = Qt::FindChildrenRecursively) const") - QTJAMBI_TRY{ - QObject *__qt_this = qtjambi_to_QObject(__jni_env, _this); - qtjambi_check_resource(__jni_env, __qt_this); - const QMetaObject *__qt_metaObjectPointer1 = reinterpret_cast(metaObjectPointer1); - const QRegularExpression& __qt_regExp2 = qtjambi_cast(__jni_env, regExp2); - QList list; - qt_qFindChildren_helper(__qt_this, __qt_regExp2, *__qt_metaObjectPointer1, reinterpret_cast*>(&list), Qt::FindChildOptions(options3)); - _result = qtjambi_cast(__jni_env, list); - }QTJAMBI_CATCH(const JavaException& exn){ - exn.raiseInJava(__jni_env); - }QTJAMBI_TRY_END - return _result; +QList qtjambi_findChildren(JNIEnv *env, const QObject *__qt_this, jclass type, const QRegExp& regexp, Qt::FindChildOptions options){ + const QMetaObject *metaObject = qtjambi_metaobject_for_class(env, type); + qtjambi_check_resource(env, metaObject); + QList list; + qt_qFindChildren_helper(__qt_this, regexp, *metaObject, reinterpret_cast*>(&list), options); + return list; } +#endif extern "C" Q_DECL_EXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QThread__1_1qt_1javaThread) @@ -1722,6 +1600,32 @@ extern "C" Q_DECL_EXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core return _result; } +extern "C" Q_DECL_EXPORT jclass JNICALL +QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QMetaType_javaType__I) +(JNIEnv *env, jclass, jint id) +{ + try{ + return qtjambi_class_for_metatype(env, QMetaType(id)); + }catch(const JavaException& exn){ + exn.raiseInJava(env); + return nullptr; + } +} + +extern "C" Q_DECL_EXPORT jclass JNICALL +QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QMetaType_javaType__J) +(JNIEnv *env, jclass, QtJambiNativeID __this_nativeId) +{ + try{ + QMetaType *__qt_this = qtjambi_object_from_nativeId(__this_nativeId); + qtjambi_check_resource(env, __qt_this); + return qtjambi_class_for_metatype(env, *__qt_this); + }catch(const JavaException& exn){ + exn.raiseInJava(env); + return nullptr; + } +} + extern "C" Q_DECL_EXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QMetaType_00024GenericValue_buffer) (JNIEnv *__jni_env, jobject _this, @@ -2021,25 +1925,24 @@ QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QMetaObject_property) return _result; } -static const QSet forbidddenMethods = []() -> QSet { - QSet methods; - int idx; - //idx = QObject::staticMetaObject.indexOfMethod("destroyed(QObject*)"); - //if(idx>=0) - // methods.insert(QObject::staticMetaObject.method(idx)); - //idx = QObject::staticMetaObject.indexOfMethod("destroyed()"); - //if(idx>=0) - // methods.insert(QObject::staticMetaObject.method(idx)); - //idx = QObject::staticMetaObject.indexOfMethod("deleteLater()"); - //if(idx>=0) - // methods.insert(QObject::staticMetaObject.method(idx)); - idx = QObject::staticMetaObject.indexOfMethod("_q_reregisterTimers(void*)"); - if(idx>=0) - methods.insert(QObject::staticMetaObject.method(idx)); - return methods; - }(); - bool method_is_valid(const QMetaMethod& method){ + static const QSet forbidddenMethods = []() -> QSet { + QSet methods; + int idx; + //idx = QObject::staticMetaObject.indexOfMethod("destroyed(QObject*)"); + //if(idx>=0) + // methods.insert(QObject::staticMetaObject.method(idx)); + //idx = QObject::staticMetaObject.indexOfMethod("destroyed()"); + //if(idx>=0) + // methods.insert(QObject::staticMetaObject.method(idx)); + //idx = QObject::staticMetaObject.indexOfMethod("deleteLater()"); + //if(idx>=0) + // methods.insert(QObject::staticMetaObject.method(idx)); + idx = QObject::staticMetaObject.indexOfMethod("_q_reregisterTimers(void*)"); + if(idx>=0) + methods.insert(QObject::staticMetaObject.method(idx)); + return methods; + }(); return method.isValid() && !forbidddenMethods.contains(method); } @@ -2624,7 +2527,7 @@ QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QMetaObject_checkConnectArgsMethods) } extern "C" Q_DECL_EXPORT jobject JNICALL -QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QMetaObject__1_1qt_1forType) +QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QMetaObject_forType) (JNIEnv * env, jclass, jclass type) { jobject result = nullptr; @@ -4774,9 +4677,10 @@ extern "C" Q_DECL_EXPORT jboolean JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_cor bool compare = true; if(val){ QVariant variant = qtjambi_to_qvariant(__jni_env, val); - if(variant.metaType()!=metaType && !variant.convert(metaType)) + if(variant.metaType()!=metaType && !variant.convert(metaType)){ + Java::Runtime::ClassCastException::throwNew(__jni_env, QStringLiteral("Cannot cast value to %1").arg(QLatin1String(metaType.name())) QTJAMBI_STACKTRACEINFO ); compare = false; - else + }else _val = *reinterpret_cast(variant.constData()); }else{ _val = nullptr; @@ -4835,6 +4739,7 @@ extern "C" Q_DECL_EXPORT jboolean JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_cor default: { QVariant variant = val ? qtjambi_to_qvariant(__jni_env, val) : QVariant(metaType); if(variant.metaType()!=metaType && !variant.convert(metaType)){ + Java::Runtime::ClassCastException::throwNew(__jni_env, QStringLiteral("Cannot cast value to %1").arg(QLatin1String(metaType.name())) QTJAMBI_STACKTRACEINFO ); _result = false; }else if(metaType.isEqualityComparable() && metaType.equals(__qt_this, variant.constData())){ _result = false; diff --git a/src/cpp/qtjambi_core/qtjambi_core_variant.cpp b/src/cpp/qtjambi_core/qtjambi_core_variant.cpp deleted file mode 100644 index 44af46bf..00000000 --- a/src/cpp/qtjambi_core/qtjambi_core_variant.cpp +++ /dev/null @@ -1,285 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 1992-2009 Nokia. All rights reserved. -** Copyright (C) 2009-2022 Dr. Peter Droste, Omix Visualization GmbH & Co. KG. All rights reserved. -** -** This file is part of Qt Jambi. -** -** ** $BEGIN_LICENSE$ -** -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this -** package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** $END_LICENSE$ -** -** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -** -****************************************************************************/ - -#include -QT_WARNING_DISABLE_DEPRECATED - -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) -#include -#endif //QT_VERSION < QT_VERSION_CHECK(6, 0, 0) -#include -#include -#include -#include -#include -#include -#include -#include - -#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) -#define META_TYPE(t) t -#else -#define META_TYPE(t) QMetaType(t) -#endif - -static inline void setOk(JNIEnv *env, jbooleanArray ok, bool isOk) -{ - if (!env->IsSameObject(ok, nullptr) && env->GetArrayLength(ok)) { - jboolean* array = env->GetBooleanArrayElements(ok, nullptr); - array[0] = isOk; - env->ReleaseBooleanArrayElements(ok, array, 0); - qtjambi_throw_java_exception(env); - } -} - -extern "C" Q_DECL_EXPORT jobject JNICALL -QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QVariant_convert) - (JNIEnv *env, jclass, jobject object, jint type, jbooleanArray ok) -{ - QVariant v = qtjambi_to_qvariant(env, object); - if(v.userType()==int(type)){ - setOk(env, ok, true); - return object; - }else if (v.convert(META_TYPE(int(type)))){ - setOk(env, ok, true); - return qtjambi_from_qvariant(env, v); - }else{ - setOk(env, ok, false); - return nullptr; - } -} - -extern "C" Q_DECL_EXPORT jboolean JNICALL -QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QVariant_canConvertByType) - (JNIEnv *, jclass, jint type1, jint type2) -{ - return int(type1)==int(type2) || QVariant(META_TYPE(int(type1)), nullptr).canConvert(META_TYPE(int(type2))); -} - -extern "C" Q_DECL_EXPORT jdouble JNICALL -QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QVariant__1_1qt_1toDouble) - (JNIEnv *env, jclass, jobject object, jbooleanArray ok) -{ - QVariant v = qtjambi_to_qvariant(env, object); - bool isOk = false; - double returned = v.toDouble(&isOk); - setOk(env, ok, isOk); - return returned; -} - -extern "C" Q_DECL_EXPORT jfloat JNICALL -QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QVariant__1_1qt_1toFloat) - (JNIEnv *env, jclass, jobject object, jbooleanArray ok) -{ - QVariant v = qtjambi_to_qvariant(env, object); - bool isOk = false; - float returned = v.toFloat(&isOk); - setOk(env, ok, isOk); - return returned; -} - -extern "C" Q_DECL_EXPORT jint JNICALL -QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QVariant__1_1qt_1toInt) - (JNIEnv *env, jclass, jobject object, jbooleanArray ok) -{ - QVariant v = qtjambi_to_qvariant(env, object); - bool isOk = false; - int returned = v.toInt(&isOk); - setOk(env, ok, isOk); - return returned; -} - -extern "C" Q_DECL_EXPORT jlong JNICALL -QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QVariant__1_1qt_1toLong) - (JNIEnv *env, jclass, jobject object, jbooleanArray ok) -{ - QVariant v = qtjambi_to_qvariant(env, object); - bool isOk = false; - qlonglong returned = v.toLongLong(&isOk); - setOk(env, ok, isOk); - return returned; -} - -extern "C" Q_DECL_EXPORT jobject JNICALL -QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QVariant__1_1qt_1toString) - (JNIEnv *env, jclass, jobject object) -{ - QVariant v = qtjambi_to_qvariant(env, object); - return qtjambi_from_qstring(env, v.toString()); -} - -extern "C" Q_DECL_EXPORT jboolean JNICALL -QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QVariant__1_1qt_1toBoolean) - (JNIEnv *env, jclass, jobject object) -{ - QVariant v = qtjambi_to_qvariant(env, object); - return v.toBool(); -} - -extern "C" Q_DECL_EXPORT jchar JNICALL -QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QVariant__1_1qt_1toChar) - (JNIEnv *env, jclass, jobject object) -{ - QVariant v = qtjambi_to_qvariant(env, object); - QChar c = v.toChar(); - return c.unicode(); -} - -extern "C" Q_DECL_EXPORT void JNICALL -QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QVariant_saveObject) - (JNIEnv *env, jclass, QtJambiNativeID stream_nativeId, jobject variant, jbooleanArray ok) -{ - QDataStream *__qt_stream = qtjambi_object_from_nativeId(stream_nativeId); - QVariant v = qtjambi_to_qvariant(env, variant); - - quint32 typeId = quint32(v.type()); - bool fakeUserType = false; - if (__qt_stream->version() < QDataStream::Qt_5_0) { - if (typeId == QMetaType::User) { - typeId = 127; // QVariant::UserType had this value in Qt4 - } else if (typeId >= 128 - 97 && typeId <= QVariant::LastCoreType) { - // In Qt4 id == 128 was FirstExtCoreType. In Qt5 ExtCoreTypes set was merged to CoreTypes - // by moving all ids down by 97. - typeId += 97; - } else if (typeId == QMetaType::QSizePolicy) { - typeId = 75; - } else if (typeId >= QMetaType::QKeySequence && typeId <= QMetaType::QQuaternion) { - // and as a result these types received lower ids too - typeId +=1; - } else if (typeId == QMetaType::QPolygonF) { - // This existed in Qt 4 only as a custom type - typeId = 127; - fakeUserType = true; - } - } - *__qt_stream << typeId; - if (__qt_stream->version() >= QDataStream::Qt_4_2) - *__qt_stream << qint8(v.data_ptr().is_null); - if (v.type() >= QVariant::UserType || fakeUserType) { - *__qt_stream << QMetaType::typeName(v.userType()); - } - - bool isOk = false; - if(!v.isValid()){ - if (__qt_stream->version() < QDataStream::Qt_5_0) - *__qt_stream << QString(); - return; - }else if(v.type()==QVariant::UserType){ - isOk = QMetaType::save(*__qt_stream, v.userType(), v.data()); - }else{ - isOk = QMetaType::save(*__qt_stream, v.type(), v.data()); - } - setOk(env, ok, isOk); -} - -extern "C" Q_DECL_EXPORT jobject JNICALL -QTJAMBI_FUNCTION_PREFIX(Java_io_qt_core_QVariant_loadObject) - (JNIEnv *env, jclass, QtJambiNativeID stream_nativeId, jbooleanArray ok) -{ - QDataStream *__qt_stream = qtjambi_object_from_nativeId(stream_nativeId); - bool isOk = false; - quint32 typeId; - *__qt_stream >> typeId; - if (__qt_stream->version() < QDataStream::Qt_5_0) { - if (typeId == 127 /* QVariant::UserType */) { - typeId = QMetaType::User; - } else if (typeId >= 128 && typeId != QVariant::UserType) { - // In Qt4 id == 128 was FirstExtCoreType. In Qt5 ExtCoreTypes set was merged to CoreTypes - // by moving all ids down by 97. - typeId -= 97; - } else if (typeId == 75 /* QSizePolicy */) { - typeId = QMetaType::QSizePolicy; - } else if (typeId > 75 && typeId <= 86) { - // and as a result these types received lower ids too - // QKeySequence QPen QTextLength QTextFormat QMatrix QTransform QMatrix4x4 QVector2D QVector3D QVector4D QQuaternion - typeId -=1; - } - } - - qint8 is_null = false; - if (__qt_stream->version() >= QDataStream::Qt_4_2) - *__qt_stream >> is_null; - if (typeId == QVariant::UserType) { - QByteArray name; - *__qt_stream >> name; - typeId = quint32(QMetaType::type(name.constData())); - if (typeId == QMetaType::UnknownType) { - __qt_stream->setStatus(QDataStream::ReadCorruptData); - setOk(env, ok, false); - return nullptr; - } - } -#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) - QVariant v(int(typeId), nullptr); -#else - QVariant v(QMetaType(int(typeId)), nullptr); -#endif - v.data_ptr().is_null = uint(is_null); - - if (!v.isValid()) { - if (__qt_stream->version() < QDataStream::Qt_5_0) { - // Since we wrote something, we should read something - QString x; - *__qt_stream >> x; - } - v.data_ptr().is_null = true; - setOk(env, ok, true); - return nullptr; - } - - // const cast is safe since we operate on a newly constructed variant - isOk = QMetaType::load(*__qt_stream, int(typeId), const_cast(v.constData())); - if (!isOk) { - __qt_stream->setStatus(QDataStream::ReadCorruptData); - } - setOk(env, ok, isOk); - v.data_ptr().is_null = !isOk; - return qtjambi_from_qvariant(env, v); -} diff --git a/src/cpp/qtjambi_datavis/qtjambi_datavis3d_hashes.h b/src/cpp/qtjambi_datavis/qtjambi_datavis3d_hashes.h index 46d4b777..47666b50 100644 --- a/src/cpp/qtjambi_datavis/qtjambi_datavis3d_hashes.h +++ b/src/cpp/qtjambi_datavis/qtjambi_datavis3d_hashes.h @@ -11,11 +11,13 @@ #include #include +#ifndef QT_JAMBI_RUN void registerHashFunction_QBarDataArray(); void registerHashFunction_QBarDataRow(); void registerHashFunction_QSurfaceDataArray(); void registerHashFunction_QSurfaceDataRow(); void registerHashFunction_QScatterDataArray(); +#endif namespace QtJambiPrivate { diff --git a/src/cpp/qtjambi_gui/qtjambi_gui_util.cpp b/src/cpp/qtjambi_gui/qtjambi_gui_util.cpp index c58afe09..3664aaba 100644 --- a/src/cpp/qtjambi_gui/qtjambi_gui_util.cpp +++ b/src/cpp/qtjambi_gui/qtjambi_gui_util.cpp @@ -25,110 +25,49 @@ QTJAMBI_FUNCTION_PREFIX(Java_io_qt_gui_QPainter_threadCheck) #include // QOpenGLContext::versionFunctions() const -extern "C" Q_DECL_EXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_gui_QOpenGLContext_versionFunctions) -(JNIEnv *__jni_env, - jobject _this, - jclass type) -{ - jobject _result{nullptr}; - QTJAMBI_TRY{ - const QOpenGLContext *__qt_this = qtjambi_to_object(__jni_env, _this); - qtjambi_check_resource(__jni_env, __qt_this); - QString className = qtjambi_class_name(__jni_env, type); - if(className == "io.qt.gui.QOpenGLFunctions_ES2"){ +QAbstractOpenGLFunctions* qtjambi_QOpenGLContext_versionFunctions(JNIEnv *__jni_env, QtJambiNativeID _this, jclass type){ + const QOpenGLContext *__qt_this = qtjambi_object_from_nativeId(_this); + qtjambi_check_resource(__jni_env, __qt_this); + QString className = qtjambi_class_name(__jni_env, type); + if(className == "io.qt.gui.QOpenGLFunctions_ES2"){ #if defined(QT_OPENGL_ES_2) - _result = qtjambi_cast(__jni_env, __qt_this->versionFunctions()); + return __qt_this->versionFunctions(); #else - }else if(className.startsWith("io.qt.gui.QOpenGLFunctions_")){ - className = className.mid(27); - int idx = className.indexOf('_'); - if(idx>0){ - bool ok = false; - int majorVersion = className.left(idx).toInt(&ok); + }else if(className.startsWith("io.qt.gui.QOpenGLFunctions_")){ + className = className.mid(27); + int idx = className.indexOf('_'); + if(idx>0){ + bool ok = false; + int majorVersion = className.left(idx).toInt(&ok); + if(ok){ + className = className.mid(idx+1); + QSurfaceFormat::OpenGLContextProfile profile = QSurfaceFormat::NoProfile; + if(className.endsWith("_Core")){ + className = className.chopped(5); + profile = QSurfaceFormat::CoreProfile; + }else if(className.endsWith("_Compatibility")){ + className = className.chopped(14); + profile = QSurfaceFormat::CompatibilityProfile; + } + ok = false; + int minorVersion = className.toInt(&ok); if(ok){ - className = className.mid(idx+1); - QSurfaceFormat::OpenGLContextProfile profile = QSurfaceFormat::NoProfile; - if(className.endsWith("_Core")){ - className = className.chopped(5); - profile = QSurfaceFormat::CoreProfile; - }else if(className.endsWith("_Compatibility")){ - className = className.chopped(14); - profile = QSurfaceFormat::CompatibilityProfile; - } - ok = false; - int minorVersion = className.toInt(&ok); - if(ok){ - QOpenGLVersionProfile version; - version.setProfile(profile); - version.setVersion(majorVersion, minorVersion); - _result = qtjambi_cast(__jni_env, __qt_this->versionFunctions(version)); - } + QOpenGLVersionProfile version; + version.setProfile(profile); + version.setVersion(majorVersion, minorVersion); + return __qt_this->versionFunctions(version); } } -#endif } - //if(!__jni_env->IsInstanceOf(__java_return_value, type)) - // __java_return_value = nullptr; - }QTJAMBI_CATCH(const JavaException& exn){ - exn.raiseInJava(__jni_env); - }QTJAMBI_TRY_END - return _result; +#endif + } + return nullptr; } #else #include #include #include -// QAction::setMenu(QMenu * menu) -extern "C" Q_DECL_EXPORT void JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_gui_QAction_setMenuObject) -(JNIEnv *__jni_env, - jobject _this, - jobject arg__1) -{ - QTJAMBI_DEBUG_METHOD_PRINT("native", "QAction::setMenu(QMenu * menu)") - QTJAMBI_TRY{ -#if QT_CONFIG(action) - QAction *__qt_this = qtjambi_to_QObject(__jni_env, _this); - qtjambi_check_resource(__jni_env, __qt_this); - static bool iswidgetApplication = QGuiApplication::instance()->inherits("QApplication"); - if(iswidgetApplication && arg__1 && !Java::QtWidgets::QMenu::isInstanceOf(__jni_env, arg__1)){ - JavaException::raiseIllegalArgumentException(__jni_env, "QAction.setMenu(menu) expects a QMenu in widget applications." QTJAMBI_STACKTRACEINFO ); - } - QObject* __qt_arg__1 = qtjambi_cast(arg__1); - __qt_this->setMenu(__qt_arg__1); -#else - Q_UNUSED(__this_nativeId) - Q_UNUSED(arg__1) - JavaException::raiseQNoImplementationException(__jni_env, "The method has no implementation on this platform." QTJAMBI_STACKTRACEINFO ); -#endif // QT_CONFIG(action) - }QTJAMBI_CATCH(const JavaException& exn){ - exn.raiseInJava(__jni_env); - }QTJAMBI_TRY_END -} - -// QAction::menu() const -extern "C" Q_DECL_EXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_gui_QAction_menuObject) -(JNIEnv *__jni_env, - jobject _this) -{ - jobject _result{nullptr}; - QTJAMBI_DEBUG_METHOD_PRINT("native", "QAction::menu() const") - QTJAMBI_TRY{ -#if QT_CONFIG(action) - QAction *__qt_this = qtjambi_to_QObject(__jni_env, _this); - qtjambi_check_resource(__jni_env, __qt_this); - QObject* __qt_return_value = __qt_this->menu(); - _result = qtjambi_cast(__jni_env, __qt_return_value); -#else - Q_UNUSED(__this_nativeId) - JavaException::raiseQNoImplementationException(__jni_env, "The method has no implementation on this platform." QTJAMBI_STACKTRACEINFO ); -#endif // QT_CONFIG(action) - }QTJAMBI_CATCH(const JavaException& exn){ - exn.raiseInJava(__jni_env); - }QTJAMBI_TRY_END - return _result; -} - extern "C" Q_DECL_EXPORT void JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_gui_QPointerEvent_setPoint) (JNIEnv *__jni_env, jobject _this, diff --git a/src/cpp/qtjambi_httpserver/qtjambi_httpserver.cpp b/src/cpp/qtjambi_httpserver/qtjambi_httpserver.cpp index 7a1390b9..676ea3f9 100644 --- a/src/cpp/qtjambi_httpserver/qtjambi_httpserver.cpp +++ b/src/cpp/qtjambi_httpserver/qtjambi_httpserver.cpp @@ -29,6 +29,9 @@ struct HttpServer : QAbstractHttpServer{ bool superhandleRequest(const QHttpServerRequest& request0, QTcpSocket* socket1){ return handleRequest(request0, socket1); } + void superMissingHandler(const QHttpServerRequest& request0, QTcpSocket* socket1){ + missingHandler(request0, socket1); + } }; struct HttpServerRouterRule : QHttpServerRouterRule{ @@ -140,6 +143,27 @@ extern "C" Q_DECL_EXPORT bool JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_httpser return result; } +extern "C" Q_DECL_EXPORT void JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_httpserver_QHttpServer_missingHandler) +(JNIEnv *__jni_env, + jobject __this, + QtJambiNativeID __this_nativeId, + QtJambiNativeID __request, + QtJambiNativeID __socket) +{ + QTJAMBI_DEBUG_METHOD_PRINT("native", "QHttpServer::missingHandler()") + Q_UNUSED(__this) + QTJAMBI_TRY { + QHttpServer *__qt_this = qtjambi_object_from_nativeId(__this_nativeId); + qtjambi_check_resource(__jni_env, __qt_this); + const QHttpServerRequest *request = qtjambi_object_from_nativeId(__request); + qtjambi_check_resource(__jni_env, request); + QTcpSocket *socket = qtjambi_object_from_nativeId(__socket); + reinterpret_cast(__qt_this)->superMissingHandler(*request, socket); + }QTJAMBI_CATCH(const JavaException& exn){ + exn.raiseInJava(__jni_env); + }QTJAMBI_TRY_END +} + extern "C" Q_DECL_EXPORT void JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_httpserver_QHttpServer_afterRequest) (JNIEnv *__jni_env, jobject __this, diff --git a/src/cpp/qtjambi_modules.pri b/src/cpp/qtjambi_modules.pri index c2f5ecaa..458ac4f3 100644 --- a/src/cpp/qtjambi_modules.pri +++ b/src/cpp/qtjambi_modules.pri @@ -39,6 +39,7 @@ contains(QT_CONFIG, qtjambi-script): SUBDIRS += qtjambi_script contains(QT_CONFIG, qtjambi-scripttools): SUBDIRS += qtjambi_scripttools contains(QT_CONFIG, qtjambi-multimedia): SUBDIRS += qtjambi_multimedia contains(QT_CONFIG, qtjambi-multimediawidgets): SUBDIRS += qtjambi_multimedia_widgets +contains(QT_CONFIG, qtjambi-spatialaudio): SUBDIRS += qtjambi_spatialaudio contains(QT_CONFIG, qtjambi-webengine): SUBDIRS += qtjambi_webengine contains(QT_CONFIG, qtjambi-webenginequick): SUBDIRS += qtjambi_webenginequick contains(QT_CONFIG, qtjambi-webenginecore): SUBDIRS += qtjambi_webenginecore diff --git a/src/cpp/qtjambi_opengl/qtjambi_opengl_util.cpp b/src/cpp/qtjambi_opengl/qtjambi_opengl_util.cpp index f36b477f..1735d88b 100644 --- a/src/cpp/qtjambi_opengl/qtjambi_opengl_util.cpp +++ b/src/cpp/qtjambi_opengl/qtjambi_opengl_util.cpp @@ -5,55 +5,41 @@ #include #include -// QOpenGLVersionFunctionsFactory::get() const -extern "C" Q_DECL_EXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_opengl_QOpenGLVersionFunctionsFactory_get) -(JNIEnv *__jni_env, - jclass, - jclass type, - jobject _context) -{ - jobject _result{nullptr}; - QTJAMBI_TRY{ - QOpenGLContext *context = qtjambi_to_object(__jni_env, _context); - //QAbstractOpenGLFunctions* __qt_return_value = nullptr; - QString className = qtjambi_class_name(__jni_env, type); - if(className == "io.qt.opengl.QOpenGLFunctions_ES2"){ +QAbstractOpenGLFunctions* qtjambi_QOpenGLVersionFunctionsFactory_get(JNIEnv *__jni_env, jclass type, QOpenGLContext* context){ + //QAbstractOpenGLFunctions* __qt_return_value = nullptr; + QString className = qtjambi_class_name(__jni_env, type); + if(className == "io.qt.opengl.QOpenGLFunctions_ES2"){ #if defined(QT_OPENGL_ES_2) - return qtjambi_cast(__jni_env, QOpenGLVersionFunctionsFactory::get(context)); + return QOpenGLVersionFunctionsFactory::get(context); #else - }else if(className.startsWith("io.qt.opengl.QOpenGLFunctions_")){ - className = className.mid(30); - auto idx = className.indexOf('_'); - if(idx>0){ - bool ok = false; - int majorVersion = className.left(idx).toInt(&ok); + }else if(className.startsWith("io.qt.opengl.QOpenGLFunctions_")){ + className = className.mid(30); + auto idx = className.indexOf('_'); + if(idx>0){ + bool ok = false; + int majorVersion = QStringView(className).left(idx).toInt(&ok); + if(ok){ + className = className.mid(idx+1); + QSurfaceFormat::OpenGLContextProfile profile = QSurfaceFormat::NoProfile; + if(className.endsWith("_Core")){ + className = className.chopped(5); + profile = QSurfaceFormat::CoreProfile; + }else if(className.endsWith("_Compatibility")){ + className = className.chopped(14); + profile = QSurfaceFormat::CompatibilityProfile; + } + ok = false; + int minorVersion = className.toInt(&ok); if(ok){ - className = className.mid(idx+1); - QSurfaceFormat::OpenGLContextProfile profile = QSurfaceFormat::NoProfile; - if(className.endsWith("_Core")){ - className = className.chopped(5); - profile = QSurfaceFormat::CoreProfile; - }else if(className.endsWith("_Compatibility")){ - className = className.chopped(14); - profile = QSurfaceFormat::CompatibilityProfile; - } - ok = false; - int minorVersion = className.toInt(&ok); - if(ok){ - QOpenGLVersionProfile version; - version.setProfile(profile); - version.setVersion(majorVersion, minorVersion); - _result = qtjambi_cast(__jni_env, QOpenGLVersionFunctionsFactory::get(version, context)); - } + QOpenGLVersionProfile version; + version.setProfile(profile); + version.setVersion(majorVersion, minorVersion); + return QOpenGLVersionFunctionsFactory::get(version, context); } } -#endif } - //if(!__jni_env->IsInstanceOf(__java_return_value, type)) - // __java_return_value = nullptr; - }QTJAMBI_CATCH(const JavaException& exn){ - exn.raiseInJava(__jni_env); - }QTJAMBI_TRY_END - return _result; +#endif + } + return nullptr; } diff --git a/src/cpp/qtjambi_qml/qmlcreatorfunction.cpp b/src/cpp/qtjambi_qml/qmlcreatorfunction.cpp index b60cdb3c..1d0a7e28 100644 --- a/src/cpp/qtjambi_qml/qmlcreatorfunction.cpp +++ b/src/cpp/qtjambi_qml/qmlcreatorfunction.cpp @@ -149,17 +149,12 @@ CreatorFunction creatorFunction(JNIEnv * env, const QMetaObject *meta_object, jc typedef QHash> MetaDataHash; Q_GLOBAL_STATIC(MetaDataHash, gMetaDataHash) -void* creatorFunctionMetaData(JNIEnv * env, const QMetaObject *meta_object, jclass clazz, jmethodID constructor, size_t objectSize, int psCast, int vsCast, int viCast){ - hash_type hash = 1; - hash = 31 * hash + uint(qtjambi_java_object_hashcode(env, clazz)); - hash = 31 * hash + qHash(qint64(constructor)); - hash = 31 * hash + qHash(psCast); - hash = 31 * hash + qHash(vsCast); - hash = 31 * hash + qHash(viCast); +void* creatorFunctionMetaData(JNIEnv * env, const QMetaObject *meta_object, jclass clazz, jmethodID constructor, size_t objectSize, int psCast, int vsCast, int viCast, int fhCast){ + hash_type hash = qHashMulti(0, qtjambi_java_object_hashcode(env, clazz), qint64(constructor), psCast, vsCast, viCast, fhCast); if(gMetaDataHash->contains(hash)){ return (*gMetaDataHash)[hash]; }else{ - (*gMetaDataHash)[hash] = QSharedDataPointer(new CreatorFunctionMetaData{QSharedData(), {env, clazz}, meta_object, constructor, objectSize, psCast, vsCast, viCast}); + (*gMetaDataHash)[hash] = QSharedDataPointer(new CreatorFunctionMetaData{QSharedData(), {env, clazz}, meta_object, constructor, objectSize, psCast, vsCast, viCast, fhCast}); return (*gMetaDataHash)[hash]; } } diff --git a/src/cpp/qtjambi_qml/qmlcreatorfunction.h b/src/cpp/qtjambi_qml/qmlcreatorfunction.h index c995a730..e4be4893 100644 --- a/src/cpp/qtjambi_qml/qmlcreatorfunction.h +++ b/src/cpp/qtjambi_qml/qmlcreatorfunction.h @@ -48,9 +48,10 @@ struct CreatorFunctionMetaData : QSharedData{ int psCast; int vsCast; int viCast; + int fhCast; }; -void* creatorFunctionMetaData(JNIEnv * env, const QMetaObject *meta_object, jclass clazz, jmethodID constructor, size_t objectSize, int psCast, int vsCast, int viCast); +void* creatorFunctionMetaData(JNIEnv * env, const QMetaObject *meta_object, jclass clazz, jmethodID constructor, size_t objectSize, int psCast, int vsCast, int viCast, int fhCast); void createQmlObject(void* placement,void* metaData); #endif diff --git a/src/cpp/qtjambi_qml/qmlregistry.cpp b/src/cpp/qtjambi_qml/qmlregistry.cpp index 0744813d..fcbbcc64 100644 --- a/src/cpp/qtjambi_qml/qmlregistry.cpp +++ b/src/cpp/qtjambi_qml/qmlregistry.cpp @@ -75,8 +75,12 @@ int valueInterceptorCast(JNIEnv *, jclass){ return -1; } -int registerQmlListType(const QString& javaName){ - QByteArray listName = "QQmlListProperty<" + javaName.toLatin1().replace(".", "::").replace("/", "::") + '>'; +int finalizerHookCast(JNIEnv *, jclass){ + return -1; +} + +int registerQQmlListPropertyAsQmlMetaType(const QString& javaName){ + QByteArray listName = "QQmlListProperty<" + javaName.toLatin1().replace(".", "::").replace("$", "::").replace("/", "::") + '>'; #if QT_VERSION < QT_VERSION_CHECK(6,0,0) return QMetaType::registerNormalizedType(listName, QtMetaTypePrivate::QMetaTypeFunctionHelper >::Destruct, @@ -155,9 +159,9 @@ int registerQmlListType(const QString& javaName){ /** * this method is used by the qml wrapper */ -int registerQmlMetaType(const QString& javaName, const QMetaObject *meta_object) +int registerQObjectAsQmlMetaType(const QString& javaName, const QMetaObject *meta_object) { - QByteArray _javaName = javaName.toLatin1().replace(".", "::")+"*"; + QByteArray _javaName = javaName.toLatin1().replace(".", "::").replace("$", "::")+"*"; #if QT_VERSION < QT_VERSION_CHECK(6,0,0) int definedType = QMetaType::type(_javaName); @@ -209,68 +213,241 @@ jmethodID findConstructor(JNIEnv * env, jclass clazz, const QString& javaName){ superClassConstructor = resolveMethod(env, "", "(Lio/qt/core/QObject$QDeclarativeConstructor;)V", clazz); }QTJAMBI_CATCH_ANY{}QTJAMBI_TRY_END }else{ - JavaException::raiseIllegalAccessException(env, qPrintable(QString("Class %1 cannot be registered as Qml type since it does not inherit a Qt class.").arg(QString(javaName).replace(QLatin1Char('$'), QLatin1Char('.')))) QTJAMBI_STACKTRACEINFO ); + JavaException::raiseIllegalAccessException(env, qPrintable(QStringLiteral("Class %1 cannot be registered as Qml type since it does not inherit a Qt class.").arg(QString(javaName).replace(QLatin1Char('$'), QLatin1Char('.')))) QTJAMBI_STACKTRACEINFO ); } if(!constructor){ if(superClassConstructor){ - JavaException::raiseIllegalAccessException(env, qPrintable(QString("Class must offer the constructor %1(QDeclarativeConstructor) to register as Qml type.").arg(QString(javaName).replace(QLatin1Char('$'), QLatin1Char('.')))) QTJAMBI_STACKTRACEINFO ); + JavaException::raiseIllegalAccessException(env, qPrintable(QStringLiteral("Class must offer the constructor %1(QDeclarativeConstructor) to register as Qml type.").arg(QString(javaName).replace(QLatin1Char('$'), QLatin1Char('.')))) QTJAMBI_STACKTRACEINFO ); }else{ QString superClassName = qtjambi_class_name(env, generatedSuperclass).replace(QLatin1Char('$'), QLatin1Char('.')); - JavaException::raiseIllegalAccessException(env, qPrintable(QString("Class %1 cannot be registered as Qml type because its super class %2 is excluded.").arg(QString(javaName).replace(QLatin1Char('$'), QLatin1Char('.'))).arg(superClassName)) QTJAMBI_STACKTRACEINFO ); + JavaException::raiseIllegalAccessException(env, qPrintable(QStringLiteral("Class %1 cannot be registered as Qml type because its super class %2 is excluded.").arg(QString(javaName).replace(QLatin1Char('$'), QLatin1Char('.')), superClassName)) QTJAMBI_STACKTRACEINFO ); } }else{ if(!superClassConstructor){ QString superClassName = qtjambi_class_name(env, generatedSuperclass).replace(QLatin1Char('$'), QLatin1Char('.')); - JavaException::raiseIllegalAccessException(env, qPrintable(QString("Class %1 cannot be registered as Qml type because its super class %2 is excluded.").arg(QString(javaName).replace(QLatin1Char('$'), QLatin1Char('.'))).arg(superClassName)) QTJAMBI_STACKTRACEINFO ); + JavaException::raiseIllegalAccessException(env, qPrintable(QStringLiteral("Class %1 cannot be registered as Qml type because its super class %2 is excluded.").arg(QString(javaName).replace(QLatin1Char('$'), QLatin1Char('.')), superClassName)) QTJAMBI_STACKTRACEINFO ); } } return constructor; } -/* - * Class: io_qt_qml_QtQml - * Method: qmlRegisterType - * Signature: (Ljava/lang/Class;)I - */ -extern "C" Q_DECL_EXPORT jint JNICALL Java_io_qt_qml_QtQml_qmlRegisterType__Ljava_lang_Class_2 - (JNIEnv * env, jclass, jclass clazz){ - env->EnsureLocalCapacity(300); - jint _result{-1}; - QTJAMBI_TRY{ - int objectSize = int(qtjambi_extended_size_for_class(env, clazz)); - QString javaName = qtjambi_class_name(env, clazz); - const QMetaObject *meta_object = qtjambi_metaobject_for_class(env, clazz); - if(!meta_object){ - jclass closestClass = resolveClosestQtSuperclass(env, clazz); - if(closestClass){ - const QMetaObject *original_meta_object = qtjambi_metaobject_for_class(env, closestClass); - meta_object = qtjambi_metaobject_for_class(env, clazz, original_meta_object); +struct QmlTypeRegistractionData{ + QString javaName; + int typeId = 0; + int listId = 0; + int objectSize = 0; + int psCast = 0; + int vsCast = 0; + int viCast = 0; + int fhCast = 0; + const QMetaObject *meta_object = nullptr; + jmethodID constructor = 0; +#if QT_VERSION >= QT_VERSION_CHECK(6,0,0) + void (*create)(void *,void *) = nullptr; + void *userdata = nullptr; +#else + void (*create)(void *) = nullptr; +#endif + QQmlAttachedPropertiesFunc attachedPropertiesFunction = nullptr; + const QMetaObject *attachedPropertiesMetaObject = nullptr; +}; + +enum Skip{ + Creator = 0x01, + AttachedProperties = 0x02, + MetaObject = 0x04, + ObjectSize = 0x08, +}; +typedef QFlags Skipping; + +#if QT_VERSION >= QT_VERSION_CHECK(6,0,0) +void createQmlValue(void* placement,void* metaData){ + const QtPrivate::QMetaTypeInterface* iface = reinterpret_cast(metaData); + Q_ASSERT(iface->defaultCtr); + iface->defaultCtr(iface, placement); +} +#endif + +QmlTypeRegistractionData registerQmlType(JNIEnv *env, jclass clazz, const char* qmlName, Skipping skip = {}){ + Q_UNUSED(qmlName) + QmlTypeRegistractionData data; + data.javaName = qtjambi_class_name(env, clazz); + data.psCast = parserStatusCast(env, clazz); + data.vsCast = valueSourceCast(env, clazz); + data.viCast = valueInterceptorCast(env, clazz); +#if QT_VERSION >= QT_VERSION_CHECK(6,3,0) + data.fhCast = finalizerHookCast(env, clazz); +#endif + bool isQObject = Java::QtCore::QObject::isAssignableFrom(env, clazz); + if(!isQObject){ +#if QT_VERSION >= QT_VERSION_CHECK(6,0,0) + if (qtjambi_find_QmlAttachedProperties(env, clazz)) { + JavaException::raiseIllegalArgumentException(env, qPrintable(QStringLiteral("%1 is not a QObject, but has attached properties. This won't work.").arg(data.javaName)) QTJAMBI_STACKTRACEINFO ); + } + QMetaType typeId(qtjambi_register_metatype(env, clazz, data.javaName.replace(".", "/"))); + data.typeId = typeId.id(); + if(data.typeId==0){ + JavaException::raiseIllegalArgumentException(env, qPrintable(QStringLiteral("%1 is not a valid Qt value type. Valid value tyoes define a default constructor as well as a clone method and implement java.lang.Cloneable.").arg(data.javaName)) QTJAMBI_STACKTRACEINFO ); + } + QString typeName = QLatin1String(qmlName); + if (!typeName.isEmpty()) { + if(typeName.at(0).isUpper()){ + JavaException::raiseIllegalArgumentException(env, qPrintable(QStringLiteral("Invalid QML %1 name \"%2\"; value type names should begin with a lowercase letter").arg(data.javaName, typeName)) QTJAMBI_STACKTRACEINFO ); + } + int typeNameLen = typeName.length(); + for (int ii = 0; ii < typeNameLen; ++ii) { + if (!(typeName.at(ii).isLetterOrNumber() || typeName.at(ii) == u'_')) { + JavaException::raiseIllegalArgumentException(env, qPrintable(QStringLiteral("Invalid QML %1 name \"%2\"").arg(data.javaName, typeName)) QTJAMBI_STACKTRACEINFO ); + } + } + } + data.listId = qtjambi_register_list_metatype(env, typeId); + if(!skip.testFlag(Skip::ObjectSize)){ + data.objectSize = int(typeId.sizeOf()); + } + if(!skip.testFlag(Skip::MetaObject)){ + data.meta_object = typeId.metaObject(); + } + if(!skip.testFlag(Skip::Creator)){ + data.create = &createQmlValue; + data.userdata = const_cast(typeId.iface()); + } +#else + JavaException::raiseIllegalArgumentException(env, qPrintable(QStringLiteral("%1 is not a QObject.").arg(data.javaName)) QTJAMBI_STACKTRACEINFO ); +#endif + }else{ + QString typeName = QLatin1String(qmlName); + if (!typeName.isEmpty()) { + if(typeName.at(0).isLower()){ + JavaException::raiseIllegalArgumentException(env, qPrintable(QStringLiteral("Invalid QML %1 name \"%2\"; type names must begin with an uppercase letter").arg(data.javaName, typeName)) QTJAMBI_STACKTRACEINFO ); + } + int typeNameLen = typeName.length(); + for (int ii = 0; ii < typeNameLen; ++ii) { + if (!(typeName.at(ii).isLetterOrNumber() || typeName.at(ii) == u'_')) { + JavaException::raiseIllegalArgumentException(env, qPrintable(QStringLiteral("Invalid QML %1 name \"%2\"").arg(data.javaName, typeName)) QTJAMBI_STACKTRACEINFO ); + } + } + } + if(!skip.testFlag(Skip::ObjectSize)){ + data.objectSize = int(qtjambi_extended_size_for_class(env, clazz)); + } + if(!skip.testFlag(Skip::MetaObject)){ + data.meta_object = qtjambi_metaobject_for_class(env, clazz); + if(!data.meta_object){ + jclass closestClass = resolveClosestQtSuperclass(env, clazz); + if(closestClass){ + const QMetaObject *original_meta_object = qtjambi_metaobject_for_class(env, closestClass); + data.meta_object = qtjambi_metaobject_for_class(env, clazz, original_meta_object); + } + } + } + data.typeId = registerQObjectAsQmlMetaType(data.javaName, data.meta_object); + data.listId = registerQQmlListPropertyAsQmlMetaType(data.javaName); + if(!skip.testFlag(Skip::Creator)){ + data.constructor = findConstructor(env, clazz, data.javaName); + if (!Java::QtCore::QObject::isAssignableFrom(env, clazz) || !data.constructor) { + JavaException::raiseIllegalArgumentException(env, qPrintable(QStringLiteral("%1 is neither a QObject, nor default- and copy-constructible. You should not use it as a QML type.").arg(data.javaName)) QTJAMBI_STACKTRACEINFO ); + } +#if QT_VERSION >= QT_VERSION_CHECK(6,0,0) + data.create = &createQmlObject; + data.userdata = creatorFunctionMetaData(env, data.meta_object, clazz, data.constructor, data.objectSize, data.psCast, data.vsCast, data.viCast, data.fhCast); +#else + data.create = creatorFunction(env, data.meta_object, clazz, data.constructor, data.objectSize, data.psCast, data.vsCast, data.viCast); +#endif + } + if(!skip.testFlag(Skip::AttachedProperties)){ + jobject method = qtjambi_find_QmlAttachedProperties(env, clazz); + if (!Java::QtCore::QObject::isAssignableFrom(env, clazz) && method) { + JavaException::raiseIllegalArgumentException(env, qPrintable(QStringLiteral("%1 is not a QObject, but has attached properties. This won't work.").arg(data.javaName)) QTJAMBI_STACKTRACEINFO ); } + data.attachedPropertiesFunction = attachedPropertiesFunc(env, clazz, method); + data.attachedPropertiesMetaObject = attachedPropertiesMetaObject(env, method); } - jobject method = qtjambi_find_QmlAttachedProperties(env, clazz); + } + return data; +} + +QObject* qtjambi_qmlAttachedPropertiesObject(JNIEnv *env, jclass clazz, const QObject* obj, bool create){ + const QMetaObject *meta_object = qtjambi_metaobject_for_class(env, clazz); + if(!meta_object){ + jclass closestClass = resolveClosestQtSuperclass(env, clazz); + if(closestClass){ + const QMetaObject *original_meta_object = qtjambi_metaobject_for_class(env, closestClass); + meta_object = qtjambi_metaobject_for_class(env, clazz, original_meta_object); + } + } +#if QT_VERSION < QT_VERSION_CHECK(5,14,0) + int idx = -1; + return QtQml::qmlAttachedPropertiesObject(&idx, const_cast(obj), meta_object, create); +#else + const auto func = qmlAttachedPropertiesFunction(nullptr, meta_object); + return qmlAttachedPropertiesObject(const_cast(obj), func, create); +#endif +} + +#if QT_VERSION >= QT_VERSION_CHECK(6,0,0) + +struct MetaContainerInterfaceExtractor : QMetaContainer{ + static inline const QtMetaContainerPrivate::QMetaSequenceInterface * getInterface(const QMetaSequence& m){ + const QtMetaContainerPrivate::QMetaContainerInterface * iface = reinterpret_cast(&m)->d_ptr; + return reinterpret_cast(iface); + } + static inline const QtMetaContainerPrivate::QMetaAssociationInterface * getInterface(const QMetaAssociation& m){ + const QtMetaContainerPrivate::QMetaContainerInterface * iface = reinterpret_cast(&m)->d_ptr; + return reinterpret_cast(iface); + } +}; + +int qtjambi_qmlRegisterAnonymousSequentialContainer(JNIEnv *env, jobject containerType, const char* uri, int versionMajor){ + QMetaType metaType = qtjambi_cast(env, containerType); + if(!QMetaType::canConvert(metaType, QMetaType::fromType())){ + JavaException::raiseIllegalArgumentException(env, "Not a valid container type." QTJAMBI_STACKTRACEINFO ); + } + QQmlPrivate::RegisterSequentialContainer type = { + 0, + uri, + QTypeRevision::fromMajorVersion(versionMajor), + nullptr, + metaType, + QVariant(metaType).value(), + QTypeRevision::zero() + }; + + return QQmlPrivate::qmlregister(QQmlPrivate::SequentialContainerRegistration, &type); +} +#endif + +int qtjambi_qmlRegisterAnonymousType(JNIEnv *env, jclass clazz, const char* uri, int versionMajor){ +#if QT_VERSION < QT_VERSION_CHECK(5,14,0) + Q_UNUSED(clazz) + Q_UNUSED(uri) + Q_UNUSED(versionMajor) + JavaException::raiseQNoImplementationException(env, "qmlRegisterAnonymousType() is not available in Qt versions older than 5.14" QTJAMBI_STACKTRACEINFO); +#else + QmlTypeRegistractionData data = registerQmlType(env, clazz, nullptr, Skipping(Creator | ObjectSize)); #if QT_VERSION < QT_VERSION_CHECK(6,0,0) QQmlPrivate::RegisterType type = { /* int version */ 0, - /*int typeId*/ registerQmlMetaType(javaName, meta_object), - /*int listId*/ registerQmlListType(javaName), - /*int objectSize*/ objectSize, + /*int typeId*/ data.typeId, + /*int listId*/ data.listId, + /*int objectSize*/ 0, /*void (*create)(void *)*/ nullptr, /*QString noCreationReason*/ QString(), - /*const char *uri*/ nullptr, - /*int versionMajor*/ 0, + /*const char *uri*/ uri, + /*int versionMajor*/ int(versionMajor), /*int versionMinor*/ 0, /*const char *elementName*/ nullptr, - /*const QMetaObject *metaObject*/ meta_object, + /*const QMetaObject *metaObject*/ data.meta_object, - /*QQmlAttachedPropertiesFunc attachedPropertiesFunction*/ attachedPropertiesFunc(env, clazz, method), - /*const QMetaObject *attachedPropertiesMetaObject*/ attachedPropertiesMetaObject(env, method), + /*QQmlAttachedPropertiesFunc attachedPropertiesFunction*/ data.attachedPropertiesFunction, + /*const QMetaObject *attachedPropertiesMetaObject*/ data.attachedPropertiesMetaObject, - /*int parserStatusCast*/ parserStatusCast(env, clazz), - /*int valueSourceCast*/ valueSourceCast(env, clazz), - /*int valueInterceptorCast*/ valueInterceptorCast(env, clazz), + /*int parserStatusCast*/ data.psCast, + /*int valueSourceCast*/ data.vsCast, + /*int valueInterceptorCast*/ data.viCast, /*QObject *(*extensionObjectCreate)(QObject *)*/ nullptr, /*const QMetaObject *extensionMetaObject*/ nullptr, @@ -278,1603 +455,1171 @@ extern "C" Q_DECL_EXPORT jint JNICALL Java_io_qt_qml_QtQml_qmlRegisterType__Ljav /*QQmlCustomParser *customParser*/ nullptr, /*int revision*/ 0 }; - #else QQmlPrivate::RegisterType type = { +#if QT_VERSION >= QT_VERSION_CHECK(6,3,0) + /* int structVersion */ 1, +#else /* int structVersion */ 0, +#endif + + /* QMetaType typeId */ QMetaType(data.typeId), + /* QMetaType listId */ QMetaType(data.listId), - /*int typeId*/ QMetaType(registerQmlMetaType(javaName, meta_object)), - /*int listId*/ QMetaType(registerQmlListType(javaName)), - /*int objectSize*/ objectSize, + /*int objectSize*/ 0, /*void (*create)(void *,void *)*/ nullptr, /*void *userdata*/ nullptr, /*QString noCreationReason*/ QString(), /*QVariant (*createValueType)(const QJSValue &);*/ nullptr, - /*const char *uri*/ nullptr, - /*QTypeRevision version*/ QTypeRevision::zero(), + + /*const char *uri*/ uri, + /*int versionMajor*/ QTypeRevision::fromMajorVersion(versionMajor), /*const char *elementName*/ nullptr, - /*const QMetaObject *metaObject*/ meta_object, + /*const QMetaObject *metaObject*/ data.meta_object, - /*QQmlAttachedPropertiesFunc attachedPropertiesFunction*/ attachedPropertiesFunc(env, clazz, method), - /*const QMetaObject *attachedPropertiesMetaObject*/ attachedPropertiesMetaObject(env, method), + /*QQmlAttachedPropertiesFunc attachedPropertiesFunction*/ data.attachedPropertiesFunction, + /*const QMetaObject *attachedPropertiesMetaObject*/ data.attachedPropertiesMetaObject, - /*int parserStatusCast*/ parserStatusCast(env, clazz), - /*int valueSourceCast*/ valueSourceCast(env, clazz), - /*int valueInterceptorCast*/ valueInterceptorCast(env, clazz), + /*int parserStatusCast*/ data.psCast, + /*int valueSourceCast*/ data.vsCast, + /*int valueInterceptorCast*/ data.viCast, /*QObject *(*extensionObjectCreate)(QObject *)*/ nullptr, /*const QMetaObject *extensionMetaObject*/ nullptr, /*QQmlCustomParser *customParser*/ nullptr, /*int revision*/ QTypeRevision::zero() +#if QT_VERSION >= QT_VERSION_CHECK(6,3,0) + ,/*int finalizerCast*/data.fhCast +#endif }; - #endif - _result = QQmlPrivate::qmlregister(QQmlPrivate::TypeRegistration, &type); - }QTJAMBI_CATCH(const JavaException& exn){ - exn.raiseInJava(env); - }QTJAMBI_TRY_END - return _result; + return QQmlPrivate::qmlregister(QQmlPrivate::TypeRegistration, &type); +#endif } -/* - * Class: io_qt_qml_QtQml - * Method: qmlRegisterTypeNotAvailable - * Signature: (Ljava/lang/String;IILjava/lang/String;Ljava/lang/String;)I - */ -extern "C" Q_DECL_EXPORT jint JNICALL Java_io_qt_qml_QtQml_qmlRegisterTypeNotAvailable - (JNIEnv * env, jclass, jstring uri, jint versionMajor, jint versionMinor, jstring qmlName, jstring message){ - jint _result{-1}; - QTJAMBI_TRY{ - QByteArray _uri = qtjambi_to_qstring(env, uri).toLocal8Bit(); - QByteArray _qmlName = qtjambi_to_qstring(env, qmlName).toLocal8Bit(); - QString _message = qtjambi_to_qstring(env, message); - _result = qmlRegisterTypeNotAvailable(_uri.constData(), int(versionMajor), int(versionMinor), _qmlName.constData(), _message); - }QTJAMBI_CATCH(const JavaException& exn){ - exn.raiseInJava(env); - }QTJAMBI_TRY_END - return _result; -} +#if QT_VERSION >= QT_VERSION_CHECK(6,3,0) +int qtjambi_qmlRegisterAnonymousType(JNIEnv *env, jclass clazz, int metaObjectRevisionMinor, const char* uri, int versionMajor){ + if(!QTypeRevision::isValidSegment(metaObjectRevisionMinor)){ + JavaException::raiseIllegalAccessException(env, qPrintable(QString("Not a valid metaObjectRevision %1.").arg(metaObjectRevisionMinor)) QTJAMBI_STACKTRACEINFO ); + } + QmlTypeRegistractionData data = registerQmlType(env, clazz, nullptr, Skipping(Creator | ObjectSize)); -/* - * Class: io_qt_qml_QtQml - * Method: qmlRegisterUncreatableType - * Signature: (Ljava/lang/Class;Ljava/lang/String;IILjava/lang/String;Ljava/lang/String;)I - */ -extern "C" Q_DECL_EXPORT jint JNICALL Java_io_qt_qml_QtQml_qmlRegisterUncreatableType__Ljava_lang_Class_2Ljava_lang_String_2IILjava_lang_String_2Ljava_lang_String_2 - (JNIEnv * env, jclass, jclass clazz, jstring uri, jint versionMajor, jint versionMinor, jstring qmlName, jstring reason){ - jint _result{-1}; - QTJAMBI_TRY{ - QString javaName = qtjambi_class_name(env, clazz); - QByteArray _uri = qtjambi_to_qstring(env, uri).toLocal8Bit(); - QByteArray _qmlName = qtjambi_to_qstring(env, qmlName).toLocal8Bit(); - - const QMetaObject *meta_object = qtjambi_metaobject_for_class(env, clazz); - if(!meta_object){ - jclass closestClass = resolveClosestQtSuperclass(env, clazz); - if(closestClass){ - const QMetaObject *original_meta_object = qtjambi_metaobject_for_class(env, closestClass); - meta_object = qtjambi_metaobject_for_class(env, clazz, original_meta_object); - } - } - jobject method = qtjambi_find_QmlAttachedProperties(env, clazz); + QQmlPrivate::RegisterType type = { + /* int structVersion */ 1, -#if QT_VERSION < QT_VERSION_CHECK(6,0,0) - QQmlPrivate::RegisterType type = { - /* int version */ 1, - - /*int typeId*/ registerQmlMetaType(javaName, meta_object), - /*int listId*/ registerQmlListType(javaName), - /*int objectSize*/ 0, - /*void (*create)(void *)*/ nullptr, - /*QString noCreationReason*/ qtjambi_to_qstring(env, reason), - - /*const char *uri*/ _uri.constData(), - /*int versionMajor*/ int(versionMajor), - /*int versionMinor*/ int(versionMinor), - /*const char *elementName*/ _qmlName.constData(), - /*const QMetaObject *metaObject*/ meta_object, - - /*QQmlAttachedPropertiesFunc attachedPropertiesFunction*/ attachedPropertiesFunc(env, clazz, method), - /*const QMetaObject *attachedPropertiesMetaObject*/ attachedPropertiesMetaObject(env, method), - - /*int parserStatusCast*/ parserStatusCast(env, clazz), - /*int valueSourceCast*/ valueSourceCast(env, clazz), - /*int valueInterceptorCast*/ valueInterceptorCast(env, clazz), - - /*QObject *(*extensionObjectCreate)(QObject *)*/ nullptr, - /*const QMetaObject *extensionMetaObject*/ nullptr, - - /*QQmlCustomParser *customParser*/ nullptr, - /*int revision*/ 0 - }; -#else - QQmlPrivate::RegisterType type = { - /* int structVersion */ 0, + /* QMetaType typeId */ QMetaType(data.typeId), + /* QMetaType listId */ QMetaType(data.listId), - /*int typeId*/ QMetaType(registerQmlMetaType(javaName, meta_object)), - /*int listId*/ QMetaType(registerQmlListType(javaName)), - /*int objectSize*/ 0, - /*void (*create)(void *,void *)*/ nullptr, - /*void *userdata*/ nullptr, - /*QString noCreationReason*/ qtjambi_to_qstring(env, reason), + /*int objectSize*/ 0, + /*void (*create)(void *,void *)*/ nullptr, + /*void *userdata*/ nullptr, + /*QString noCreationReason*/ QString(), - /*QVariant (*createValueType)(const QJSValue &);*/ nullptr, + /*QVariant (*createValueType)(const QJSValue &);*/ nullptr, - /*const char *uri*/ _uri.constData(), - /*QTypeRevision version*/ QTypeRevision::fromVersion(versionMajor, versionMinor), - /*const char *elementName*/ _qmlName.constData(), - /*const QMetaObject *metaObject*/ meta_object, + /*const char *uri*/ uri, + /*int versionMajor*/ QTypeRevision::fromMajorVersion(versionMajor), + /*const char *elementName*/ nullptr, + /*const QMetaObject *metaObject*/ data.meta_object, - /*QQmlAttachedPropertiesFunc attachedPropertiesFunction*/ attachedPropertiesFunc(env, clazz, method), - /*const QMetaObject *attachedPropertiesMetaObject*/ attachedPropertiesMetaObject(env, method), + /*QQmlAttachedPropertiesFunc attachedPropertiesFunction*/ data.attachedPropertiesFunction, + /*const QMetaObject *attachedPropertiesMetaObject*/ data.attachedPropertiesMetaObject, - /*int parserStatusCast*/ parserStatusCast(env, clazz), - /*int valueSourceCast*/ valueSourceCast(env, clazz), - /*int valueInterceptorCast*/ valueInterceptorCast(env, clazz), + /*int parserStatusCast*/ data.psCast, + /*int valueSourceCast*/ data.vsCast, + /*int valueInterceptorCast*/ data.viCast, - /*QObject *(*extensionObjectCreate)(QObject *)*/ nullptr, - /*const QMetaObject *extensionMetaObject*/ nullptr, + /*QObject *(*extensionObjectCreate)(QObject *)*/ nullptr, + /*const QMetaObject *extensionMetaObject*/ nullptr, - /*QQmlCustomParser *customParser*/ nullptr, - /*int revision*/ QTypeRevision::zero() - }; + /*QQmlCustomParser *customParser*/ nullptr, + /*int revision*/ QTypeRevision::fromMinorVersion(metaObjectRevisionMinor) + ,/*int finalizerCast*/data.fhCast + }; + return QQmlPrivate::qmlregister(QQmlPrivate::TypeRegistration, &type); +} #endif - _result = QQmlPrivate::qmlregister(QQmlPrivate::TypeRegistration, &type); - }QTJAMBI_CATCH(const JavaException& exn){ - exn.raiseInJava(env); - }QTJAMBI_TRY_END - return _result; + +void qtjambi_qmlRegisterAnonymousTypesAndRevisions(JNIEnv *env, jclass clazz, const char* uri, int versionMajor){ + QmlTypeRegistractionData data = registerQmlType(env, clazz, nullptr); + + QQmlPrivate::RegisterTypeAndRevisions type = { +#if QT_VERSION < QT_VERSION_CHECK(6,0,0) + 1, + /* int typeId */ data.typeId, + /* int listId */ data.listId, + data.objectSize, + /*void (*create)(void *)*/ data.create, + uri, + versionMajor, + data.meta_object, + data.meta_object, + /*QQmlAttachedPropertiesFunc attachedPropertiesFunction*/ data.attachedPropertiesFunction, + /*const QMetaObject *attachedPropertiesMetaObject*/ data.attachedPropertiesMetaObject, + data.psCast, + data.vsCast, + data.viCast, + nullptr, + nullptr, + nullptr +#else + 3, + /* QMetaType typeId */ QMetaType(data.typeId), + /* QMetaType listId */ QMetaType(data.listId), + data.objectSize, + /*void (*create)(void *,void *)*/ data.create, + nullptr, + nullptr, + uri, + QTypeRevision::fromMajorVersion(versionMajor), + data.meta_object, + data.meta_object, + /*QQmlAttachedPropertiesFunc attachedPropertiesFunction*/ data.attachedPropertiesFunction, + /*const QMetaObject *attachedPropertiesMetaObject*/ data.attachedPropertiesMetaObject, + + data.psCast, + data.vsCast, + data.viCast, + + nullptr, + nullptr, + + nullptr, + nullptr +#if QT_VERSION >= QT_VERSION_CHECK(6,3,0) + ,data.fhCast, + + true +#if QT_VERSION >= QT_VERSION_CHECK(6,4,0) + ,QMetaSequence() +#endif +#endif +#endif + }; + + // Initialize the extension so that we can find it by name or ID. + QQmlPrivate::qmlregister(QQmlPrivate::TypeAndRevisionsRegistration, &type); } -/* - * Class: io_qt_qml_QtQml - * Method: qmlRegisterUncreatableType - * Signature: (Ljava/lang/Class;ILjava/lang/String;IILjava/lang/String;Ljava/lang/String;)I - */ -extern "C" Q_DECL_EXPORT jint JNICALL Java_io_qt_qml_QtQml_qmlRegisterUncreatableType__Ljava_lang_Class_2ILjava_lang_String_2IILjava_lang_String_2Ljava_lang_String_2 - (JNIEnv * env, jclass, jclass clazz, jint metaObjectRevision, jstring uri, jint versionMajor, jint versionMinor, jstring qmlName, jstring reason){ - jint _result{-1}; - QTJAMBI_TRY{ - QString javaName = qtjambi_class_name(env, clazz); - QByteArray _uri = qtjambi_to_qstring(env, uri).toLocal8Bit(); - QByteArray _qmlName = qtjambi_to_qstring(env, qmlName).toLocal8Bit(); - - const QMetaObject *meta_object = qtjambi_metaobject_for_class(env, clazz); - if(!meta_object){ - jclass closestClass = resolveClosestQtSuperclass(env, clazz); - if(closestClass){ - const QMetaObject *original_meta_object = qtjambi_metaobject_for_class(env, closestClass); - meta_object = qtjambi_metaobject_for_class(env, clazz, original_meta_object); - } - } - jobject method = qtjambi_find_QmlAttachedProperties(env, clazz); +int qtjambi_qmlRegisterExtendedType(JNIEnv *env, jclass clazz, jclass extendedClazz, const char* uri, int versionMajor){ + QmlTypeRegistractionData data = registerQmlType(env, clazz, nullptr, Skipping(Creator | ObjectSize)); + QString extendedJavaName = qtjambi_class_name(env, extendedClazz); + jmethodID extendedConstructor(nullptr); + QTJAMBI_TRY_ANY{ + extendedConstructor = resolveMethod(env, "", "(Lio/qt/core/QObject;)V", extendedClazz); + }QTJAMBI_CATCH_ANY{}QTJAMBI_TRY_END + if(!extendedConstructor){ + JavaException::raiseIllegalAccessException(env, qPrintable(QStringLiteral("Class must offer the constructor %1(QObject) to register as Qml extended type.").arg(QString(extendedJavaName).replace(QLatin1Char('$'), QLatin1Char('.')))) QTJAMBI_STACKTRACEINFO ); + } + + const QMetaObject *extended_meta_object = qtjambi_metaobject_for_class(env, extendedClazz, nullptr); + if(!extended_meta_object){ + jclass closestClass = resolveClosestQtSuperclass(env, extendedClazz); + if(closestClass){ + const QMetaObject *original_meta_object = qtjambi_metaobject_for_class(env, closestClass); + extended_meta_object = qtjambi_metaobject_for_class(env, extendedClazz, original_meta_object); + } + } #if QT_VERSION < QT_VERSION_CHECK(6,0,0) - QQmlPrivate::RegisterType type = { - /* int version */ 1, - - /*int typeId*/ registerQmlMetaType(javaName, meta_object), - /*int listId*/ registerQmlListType(javaName), - /*int objectSize*/ 0, - /*void (*create)(void *)*/ nullptr, - /*QString noCreationReason*/ qtjambi_to_qstring(env, reason), - - /*const char *uri*/ _uri.constData(), - /*int versionMajor*/ int(versionMajor), - /*int versionMinor*/ int(versionMinor), - /*const char *elementName*/ _qmlName.constData(), - /*const QMetaObject *metaObject*/ meta_object, - - /*QQmlAttachedPropertiesFunc attachedPropertiesFunction*/ attachedPropertiesFunc(env, clazz, method), - /*const QMetaObject *attachedPropertiesMetaObject*/ attachedPropertiesMetaObject(env, method), - - /*int parserStatusCast*/ parserStatusCast(env, clazz), - /*int valueSourceCast*/ valueSourceCast(env, clazz), - /*int valueInterceptorCast*/ valueInterceptorCast(env, clazz), - - /*QObject *(*extensionObjectCreate)(QObject *)*/ nullptr, - /*const QMetaObject *extensionMetaObject*/ nullptr, - - /*QQmlCustomParser *customParser*/ nullptr, - /*int revision*/ int(metaObjectRevision) - }; + QQmlPrivate::RegisterType type = { + /* int version */ 0, + + /*int typeId*/ data.typeId, + /*int listId*/ data.listId, + /*int objectSize*/ 0, + /*void (*create)(void *)*/ nullptr, + /*QString noCreationReason*/ QString(), + + /*const char *uri*/ uri, + /*int versionMajor*/ versionMajor, + /*int versionMinor*/ 0, + /*const char *elementName*/ nullptr, + /*const QMetaObject *metaObject*/ data.meta_object, + + /*QQmlAttachedPropertiesFunc attachedPropertiesFunction*/ data.attachedPropertiesFunction, + /*const QMetaObject *attachedPropertiesMetaObject*/ data.attachedPropertiesMetaObject, + + /*int parserStatusCast*/ data.psCast, + /*int valueSourceCast*/ data.vsCast, + /*int valueInterceptorCast*/ data.viCast, + + /*QObject *(*extensionObjectCreate)(QObject *)*/ createParentFunction(env, extendedClazz, extendedConstructor), + /*const QMetaObject *extensionMetaObject*/ extended_meta_object, + + /*QQmlCustomParser *customParser*/ nullptr, + /*int revision*/ 0 + }; +#else + QQmlPrivate::RegisterType type = { +#if QT_VERSION >= QT_VERSION_CHECK(6,3,0) + /* int structVersion */ 1, #else - QQmlPrivate::RegisterType type = { - /* int structVersion */ 0, + /* int structVersion */ 0, +#endif - /*int typeId*/ QMetaType(registerQmlMetaType(javaName, meta_object)), - /*int listId*/ QMetaType(registerQmlListType(javaName)), - /*int objectSize*/ 0, - /*void (*create)(void *,void *)*/ nullptr, - /*void *userdata*/ nullptr, - /*QString noCreationReason*/ qtjambi_to_qstring(env, reason), + /*int typeId*/ QMetaType(data.typeId), + /*int listId*/ QMetaType(data.listId), + /*int objectSize*/ 0, + /*void (*create)(void *,void *)*/ nullptr, + /*void *userdata*/ nullptr, + /*QString noCreationReason*/ QString(), - /*QVariant (*createValueType)(const QJSValue &);*/ nullptr, + /*QVariant (*createValueType)(const QJSValue &);*/ nullptr, - /*const char *uri*/ _uri.constData(), - /*QTypeRevision version*/ QTypeRevision::fromVersion(versionMajor, versionMinor), - /*const char *elementName*/ _qmlName.constData(), - /*const QMetaObject *metaObject*/ meta_object, + /*const char *uri*/ uri, + /*int version*/ QTypeRevision::fromMajorVersion(versionMajor), + /*const char *elementName*/ nullptr, + /*const QMetaObject *metaObject*/ data.meta_object, - /*QQmlAttachedPropertiesFunc attachedPropertiesFunction*/ attachedPropertiesFunc(env, clazz, method), - /*const QMetaObject *attachedPropertiesMetaObject*/ attachedPropertiesMetaObject(env, method), + /*QQmlAttachedPropertiesFunc attachedPropertiesFunction*/ data.attachedPropertiesFunction, + /*const QMetaObject *attachedPropertiesMetaObject*/ data.attachedPropertiesMetaObject, - /*int parserStatusCast*/ parserStatusCast(env, clazz), - /*int valueSourceCast*/ valueSourceCast(env, clazz), - /*int valueInterceptorCast*/ valueInterceptorCast(env, clazz), + /*int parserStatusCast*/ data.psCast, + /*int valueSourceCast*/ data.vsCast, + /*int valueInterceptorCast*/ data.viCast, - /*QObject *(*extensionObjectCreate)(QObject *)*/ nullptr, - /*const QMetaObject *extensionMetaObject*/ nullptr, + /*QObject *(*extensionObjectCreate)(QObject *)*/ createParentFunction(env, extendedClazz, extendedConstructor), + /*const QMetaObject *extensionMetaObject*/ extended_meta_object, - /*QQmlCustomParser *customParser*/ nullptr, - /*int revision*/ QTypeRevision::fromMajorVersion(metaObjectRevision) - }; + /*QQmlCustomParser *customParser*/ nullptr, + /*int revision*/ QTypeRevision::zero() +#if QT_VERSION >= QT_VERSION_CHECK(6,3,0) + ,/*int finalizerCast*/data.fhCast #endif - _result = QQmlPrivate::qmlregister(QQmlPrivate::TypeRegistration, &type); - }QTJAMBI_CATCH(const JavaException& exn){ - exn.raiseInJava(env); - }QTJAMBI_TRY_END - return _result; + }; +#endif + return QQmlPrivate::qmlregister(QQmlPrivate::TypeRegistration, &type); } -/* - * Class: io_qt_qml_QtQml - * Method: qmlRegisterType - * Signature: (Ljava/lang/Class;Ljava/lang/String;IILjava/lang/String;)I - */ -extern "C" Q_DECL_EXPORT jint JNICALL Java_io_qt_qml_QtQml_qmlRegisterType__Ljava_lang_Class_2Ljava_lang_String_2IILjava_lang_String_2 - (JNIEnv * env, jclass, jclass clazz, jstring uri, jint versionMajor, jint versionMinor, jstring qmlName){ - env->EnsureLocalCapacity(300); - jint _result{-1}; - QTJAMBI_TRY{ - size_t objectSize = qtjambi_extended_size_for_class(env, clazz); - QByteArray _qmlName = qtjambi_to_qstring(env, qmlName).toLocal8Bit(); - QByteArray _uri = qtjambi_to_qstring(env, uri).toLocal8Bit(); - - QString javaName = qtjambi_class_name(env, clazz); - jmethodID constructor = findConstructor(env, clazz, javaName); - - const QMetaObject *meta_object = qtjambi_metaobject_for_class(env, clazz); - if(!meta_object){ - jclass closestClass = resolveClosestQtSuperclass(env, clazz); - if(closestClass){ - const QMetaObject *original_meta_object = qtjambi_metaobject_for_class(env, closestClass); - meta_object = qtjambi_metaobject_for_class(env, clazz, original_meta_object); - } - } - jobject method = qtjambi_find_QmlAttachedProperties(env, clazz); - int psCast = parserStatusCast(env, clazz); - int vsCast = valueSourceCast(env, clazz); - int viCast = valueInterceptorCast(env, clazz); +int qtjambi_qmlRegisterExtendedType(JNIEnv *env, jclass clazz, jclass extendedClazz, const char* uri, int versionMajor, int versionMinor, const char* qmlName){ + QmlTypeRegistractionData data = registerQmlType(env, clazz, qmlName, Skipping()); + QString extendedJavaName = qtjambi_class_name(env, extendedClazz); + jmethodID econstructor(nullptr); + QTJAMBI_TRY_ANY{ + econstructor = resolveMethod(env, "", "(Lio/qt/core/QObject;)V", extendedClazz); + }QTJAMBI_CATCH_ANY{}QTJAMBI_TRY_END + if(!econstructor){ + JavaException::raiseIllegalAccessException(env, qPrintable(QString("Class must offer the constructor %1(QObject) to register as Qml extended type.").arg(QString(extendedJavaName).replace(QLatin1Char('$'), QLatin1Char('.')))) QTJAMBI_STACKTRACEINFO ); + } + + const QMetaObject *extended_meta_object = qtjambi_metaobject_for_class(env, extendedClazz, nullptr); + if(!extended_meta_object){ + jclass closestClass = resolveClosestQtSuperclass(env, extendedClazz); + if(closestClass){ + const QMetaObject *original_meta_object = qtjambi_metaobject_for_class(env, closestClass); + extended_meta_object = qtjambi_metaobject_for_class(env, extendedClazz, original_meta_object); + } + } + if(!data.attachedPropertiesFunction){ + jobject method = qtjambi_find_QmlAttachedProperties(env, extendedClazz); + data.attachedPropertiesFunction = attachedPropertiesFunc(env, extendedClazz, method); + } #if QT_VERSION < QT_VERSION_CHECK(6,0,0) - QQmlPrivate::RegisterType type = { - /* int version */ 1, - - /*int typeId*/ registerQmlMetaType(javaName, meta_object), - /*int listId*/ registerQmlListType(javaName), - /*int objectSize*/ int(objectSize), - /*void (*create)(void *)*/ creatorFunction(env, meta_object, clazz, constructor, objectSize, psCast, vsCast, viCast), - /*QString noCreationReason*/ QString(), - - /*const char *uri*/ _uri.constData(), - /*int versionMajor*/ int(versionMajor), - /*int versionMinor*/ int(versionMinor), - /*const char *elementName*/ _qmlName.constData(), - /*const QMetaObject *metaObject*/ meta_object, - - /*QQmlAttachedPropertiesFunc attachedPropertiesFunction*/ attachedPropertiesFunc(env, clazz, method), - /*const QMetaObject *attachedPropertiesMetaObject*/ attachedPropertiesMetaObject(env, method), - - psCast, - vsCast, - viCast, - - /*QObject *(*extensionObjectCreate)(QObject *)*/ nullptr, - /*const QMetaObject *extensionMetaObject*/ nullptr, - - /*QQmlCustomParser *customParser*/ nullptr, - /*int revision*/ 0 - }; + QQmlPrivate::RegisterType type = { + /* int version */ 0, + + /*int typeId*/ data.typeId, + /*int listId*/ data.listId, + /*int objectSize*/ data.objectSize, + /*void (*create)(void *)*/ data.create, + /*QString noCreationReason*/ QString(), + + /*const char *uri*/ uri, + /*int versionMajor*/ int(versionMajor), + /*int versionMinor*/ int(versionMinor), + /*const char *elementName*/ qmlName, + /*const QMetaObject *metaObject*/ data.meta_object, + + /*QQmlAttachedPropertiesFunc attachedPropertiesFunction*/ data.attachedPropertiesFunction, + /*const QMetaObject *attachedPropertiesMetaObject*/ data.attachedPropertiesMetaObject, + + data.psCast, + data.vsCast, + data.viCast, + + /*QObject *(*extensionObjectCreate)(QObject *)*/ createParentFunction(env, extendedClazz, econstructor), + /*const QMetaObject *extensionMetaObject*/ extended_meta_object, + + /*QQmlCustomParser *customParser*/ nullptr, + /*int revision*/ 0 + }; +#else + QQmlPrivate::RegisterType type = { +#if QT_VERSION >= QT_VERSION_CHECK(6,3,0) + /* int structVersion */ 1, #else - QQmlPrivate::RegisterType type = { - /* int structVersion */ 0, + /* int structVersion */ 0, +#endif - /*int typeId*/ QMetaType(registerQmlMetaType(javaName, meta_object)), - /*int listId*/ QMetaType(registerQmlListType(javaName)), - /*int objectSize*/ int(objectSize), - /*void (*create)(void *,void *)*/ &createQmlObject, - /*void *userdata*/ creatorFunctionMetaData(env, meta_object, clazz, constructor, objectSize, psCast, vsCast, viCast), - /*QString noCreationReason*/ QString(), + /*int typeId*/ QMetaType(data.typeId), + /*int listId*/ QMetaType(data.listId), + /*int objectSize*/ data.objectSize, + /*void (*create)(void *,void *)*/ data.create, + /*void *userdata*/ data.userdata, + /*QString noCreationReason*/ QString(), - /*QVariant (*createValueType)(const QJSValue &);*/ nullptr, + /*QVariant (*createValueType)(const QJSValue &);*/ nullptr, - /*const char *uri*/ _uri.constData(), - /*QTypeRevision version*/ QTypeRevision::fromVersion(versionMajor, versionMinor), - /*const char *elementName*/ _qmlName.constData(), - /*const QMetaObject *metaObject*/ meta_object, + /*const char *uri*/ uri, + /*int version*/ QTypeRevision::fromVersion(versionMajor, versionMinor), + /*const char *elementName*/ qmlName, + /*const QMetaObject *metaObject*/ data.meta_object, - /*QQmlAttachedPropertiesFunc attachedPropertiesFunction*/ attachedPropertiesFunc(env, clazz, method), - /*const QMetaObject *attachedPropertiesMetaObject*/ attachedPropertiesMetaObject(env, method), + /*QQmlAttachedPropertiesFunc attachedPropertiesFunction*/ data.attachedPropertiesFunction, + /*const QMetaObject *attachedPropertiesMetaObject*/ data.attachedPropertiesMetaObject, - psCast, - vsCast, - viCast, + data.psCast, + data.vsCast, + data.viCast, - /*QObject *(*extensionObjectCreate)(QObject *)*/ nullptr, - /*const QMetaObject *extensionMetaObject*/ nullptr, + /*QObject *(*extensionObjectCreate)(QObject *)*/ createParentFunction(env, extendedClazz, econstructor), + /*const QMetaObject *extensionMetaObject*/ extended_meta_object, - /*QQmlCustomParser *customParser*/ nullptr, - /*int revision*/ QTypeRevision::zero() - }; + /*QQmlCustomParser *customParser*/ nullptr, + /*int revision*/ QTypeRevision::zero() +#if QT_VERSION >= QT_VERSION_CHECK(6,3,0) + ,/*int finalizerCast*/data.fhCast #endif - _result = QQmlPrivate::qmlregister(QQmlPrivate::TypeRegistration, &type); - }QTJAMBI_CATCH(const JavaException& exn){ - exn.raiseInJava(env); - }QTJAMBI_TRY_END - return _result; + }; +#endif + return QQmlPrivate::qmlregister(QQmlPrivate::TypeRegistration, &type); } -/* - * Class: io_qt_qml_QtQml - * Method: qmlRegisterType - * Signature: (Ljava/lang/Class;ILjava/lang/String;IILjava/lang/String;)I - */ -extern "C" Q_DECL_EXPORT jint JNICALL Java_io_qt_qml_QtQml_qmlRegisterType__Ljava_lang_Class_2ILjava_lang_String_2IILjava_lang_String_2 - (JNIEnv * env, jclass, jclass clazz, jint metaObjectRevision, jstring uri, jint versionMajor, jint versionMinor, jstring qmlName){ - env->EnsureLocalCapacity(300); - jint _result{-1}; - QTJAMBI_TRY{ - size_t objectSize = qtjambi_extended_size_for_class(env, clazz); - QByteArray _qmlName = qtjambi_to_qstring(env, qmlName).toLocal8Bit(); - QByteArray _uri = qtjambi_to_qstring(env, uri).toLocal8Bit(); - - QString javaName = qtjambi_class_name(env, clazz); - jmethodID constructor = findConstructor(env, clazz, javaName); - - const QMetaObject *meta_object = qtjambi_metaobject_for_class(env, clazz); - if(!meta_object){ - jclass closestClass = resolveClosestQtSuperclass(env, clazz); - if(closestClass){ - const QMetaObject *original_meta_object = qtjambi_metaobject_for_class(env, closestClass); - meta_object = qtjambi_metaobject_for_class(env, clazz, original_meta_object); - } - } - jobject method = qtjambi_find_QmlAttachedProperties(env, clazz); - int psCast = parserStatusCast(env, clazz); - int vsCast = valueSourceCast(env, clazz); - int viCast = valueInterceptorCast(env, clazz); +int qtjambi_qmlRegisterExtendedUncreatableType(JNIEnv *env, jclass clazz, jclass extendedClazz, const char* uri, int versionMajor, int versionMinor, const char* qmlName, QString reason){ + QmlTypeRegistractionData data = registerQmlType(env, clazz, qmlName, Skipping(Creator)); + QString extendedJavaName = qtjambi_class_name(env, extendedClazz); + jmethodID econstructor(nullptr); + QTJAMBI_TRY_ANY{ + econstructor = resolveMethod(env, "", "(Lio/qt/core/QObject;)V", extendedClazz); + }QTJAMBI_CATCH_ANY{}QTJAMBI_TRY_END + if(!econstructor){ + JavaException::raiseIllegalAccessException(env, qPrintable(QString("Class must offer the constructor %1(QObject) to register as Qml extended type.").arg(QString(extendedJavaName).replace(QLatin1Char('$'), QLatin1Char('.')))) QTJAMBI_STACKTRACEINFO ); + } + + const QMetaObject *extended_meta_object = qtjambi_metaobject_for_class(env, extendedClazz, nullptr); + if(!extended_meta_object){ + jclass closestClass = resolveClosestQtSuperclass(env, extendedClazz); + if(closestClass){ + const QMetaObject *original_meta_object = qtjambi_metaobject_for_class(env, closestClass); + extended_meta_object = qtjambi_metaobject_for_class(env, extendedClazz, original_meta_object); + } + } + if(!data.attachedPropertiesFunction){ + jobject method = qtjambi_find_QmlAttachedProperties(env, extendedClazz); + data.attachedPropertiesFunction = attachedPropertiesFunc(env, extendedClazz, method); + } #if QT_VERSION < QT_VERSION_CHECK(6,0,0) - QQmlPrivate::RegisterType type = { - /* int version */ 1, - - /*int typeId*/ registerQmlMetaType(javaName, meta_object), - /*int listId*/ registerQmlListType(javaName), - /*int objectSize*/ int(objectSize), - /*void (*create)(void *)*/ creatorFunction(env, meta_object, clazz, constructor, objectSize, psCast, vsCast, viCast), - /*QString noCreationReason*/ QString(), - - /*const char *uri*/ _uri.constData(), - /*int versionMajor*/ int(versionMajor), - /*int versionMinor*/ int(versionMinor), - /*const char *elementName*/ _qmlName.constData(), - /*const QMetaObject *metaObject*/ meta_object, - - /*QQmlAttachedPropertiesFunc attachedPropertiesFunction*/ attachedPropertiesFunc(env, clazz, method), - /*const QMetaObject *attachedPropertiesMetaObject*/ attachedPropertiesMetaObject(env, method), - - psCast, - vsCast, - viCast, - - /*QObject *(*extensionObjectCreate)(QObject *)*/ nullptr, - /*const QMetaObject *extensionMetaObject*/ nullptr, - - /*QQmlCustomParser *customParser*/ nullptr, - /*int revision*/ int(metaObjectRevision) - }; + QQmlPrivate::RegisterType type = { + /* int version */ 0, + + /*int typeId*/ data.typeId, + /*int listId*/ data.listId, + /*int objectSize*/ 0, + /*void (*create)(void *)*/ nullptr, + /*QString noCreationReason*/ reason, + + /*const char *uri*/ uri, + /*int versionMajor*/ int(versionMajor), + /*int versionMinor*/ int(versionMinor), + /*const char *elementName*/ qmlName, + /*const QMetaObject *metaObject*/ data.meta_object, + + /*QQmlAttachedPropertiesFunc attachedPropertiesFunction*/ data.attachedPropertiesFunction, + /*const QMetaObject *attachedPropertiesMetaObject*/ data.attachedPropertiesMetaObject, + + /*int parserStatusCast*/ data.psCast, + /*int valueSourceCast*/ data.vsCast, + /*int valueInterceptorCast*/ data.viCast, + + /*QObject *(*extensionObjectCreate)(QObject *)*/ createParentFunction(env, extendedClazz, econstructor), + /*const QMetaObject *extensionMetaObject*/ extended_meta_object, + + /*QQmlCustomParser *customParser*/ nullptr, + /*int revision*/ 0 + }; +#else + QQmlPrivate::RegisterType type = { +#if QT_VERSION >= QT_VERSION_CHECK(6,3,0) + /* int structVersion */ 1, #else - QQmlPrivate::RegisterType type = { - /* int structVersion */ 0, + /* int structVersion */ 0, +#endif - /*int typeId*/ QMetaType(registerQmlMetaType(javaName, meta_object)), - /*int listId*/ QMetaType(registerQmlListType(javaName)), - /*int objectSize*/ int(objectSize), - /*void (*create)(void *,void *)*/ &createQmlObject, - /*void *userdata*/ creatorFunctionMetaData(env, meta_object, clazz, constructor, objectSize, psCast, vsCast, viCast), - /*QString noCreationReason*/ QString(), + /* QMetaType typeId */ QMetaType(data.typeId), + /* QMetaType listId */ QMetaType(data.listId), + /*int objectSize*/ 0, + /*void (*create)(void *,void *)*/ nullptr, + /*void *userdata*/ nullptr, + /*QString noCreationReason*/ reason, - /*QVariant (*createValueType)(const QJSValue &);*/ nullptr, + /*QVariant (*createValueType)(const QJSValue &);*/ nullptr, - /*const char *uri*/ _uri.constData(), - /*QTypeRevision version*/ QTypeRevision::fromVersion(versionMajor, versionMinor), - /*const char *elementName*/ _qmlName.constData(), - /*const QMetaObject *metaObject*/ meta_object, + /*const char *uri*/ uri, + /*QTypeRevision version*/ QTypeRevision::fromVersion(versionMajor, versionMinor), + /*const char *elementName*/ qmlName, + /*const QMetaObject *metaObject*/ data.meta_object, - /*QQmlAttachedPropertiesFunc attachedPropertiesFunction*/ attachedPropertiesFunc(env, clazz, method), - /*const QMetaObject *attachedPropertiesMetaObject*/ attachedPropertiesMetaObject(env, method), + /*QQmlAttachedPropertiesFunc attachedPropertiesFunction*/ data.attachedPropertiesFunction, + /*const QMetaObject *attachedPropertiesMetaObject*/ data.attachedPropertiesMetaObject, - psCast, - vsCast, - viCast, + /*int parserStatusCast*/ data.psCast, + /*int valueSourceCast*/ data.vsCast, + /*int valueInterceptorCast*/ data.viCast, - /*QObject *(*extensionObjectCreate)(QObject *)*/ nullptr, - /*const QMetaObject *extensionMetaObject*/ nullptr, + /*QObject *(*extensionObjectCreate)(QObject *)*/ createParentFunction(env, extendedClazz, econstructor), + /*const QMetaObject *extensionMetaObject*/ extended_meta_object, - /*QQmlCustomParser *customParser*/ nullptr, - /*int revision*/ QTypeRevision::fromMajorVersion(metaObjectRevision) - }; + /*QQmlCustomParser *customParser*/ nullptr, + /*int revision*/ QTypeRevision::zero() +#if QT_VERSION >= QT_VERSION_CHECK(6,3,0) + ,/*int finalizerCast*/data.fhCast #endif - _result = QQmlPrivate::qmlregister(QQmlPrivate::TypeRegistration, &type); - }QTJAMBI_CATCH(const JavaException& exn){ - exn.raiseInJava(env); - }QTJAMBI_TRY_END - return _result; + }; +#endif + return QQmlPrivate::qmlregister(QQmlPrivate::TypeRegistration, &type); } -/* - * Class: io_qt_qml_QtQml - * Method: qmlRegisterRevision - * Signature: (Ljava/lang/Class;ILjava/lang/String;II)I - */ -extern "C" Q_DECL_EXPORT jint JNICALL Java_io_qt_qml_QtQml_qmlRegisterRevision - (JNIEnv * env, jclass, jclass clazz, jint metaObjectRevision, jstring uri, jint versionMajor, jint versionMinor){ - jint _result{-1}; - QTJAMBI_TRY{ - size_t objectSize = qtjambi_extended_size_for_class(env, clazz); - QString javaName = qtjambi_class_name(env, clazz); - jmethodID constructor = findConstructor(env, clazz, javaName); - QByteArray _uri = qtjambi_to_qstring(env, uri).toLocal8Bit(); - - const QMetaObject *meta_object = qtjambi_metaobject_for_class(env, clazz); - if(!meta_object){ - jclass closestClass = resolveClosestQtSuperclass(env, clazz); - if(closestClass){ - const QMetaObject *original_meta_object = qtjambi_metaobject_for_class(env, closestClass); - meta_object = qtjambi_metaobject_for_class(env, clazz, original_meta_object); - } +int qtjambi_qmlRegisterExtendedUncreatableType(JNIEnv *env, jclass clazz, jclass extendedClazz, int metaObjectRevision, const char* uri, int versionMajor, int versionMinor, const char* qmlName, QString reason){ + QmlTypeRegistractionData data = registerQmlType(env, clazz, qmlName, Skipping(Creator)); + QString extendedJavaName = qtjambi_class_name(env, extendedClazz); + jmethodID econstructor(nullptr); + QTJAMBI_TRY_ANY{ + econstructor = resolveMethod(env, "", "(Lio/qt/core/QObject;)V", extendedClazz); + }QTJAMBI_CATCH_ANY{}QTJAMBI_TRY_END + if(!econstructor){ + JavaException::raiseIllegalAccessException(env, qPrintable(QString("Class must offer the constructor %1(QObject) to register as Qml extended type.").arg(QString(extendedJavaName).replace(QLatin1Char('$'), QLatin1Char('.')))) QTJAMBI_STACKTRACEINFO ); + } + + const QMetaObject *meta_object = qtjambi_metaobject_for_class(env, clazz); + if(!meta_object){ + jclass closestClass = resolveClosestQtSuperclass(env, clazz); + if(closestClass){ + const QMetaObject *original_meta_object = qtjambi_metaobject_for_class(env, closestClass); + meta_object = qtjambi_metaobject_for_class(env, clazz, original_meta_object); + } + } + const QMetaObject *extended_meta_object = qtjambi_metaobject_for_class(env, extendedClazz, nullptr); + if(!extended_meta_object){ + jclass closestClass = resolveClosestQtSuperclass(env, extendedClazz); + if(closestClass){ + const QMetaObject *original_meta_object = qtjambi_metaobject_for_class(env, closestClass); + extended_meta_object = qtjambi_metaobject_for_class(env, extendedClazz, original_meta_object); } - jobject method = qtjambi_find_QmlAttachedProperties(env, clazz); - int psCast = parserStatusCast(env, clazz); - int vsCast = valueSourceCast(env, clazz); - int viCast = valueInterceptorCast(env, clazz); + } + jclass declClass = clazz; + jobject method = qtjambi_find_QmlAttachedProperties(env, declClass); + if(!method){ + declClass = extendedClazz; + method = qtjambi_find_QmlAttachedProperties(env, declClass); + } #if QT_VERSION < QT_VERSION_CHECK(6,0,0) - QQmlPrivate::RegisterType type = { - /* int version */ 1, - - /*int typeId*/ registerQmlMetaType(javaName, meta_object), - /*int listId*/ registerQmlListType(javaName), - /*int objectSize*/ int(objectSize), - /*void (*create)(void *)*/ creatorFunction(env, meta_object, clazz, constructor, objectSize, psCast, vsCast, viCast), - /*QString noCreationReason*/ QString(), - - /*const char *uri*/ _uri.constData(), - /*int versionMajor*/ int(versionMajor), - /*int versionMinor*/ int(versionMinor), - /*const char *elementName*/ nullptr, - /*const QMetaObject *metaObject*/ meta_object, - - /*QQmlAttachedPropertiesFunc attachedPropertiesFunction*/ attachedPropertiesFunc(env, clazz, method), - /*const QMetaObject *attachedPropertiesMetaObject*/ attachedPropertiesMetaObject(env, method), - - psCast, - vsCast, - viCast, - - /*QObject *(*extensionObjectCreate)(QObject *)*/ nullptr, - /*const QMetaObject *extensionMetaObject*/ nullptr, - - /*QQmlCustomParser *customParser*/ nullptr, - /*int revision*/ int(metaObjectRevision) - }; + QQmlPrivate::RegisterType type = { + /* int version */ 0, + + /*int typeId*/ data.typeId, + /*int listId*/ data.listId, + /*int objectSize*/ 0, + /*void (*create)(void *)*/ nullptr, + /*QString noCreationReason*/ reason, + + /*const char *uri*/ uri, + /*int versionMajor*/ int(versionMajor), + /*int versionMinor*/ int(versionMinor), + /*const char *elementName*/ qmlName, + /*const QMetaObject *metaObject*/ data.meta_object, + + /*QQmlAttachedPropertiesFunc attachedPropertiesFunction*/ data.attachedPropertiesFunction, + /*const QMetaObject *attachedPropertiesMetaObject*/ data.attachedPropertiesMetaObject, + + /*int parserStatusCast*/ data.psCast, + /*int valueSourceCast*/ data.vsCast, + /*int valueInterceptorCast*/ data.viCast, + + /*QObject *(*extensionObjectCreate)(QObject *)*/ createParentFunction(env, extendedClazz, econstructor), + /*const QMetaObject *extensionMetaObject*/ extended_meta_object, + + /*QQmlCustomParser *customParser*/ nullptr, + /*int revision*/ int(metaObjectRevision) + }; #else - QQmlPrivate::RegisterType type = { - /* int structVersion */ 0, + if(!QTypeRevision::isValidSegment(metaObjectRevision)){ + JavaException::raiseIllegalAccessException(env, qPrintable(QString("Not a valid metaObjectRevision %1.").arg(metaObjectRevision)) QTJAMBI_STACKTRACEINFO ); + } + QQmlPrivate::RegisterType type = { +#if QT_VERSION >= QT_VERSION_CHECK(6,3,0) + /* int structVersion */ 1, +#else + /* int structVersion */ 0, +#endif - /*int typeId*/ QMetaType(registerQmlMetaType(javaName, meta_object)), - /*int listId*/ QMetaType(registerQmlListType(javaName)), - /*int objectSize*/ int(objectSize), - /*void (*create)(void *,void *)*/ &createQmlObject, - /*void *userdata*/ creatorFunctionMetaData(env, meta_object, clazz, constructor, objectSize, psCast, vsCast, viCast), - /*QString noCreationReason*/ QString(), + /* QMetaType typeId */ QMetaType(data.typeId), + /* QMetaType listId */ QMetaType(data.listId), + /*int objectSize*/ 0, + /*void (*create)(void *,void *)*/ nullptr, + /*void *userdata*/ nullptr, + /*QString noCreationReason*/ reason, - /*QVariant (*createValueType)(const QJSValue &);*/ nullptr, + /*QVariant (*createValueType)(const QJSValue &);*/ nullptr, - /*const char *uri*/ _uri.constData(), - /*QTypeRevision version*/ QTypeRevision::fromVersion(versionMajor, versionMinor), - /*const char *elementName*/ nullptr, - /*const QMetaObject *metaObject*/ meta_object, + /*const char *uri*/ uri, + /*QTypeRevision version*/ QTypeRevision::fromVersion(versionMajor, versionMinor), + /*const char *elementName*/ qmlName, + /*const QMetaObject *metaObject*/ data.meta_object, - /*QQmlAttachedPropertiesFunc attachedPropertiesFunction*/ attachedPropertiesFunc(env, clazz, method), - /*const QMetaObject *attachedPropertiesMetaObject*/ attachedPropertiesMetaObject(env, method), + /*QQmlAttachedPropertiesFunc attachedPropertiesFunction*/ data.attachedPropertiesFunction, + /*const QMetaObject *attachedPropertiesMetaObject*/ data.attachedPropertiesMetaObject, - psCast, - vsCast, - viCast, + /*int parserStatusCast*/ data.psCast, + /*int valueSourceCast*/ data.vsCast, + /*int valueInterceptorCast*/ data.viCast, - /*QObject *(*extensionObjectCreate)(QObject *)*/ nullptr, - /*const QMetaObject *extensionMetaObject*/ nullptr, + /*QObject *(*extensionObjectCreate)(QObject *)*/ createParentFunction(env, extendedClazz, econstructor), + /*const QMetaObject *extensionMetaObject*/ extended_meta_object, - /*QQmlCustomParser *customParser*/ nullptr, - /*int revision*/ QTypeRevision::fromMajorVersion(metaObjectRevision) - }; + /*QQmlCustomParser *customParser*/ nullptr, + /*int revision*/ QTypeRevision::fromMajorVersion(metaObjectRevision) +#if QT_VERSION >= QT_VERSION_CHECK(6,3,0) + ,/*int finalizerCast*/data.fhCast #endif - _result = QQmlPrivate::qmlregister(QQmlPrivate::TypeRegistration, &type); - }QTJAMBI_CATCH(const JavaException& exn){ - exn.raiseInJava(env); - }QTJAMBI_TRY_END - return _result; + }; +#endif + return QQmlPrivate::qmlregister(QQmlPrivate::TypeRegistration, &type); } -/* - * Class: io_qt_qml_QtQml - * Method: qmlRegisterExtendedType - * Signature: (Ljava/lang/Class;Ljava/lang/Class;)I - */ -extern "C" Q_DECL_EXPORT jint JNICALL Java_io_qt_qml_QtQml_qmlRegisterExtendedType__Ljava_lang_Class_2Ljava_lang_Class_2 - (JNIEnv * env, jclass, jclass clazz, jclass extendedClazz){ - jint _result{-1}; - QTJAMBI_TRY{ - QString javaName = qtjambi_class_name(env, clazz); - QString extendedJavaName = qtjambi_class_name(env, extendedClazz); - jmethodID constructor(nullptr); - QTJAMBI_TRY_ANY{ - constructor = resolveMethod(env, "", "(Lio/qt/core/QObject;)V", extendedClazz); - }QTJAMBI_CATCH_ANY{}QTJAMBI_TRY_END - if(!constructor){ - JavaException::raiseIllegalAccessException(env, qPrintable(QString("Class must offer the constructor %1(QObject) to register as Qml extended type.").arg(QString(extendedJavaName).replace(QLatin1Char('$'), QLatin1Char('.')))) QTJAMBI_STACKTRACEINFO ); - } - - const QMetaObject *meta_object = qtjambi_metaobject_for_class(env, clazz); - if(!meta_object){ - jclass closestClass = resolveClosestQtSuperclass(env, clazz); - if(closestClass){ - const QMetaObject *original_meta_object = qtjambi_metaobject_for_class(env, closestClass); - meta_object = qtjambi_metaobject_for_class(env, clazz, original_meta_object); - } - } - const QMetaObject *extended_meta_object = qtjambi_metaobject_for_class(env, extendedClazz, nullptr); - if(!extended_meta_object){ - jclass closestClass = resolveClosestQtSuperclass(env, extendedClazz); - if(closestClass){ - const QMetaObject *original_meta_object = qtjambi_metaobject_for_class(env, closestClass); - extended_meta_object = qtjambi_metaobject_for_class(env, extendedClazz, original_meta_object); - } - } - jobject method = qtjambi_find_QmlAttachedProperties(env, clazz); - #if QT_VERSION < QT_VERSION_CHECK(6,0,0) - QQmlPrivate::RegisterType type = { - /* int version */ 0, +int qtjambi_qmlRegisterInterface(JNIEnv *env, jclass clazz, const char* uri){ + QString typeName = qtjambi_class_name(env, clazz); + const QMetaObject *meta_object = qtjambi_metaobject_for_class(env, clazz); + if(!meta_object){ + jclass closestClass = resolveClosestQtSuperclass(env, clazz); + if(closestClass){ + const QMetaObject *original_meta_object = qtjambi_metaobject_for_class(env, closestClass); + meta_object = qtjambi_metaobject_for_class(env, clazz, original_meta_object); + } + } + const char* iid = getInterfaceIID(env, clazz); + if(!iid){ + iid = registerInterfaceID(env, clazz); + } - /*int typeId*/ registerQmlMetaType(javaName, meta_object), - /*int listId*/ registerQmlListType(javaName), - /*int objectSize*/ 0, - /*void (*create)(void *)*/ nullptr, - /*QString noCreationReason*/ QString(), + QQmlPrivate::RegisterInterface qmlInterface = { + /* int version */ 1, - /*const char *uri*/ nullptr, - /*int versionMajor*/ 0, - /*int versionMinor*/ 0, - /*const char *elementName*/ nullptr, - /*const QMetaObject *metaObject*/ meta_object, + /* int typeId */ registerQObjectAsQmlMetaType(typeName, meta_object), + /* int listId */ registerQQmlListPropertyAsQmlMetaType(typeName), - /*QQmlAttachedPropertiesFunc attachedPropertiesFunction*/ attachedPropertiesFunc(env, clazz, method), - /*const QMetaObject *attachedPropertiesMetaObject*/ attachedPropertiesMetaObject(env, method), + /* const char *iid */ iid, - /*int parserStatusCast*/ parserStatusCast(env, clazz), - /*int valueSourceCast*/ valueSourceCast(env, clazz), - /*int valueInterceptorCast*/ valueInterceptorCast(env, clazz), + /* const char *uri */ uri, + /* int versionMajor */ 0 + }; + return QQmlPrivate::qmlregister(QQmlPrivate::InterfaceRegistration, &qmlInterface); +} +#endif - /*QObject *(*extensionObjectCreate)(QObject *)*/ createParentFunction(env, extendedClazz, constructor), - /*const QMetaObject *extensionMetaObject*/ extended_meta_object, +int qtjambi_qmlRegisterInterface(JNIEnv *env, jclass clazz, const char* uri, int versionMajor){ + const QMetaObject *meta_object = qtjambi_metaobject_for_class(env, clazz); + if(!meta_object){ + jclass closestClass = resolveClosestQtSuperclass(env, clazz); + if(closestClass){ + const QMetaObject *original_meta_object = qtjambi_metaobject_for_class(env, closestClass); + meta_object = qtjambi_metaobject_for_class(env, clazz, original_meta_object); + } + } + QString typeName; + if(meta_object){ + typeName = meta_object->className(); + } - /*QQmlCustomParser *customParser*/ nullptr, - /*int revision*/ 0 - }; -#else - QQmlPrivate::RegisterType type = { - /* int structVersion */ 0, + const char* iid = getInterfaceIID(env, clazz); + if(!iid){ + iid = registerInterfaceID(env, clazz); + } +#if QT_VERSION < QT_VERSION_CHECK(6,0,0) + QQmlPrivate::RegisterInterface qmlInterface = { + /* int version */ 1, - /*int typeId*/ QMetaType(registerQmlMetaType(javaName, meta_object)), - /*int listId*/ QMetaType(registerQmlListType(javaName)), - /*int objectSize*/ 0, - /*void (*create)(void *,void *)*/ nullptr, - /*void *userdata*/ nullptr, - /*QString noCreationReason*/ QString(), + /* int typeId */ registerQObjectAsQmlMetaType(typeName, meta_object), + /* int listId */ registerQQmlListPropertyAsQmlMetaType(typeName), - /*QVariant (*createValueType)(const QJSValue &);*/ nullptr, + /* const char *iid */ iid, - /*const char *uri*/ nullptr, - /*int version*/ QTypeRevision::zero(), - /*const char *elementName*/ nullptr, - /*const QMetaObject *metaObject*/ meta_object, + /* const char *uri */ uri, + /* int versionMajor */ versionMajor + }; - /*QQmlAttachedPropertiesFunc attachedPropertiesFunction*/ attachedPropertiesFunc(env, clazz, method), - /*const QMetaObject *attachedPropertiesMetaObject*/ attachedPropertiesMetaObject(env, method), +#else + QQmlPrivate::RegisterInterface qmlInterface = { + /* int structVersion */ 0, - /*int parserStatusCast*/ parserStatusCast(env, clazz), - /*int valueSourceCast*/ valueSourceCast(env, clazz), - /*int valueInterceptorCast*/ valueInterceptorCast(env, clazz), + /* QMetaType typeId */ QMetaType(registerQObjectAsQmlMetaType(typeName, meta_object)), + /* QMetaType listId */ QMetaType(registerQQmlListPropertyAsQmlMetaType(typeName)), - /*QObject *(*extensionObjectCreate)(QObject *)*/ createParentFunction(env, extendedClazz, constructor), - /*const QMetaObject *extensionMetaObject*/ extended_meta_object, + /* const char *iid */ iid, - /*QQmlCustomParser *customParser*/ nullptr, - /*int revision*/ QTypeRevision::zero() - }; + /* const char *uri */ uri, + /* int versionMajor */ QTypeRevision::fromVersion(versionMajor, 0) + }; #endif - _result = QQmlPrivate::qmlregister(QQmlPrivate::TypeRegistration, &type); - }QTJAMBI_CATCH(const JavaException& exn){ - exn.raiseInJava(env); - }QTJAMBI_TRY_END - return _result; + return QQmlPrivate::qmlregister(QQmlPrivate::InterfaceRegistration, &qmlInterface); } -/* - * Class: io_qt_qml_QtQml - * Method: qmlRegisterExtendedType - * Signature: (Ljava/lang/Class;Ljava/lang/Class;Ljava/lang/String;I)I - */ -extern "C" Q_DECL_EXPORT jint JNICALL Java_io_qt_qml_QtQml_qmlRegisterExtendedType__Ljava_lang_Class_2Ljava_lang_Class_2Ljava_lang_String_2I - (JNIEnv * env, jclass, jclass clazz, jclass extendedClazz, jstring uri, jint versionMajor){ - jint _result{-1}; - QTJAMBI_TRY{ - QString _uri = qtjambi_to_qstring(env, uri); - QString javaName = qtjambi_class_name(env, clazz); - QString extendedJavaName = qtjambi_class_name(env, extendedClazz); - jmethodID constructor(nullptr); - QTJAMBI_TRY_ANY{ - constructor = resolveMethod(env, "", "(Lio/qt/core/QObject;)V", extendedClazz); - }QTJAMBI_CATCH_ANY{}QTJAMBI_TRY_END - if(!constructor){ - JavaException::raiseIllegalAccessException(env, qPrintable(QString("Class must offer the constructor %1(QObject) to register as Qml extended type.").arg(QString(extendedJavaName).replace(QLatin1Char('$'), QLatin1Char('.')))) QTJAMBI_STACKTRACEINFO ); - } - - const QMetaObject *meta_object = qtjambi_metaobject_for_class(env, clazz); - if(!meta_object){ - jclass closestClass = resolveClosestQtSuperclass(env, clazz); - if(closestClass){ - const QMetaObject *original_meta_object = qtjambi_metaobject_for_class(env, closestClass); - meta_object = qtjambi_metaobject_for_class(env, clazz, original_meta_object); - } - } - const QMetaObject *extended_meta_object = qtjambi_metaobject_for_class(env, extendedClazz, nullptr); - if(!extended_meta_object){ - jclass closestClass = resolveClosestQtSuperclass(env, extendedClazz); - if(closestClass){ - const QMetaObject *original_meta_object = qtjambi_metaobject_for_class(env, closestClass); - extended_meta_object = qtjambi_metaobject_for_class(env, extendedClazz, original_meta_object); - } - } - jobject method = qtjambi_find_QmlAttachedProperties(env, clazz); - +int qtjambi_qmlRegisterSingletonType(JNIEnv *, const char* uri, int versionMajor, int versionMinor, const char* qmlName, const QtQml::ValueCallback& callback){ #if QT_VERSION < QT_VERSION_CHECK(6,0,0) - QQmlPrivate::RegisterType type = { - /* int version */ 0, - - /*int typeId*/ registerQmlMetaType(javaName, meta_object), - /*int listId*/ registerQmlListType(javaName), - /*int objectSize*/ 0, - /*void (*create)(void *)*/ nullptr, - /*QString noCreationReason*/ QString(), - - /*const char *uri*/ qPrintable(_uri), - /*int versionMajor*/ versionMajor, - /*int versionMinor*/ 0, - /*const char *elementName*/ nullptr, - /*const QMetaObject *metaObject*/ meta_object, - - /*QQmlAttachedPropertiesFunc attachedPropertiesFunction*/ attachedPropertiesFunc(env, clazz, method), - /*const QMetaObject *attachedPropertiesMetaObject*/ attachedPropertiesMetaObject(env, method), - - /*int parserStatusCast*/ parserStatusCast(env, clazz), - /*int valueSourceCast*/ valueSourceCast(env, clazz), - /*int valueInterceptorCast*/ valueInterceptorCast(env, clazz), - - /*QObject *(*extensionObjectCreate)(QObject *)*/ createParentFunction(env, extendedClazz, constructor), - /*const QMetaObject *extensionMetaObject*/ extended_meta_object, - - /*QQmlCustomParser *customParser*/ nullptr, - /*int revision*/ 0 + QQmlPrivate::RegisterSingletonType api = { + /* int version */ 0, + /* const char *uri */ uri, + /* int versionMajor */ int(versionMajor), + /* int versionMinor */ int(versionMinor), + /* const char *typeName */ qmlName, + /* scriptApi */ callback, + /* qobjectApi */ nullptr, + /* const QMetaObject *instanceMetaObject */ nullptr, + /* int typeId */ 0, + /* int revision */ 0 +#if QT_VERSION >= QT_VERSION_CHECK(5,14,0) + ,/* generalizedQobjectApi */ {} +#endif }; #else - QQmlPrivate::RegisterType type = { - /* int structVersion */ 0, - - /*int typeId*/ QMetaType(registerQmlMetaType(javaName, meta_object)), - /*int listId*/ QMetaType(registerQmlListType(javaName)), - /*int objectSize*/ 0, - /*void (*create)(void *,void *)*/ nullptr, - /*void *userdata*/ nullptr, - /*QString noCreationReason*/ QString(), - - /*QVariant (*createValueType)(const QJSValue &);*/ nullptr, - - /*const char *uri*/ qPrintable(_uri), - /*int version*/ QTypeRevision::fromMajorVersion(versionMajor), - /*const char *elementName*/ nullptr, - /*const QMetaObject *metaObject*/ meta_object, - - /*QQmlAttachedPropertiesFunc attachedPropertiesFunction*/ attachedPropertiesFunc(env, clazz, method), - /*const QMetaObject *attachedPropertiesMetaObject*/ attachedPropertiesMetaObject(env, method), - - /*int parserStatusCast*/ parserStatusCast(env, clazz), - /*int valueSourceCast*/ valueSourceCast(env, clazz), - /*int valueInterceptorCast*/ valueInterceptorCast(env, clazz), - - /*QObject *(*extensionObjectCreate)(QObject *)*/ createParentFunction(env, extendedClazz, constructor), - /*const QMetaObject *extensionMetaObject*/ extended_meta_object, - - /*QQmlCustomParser *customParser*/ nullptr, - /*int revision*/ QTypeRevision::zero() + QQmlPrivate::RegisterSingletonType api = { + /* int structVersion */ 0, + /* const char *uri */ uri, + /*QTypeRevision version*/ QTypeRevision::fromVersion(versionMajor, versionMinor), + /* const char *typeName */ qmlName, + /* scriptApi */ callback, + /* qobjectApi */ nullptr, + /* const QMetaObject *instanceMetaObject */ nullptr, + /* QMetaType typeId */ QMetaType(QMetaType::UnknownType), + /* extensionObjectCreate */ nullptr, + /* extensionMetaObject */ nullptr, + /* int revision */ QTypeRevision::zero() }; #endif - _result = QQmlPrivate::qmlregister(QQmlPrivate::TypeRegistration, &type); - }QTJAMBI_CATCH(const JavaException& exn){ - exn.raiseInJava(env); - }QTJAMBI_TRY_END - return _result; + return QQmlPrivate::qmlregister(QQmlPrivate::SingletonRegistration, &api); } -/* - * Class: io_qt_qml_QtQml - * Method: qmlRegisterExtendedType - * Signature: (Ljava/lang/Class;Ljava/lang/Class;Ljava/lang/String;IILjava/lang/String;)I - */ -extern "C" Q_DECL_EXPORT jint JNICALL Java_io_qt_qml_QtQml_qmlRegisterExtendedType__Ljava_lang_Class_2Ljava_lang_Class_2Ljava_lang_String_2IILjava_lang_String_2 - (JNIEnv * env, jclass, jclass clazz, jclass extendedClazz, jstring uri, jint versionMajor, jint versionMinor, jstring qmlName){ - jint _result{-1}; - QTJAMBI_TRY{ - size_t objectSize = qtjambi_extended_size_for_class(env, clazz); - - QString javaName = qtjambi_class_name(env, clazz); - QString extendedJavaName = qtjambi_class_name(env, extendedClazz); - jmethodID constructor = findConstructor(env, clazz, javaName); - jmethodID econstructor(nullptr); - QTJAMBI_TRY_ANY{ - econstructor = resolveMethod(env, "", "(Lio/qt/core/QObject;)V", extendedClazz); - }QTJAMBI_CATCH_ANY{}QTJAMBI_TRY_END - if(!econstructor){ - JavaException::raiseIllegalAccessException(env, qPrintable(QString("Class must offer the constructor %1(QObject) to register as Qml extended type.").arg(QString(extendedJavaName).replace(QLatin1Char('$'), QLatin1Char('.')))) QTJAMBI_STACKTRACEINFO ); - } +int qtjambi_qmlRegisterSingletonType(JNIEnv *env, jclass clazz, const char* uri, int versionMajor, int versionMinor, const char* qmlName, const QtQml::ObjectCallback& callback){ + QString javaName = qtjambi_class_name(env, clazz); - const QMetaObject *meta_object = qtjambi_metaobject_for_class(env, clazz); - if(!meta_object){ - jclass closestClass = resolveClosestQtSuperclass(env, clazz); - if(closestClass){ - const QMetaObject *original_meta_object = qtjambi_metaobject_for_class(env, closestClass); - meta_object = qtjambi_metaobject_for_class(env, clazz, original_meta_object); - } - } - const QMetaObject *extended_meta_object = qtjambi_metaobject_for_class(env, extendedClazz, nullptr); - if(!extended_meta_object){ - jclass closestClass = resolveClosestQtSuperclass(env, extendedClazz); - if(closestClass){ - const QMetaObject *original_meta_object = qtjambi_metaobject_for_class(env, closestClass); - extended_meta_object = qtjambi_metaobject_for_class(env, extendedClazz, original_meta_object); - } - } - jclass declClass = clazz; - jobject method = qtjambi_find_QmlAttachedProperties(env, declClass); - if(!method){ - declClass = extendedClazz; - method = qtjambi_find_QmlAttachedProperties(env, declClass); + const QMetaObject *meta_object = qtjambi_metaobject_for_class(env, clazz); + if(!meta_object){ + jclass closestClass = resolveClosestQtSuperclass(env, clazz); + if(closestClass){ + const QMetaObject *original_meta_object = qtjambi_metaobject_for_class(env, closestClass); + meta_object = qtjambi_metaobject_for_class(env, clazz, original_meta_object); } - - QByteArray _qmlName = qtjambi_to_qstring(env, qmlName).toLocal8Bit(); - QByteArray _uri = qtjambi_to_qstring(env, uri).toLocal8Bit(); - int psCast = parserStatusCast(env, clazz); - int vsCast = valueSourceCast(env, clazz); - int viCast = valueInterceptorCast(env, clazz); - + } #if QT_VERSION < QT_VERSION_CHECK(6,0,0) - QQmlPrivate::RegisterType type = { - /* int version */ 0, - - /*int typeId*/ registerQmlMetaType(javaName, meta_object), - /*int listId*/ registerQmlListType(javaName), - /*int objectSize*/ int(objectSize), - /*void (*create)(void *)*/ creatorFunction(env, meta_object, clazz, constructor, objectSize, psCast, vsCast, viCast), - /*QString noCreationReason*/ QString(), - - /*const char *uri*/ _uri.constData(), - /*int versionMajor*/ int(versionMajor), - /*int versionMinor*/ int(versionMinor), - /*const char *elementName*/ _qmlName.isEmpty() ? nullptr : _qmlName.constData(), - /*const QMetaObject *metaObject*/ meta_object, - - /*QQmlAttachedPropertiesFunc attachedPropertiesFunction*/ attachedPropertiesFunc(env, declClass, method), - /*const QMetaObject *attachedPropertiesMetaObject*/ attachedPropertiesMetaObject(env, method), - - psCast, - vsCast, - viCast, + QQmlPrivate::RegisterSingletonType api = { +#if QT_VERSION >= QT_VERSION_CHECK(5,14,0) + /* int version */ 3, +#else + /* int version */ 2, +#endif + /* const char *uri */ uri, + /* int versionMajor */ int(versionMajor), + /* int versionMinor */ int(versionMinor), + /* const char *typeName */ qmlName, + /* scriptApi */ nullptr, +#if QT_VERSION >= QT_VERSION_CHECK(5,14,0) + /* qobjectApi */ nullptr, +#else + /* qobjectApi */ callback, +#endif + /* const QMetaObject *instanceMetaObject */ meta_object, + /* int typeId */ registerQObjectAsQmlMetaType(javaName, meta_object), + /* int revision */ 0 +#if QT_VERSION >= QT_VERSION_CHECK(5,14,0) + ,/* generalizedQobjectApi */ callback +#endif + }; +#else + QQmlPrivate::RegisterSingletonType api = { + /* int structVersion */ 0, + /* const char *uri */ uri, + /*QTypeRevision version*/ QTypeRevision::fromVersion(versionMajor, versionMinor), + /* const char *typeName */ qmlName, + /* scriptApi */ nullptr, + /* qobjectApi */ callback, + /* const QMetaObject *instanceMetaObject */ meta_object, + /* QMetaType typeId */ QMetaType(registerQObjectAsQmlMetaType(javaName, meta_object)), + /* extensionObjectCreate */ nullptr, + /* extensionMetaObject */ nullptr, + /* int revision */ QTypeRevision::zero() + }; +#endif + return QQmlPrivate::qmlregister(QQmlPrivate::SingletonRegistration, &api); +} - /*QObject *(*extensionObjectCreate)(QObject *)*/ createParentFunction(env, extendedClazz, econstructor), - /*const QMetaObject *extensionMetaObject*/ extended_meta_object, +int qtjambi_qmlRegisterRevision(JNIEnv *env, jclass clazz, int metaObjectRevision, const char* uri, int versionMajor, int versionMinor){ + QmlTypeRegistractionData data = registerQmlType(env, clazz, nullptr, Skipping()); - /*QQmlCustomParser *customParser*/ nullptr, - /*int revision*/ 0 - }; +#if QT_VERSION < QT_VERSION_CHECK(6,0,0) + QQmlPrivate::RegisterType type = { + /* int version */ 1, + + /*int typeId*/ data.typeId, + /*int listId*/ data.listId, + /*int objectSize*/ data.objectSize, + /*void (*create)(void *)*/ data.create, + /*QString noCreationReason*/ QString(), + + /*const char *uri*/ uri, + /*int versionMajor*/ int(versionMajor), + /*int versionMinor*/ int(versionMinor), + /*const char *elementName*/ nullptr, + /*const QMetaObject *metaObject*/ data.meta_object, + + /*QQmlAttachedPropertiesFunc attachedPropertiesFunction*/ data.attachedPropertiesFunction, + /*const QMetaObject *attachedPropertiesMetaObject*/ data.attachedPropertiesMetaObject, + + data.psCast, + data.vsCast, + data.viCast, + + /*QObject *(*extensionObjectCreate)(QObject *)*/ nullptr, + /*const QMetaObject *extensionMetaObject*/ nullptr, + + /*QQmlCustomParser *customParser*/ nullptr, + /*int revision*/ int(metaObjectRevision) + }; #else - QQmlPrivate::RegisterType type = { - /* int structVersion */ 0, + if(!QTypeRevision::isValidSegment(metaObjectRevision)){ + JavaException::raiseIllegalAccessException(env, qPrintable(QString("Not a valid metaObjectRevision %1.").arg(metaObjectRevision)) QTJAMBI_STACKTRACEINFO ); + } + QQmlPrivate::RegisterType type = { +#if QT_VERSION >= QT_VERSION_CHECK(6,3,0) + /* int structVersion */ 1, +#else + /* int structVersion */ 0, +#endif - /*int typeId*/ QMetaType(registerQmlMetaType(javaName, meta_object)), - /*int listId*/ QMetaType(registerQmlListType(javaName)), - /*int objectSize*/ int(objectSize), - /*void (*create)(void *,void *)*/ &createQmlObject, - /*void *userdata*/ creatorFunctionMetaData(env, meta_object, clazz, constructor, objectSize, psCast, vsCast, viCast), - /*QString noCreationReason*/ QString(), + /*int typeId*/ QMetaType(data.typeId), + /*int listId*/ QMetaType(data.listId), + /*int objectSize*/ data.objectSize, + /*void (*create)(void *,void *)*/ data.create, + /*void *userdata*/ data.userdata, + /*QString noCreationReason*/ QString(), - /*QVariant (*createValueType)(const QJSValue &);*/ nullptr, + /*QVariant (*createValueType)(const QJSValue &);*/ nullptr, - /*const char *uri*/ _uri.constData(), - /*int version*/ QTypeRevision::fromVersion(versionMajor, versionMinor), - /*const char *elementName*/ _qmlName.isEmpty() ? nullptr : _qmlName.constData(), - /*const QMetaObject *metaObject*/ meta_object, + /*const char *uri*/ uri, + /*QTypeRevision version*/ QTypeRevision::fromVersion(versionMajor, versionMinor), + /*const char *elementName*/ nullptr, + /*const QMetaObject *metaObject*/ data.meta_object, - /*QQmlAttachedPropertiesFunc attachedPropertiesFunction*/ attachedPropertiesFunc(env, declClass, method), - /*const QMetaObject *attachedPropertiesMetaObject*/ attachedPropertiesMetaObject(env, method), + /*QQmlAttachedPropertiesFunc attachedPropertiesFunction*/ data.attachedPropertiesFunction, + /*const QMetaObject *attachedPropertiesMetaObject*/ data.attachedPropertiesMetaObject, - psCast, - vsCast, - viCast, + data.psCast, + data.vsCast, + data.viCast, - /*QObject *(*extensionObjectCreate)(QObject *)*/ createParentFunction(env, extendedClazz, econstructor), - /*const QMetaObject *extensionMetaObject*/ extended_meta_object, + /*QObject *(*extensionObjectCreate)(QObject *)*/ nullptr, + /*const QMetaObject *extensionMetaObject*/ nullptr, - /*QQmlCustomParser *customParser*/ nullptr, - /*int revision*/ QTypeRevision::zero() - }; + /*QQmlCustomParser *customParser*/ nullptr, + /*int revision*/ QTypeRevision::fromMajorVersion(metaObjectRevision) +#if QT_VERSION >= QT_VERSION_CHECK(6,3,0) + ,/*int finalizerCast*/data.fhCast #endif - _result = QQmlPrivate::qmlregister(QQmlPrivate::TypeRegistration, &type); - }QTJAMBI_CATCH(const JavaException& exn){ - exn.raiseInJava(env); - }QTJAMBI_TRY_END - return _result; + }; +#endif + return QQmlPrivate::qmlregister(QQmlPrivate::TypeRegistration, &type); } -/* - * Class: io_qt_qml_QtQml - * Method: qmlRegisterInterface - * Signature: (Ljava/lang/Class;Ljava/lang/String;)I - */ -extern "C" Q_DECL_EXPORT jint JNICALL Java_io_qt_qml_QtQml_qmlRegisterInterface1 - (JNIEnv * env, jclass, jclass clazz, jstring name){ - jint _result{-1}; - QTJAMBI_TRY{ - QString typeName = qtjambi_to_qstring(env, name); - const QMetaObject *meta_object = qtjambi_metaobject_for_class(env, clazz); - if(!meta_object){ - jclass closestClass = resolveClosestQtSuperclass(env, clazz); - if(closestClass){ - const QMetaObject *original_meta_object = qtjambi_metaobject_for_class(env, closestClass); - meta_object = qtjambi_metaobject_for_class(env, clazz, original_meta_object); - } - } - const char* iid = getInterfaceIID(env, clazz); - if(!iid){ - iid = registerInterfaceID(env, clazz); - } +int qtjambi_qmlRegisterType(JNIEnv *env, jclass clazz, const char* uri, int versionMajor, int versionMinor, const char* qmlName){ + QmlTypeRegistractionData data = registerQmlType(env, clazz, qmlName, Skipping()); #if QT_VERSION < QT_VERSION_CHECK(6,0,0) - QQmlPrivate::RegisterInterface qmlInterface = { - /* int version */ 1, - - /* int typeId */ registerQmlMetaType(typeName, meta_object), - /* int listId */ registerQmlListType(typeName), - - /* const char *iid */ iid, - - /* const char *uri */ "", - /* int versionMajor */ 0 - }; + QQmlPrivate::RegisterType type = { + /* int version */ 1, + + /*int typeId*/ data.typeId, + /*int listId*/ data.listId, + /*int objectSize*/ data.objectSize, + /*void (*create)(void *)*/ data.create, + /*QString noCreationReason*/ QString(), + + /*const char *uri*/ uri, + /*int versionMajor*/ int(versionMajor), + /*int versionMinor*/ int(versionMinor), + /*const char *elementName*/ qmlName, + /*const QMetaObject *metaObject*/ data.meta_object, + + /*QQmlAttachedPropertiesFunc attachedPropertiesFunction*/ data.attachedPropertiesFunction, + /*const QMetaObject *attachedPropertiesMetaObject*/ data.attachedPropertiesMetaObject, + + data.psCast, + data.vsCast, + data.viCast, + + /*QObject *(*extensionObjectCreate)(QObject *)*/ nullptr, + /*const QMetaObject *extensionMetaObject*/ nullptr, + + /*QQmlCustomParser *customParser*/ nullptr, + /*int revision*/ 0 + }; #else - QQmlPrivate::RegisterInterface qmlInterface = { - /* int structVersion */ 0, - - /* QMetaType typeId */ QMetaType(registerQmlMetaType(typeName, meta_object)), - /* QMetaType listId */ QMetaType(registerQmlListType(typeName)), - - /* const char *iid */ iid, - - /* const char *uri */ "", - /* int versionMajor */ QTypeRevision::zero() - }; + QQmlPrivate::RegisterType type = { +#if QT_VERSION >= QT_VERSION_CHECK(6,3,0) + /* int structVersion */ 1, +#else + /* int structVersion */ 0, #endif - _result = QQmlPrivate::qmlregister(QQmlPrivate::InterfaceRegistration, &qmlInterface); - }QTJAMBI_CATCH(const JavaException& exn){ - exn.raiseInJava(env); - }QTJAMBI_TRY_END - return _result; -} -/* - * Class: io_qt_qml_QtQml - * Method: qmlRegisterInterface - * Signature: (Ljava/lang/Class;Ljava/lang/String;I)I - */ -extern "C" Q_DECL_EXPORT jint JNICALL Java_io_qt_qml_QtQml_qmlRegisterInterface2 - (JNIEnv * env, jclass, jclass clazz, jstring uri, jint versionMajor){ - jint _result{-1}; - QTJAMBI_TRY{ - QString _uri = qtjambi_to_qstring(env, uri); - const QMetaObject *meta_object = qtjambi_metaobject_for_class(env, clazz); - if(!meta_object){ - jclass closestClass = resolveClosestQtSuperclass(env, clazz); - if(closestClass){ - const QMetaObject *original_meta_object = qtjambi_metaobject_for_class(env, closestClass); - meta_object = qtjambi_metaobject_for_class(env, clazz, original_meta_object); - } - } - QString typeName; - if(meta_object){ - typeName = meta_object->className(); - } + /*int typeId*/ QMetaType(data.typeId), + /*int listId*/ QMetaType(data.listId), + /*int objectSize*/ data.objectSize, + /*void (*create)(void *,void *)*/ data.create, + /*void *userdata*/ data.userdata, + /*QString noCreationReason*/ QString(), - const char* iid = getInterfaceIID(env, clazz); - if(!iid){ - iid = registerInterfaceID(env, clazz); - } -#if QT_VERSION < QT_VERSION_CHECK(6,0,0) - QQmlPrivate::RegisterInterface qmlInterface = { - /* int version */ 1, + /*QVariant (*createValueType)(const QJSValue &);*/ nullptr, - /* int typeId */ registerQmlMetaType(typeName, meta_object), - /* int listId */ registerQmlListType(typeName), + /*const char *uri*/ uri, + /*QTypeRevision version*/ QTypeRevision::fromVersion(versionMajor, versionMinor), + /*const char *elementName*/ qmlName, + /*const QMetaObject *metaObject*/ data.meta_object, - /* const char *iid */ iid, - - /* const char *uri */ qPrintable(_uri), - /* int versionMajor */ versionMajor - }; + /*QQmlAttachedPropertiesFunc attachedPropertiesFunction*/ data.attachedPropertiesFunction, + /*const QMetaObject *attachedPropertiesMetaObject*/ data.attachedPropertiesMetaObject, -#else - QQmlPrivate::RegisterInterface qmlInterface = { - /* int structVersion */ 0, - - /* QMetaType typeId */ QMetaType(registerQmlMetaType(typeName, meta_object)), - /* QMetaType listId */ QMetaType(registerQmlListType(typeName)), + data.psCast, + data.vsCast, + data.viCast, - /* const char *iid */ iid, + /*QObject *(*extensionObjectCreate)(QObject *)*/ nullptr, + /*const QMetaObject *extensionMetaObject*/ nullptr, - /* const char *uri */ qPrintable(_uri), - /* int versionMajor */ QTypeRevision::fromMajorVersion(versionMajor) - }; + /*QQmlCustomParser *customParser*/ nullptr, + /*int revision*/ QTypeRevision::zero() +#if QT_VERSION >= QT_VERSION_CHECK(6,3,0) + ,/*int finalizerCast*/data.fhCast #endif - _result = QQmlPrivate::qmlregister(QQmlPrivate::InterfaceRegistration, &qmlInterface); - }QTJAMBI_CATCH(const JavaException& exn){ - exn.raiseInJava(env); - }QTJAMBI_TRY_END - return _result; + }; +#endif + return QQmlPrivate::qmlregister(QQmlPrivate::TypeRegistration, &type); } -/* - * Class: io_qt_qml_QtQml - * Method: qmlAttachedPropertiesObject - * Signature: (Lio/qt/core/QObject;Z)Lio/qt/core/QObject; - */ -extern "C" Q_DECL_EXPORT jobject JNICALL Java_io_qt_qml_QtQml_qmlAttachedPropertiesObject - (JNIEnv * env, jclass, jclass clazz, jobject object, jboolean create){ - jobject _result{nullptr}; - QTJAMBI_TRY{ - const QMetaObject *meta_object = qtjambi_metaobject_for_class(env, clazz); - if(!meta_object){ - jclass closestClass = resolveClosestQtSuperclass(env, clazz); - if(closestClass){ - const QMetaObject *original_meta_object = qtjambi_metaobject_for_class(env, closestClass); - meta_object = qtjambi_metaobject_for_class(env, clazz, original_meta_object); - } - } +int qtjambi_qmlRegisterType(JNIEnv *env, jclass clazz, int metaObjectRevision, const char* uri, int versionMajor, int versionMinor, const char* qmlName){ + QmlTypeRegistractionData data = registerQmlType(env, clazz, qmlName, Skipping()); + #if QT_VERSION < QT_VERSION_CHECK(6,0,0) - static int idx = -1; - QObject* result = QtQml::qmlAttachedPropertiesObject(&idx, qtjambi_to_qobject(env, object), meta_object, create); + QQmlPrivate::RegisterType type = { + /* int version */ 1, + + /*int typeId*/ data.typeId, + /*int listId*/ data.listId, + /*int objectSize*/ data.objectSize, + /*void (*create)(void *)*/ data.create, + /*QString noCreationReason*/ QString(), + + /*const char *uri*/ uri, + /*int versionMajor*/ int(versionMajor), + /*int versionMinor*/ int(versionMinor), + /*const char *elementName*/ qmlName, + /*const QMetaObject *metaObject*/ data.meta_object, + + /*QQmlAttachedPropertiesFunc attachedPropertiesFunction*/ data.attachedPropertiesFunction, + /*const QMetaObject *attachedPropertiesMetaObject*/ data.attachedPropertiesMetaObject, + + data.psCast, + data.vsCast, + data.viCast, + + /*QObject *(*extensionObjectCreate)(QObject *)*/ nullptr, + /*const QMetaObject *extensionMetaObject*/ nullptr, + + /*QQmlCustomParser *customParser*/ nullptr, + /*int revision*/ int(metaObjectRevision) + }; #else - QObject* obj = qtjambi_to_qobject(env, object); - static const auto func = qmlAttachedPropertiesFunction(nullptr, meta_object); - QObject* result = qmlAttachedPropertiesObject(obj, func, create); -#endif - _result = qtjambi_from_QObject(env, result); - }QTJAMBI_CATCH(const JavaException& exn){ - exn.raiseInJava(env); - }QTJAMBI_TRY_END - return _result; -} - -/* - * Class: io_qt_qml_QtQml - * Method: qmlRegisterBaseTypes - * Signature: (Ljava/lang/String;II)V - */ -extern "C" Q_DECL_EXPORT void JNICALL Java_io_qt_qml_QtQml_qmlRegisterBaseTypes - (JNIEnv * env, jclass, jstring uri, jint versionMajor, jint versionMinor){ - QTJAMBI_TRY{ -#if QT_VERSION < QT_VERSION_CHECK(5,14,0) - qmlRegisterBaseTypes(qPrintable(qtjambi_to_qstring(env, uri)), int(versionMajor), int(versionMinor)); + if(!QTypeRevision::isValidSegment(metaObjectRevision)){ + JavaException::raiseIllegalAccessException(env, qPrintable(QStringLiteral("Not a valid metaObjectRevision %1.").arg(metaObjectRevision)) QTJAMBI_STACKTRACEINFO ); + } + QQmlPrivate::RegisterType type = { +#if QT_VERSION >= QT_VERSION_CHECK(6,3,0) + /* int structVersion */ 1, #else - Q_UNUSED(uri) - Q_UNUSED(versionMajor) - Q_UNUSED(versionMinor) - JavaException::raiseQNoImplementationException(env, "qmlRegisterBaseTypes() is no longer available since Qt 5.14" QTJAMBI_STACKTRACEINFO); + /* int structVersion */ 0, #endif - }QTJAMBI_CATCH(const JavaException& exn){ - exn.raiseInJava(env); - }QTJAMBI_TRY_END -} -/* - * Class: io_qt_qml_QtQml - * Method: qmlRegisterAnonymousType - * Signature: (Ljava/lang/String;I)V - */ -extern "C" Q_DECL_EXPORT jint JNICALL Java_io_qt_qml_QtQml_qmlRegisterAnonymousType - (JNIEnv * env, jclass, jclass clazz, jstring uri, jint versionMajor){ - jint _result{-1}; - QTJAMBI_TRY{ -#if QT_VERSION < QT_VERSION_CHECK(5,14,0) - Q_UNUSED(clazz) - Q_UNUSED(uri) - Q_UNUSED(versionMajor) - JavaException::raiseQNoImplementationException(env, "qmlRegisterAnonymousType() is not available in Qt versions older than 5.14" QTJAMBI_STACKTRACEINFO); -#else - QString javaName = qtjambi_class_name(env, clazz); - QByteArray _uri = qtjambi_to_qstring(env, uri).toLocal8Bit(); - - const QMetaObject *meta_object = qtjambi_metaobject_for_class(env, clazz); - if(!meta_object){ - jclass closestClass = resolveClosestQtSuperclass(env, clazz); - if(closestClass){ - const QMetaObject *original_meta_object = qtjambi_metaobject_for_class(env, closestClass); - meta_object = qtjambi_metaobject_for_class(env, clazz, original_meta_object); - } - } - jobject method = qtjambi_find_QmlAttachedProperties(env, clazz); + /*int typeId*/ QMetaType(data.typeId), + /*int listId*/ QMetaType(data.listId), + /*int objectSize*/ data.objectSize, + /*void (*create)(void *,void *)*/ data.create, + /*void *userdata*/ data.userdata, + /*QString noCreationReason*/ QString(), -#if QT_VERSION < QT_VERSION_CHECK(6,0,0) - QQmlPrivate::RegisterType type = { - /* int version */ 0, + /*QVariant (*createValueType)(const QJSValue &);*/ nullptr, - /*int typeId*/ registerQmlMetaType(javaName, meta_object), - /*int listId*/ registerQmlListType(javaName), - /*int objectSize*/ 0, - /*void (*create)(void *)*/ nullptr, - /*QString noCreationReason*/ QString(), + /*const char *uri*/ uri, + /*QTypeRevision version*/ QTypeRevision::fromVersion(versionMajor, versionMinor), + /*const char *elementName*/ qmlName, + /*const QMetaObject *metaObject*/ data.meta_object, - /*const char *uri*/ _uri.constData(), - /*int versionMajor*/ int(versionMajor), - /*int versionMinor*/ 0, - /*const char *elementName*/ nullptr, - /*const QMetaObject *metaObject*/ meta_object, + /*QQmlAttachedPropertiesFunc attachedPropertiesFunction*/ data.attachedPropertiesFunction, + /*const QMetaObject *attachedPropertiesMetaObject*/ data.attachedPropertiesMetaObject, - /*QQmlAttachedPropertiesFunc attachedPropertiesFunction*/ attachedPropertiesFunc(env, clazz, method), - /*const QMetaObject *attachedPropertiesMetaObject*/ attachedPropertiesMetaObject(env, method), + data.psCast, + data.vsCast, + data.viCast, - /*int parserStatusCast*/ parserStatusCast(env, clazz), - /*int valueSourceCast*/ valueSourceCast(env, clazz), - /*int valueInterceptorCast*/ valueInterceptorCast(env, clazz), + /*QObject *(*extensionObjectCreate)(QObject *)*/ nullptr, + /*const QMetaObject *extensionMetaObject*/ nullptr, - /*QObject *(*extensionObjectCreate)(QObject *)*/ nullptr, - /*const QMetaObject *extensionMetaObject*/ nullptr, + /*QQmlCustomParser *customParser*/ nullptr, + /*int revision*/ QTypeRevision::fromMajorVersion(metaObjectRevision) +#if QT_VERSION >= QT_VERSION_CHECK(6,3,0) + ,/*int finalizerCast*/data.fhCast +#endif + }; +#endif + return QQmlPrivate::qmlregister(QQmlPrivate::TypeRegistration, &type); +} - /*QQmlCustomParser *customParser*/ nullptr, - /*int revision*/ 0 - }; +int qtjambi_qmlRegisterUncreatableType(JNIEnv *env, jclass clazz, const char* uri, int versionMajor, int versionMinor, const char* qmlName, const QString& reason){ + QmlTypeRegistractionData data = registerQmlType(env, clazz, qmlName, Skipping(Creator)); +#if QT_VERSION < QT_VERSION_CHECK(6,0,0) + QQmlPrivate::RegisterType type = { + /* int version */ 1, + + /*int typeId*/ data.typeId, + /*int listId*/ data.listId, + /*int objectSize*/ 0, + /*void (*create)(void *)*/ nullptr, + /*QString noCreationReason*/ reason, + + /*const char *uri*/ uri, + /*int versionMajor*/ int(versionMajor), + /*int versionMinor*/ int(versionMinor), + /*const char *elementName*/ qmlName, + /*const QMetaObject *metaObject*/ data.meta_object, + + /*QQmlAttachedPropertiesFunc attachedPropertiesFunction*/ data.attachedPropertiesFunction, + /*const QMetaObject *attachedPropertiesMetaObject*/ data.attachedPropertiesMetaObject, + + /*int parserStatusCast*/ data.psCast, + /*int valueSourceCast*/ data.vsCast, + /*int valueInterceptorCast*/ data.viCast, + + /*QObject *(*extensionObjectCreate)(QObject *)*/ nullptr, + /*const QMetaObject *extensionMetaObject*/ nullptr, + + /*QQmlCustomParser *customParser*/ nullptr, + /*int revision*/ 0 + }; #else - QQmlPrivate::RegisterType type = { - /* int structVersion */ 0, + QQmlPrivate::RegisterType type = { +#if QT_VERSION >= QT_VERSION_CHECK(6,3,0) + /* int structVersion */ 1, +#else + /* int structVersion */ 0, +#endif - /* QMetaType typeId */ QMetaType(registerQmlMetaType(javaName, meta_object)), - /* QMetaType listId */ QMetaType(registerQmlListType(javaName)), + /*int typeId*/ QMetaType(data.typeId), + /*int listId*/ QMetaType(data.listId), + /*int objectSize*/ 0, + /*void (*create)(void *,void *)*/ nullptr, + /*void *userdata*/ nullptr, + /*QString noCreationReason*/ reason, - /*int objectSize*/ 0, - /*void (*create)(void *,void *)*/ nullptr, - /*void *userdata*/ nullptr, - /*QString noCreationReason*/ QString(), + /*QVariant (*createValueType)(const QJSValue &);*/ nullptr, - /*QVariant (*createValueType)(const QJSValue &);*/ nullptr, + /*const char *uri*/ uri, + /*QTypeRevision version*/ QTypeRevision::fromVersion(versionMajor, versionMinor), + /*const char *elementName*/ qmlName, + /*const QMetaObject *metaObject*/ data.meta_object, - /*const char *uri*/ _uri.constData(), - /*int versionMajor*/ QTypeRevision::fromMajorVersion(versionMajor), - /*const char *elementName*/ nullptr, - /*const QMetaObject *metaObject*/ meta_object, + /*QQmlAttachedPropertiesFunc attachedPropertiesFunction*/ data.attachedPropertiesFunction, + /*const QMetaObject *attachedPropertiesMetaObject*/ data.attachedPropertiesMetaObject, - /*QQmlAttachedPropertiesFunc attachedPropertiesFunction*/ attachedPropertiesFunc(env, clazz, method), - /*const QMetaObject *attachedPropertiesMetaObject*/ attachedPropertiesMetaObject(env, method), + /*int parserStatusCast*/ data.psCast, + /*int valueSourceCast*/ data.vsCast, + /*int valueInterceptorCast*/ data.viCast, - /*int parserStatusCast*/ parserStatusCast(env, clazz), - /*int valueSourceCast*/ valueSourceCast(env, clazz), - /*int valueInterceptorCast*/ valueInterceptorCast(env, clazz), + /*QObject *(*extensionObjectCreate)(QObject *)*/ nullptr, + /*const QMetaObject *extensionMetaObject*/ nullptr, - /*QObject *(*extensionObjectCreate)(QObject *)*/ nullptr, - /*const QMetaObject *extensionMetaObject*/ nullptr, - - /*QQmlCustomParser *customParser*/ nullptr, - /*int revision*/ QTypeRevision::zero() - }; + /*QQmlCustomParser *customParser*/ nullptr, + /*int revision*/ QTypeRevision::zero() +#if QT_VERSION >= QT_VERSION_CHECK(6,3,0) + ,/*int finalizerCast*/data.fhCast #endif - _result = QQmlPrivate::qmlregister(QQmlPrivate::TypeRegistration, &type); + }; #endif - }QTJAMBI_CATCH(const JavaException& exn){ - exn.raiseInJava(env); - }QTJAMBI_TRY_END - return _result; -} - -/* - * Class: io_qt_qml_QtQml - * Method: qmlRegisterType - * Signature: (Lio/qt/core/QUrl;Ljava/lang/String;IILjava/lang/String;)I - */ -extern "C" Q_DECL_EXPORT jint JNICALL Java_io_qt_qml_QtQml_qmlRegisterType__Lio_qt_core_QUrl_2Ljava_lang_String_2IILjava_lang_String_2 - (JNIEnv * env, jclass, jobject url, jstring uri, jint versionMajor, jint versionMinor, jstring qmlName){ - env->EnsureLocalCapacity(300); - jint _result{-1}; - QTJAMBI_TRY{ - QUrl* _url = qtjambi_cast(env, url); - QString _qmlName = qtjambi_to_qstring(env, qmlName); - _result = qmlRegisterType(_url ? *_url : QUrl(), qPrintable(qtjambi_to_qstring(env, uri)), int(versionMajor), int(versionMinor), _qmlName.isEmpty() ? nullptr : qPrintable(_qmlName)); - }QTJAMBI_CATCH(const JavaException& exn){ - exn.raiseInJava(env); - }QTJAMBI_TRY_END - return _result; + return QQmlPrivate::qmlregister(QQmlPrivate::TypeRegistration, &type); } -/* - * Class: io_qt_qml_QtQml - * Method: qmlTypeId - * Signature: (Ljava/lang/String;IILjava/lang/String;)I - */ -extern "C" Q_DECL_EXPORT jint JNICALL Java_io_qt_qml_QtQml_qmlTypeId__Ljava_lang_String_2IILjava_lang_String_2 - (JNIEnv * env, jclass, jstring uri, jint versionMajor, jint versionMinor, jstring qmlName){ - env->EnsureLocalCapacity(300); - jint _result{-1}; - QTJAMBI_TRY{ - QString _qmlName = qtjambi_to_qstring(env, qmlName); - _result = qmlTypeId(qPrintable(qtjambi_to_qstring(env, uri)), int(versionMajor), int(versionMinor), _qmlName.isEmpty() ? nullptr : qPrintable(_qmlName)); - }QTJAMBI_CATCH(const JavaException& exn){ - exn.raiseInJava(env); - }QTJAMBI_TRY_END - return _result; -} - -/* - * Class: io_qt_qml_QtQml - * Method: qmlProtectModule - * Signature: (Ljava/lang/String;I)Z - */ -extern "C" Q_DECL_EXPORT jboolean JNICALL Java_io_qt_qml_QtQml_qmlProtectModule - (JNIEnv * env, jclass, jstring uri, jint majVersion){ - jboolean _result{false}; - QTJAMBI_TRY{ - _result = qmlProtectModule(qPrintable(qtjambi_to_qstring(env, uri)), int(majVersion)); - }QTJAMBI_CATCH(const JavaException& exn){ - exn.raiseInJava(env); - }QTJAMBI_TRY_END - return _result; -} - -/* - * Class: io_qt_qml_QtQml - * Method: qmlClearTypeRegistrations - * Signature: ()V - */ -extern "C" Q_DECL_EXPORT void JNICALL Java_io_qt_qml_QtQml_qmlClearTypeRegistrations - (JNIEnv *, jclass){ - qmlClearTypeRegistrations(); -} - -/* - * Class: io_qt_qml_QtQml - * Method: qmlRegisterModule - * Signature: (Ljava/lang/String;II)V - */ -extern "C" Q_DECL_EXPORT void Java_io_qt_qml_QtQml_qmlRegisterModule__Ljava_lang_String_2II - (JNIEnv * env, jclass, jstring uri, jint versionMajor, jint versionMinor){ - QTJAMBI_TRY{ - QByteArray _uri = qtjambi_to_qstring(env, uri).toLocal8Bit(); - qmlRegisterModule(_uri.constData(), int(versionMajor), int(versionMinor)); - }QTJAMBI_CATCH(const JavaException& exn){ - exn.raiseInJava(env); - }QTJAMBI_TRY_END -} - -/* - * Class: io_qt_qml_QtQml - * Method: qmlRegisterExtendedUncreatableType - * Signature: (Ljava/lang/Class;Ljava/lang/Class;Ljava/lang/String;IILjava/lang/String;Ljava/lang/String;)I - */ -extern "C" Q_DECL_EXPORT jint JNICALL Java_io_qt_qml_QtQml_qmlRegisterExtendedUncreatableType__Ljava_lang_Class_2Ljava_lang_Class_2Ljava_lang_String_2IILjava_lang_String_2Ljava_lang_String_2 - (JNIEnv * env, jclass, jclass clazz, jclass extendedClazz, jstring uri, jint versionMajor, jint versionMinor, jstring qmlName, jstring reason){ - jint _result{-1}; - QTJAMBI_TRY{ - QString javaName = qtjambi_class_name(env, clazz); - QString extendedJavaName = qtjambi_class_name(env, extendedClazz); - jmethodID constructor(nullptr); - QTJAMBI_TRY_ANY{ - constructor = resolveMethod(env, "", "(Lio/qt/core/QObject;)V", extendedClazz); - }QTJAMBI_CATCH_ANY{}QTJAMBI_TRY_END - if(!constructor){ - JavaException::raiseIllegalAccessException(env, qPrintable(QString("Class must offer the constructor %1(QObject) to register as Qml extended type.").arg(QString(extendedJavaName).replace(QLatin1Char('$'), QLatin1Char('.')))) QTJAMBI_STACKTRACEINFO ); - } - - const QMetaObject *meta_object = qtjambi_metaobject_for_class(env, clazz); - if(!meta_object){ - jclass closestClass = resolveClosestQtSuperclass(env, clazz); - if(closestClass){ - const QMetaObject *original_meta_object = qtjambi_metaobject_for_class(env, closestClass); - meta_object = qtjambi_metaobject_for_class(env, clazz, original_meta_object); - } - } - const QMetaObject *extended_meta_object = qtjambi_metaobject_for_class(env, extendedClazz, nullptr); - if(!extended_meta_object){ - jclass closestClass = resolveClosestQtSuperclass(env, extendedClazz); - if(closestClass){ - const QMetaObject *original_meta_object = qtjambi_metaobject_for_class(env, closestClass); - extended_meta_object = qtjambi_metaobject_for_class(env, extendedClazz, original_meta_object); - } - } - jclass declClass = clazz; - jobject method = qtjambi_find_QmlAttachedProperties(env, declClass); - if(!method){ - declClass = extendedClazz; - method = qtjambi_find_QmlAttachedProperties(env, declClass); - } - - QByteArray _qmlName = qtjambi_to_qstring(env, qmlName).toLocal8Bit(); - QByteArray _uri = qtjambi_to_qstring(env, uri).toLocal8Bit(); - +int qtjambi_qmlRegisterUncreatableType(JNIEnv *env, jclass clazz, int metaObjectRevision, const char* uri, int versionMajor, int versionMinor, const char* qmlName, const QString& reason){ + QmlTypeRegistractionData data = registerQmlType(env, clazz, qmlName, Skipping(Creator)); #if QT_VERSION < QT_VERSION_CHECK(6,0,0) - QQmlPrivate::RegisterType type = { - /* int version */ 0, - - /*int typeId*/ registerQmlMetaType(javaName, meta_object), - /*int listId*/ registerQmlListType(javaName), - /*int objectSize*/ 0, - /*void (*create)(void *)*/ nullptr, - /*QString noCreationReason*/ qtjambi_to_qstring(env, reason), - - /*const char *uri*/ _uri.constData(), - /*int versionMajor*/ int(versionMajor), - /*int versionMinor*/ int(versionMinor), - /*const char *elementName*/ _qmlName.isEmpty() ? nullptr : _qmlName.constData(), - /*const QMetaObject *metaObject*/ meta_object, - - /*QQmlAttachedPropertiesFunc attachedPropertiesFunction*/ attachedPropertiesFunc(env, declClass, method), - /*const QMetaObject *attachedPropertiesMetaObject*/ attachedPropertiesMetaObject(env, method), - - /*int parserStatusCast*/ parserStatusCast(env, clazz), - /*int valueSourceCast*/ valueSourceCast(env, clazz), - /*int valueInterceptorCast*/ valueInterceptorCast(env, clazz), - - /*QObject *(*extensionObjectCreate)(QObject *)*/ createParentFunction(env, extendedClazz, constructor), - /*const QMetaObject *extensionMetaObject*/ extended_meta_object, - - /*QQmlCustomParser *customParser*/ nullptr, - /*int revision*/ 0 - }; + QQmlPrivate::RegisterType type = { + /* int version */ 1, + + /*int typeId*/ data.typeId, + /*int listId*/ data.listId, + /*int objectSize*/ 0, + /*void (*create)(void *)*/ nullptr, + /*QString noCreationReason*/ reason, + + /*const char *uri*/ uri, + /*int versionMajor*/ int(versionMajor), + /*int versionMinor*/ int(versionMinor), + /*const char *elementName*/ qmlName, + /*const QMetaObject *metaObject*/ data.meta_object, + + /*QQmlAttachedPropertiesFunc attachedPropertiesFunction*/ data.attachedPropertiesFunction, + /*const QMetaObject *attachedPropertiesMetaObject*/ data.attachedPropertiesMetaObject, + + /*int parserStatusCast*/ data.psCast, + /*int valueSourceCast*/ data.vsCast, + /*int valueInterceptorCast*/ data.viCast, + + /*QObject *(*extensionObjectCreate)(QObject *)*/ nullptr, + /*const QMetaObject *extensionMetaObject*/ nullptr, + + /*QQmlCustomParser *customParser*/ nullptr, + /*int revision*/ int(metaObjectRevision) + }; #else - QQmlPrivate::RegisterType type = { - /* int structVersion */ 0, + if(!QTypeRevision::isValidSegment(metaObjectRevision)){ + JavaException::raiseIllegalAccessException(env, qPrintable(QString("Not a valid metaObjectRevision %1.").arg(metaObjectRevision)) QTJAMBI_STACKTRACEINFO ); + } + QQmlPrivate::RegisterType type = { +#if QT_VERSION >= QT_VERSION_CHECK(6,3,0) + /* int structVersion */ 1, +#else + /* int structVersion */ 0, +#endif - /* QMetaType typeId */ QMetaType(registerQmlMetaType(javaName, meta_object)), - /* QMetaType listId */ QMetaType(registerQmlListType(javaName)), - /*int objectSize*/ 0, - /*void (*create)(void *,void *)*/ nullptr, - /*void *userdata*/ nullptr, - /*QString noCreationReason*/ qtjambi_to_qstring(env, reason), + /*int typeId*/ QMetaType(data.typeId), + /*int listId*/ QMetaType(data.listId), + /*int objectSize*/ 0, + /*void (*create)(void *,void *)*/ nullptr, + /*void *userdata*/ nullptr, + /*QString noCreationReason*/ reason, - /*QVariant (*createValueType)(const QJSValue &);*/ nullptr, + /*QVariant (*createValueType)(const QJSValue &);*/ nullptr, - /*const char *uri*/ _uri.constData(), - /*QTypeRevision version*/ QTypeRevision::fromVersion(versionMajor, versionMinor), - /*const char *elementName*/ _qmlName.isEmpty() ? nullptr : _qmlName.constData(), - /*const QMetaObject *metaObject*/ meta_object, + /*const char *uri*/ uri, + /*QTypeRevision version*/ QTypeRevision::fromVersion(versionMajor, versionMinor), + /*const char *elementName*/ qmlName, + /*const QMetaObject *metaObject*/ data.meta_object, - /*QQmlAttachedPropertiesFunc attachedPropertiesFunction*/ attachedPropertiesFunc(env, declClass, method), - /*const QMetaObject *attachedPropertiesMetaObject*/ attachedPropertiesMetaObject(env, method), + /*QQmlAttachedPropertiesFunc attachedPropertiesFunction*/ data.attachedPropertiesFunction, + /*const QMetaObject *attachedPropertiesMetaObject*/ data.attachedPropertiesMetaObject, - /*int parserStatusCast*/ parserStatusCast(env, clazz), - /*int valueSourceCast*/ valueSourceCast(env, clazz), - /*int valueInterceptorCast*/ valueInterceptorCast(env, clazz), + /*int parserStatusCast*/ data.psCast, + /*int valueSourceCast*/ data.vsCast, + /*int valueInterceptorCast*/ data.viCast, - /*QObject *(*extensionObjectCreate)(QObject *)*/ createParentFunction(env, extendedClazz, constructor), - /*const QMetaObject *extensionMetaObject*/ extended_meta_object, + /*QObject *(*extensionObjectCreate)(QObject *)*/ nullptr, + /*const QMetaObject *extensionMetaObject*/ nullptr, - /*QQmlCustomParser *customParser*/ nullptr, - /*int revision*/ QTypeRevision::zero() - }; + /*QQmlCustomParser *customParser*/ nullptr, + /*int revision*/ QTypeRevision::fromMajorVersion(metaObjectRevision) +#if QT_VERSION >= QT_VERSION_CHECK(6,3,0) + ,/*int finalizerCast*/data.fhCast #endif - _result = QQmlPrivate::qmlregister(QQmlPrivate::TypeRegistration, &type); - }QTJAMBI_CATCH(const JavaException& exn){ - exn.raiseInJava(env); - }QTJAMBI_TRY_END - return _result; + }; +#endif + return QQmlPrivate::qmlregister(QQmlPrivate::TypeRegistration, &type); } -/* - * Class: io_qt_qml_QtQml - * Method: qmlRegisterExtendedUncreatableType - * Signature: (Ljava/lang/Class;Ljava/lang/Class;ILjava/lang/String;IILjava/lang/String;Ljava/lang/String;)I - */ -extern "C" Q_DECL_EXPORT jint JNICALL Java_io_qt_qml_QtQml_qmlRegisterExtendedUncreatableType__Ljava_lang_Class_2Ljava_lang_Class_2ILjava_lang_String_2IILjava_lang_String_2Ljava_lang_String_2 - (JNIEnv * env, jclass, jclass clazz, jclass extendedClazz, jint metaObjectRevision, jstring uri, jint versionMajor, jint versionMinor, jstring qmlName, jstring reason){ - jint _result{-1}; - QTJAMBI_TRY{ - QString javaName = qtjambi_class_name(env, clazz); - QString extendedJavaName = qtjambi_class_name(env, extendedClazz); - jmethodID constructor(nullptr); - QTJAMBI_TRY_ANY{ - constructor = resolveMethod(env, "", "(Lio/qt/core/QObject;)V", extendedClazz); - }QTJAMBI_CATCH_ANY{}QTJAMBI_TRY_END - if(!constructor){ - JavaException::raiseIllegalAccessException(env, qPrintable(QString("Class must offer the constructor %1(QObject) to register as Qml extended type.").arg(QString(extendedJavaName).replace(QLatin1Char('$'), QLatin1Char('.')))) QTJAMBI_STACKTRACEINFO ); - } - - const QMetaObject *meta_object = qtjambi_metaobject_for_class(env, clazz); - if(!meta_object){ - jclass closestClass = resolveClosestQtSuperclass(env, clazz); - if(closestClass){ - const QMetaObject *original_meta_object = qtjambi_metaobject_for_class(env, closestClass); - meta_object = qtjambi_metaobject_for_class(env, clazz, original_meta_object); - } - } - const QMetaObject *extended_meta_object = qtjambi_metaobject_for_class(env, extendedClazz, nullptr); - if(!extended_meta_object){ - jclass closestClass = resolveClosestQtSuperclass(env, extendedClazz); - if(closestClass){ - const QMetaObject *original_meta_object = qtjambi_metaobject_for_class(env, closestClass); - extended_meta_object = qtjambi_metaobject_for_class(env, extendedClazz, original_meta_object); - } - } - jclass declClass = clazz; - jobject method = qtjambi_find_QmlAttachedProperties(env, declClass); - if(!method){ - declClass = extendedClazz; - method = qtjambi_find_QmlAttachedProperties(env, declClass); - } - - QByteArray _qmlName = qtjambi_to_qstring(env, qmlName).toLocal8Bit(); - QByteArray _uri = qtjambi_to_qstring(env, uri).toLocal8Bit(); - #if QT_VERSION < QT_VERSION_CHECK(6,0,0) - QQmlPrivate::RegisterType type = { - /* int version */ 0, - - /*int typeId*/ registerQmlMetaType(javaName, meta_object), - /*int listId*/ registerQmlListType(javaName), - /*int objectSize*/ 0, - /*void (*create)(void *)*/ nullptr, - /*QString noCreationReason*/ qtjambi_to_qstring(env, reason), - - /*const char *uri*/ _uri.constData(), - /*int versionMajor*/ int(versionMajor), - /*int versionMinor*/ int(versionMinor), - /*const char *elementName*/ _qmlName.isEmpty() ? nullptr : _qmlName.constData(), - /*const QMetaObject *metaObject*/ meta_object, - - /*QQmlAttachedPropertiesFunc attachedPropertiesFunction*/ attachedPropertiesFunc(env, declClass, method), - /*const QMetaObject *attachedPropertiesMetaObject*/ attachedPropertiesMetaObject(env, method), - - /*int parserStatusCast*/ parserStatusCast(env, clazz), - /*int valueSourceCast*/ valueSourceCast(env, clazz), - /*int valueInterceptorCast*/ valueInterceptorCast(env, clazz), - - /*QObject *(*extensionObjectCreate)(QObject *)*/ createParentFunction(env, extendedClazz, constructor), - /*const QMetaObject *extensionMetaObject*/ extended_meta_object, - - /*QQmlCustomParser *customParser*/ nullptr, - /*int revision*/ int(metaObjectRevision) - }; -#else - QQmlPrivate::RegisterType type = { - /* int structVersion */ 0, +int qtjambi_qmlRegisterType(JNIEnv *env, jclass clazz){ + QmlTypeRegistractionData data = registerQmlType(env, clazz, nullptr, Skipping(Creator)); + QQmlPrivate::RegisterType type = { + /* int version */ 0, + + /*int typeId*/ data.typeId, + /*int listId*/ data.listId, + /*int objectSize*/ data.objectSize, + /*void (*create)(void *)*/ nullptr, + /*QString noCreationReason*/ QString(), + + /*const char *uri*/ nullptr, + /*int versionMajor*/ 0, + /*int versionMinor*/ 0, + /*const char *elementName*/ nullptr, + /*const QMetaObject *metaObject*/ data.meta_object, + + /*QQmlAttachedPropertiesFunc attachedPropertiesFunction*/ data.attachedPropertiesFunction, + /*const QMetaObject *attachedPropertiesMetaObject*/ data.attachedPropertiesMetaObject, + + /*int parserStatusCast*/ data.psCast, + /*int valueSourceCast*/ data.vsCast, + /*int valueInterceptorCast*/ data.viCast, + + /*QObject *(*extensionObjectCreate)(QObject *)*/ nullptr, + /*const QMetaObject *extensionMetaObject*/ nullptr, + + /*QQmlCustomParser *customParser*/ nullptr, + /*int revision*/ 0 + }; + return QQmlPrivate::qmlregister(QQmlPrivate::TypeRegistration, &type); +} - /* QMetaType typeId */ QMetaType(registerQmlMetaType(javaName, meta_object)), - /* QMetaType listId */ QMetaType(registerQmlListType(javaName)), - /*int objectSize*/ 0, - /*void (*create)(void *,void *)*/ nullptr, - /*void *userdata*/ nullptr, - /*QString noCreationReason*/ qtjambi_to_qstring(env, reason), +int qtjambi_qmlRegisterExtendedType(JNIEnv *env, jclass clazz, jclass extendedClazz){ + QmlTypeRegistractionData data = registerQmlType(env, clazz, nullptr, Skipping(Creator | ObjectSize)); + QString extendedJavaName = qtjambi_class_name(env, extendedClazz); + jmethodID econstructor(nullptr); + QTJAMBI_TRY_ANY{ + econstructor = resolveMethod(env, "", "(Lio/qt/core/QObject;)V", extendedClazz); + }QTJAMBI_CATCH_ANY{}QTJAMBI_TRY_END + if(!econstructor){ + JavaException::raiseIllegalAccessException(env, qPrintable(QStringLiteral("Class must offer the econstructor %1(QObject) to register as Qml extended type.").arg(QString(extendedJavaName).replace(QLatin1Char('$'), QLatin1Char('.')))) QTJAMBI_STACKTRACEINFO ); + } - /*QVariant (*createValueType)(const QJSValue &);*/ nullptr, + const QMetaObject *extended_meta_object = qtjambi_metaobject_for_class(env, extendedClazz, nullptr); + if(!extended_meta_object){ + jclass closestClass = resolveClosestQtSuperclass(env, extendedClazz); + if(closestClass){ + const QMetaObject *original_meta_object = qtjambi_metaobject_for_class(env, closestClass); + extended_meta_object = qtjambi_metaobject_for_class(env, extendedClazz, original_meta_object); + } + } - /*const char *uri*/ _uri.constData(), - /*QTypeRevision version*/ QTypeRevision::fromVersion(versionMajor, versionMinor), - /*const char *elementName*/ _qmlName.isEmpty() ? nullptr : _qmlName.constData(), - /*const QMetaObject *metaObject*/ meta_object, + QQmlPrivate::RegisterType type = { + /* int version */ 0, - /*QQmlAttachedPropertiesFunc attachedPropertiesFunction*/ attachedPropertiesFunc(env, declClass, method), - /*const QMetaObject *attachedPropertiesMetaObject*/ attachedPropertiesMetaObject(env, method), + /*int typeId*/ data.typeId, + /*int listId*/ data.listId, + /*int objectSize*/ 0, + /*void (*create)(void *)*/ nullptr, + /*QString noCreationReason*/ QString(), - /*int parserStatusCast*/ parserStatusCast(env, clazz), - /*int valueSourceCast*/ valueSourceCast(env, clazz), - /*int valueInterceptorCast*/ valueInterceptorCast(env, clazz), + /*const char *uri*/ nullptr, + /*int versionMajor*/ 0, + /*int versionMinor*/ 0, + /*const char *elementName*/ nullptr, + /*const QMetaObject *metaObject*/ data.meta_object, - /*QObject *(*extensionObjectCreate)(QObject *)*/ createParentFunction(env, extendedClazz, constructor), - /*const QMetaObject *extensionMetaObject*/ extended_meta_object, + /*QQmlAttachedPropertiesFunc attachedPropertiesFunction*/ data.attachedPropertiesFunction, + /*const QMetaObject *attachedPropertiesMetaObject*/ data.attachedPropertiesMetaObject, - /*QQmlCustomParser *customParser*/ nullptr, - /*int revision*/ QTypeRevision::fromMajorVersion(metaObjectRevision) - }; -#endif - _result = QQmlPrivate::qmlregister(QQmlPrivate::TypeRegistration, &type); - }QTJAMBI_CATCH(const JavaException& exn){ - exn.raiseInJava(env); - }QTJAMBI_TRY_END - return _result; -} + /*int parserStatusCast*/ data.psCast, + /*int valueSourceCast*/ data.vsCast, + /*int valueInterceptorCast*/ data.viCast, -/* - * Class: io_qt_qml_QtQml - * Method: qmlRegisterSingletonType - * Signature: (Lio/qt/core/QUrl;Ljava/lang/String;IILjava/lang/String;)I - */ -extern "C" Q_DECL_EXPORT jint JNICALL Java_io_qt_qml_QtQml_qmlRegisterSingletonType__Lio_qt_core_QUrl_2Ljava_lang_String_2IILjava_lang_String_2 - (JNIEnv * env, jclass, jobject url, jstring uri, jint versionMajor, jint versionMinor, jstring qmlName){ - jint _result{-1}; - QTJAMBI_TRY{ - QUrl _url = qtjambi_cast(env, url); - QString _qmlName = qtjambi_to_qstring(env, qmlName); - _result = qmlRegisterSingletonType(_url, qPrintable(qtjambi_to_qstring(env, uri)), int(versionMajor), int(versionMinor), _qmlName.isEmpty() ? nullptr : qPrintable(_qmlName)); - }QTJAMBI_CATCH(const JavaException& exn){ - exn.raiseInJava(env); - }QTJAMBI_TRY_END - return _result; -} + /*QObject *(*extensionObjectCreate)(QObject *)*/ createParentFunction(env, extendedClazz, econstructor), + /*const QMetaObject *extensionMetaObject*/ extended_meta_object, -/* - * Class: io_qt_qml_QtQml - * Method: qmlRegisterSingletonType - * Signature: (Ljava/lang/String;IILjava/lang/String;Lio/qt/qml/QtQml$ValueCallback;)I - */ -extern "C" Q_DECL_EXPORT jint JNICALL Java_io_qt_qml_QtQml_qmlRegisterSingletonType__Ljava_lang_String_2IILjava_lang_String_2Lio_qt_qml_QtQml_00024ValueCallback_2 - (JNIEnv * env, jclass, jstring uri, jint versionMajor, jint versionMinor, jstring qmlName, jobject callback){ - jint _result{-1}; - QTJAMBI_TRY{ - QByteArray _uri = qtjambi_to_qstring(env, uri).toLocal8Bit(); - QByteArray _qmlName = qtjambi_to_qstring(env, qmlName).toLocal8Bit(); -#if QT_VERSION < QT_VERSION_CHECK(6,0,0) - QQmlPrivate::RegisterSingletonType api = { - /* int version */ 0, - /* const char *uri */ _uri.constData(), - /* int versionMajor */ int(versionMajor), - /* int versionMinor */ int(versionMinor), - /* const char *typeName */ _qmlName.isEmpty() ? nullptr : _qmlName.constData(), - /* scriptApi */ qtjambi_to_functional< QJSValue (*)(QQmlEngine *, QJSEngine *) >(env, callback, "io/qt/qml/QtQml$ValueCallback"), - /* qobjectApi */ nullptr, - /* const QMetaObject *instanceMetaObject */ nullptr, - /* int typeId */ 0, - /* int revision */ 0 -#if QT_VERSION >= QT_VERSION_CHECK(5,14,0) - ,/* generalizedQobjectApi */ {} -#endif - }; -#else - QQmlPrivate::RegisterSingletonType api = { - /* int structVersion */ 0, - /* const char *uri */ _uri.constData(), - /*QTypeRevision version*/ QTypeRevision::fromVersion(versionMajor, versionMinor), - /* const char *typeName */ _qmlName.isEmpty() ? nullptr : _qmlName.constData(), - /* scriptApi */ qtjambi_to_functional< std::function >(env, callback, "io/qt/qml/QtQml$ValueCallback"), - /* qobjectApi */ nullptr, - /* const QMetaObject *instanceMetaObject */ nullptr, - /* QMetaType typeId */ QMetaType(QMetaType::UnknownType), - /* extensionObjectCreate */ nullptr, - /* extensionMetaObject */ nullptr, - /* int revision */ QTypeRevision::zero() - }; -#endif - _result = QQmlPrivate::qmlregister(QQmlPrivate::SingletonRegistration, &api); - }QTJAMBI_CATCH(const JavaException& exn){ - exn.raiseInJava(env); - }QTJAMBI_TRY_END - return _result; + /*QQmlCustomParser *customParser*/ nullptr, + /*int revision*/ 0 + }; + return QQmlPrivate::qmlregister(QQmlPrivate::TypeRegistration, &type); } - -/* - * Class: io_qt_qml_QtQml - * Method: qmlRegisterSingletonType - * Signature: (Ljava/lang/Class;Ljava/lang/String;IILjava/lang/String;Lio/qt/qml/QtQml$ObjectCallback;)I - */ -extern "C" Q_DECL_EXPORT jint JNICALL Java_io_qt_qml_QtQml_qmlRegisterSingletonType__Ljava_lang_Class_2Ljava_lang_String_2IILjava_lang_String_2Lio_qt_qml_QtQml_00024ObjectCallback_2 - (JNIEnv * env, jclass, jclass clazz, jstring uri, jint versionMajor, jint versionMinor, jstring qmlName, jobject callback){ - jint _result{-1}; - QTJAMBI_TRY{ - QString javaName = qtjambi_class_name(env, clazz); - - QByteArray _uri = qtjambi_to_qstring(env, uri).toLocal8Bit(); - QByteArray _qmlName = qtjambi_to_qstring(env, qmlName).toLocal8Bit(); - const QMetaObject *meta_object = qtjambi_metaobject_for_class(env, clazz); - if(!meta_object){ - jclass closestClass = resolveClosestQtSuperclass(env, clazz); - if(closestClass){ - const QMetaObject *original_meta_object = qtjambi_metaobject_for_class(env, closestClass); - meta_object = qtjambi_metaobject_for_class(env, clazz, original_meta_object); - } - } -#if QT_VERSION < QT_VERSION_CHECK(6,0,0) - QQmlPrivate::RegisterSingletonType api = { -#if QT_VERSION >= QT_VERSION_CHECK(5,14,0) - /* int version */ 3, -#else - /* int version */ 2, -#endif - /* const char *uri */ _uri.constData(), - /* int versionMajor */ int(versionMajor), - /* int versionMinor */ int(versionMinor), - /* const char *typeName */ _qmlName.isEmpty() ? nullptr : _qmlName.constData(), - /* scriptApi */ nullptr, -#if QT_VERSION >= QT_VERSION_CHECK(5,14,0) - /* qobjectApi */ nullptr, -#else - /* qobjectApi */ qtjambi_to_functional< QObject* (*)(QQmlEngine *, QJSEngine *) >(env, callback, "io/qt/qml/QtQml$ObjectCallback"), -#endif - /* const QMetaObject *instanceMetaObject */ meta_object, - /* int typeId */ registerQmlMetaType(javaName, meta_object), - /* int revision */ 0 -#if QT_VERSION >= QT_VERSION_CHECK(5,14,0) - ,/* generalizedQobjectApi */ qtjambi_to_functional< std::function >(env, callback, "io/qt/qml/QtQml$ObjectCallback") -#endif - }; -#else - QQmlPrivate::RegisterSingletonType api = { - /* int structVersion */ 0, - /* const char *uri */ _uri.constData(), - /*QTypeRevision version*/ QTypeRevision::fromVersion(versionMajor, versionMinor), - /* const char *typeName */ _qmlName.isEmpty() ? nullptr : _qmlName.constData(), - /* scriptApi */ nullptr, - /* qobjectApi */ qtjambi_to_functional< std::function >(env, callback, "io/qt/qml/QtQml$ObjectCallback"), - /* const QMetaObject *instanceMetaObject */ meta_object, - /* QMetaType typeId */ QMetaType(registerQmlMetaType(javaName, meta_object)), - /* extensionObjectCreate */ nullptr, - /* extensionMetaObject */ nullptr, - /* int revision */ QTypeRevision::zero() - }; #endif - _result = QQmlPrivate::qmlregister(QQmlPrivate::SingletonRegistration, &api); - }QTJAMBI_CATCH(const JavaException& exn){ - exn.raiseInJava(env); - }QTJAMBI_TRY_END - return _result; -} - -/* - * Class: io_qt_qml_QtQml - * Method: qmlRegisterUncreatableClass - * Signature: (Ljava/lang/Class;Ljava/lang/String;IILjava/lang/String;Ljava/lang/String;)I - */ -extern "C" Q_DECL_EXPORT jint JNICALL Java_io_qt_qml_QtQml_qmlRegisterUncreatableClass__Ljava_lang_Class_2Ljava_lang_String_2IILjava_lang_String_2Ljava_lang_String_2 - (JNIEnv * env, jclass, jclass clazz, jstring uri, jint versionMajor, jint versionMinor, jstring qmlName, jstring reason){ - jint _result{-1}; - QTJAMBI_TRY{ - QByteArray _uri = qtjambi_to_qstring(env, uri).toLocal8Bit(); - QByteArray _qmlName = qtjambi_to_qstring(env, qmlName).toLocal8Bit(); - - const QMetaObject *meta_object = qtjambi_metaobject_for_class(env, clazz); - if(!meta_object){ - jclass closestClass = resolveClosestQtSuperclass(env, clazz); - if(closestClass){ - const QMetaObject *original_meta_object = qtjambi_metaobject_for_class(env, closestClass); - meta_object = qtjambi_metaobject_for_class(env, clazz, original_meta_object); - } - } - _result = !meta_object ? -1 : qmlRegisterUncreatableMetaObject(*meta_object, - /*const char *uri*/ _uri.constData(), - /*int versionMajor*/ int(versionMajor), - /*int versionMinor*/ int(versionMinor), - /*const char *elementName*/ _qmlName.isEmpty() ? nullptr : _qmlName.constData(), - /*QString noCreationReason*/ qtjambi_to_qstring(env, reason)); - }QTJAMBI_CATCH(const JavaException& exn){ - exn.raiseInJava(env); - }QTJAMBI_TRY_END - return _result; -} extern "C" Q_DECL_EXPORT jlong JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_qml_QQmlIncubationController_00024WhileFlag_create) (JNIEnv *, jclass, jboolean flag) @@ -1925,23 +1670,6 @@ extern "C" Q_DECL_EXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_qml_ return result; } -// qjsEngine -extern "C" Q_DECL_EXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_qml_QtQml_qjsEngine) -(JNIEnv *__jni_env, - jclass, - QtJambiNativeID __object_nativeId) -{ - QTJAMBI_DEBUG_METHOD_PRINT("native", "qjsEngine") - jobject result{nullptr}; - QTJAMBI_TRY { - QObject *object = qtjambi_object_from_nativeId(__object_nativeId); - result = qtjambi_cast(__jni_env, qjsEngine(object)); - }QTJAMBI_CATCH(const JavaException& exn){ - exn.raiseInJava(__jni_env); - }QTJAMBI_TRY_END - return result; -} - #if QT_VERSION >= QT_VERSION_CHECK(6,3,0) using ConvertVariant = bool(QJSEngine::*)(const QVariant &value, QMetaType metaType, void *ptr); template <> diff --git a/src/cpp/qtjambi_qml/qtjambi_qml.h b/src/cpp/qtjambi_qml/qtjambi_qml.h new file mode 100644 index 00000000..54467e37 --- /dev/null +++ b/src/cpp/qtjambi_qml/qtjambi_qml.h @@ -0,0 +1,47 @@ +#ifndef QTJAMBI_QML_H +#define QTJAMBI_QML_H + +#include +#include "qqmllistproperty.h" + +QObject* qtjambi_qmlAttachedPropertiesObject(JNIEnv *env, jclass clazz, const QObject* obj, bool create); + +int qtjambi_qmlRegisterAnonymousSequentialContainer(JNIEnv *env, jobject containerType, const char* uri, int versionMajor); + +int qtjambi_qmlRegisterAnonymousType(JNIEnv *env, jclass clazz, const char* uri, int versionMajor); + +int qtjambi_qmlRegisterAnonymousType(JNIEnv *env, jclass clazz, int metaObjectRevisionMinor, const char* uri, int versionMajor); + +void qtjambi_qmlRegisterAnonymousTypesAndRevisions(JNIEnv *env, jclass clazz, const char* uri, int versionMajor); + +int qtjambi_qmlRegisterExtendedType(JNIEnv *env, jclass clazz, jclass extendedClazz); + +int qtjambi_qmlRegisterExtendedType(JNIEnv *env, jclass clazz, jclass extendedClazz, const char* uri, int versionMajor); + +int qtjambi_qmlRegisterExtendedType(JNIEnv *env, jclass clazz, jclass extendedClazz, const char* uri, int versionMajor, int versionMinor, const char* qmlName); + +int qtjambi_qmlRegisterExtendedUncreatableType(JNIEnv *env, jclass clazz, jclass extendedClazz, const char* uri, int versionMajor, int versionMinor, const char* qmlName, QString reason); + +int qtjambi_qmlRegisterExtendedUncreatableType(JNIEnv *env, jclass clazz, jclass extendedClazz, int metaObjectRevision, const char* uri, int versionMajor, int versionMinor, const char* qmlName, QString reason); + +int qtjambi_qmlRegisterInterface(JNIEnv *env, jclass clazz, const char* uri); + +int qtjambi_qmlRegisterInterface(JNIEnv *env, jclass clazz, const char* uri, int versionMajor); + +int qtjambi_qmlRegisterSingletonType(JNIEnv *env, const char* uri, int versionMajor, int versionMinor, const char* typeName, const QtQml::ValueCallback& callback); + +int qtjambi_qmlRegisterSingletonType(JNIEnv *env, jclass type, const char* uri, int versionMajor, int versionMinor, const char* typeName, const QtQml::ObjectCallback& callback); + +int qtjambi_qmlRegisterRevision(JNIEnv *env, jclass type, int metaObjectRevision, const char* uri, int versionMajor, int versionMinor); + +int qtjambi_qmlRegisterType(JNIEnv *env, jclass type); + +int qtjambi_qmlRegisterType(JNIEnv *env, jclass type, const char* uri, int versionMajor, int versionMinor, const char* qmlName); + +int qtjambi_qmlRegisterType(JNIEnv *env, jclass type, int metaObjectRevision, const char* uri, int versionMajor, int versionMinor, const char* qmlName); + +int qtjambi_qmlRegisterUncreatableType(JNIEnv *env, jclass type, const char* uri, int versionMajor, int versionMinor, const char* qmlName, const QString& reason); + +int qtjambi_qmlRegisterUncreatableType(JNIEnv *env, jclass type, int metaObjectRevision, const char* uri, int versionMajor, int versionMinor, const char* qmlName, const QString& reason); + +#endif // QTJAMBI_QML_H diff --git a/src/cpp/qtjambi_qml/qtjambi_qml.pro b/src/cpp/qtjambi_qml/qtjambi_qml.pro index 66738e0e..eae7ccc0 100644 --- a/src/cpp/qtjambi_qml/qtjambi_qml.pro +++ b/src/cpp/qtjambi_qml/qtjambi_qml.pro @@ -10,6 +10,7 @@ HEADERS += qqmllistproperty.h \ qmlcreateparentfunction.h \ qmlattachedpropertiesfunction.h \ qmlcreatorfunction.h \ + qtjambi_qml.h \ qtjambi_qml_hashes.h \ qtjambi_qml_repository.h SOURCES += qmlregistry.cpp qqmllistproperty.cpp \ diff --git a/src/cpp/qtjambi_quick/QSGMetalTexture.mm b/src/cpp/qtjambi_quick/QSGMetalTexture.mm new file mode 100644 index 00000000..4a994824 --- /dev/null +++ b/src/cpp/qtjambi_quick/QSGMetalTexture.mm @@ -0,0 +1,11 @@ +#include +#include + +void* qtjambi_QSGMetalTexture_nativeTexture(JNIEnv *, const void* ptr){ + const QNativeInterface::QSGMetalTexture* texture = reinterpret_cast(ptr); + return texture->nativeTexture(); +} +QSGTexture * qtjambi_QSGMetalTexture_fromNative(JNIEnv *, void* texture, QQuickWindow* window, const QSize& size, QQuickWindow::CreateTextureOptions options){ + id ml = reinterpret_cast>(texture); + return QNativeInterface::QSGMetalTexture::fromNative(ml, window, size, options); +} diff --git a/src/cpp/qtjambi_quick/qtjambi_qquick.cpp b/src/cpp/qtjambi_quick/qtjambi_quick.cpp similarity index 81% rename from src/cpp/qtjambi_quick/qtjambi_qquick.cpp rename to src/cpp/qtjambi_quick/qtjambi_quick.cpp index f31230cd..e6ac4a52 100644 --- a/src/cpp/qtjambi_quick/qtjambi_qquick.cpp +++ b/src/cpp/qtjambi_quick/qtjambi_quick.cpp @@ -27,6 +27,21 @@ ** ****************************************************************************/ +#include +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) && QT_CONFIG(vulkan) +#if !__has_include() +#define QVULKANINSTANCE_H +typedef typename std::conditional::type VkImage; +//typedef std::conditional::type VkPhysicalDevice; +//typedef struct VkDevice_T *VkDevice; +typedef enum VkImageLayout{}VkImageLayout; +typedef enum VkFormat{}VkFormat; +#endif + +#include +#include +#endif + #include #include #include @@ -239,3 +254,29 @@ extern "C" Q_DECL_EXPORT void JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_quick_Q }QTJAMBI_TRY_END } +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) && QT_CONFIG(vulkan) + +template::value> +struct CastHelper{ + static constexpr T cast(jlong image) {return reinterpret_cast(image);} +}; + +template +struct CastHelper{ + static constexpr T cast(jlong image) {return static_cast(image);} +}; + +QSGTexture * qtjambi_QSGVulkanTexture_fromNative(JNIEnv *, jlong image, jint layout, QQuickWindow* window, const QSize& size, QQuickWindow::CreateTextureOptions options){ + return QNativeInterface::QSGVulkanTexture::fromNative(CastHelper::cast(image), VkImageLayout(layout), window, size, options); +} + +QQuickRenderTarget qtjambi_QQuickRenderTarget_fromVulkanImage(JNIEnv *, jlong image, jint layout, const QSize& pixelSize, int sampleCount){ + return QQuickRenderTarget::fromVulkanImage(CastHelper::cast(image), VkImageLayout(layout), pixelSize, sampleCount); +} + +#if QT_VERSION >= QT_VERSION_CHECK(6, 4, 0) +QQuickRenderTarget qtjambi_QQuickRenderTarget_fromVulkanImage(JNIEnv *, jlong image, jint layout, jint format, const QSize& pixelSize, int sampleCount){ + return QQuickRenderTarget::fromVulkanImage(CastHelper::cast(image), VkImageLayout(layout), VkFormat(format), pixelSize, sampleCount); +} +#endif +#endif diff --git a/src/cpp/qtjambi_quick/qtjambi_quick.pro b/src/cpp/qtjambi_quick/qtjambi_quick.pro index 37c1a55e..1e06a7aa 100644 --- a/src/cpp/qtjambi_quick/qtjambi_quick.pro +++ b/src/cpp/qtjambi_quick/qtjambi_quick.pro @@ -12,9 +12,13 @@ DEPENDPATH += $$PWD QT += core gui qml quick quick-private SOURCES += \ - qtjambi_qquick.cpp\ + qtjambi_quick.cpp \ qtjambi_quick_repository.cpp HEADERS += \ - qtjambi_quick_hashes.h\ + qtjambi_quick_hashes.h \ qtjambi_quick_repository.h + +greaterThan(QT_MAJOR_VERSION, 5):{ + OBJECTIVE_SOURCES += QSGMetalTexture.mm +} diff --git a/src/cpp/qtjambi_quick/qtjambi_quick_hashes.h b/src/cpp/qtjambi_quick/qtjambi_quick_hashes.h index a72ec678..ea082989 100644 --- a/src/cpp/qtjambi_quick/qtjambi_quick_hashes.h +++ b/src/cpp/qtjambi_quick/qtjambi_quick_hashes.h @@ -8,10 +8,12 @@ #include #include +#ifndef QT_JAMBI_RUN struct RenderState{ QSGMaterialShader::RenderState::DirtyStates m_dirty; const void *m_data; }; +#endif inline hash_type qHash(const QSGMaterialShader::RenderState &value, hash_type hashCode = 0) { diff --git a/src/cpp/qtjambi_remoteobjects/qtjambi_remoteobjects.cpp b/src/cpp/qtjambi_remoteobjects/qtjambi_remoteobjects.cpp index 22e50fa2..813232cb 100644 --- a/src/cpp/qtjambi_remoteobjects/qtjambi_remoteobjects.cpp +++ b/src/cpp/qtjambi_remoteobjects/qtjambi_remoteobjects.cpp @@ -30,88 +30,19 @@ #include #include #include +#include +#include +#include #include #include #include +#include "qtjambi_remoteobjects.h" +#include "qtjambi_remoteojects_repository.h" #if QT_VERSION >= QT_VERSION_CHECK(6, 2, 0) using ClientIoDevice = QtROClientIoDevice; #endif -extern "C" Q_DECL_EXPORT void JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_remoteobjects_QtRemoteObjects_qRegisterRemoteObjectsServer) - (JNIEnv *__jni_env, - jclass, - jobject id0, - jclass type1, - jobject constructor2) -{ - struct ROServerFactory{ - using CreatorFunc = QConnectionAbstractServer * (*)(QObject *); - QHash m_creatorFuncs; - }; - QTJAMBI_DEBUG_METHOD_PRINT("native", "qRegisterRemoteObjectsServer(const QString & id)") - Q_UNUSED(__jni_env) - ROServerFactory *serverFactory = reinterpret_cast(QtROServerFactory::instance()); - Q_ASSERT(serverFactory); - const QString& __qt_id0 = qtjambi_to_qstring(__jni_env, jstring(id0)); - jmethodID constructor = __jni_env->FromReflectedMethod(constructor2); - type1 = jclass(__jni_env->NewGlobalRef(jobject(type1))); - uint hash = uint(qtjambi_java_object_hashcode(__jni_env,type1)); - serverFactory->m_creatorFuncs[__qt_id0] = qtjambi_function_pointer<4,QConnectionAbstractServer*(QObject *)>( - [type1,constructor](QObject * o) -> QConnectionAbstractServer*{ - if(JNIEnv* env = qtjambi_current_environment()){ - QTJAMBI_JNI_LOCAL_FRAME(env, 200) - jobject parent = qtjambi_from_QObject(env, o); - jobject newObject = env->NewObject(type1, constructor, parent); - qtjambi_throw_java_exception(env); - return reinterpret_cast(qtjambi_to_qobject(env, newObject)); - } - return nullptr; - }, - hash); -} - -extern "C" Q_DECL_EXPORT void JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_remoteobjects_QtRemoteObjects_qRegisterRemoteObjectsClient) - (JNIEnv *__jni_env, - jclass, - jobject id0, - jclass type1, - jobject constructor2) -{ - struct ROClientFactory{ - using CreatorFunc = ClientIoDevice * (*)(QObject *); - QHash m_creatorFuncs; - }; - QTJAMBI_DEBUG_METHOD_PRINT("native", "qRegisterRemoteObjectsClient(const QString & id)") - Q_UNUSED(__jni_env) - ROClientFactory *factory = reinterpret_cast(QtROClientFactory::instance()); - Q_ASSERT(factory); - const QString& __qt_id0 = qtjambi_to_qstring(__jni_env, jstring(id0)); - jmethodID constructor = __jni_env->FromReflectedMethod(constructor2); - type1 = jclass(__jni_env->NewGlobalRef(jobject(type1))); - uint hash = uint(qtjambi_java_object_hashcode(__jni_env, type1)); - factory->m_creatorFuncs[__qt_id0] = qtjambi_function_pointer<4,ClientIoDevice*(QObject *)>( - [type1,constructor](QObject * o) -> ClientIoDevice*{ - if(JNIEnv* env = qtjambi_current_environment()){ - QTJAMBI_JNI_LOCAL_FRAME(env, 200) - jobject parent = qtjambi_from_QObject(env, o); - jobject newObject = env->NewObject(type1, constructor, parent); - qtjambi_throw_java_exception(env); - return reinterpret_cast(qtjambi_to_qobject(env, newObject)); - } - return nullptr; - }, - hash); -} - -extern "C" Q_DECL_EXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_remoteobjects_QRemoteObjectNode_acquire) -(JNIEnv *__jni_env, jobject __this, jclass type, jobject constructor, jobject name) -{ - jmethodID constructorID = __jni_env->FromReflectedMethod(constructor); - Q_ASSERT(constructorID); - return __jni_env->NewObject(type, constructorID, __this, name); -} - void __qt_construct_QRemoteObjectPendingCall_1(void* __qtjambi_ptr, JNIEnv* __jni_env, jobject __jni_object, jvalue* __java_arguments); void __qt_construct_QRemoteObjectPendingCall_0(void* __qtjambi_ptr, JNIEnv* __jni_env, jobject __jni_object, jvalue* __java_arguments); void __qt_destruct_QRemoteObjectPendingCall(void* ptr); @@ -146,79 +77,139 @@ extern "C" Q_DECL_EXPORT void JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_remoteo }QTJAMBI_TRY_END } -extern "C" Q_DECL_EXPORT void JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_remoteobjects_QtRemoteObjects_copyStoredProperties__Lio_qt_core_QMetaObject_2Ljava_lang_Object_2Ljava_lang_Object_2) -(JNIEnv *__jni_env, - jclass, - jobject type, - jobject src, - jobject dst) -{ - const QMetaObject* mo = qtjambi_cast(__jni_env, type); - QtRemoteObjects::copyStoredProperties(mo, src, dst); +void qtjambi_qRegisterRemoteObjectsClient(JNIEnv *env, jclass type, const QString& id){ + struct ROClientFactory{ + using CreatorFunc = ClientIoDevice * (*)(QObject *); + QHash m_creatorFuncs; + }; + ROClientFactory *factory = reinterpret_cast(QtROClientFactory::instance()); + Q_ASSERT(factory); + jmethodID constructor = env->GetMethodID(type, "", "(Lio/qt/core/QObject;)V"); + qtjambi_throw_java_exception(env); + Q_ASSERT(constructor); + JObjectWrapper _type(env, type); + uint hash = uint(qtjambi_java_object_hashcode(env, type)); + factory->m_creatorFuncs[id] = qtjambi_function_pointer<4,ClientIoDevice*(QObject *)>( + [_type,constructor](QObject * o) -> ClientIoDevice*{ + if(JNIEnv* env = qtjambi_current_environment()){ + QTJAMBI_JNI_LOCAL_FRAME(env, 200) + jobject parent = qtjambi_from_QObject(env, o); + jobject newObject = env->NewObject(jclass(_type.object()), constructor, parent); + qtjambi_throw_java_exception(env); + return reinterpret_cast(qtjambi_to_qobject(env, newObject)); + } + return nullptr; + }, + hash); } -extern "C" Q_DECL_EXPORT void JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_remoteobjects_QtRemoteObjects_copyStoredProperties__Lio_qt_core_QMetaObject_2JJ) -(JNIEnv *__jni_env, - jclass, - jobject type, - QtJambiNativeID src, - QtJambiNativeID dst) -{ - const QMetaObject* mo = qtjambi_cast(__jni_env, type); - QtRemoteObjects::copyStoredProperties(mo, qtjambi_from_nativeId(src), qtjambi_from_nativeId(dst)); +void qtjambi_qRegisterRemoteObjectsServer(JNIEnv *env, jclass type, const QString& id){ + struct ROServerFactory{ + using CreatorFunc = QConnectionAbstractServer * (*)(QObject *); + QHash m_creatorFuncs; + }; + ROServerFactory *serverFactory = reinterpret_cast(QtROServerFactory::instance()); + Q_ASSERT(serverFactory); + jmethodID constructor = env->GetMethodID(type, "", "(Lio/qt/core/QObject;)V"); + qtjambi_throw_java_exception(env); + Q_ASSERT(constructor); + JObjectWrapper _type(env, type); + uint hash = uint(qtjambi_java_object_hashcode(env,type)); + serverFactory->m_creatorFuncs[id] = qtjambi_function_pointer<4,QConnectionAbstractServer*(QObject *)>( + [_type,constructor](QObject * o) -> QConnectionAbstractServer*{ + if(JNIEnv* env = qtjambi_current_environment()){ + QTJAMBI_JNI_LOCAL_FRAME(env, 200) + jobject parent = qtjambi_from_QObject(env, o); + jobject newObject = env->NewObject(jclass(_type.object()), constructor, parent); + qtjambi_throw_java_exception(env); + return reinterpret_cast(qtjambi_to_qobject(env, newObject)); + } + return nullptr; + }, + hash); } -extern "C" Q_DECL_EXPORT void JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_remoteobjects_QtRemoteObjects_copyStoredPropertiesStreamOut__Lio_qt_core_QMetaObject_2Ljava_lang_Object_2J) -(JNIEnv *__jni_env, - jclass, - jobject type, - jobject src, - QtJambiNativeID dst) -{ - const QMetaObject* mo = qtjambi_cast(__jni_env, type); - QDataStream* stream = qtjambi_object_from_nativeId(dst); - Q_ASSERT(stream); - QtRemoteObjects::copyStoredProperties(mo, src, *stream); +void qtjambi_copyStoredProperties(JNIEnv *env, jclass type, jobject src, jobject dst){ + if(Java::QtCore::QObject::isAssignableFrom(env, type)){ + JavaException::raiseIllegalArgumentException(env, "Only gadget types allowed." QTJAMBI_STACKTRACEINFO ); + } + const QMetaObject *meta_object = qtjambi_metaobject_for_class(env, type); + if(!meta_object){ + jclass closestClass = resolveClosestQtSuperclass(env, type); + if(closestClass){ + const QMetaObject *original_meta_object = qtjambi_metaobject_for_class(env, closestClass); + meta_object = qtjambi_metaobject_for_class(env, type, original_meta_object); + } + } + if(!meta_object) + JavaException::raiseIllegalArgumentException(env, qPrintable(QString("No meta object available for class %1").arg(qtjambi_class_name(env, type))) QTJAMBI_STACKTRACEINFO ); + const void *_src; + void *_dst; + if(Java::QtJambi::QtObjectInterface::isInstanceOf(env, src)){ + _src = qtjambi_to_object(env, src); + }else{ + _src = src; + } + JObjectWrapper wrapper; + if(Java::QtJambi::QtObjectInterface::isInstanceOf(env, dst)){ + _dst = qtjambi_to_object(env, dst); + }else{ + wrapper = JObjectWrapper(env, dst); + _dst = &wrapper; + } + QtRemoteObjects::copyStoredProperties(meta_object, _src, _dst); } -extern "C" Q_DECL_EXPORT void JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_remoteobjects_QtRemoteObjects_copyStoredPropertiesStreamOut__Lio_qt_core_QMetaObject_2JJ) -(JNIEnv *__jni_env, - jclass, - jobject type, - QtJambiNativeID src, - QtJambiNativeID dst) -{ - const QMetaObject* mo = qtjambi_cast(__jni_env, type); - QDataStream* stream = qtjambi_object_from_nativeId(dst); - Q_ASSERT(stream); - QtRemoteObjects::copyStoredProperties(mo, qtjambi_from_nativeId(src), *stream); +void qtjambi_copyStoredProperties(JNIEnv *env, jclass type, QDataStream& src, jobject dst){ + if(Java::QtCore::QObject::isAssignableFrom(env, type)){ + JavaException::raiseIllegalArgumentException(env, "Only gadget types allowed." QTJAMBI_STACKTRACEINFO ); + } + const QMetaObject *meta_object = qtjambi_metaobject_for_class(env, type); + if(!meta_object){ + jclass closestClass = resolveClosestQtSuperclass(env, type); + if(closestClass){ + const QMetaObject *original_meta_object = qtjambi_metaobject_for_class(env, closestClass); + meta_object = qtjambi_metaobject_for_class(env, type, original_meta_object); + } + } + if(!meta_object) + JavaException::raiseIllegalArgumentException(env, qPrintable(QString("No meta object available for class %1").arg(qtjambi_class_name(env, type))) QTJAMBI_STACKTRACEINFO ); + void *_dst; + JObjectWrapper wrapper; + if(Java::QtJambi::QtObjectInterface::isInstanceOf(env, dst)){ + _dst = qtjambi_to_object(env, dst); + }else{ + wrapper = JObjectWrapper(env, dst); + _dst = &wrapper; + } + QtRemoteObjects::copyStoredProperties(meta_object, src, _dst); } -extern "C" Q_DECL_EXPORT void JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_remoteobjects_QtRemoteObjects_copyStoredPropertiesStreamIn__Lio_qt_core_QMetaObject_2JLjava_lang_Object_2) -(JNIEnv *__jni_env, - jclass, - jobject type, - QtJambiNativeID src, - jobject dst) -{ - const QMetaObject* mo = qtjambi_cast(__jni_env, type); - QDataStream* stream = qtjambi_object_from_nativeId(src); - Q_ASSERT(stream); - QtRemoteObjects::copyStoredProperties(mo, *stream, dst); +void qtjambi_copyStoredProperties(JNIEnv *env, jclass type, jobject src, QDataStream& dst){ + if(Java::QtCore::QObject::isAssignableFrom(env, type)){ + JavaException::raiseIllegalArgumentException(env, "Only gadget types allowed." QTJAMBI_STACKTRACEINFO ); + } + const QMetaObject *meta_object = qtjambi_metaobject_for_class(env, type); + if(!meta_object){ + jclass closestClass = resolveClosestQtSuperclass(env, type); + if(closestClass){ + const QMetaObject *original_meta_object = qtjambi_metaobject_for_class(env, closestClass); + meta_object = qtjambi_metaobject_for_class(env, type, original_meta_object); + } + } + if(!meta_object) + JavaException::raiseIllegalArgumentException(env, qPrintable(QString("No meta object available for class %1").arg(qtjambi_class_name(env, type))) QTJAMBI_STACKTRACEINFO ); + const void *_src; + JObjectWrapper wrapper; + if(Java::QtJambi::QtObjectInterface::isInstanceOf(env, src)){ + _src = qtjambi_to_object(env, src); + }else{ + wrapper = JObjectWrapper(env, src); + _src = &wrapper; + } + QtRemoteObjects::copyStoredProperties(meta_object, _src, dst); } -extern "C" Q_DECL_EXPORT void JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_remoteobjects_QtRemoteObjects_copyStoredPropertiesStreamIn__Lio_qt_core_QMetaObject_2JJ) -(JNIEnv *__jni_env, - jclass, - jobject type, - QtJambiNativeID src, - QtJambiNativeID dst) -{ - const QMetaObject* mo = qtjambi_cast(__jni_env, type); - QDataStream* stream = qtjambi_object_from_nativeId(src); - Q_ASSERT(stream); - QtRemoteObjects::copyStoredProperties(mo, *stream, qtjambi_from_nativeId(dst)); -} void initialize_meta_info_RemoteObject(){ const std::type_info& typeId = registerTypeInfo>("QRemoteObjectPendingReply", "io/qt/remoteobjects/QRemoteObjectPendingReply"); diff --git a/src/cpp/qtjambi_remoteobjects/qtjambi_remoteobjects.h b/src/cpp/qtjambi_remoteobjects/qtjambi_remoteobjects.h index 7d237b12..f50c9838 100644 --- a/src/cpp/qtjambi_remoteobjects/qtjambi_remoteobjects.h +++ b/src/cpp/qtjambi_remoteobjects/qtjambi_remoteobjects.h @@ -29,6 +29,7 @@ #ifndef QTJAMBI_REMOTEOBJECTS_H #define QTJAMBI_REMOTEOBJECTS_H +#include #include inline hash_type qHash(const QRemoteObjectSourceLocationInfo& info){ @@ -37,4 +38,12 @@ inline hash_type qHash(const QRemoteObjectSourceLocationInfo& info){ return hashCode; } +#ifndef QT_JAMBI_RUN +void qtjambi_qRegisterRemoteObjectsClient(JNIEnv *env, jclass type, const QString& id); +void qtjambi_qRegisterRemoteObjectsServer(JNIEnv *env, jclass type, const QString& id); +void qtjambi_copyStoredProperties(JNIEnv *env, jclass type, jobject src, jobject dst); +void qtjambi_copyStoredProperties(JNIEnv *env, jclass type, QDataStream& src, jobject dst); +void qtjambi_copyStoredProperties(JNIEnv *env, jclass type, jobject src, QDataStream& dst); +#endif + #endif // QTJAMBI_REMOTEOBJECTS_H diff --git a/src/cpp/qtjambi_remoteobjects/qtjambi_remoteojects_repository.cpp b/src/cpp/qtjambi_remoteobjects/qtjambi_remoteojects_repository.cpp index 5358d2e0..531277e8 100644 --- a/src/cpp/qtjambi_remoteobjects/qtjambi_remoteojects_repository.cpp +++ b/src/cpp/qtjambi_remoteobjects/qtjambi_remoteojects_repository.cpp @@ -10,4 +10,7 @@ QTJAMBI_REPOSITORY_DEFINE_CLASS(io/qt/remoteobjects,QtROIoDeviceBase$ReadResult, QTJAMBI_REPOSITORY_DEFINE_CONSTRUCTOR(Lio/qt/remoteobjects/QtRemoteObjects$QRemoteObjectPacketTypeEnum;Ljava/lang/String;) ) } +namespace QtJambi{ +QTJAMBI_REPOSITORY_DEFINE_CLASS(io/qt,QtObjectInterface,) +} } diff --git a/src/cpp/qtjambi_remoteobjects/qtjambi_remoteojects_repository.h b/src/cpp/qtjambi_remoteobjects/qtjambi_remoteojects_repository.h index 0dbdb3da..44f211a5 100644 --- a/src/cpp/qtjambi_remoteobjects/qtjambi_remoteojects_repository.h +++ b/src/cpp/qtjambi_remoteobjects/qtjambi_remoteojects_repository.h @@ -11,6 +11,9 @@ namespace QtRemoteObjects { QTJAMBI_REPOSITORY_DECLARE_CLASS(QtROIoDeviceBase$ReadResult, QTJAMBI_REPOSITORY_DECLARE_CONSTRUCTOR()) } +namespace QtJambi{ + QTJAMBI_REPOSITORY_DECLARE_EMPTY_CLASS(QtObjectInterface) +} } #endif // QTJAMBI_REMOTE_OJECTS_REPOSITORY_H diff --git a/src/cpp/qtjambi_serialbus/qtjambi_serialbus.cpp b/src/cpp/qtjambi_serialbus/qtjambi_serialbus.cpp index a5462c02..c1b112ee 100644 --- a/src/cpp/qtjambi_serialbus/qtjambi_serialbus.cpp +++ b/src/cpp/qtjambi_serialbus/qtjambi_serialbus.cpp @@ -1,4 +1,5 @@ #include +#include #include "qtjambi_serialbus.h" namespace Java{ @@ -9,3 +10,17 @@ namespace Java{ ) } } + +class QModbusSerialAdu{ +public: + static void* create_QModbusPdu(void* placement, const void * copy){ + if(copy) + return new(placement) QModbusPdu(*reinterpret_cast(copy)); + else + return new(placement) QModbusPdu(); + } +}; + +void* create_QModbusPdu(void* placement, const void * copy){ + return QModbusSerialAdu::create_QModbusPdu(placement, copy); +} diff --git a/src/cpp/qtjambi_spatialaudio/qtjambi_spatialaudio.pro b/src/cpp/qtjambi_spatialaudio/qtjambi_spatialaudio.pro new file mode 100644 index 00000000..af70064e --- /dev/null +++ b/src/cpp/qtjambi_spatialaudio/qtjambi_spatialaudio.pro @@ -0,0 +1,11 @@ +QTJAMBILIB = QtJambiSpatialAudio +TARGET = $$QTJAMBILIB + +VERSION = $$section(QT_VERSION, ., 0, 1).$$QTJAMBI_PATCH_VERSION + +include(../qtjambi/qtjambi_include.pri) +exists($$QTJAMBI_BUILDDIR): include($$QTJAMBI_BUILDDIR/generator/out/cpp/$$QTJAMBILIB/generated.pri) + +QT = core multimedia spatialaudio + +HEADERS += diff --git a/src/cpp/qtjambi_test/qtjambi_test.cpp b/src/cpp/qtjambi_test/qtjambi_test.cpp index 9c7b4d3c..59d9331b 100644 --- a/src/cpp/qtjambi_test/qtjambi_test.cpp +++ b/src/cpp/qtjambi_test/qtjambi_test.cpp @@ -6,6 +6,12 @@ #include #include +namespace QTest{ +void addColumn(const char* name, int id){ + QTest::addColumnInternal(id, name); +} +} + #if QT_VERSION < QT_VERSION_CHECK(6,0,0) #include @@ -16,6 +22,7 @@ extern "C" Q_DECL_EXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_test jobject device1, jboolean autoCommit2, jboolean isWidget){ + Q_UNUSED(isWidget) struct QTouchEventSequence{ QTouchEventSequence(QWidget *widget, QTouchDevice *aDevice, bool autoCommit) : sequence(QTest::touchEvent(widget, aDevice, autoCommit)) @@ -43,6 +50,7 @@ extern "C" Q_DECL_EXPORT jobject JNICALL QTJAMBI_FUNCTION_PREFIX(Java_io_qt_test jobject device1, jboolean autoCommit2, jboolean isWidget){ + Q_UNUSED(isWidget) struct QTouchEventSequence{ QTouchEventSequence(QWindow *window, QTouchDevice *aDevice, bool autoCommit) : sequence(QTest::touchEvent(window, aDevice, autoCommit)) diff --git a/src/cpp/qtjambi_test/qtjambi_test_util.h b/src/cpp/qtjambi_test/qtjambi_test_util.h index 1f654eba..1d8fad19 100644 --- a/src/cpp/qtjambi_test/qtjambi_test_util.h +++ b/src/cpp/qtjambi_test/qtjambi_test_util.h @@ -2,6 +2,7 @@ #define QTJAMBI_TEST_UTIL_H #include +#include #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) #include @@ -221,4 +222,9 @@ class QMetaAssociationForContainer> : public QMetaContaine #endif +#ifndef QT_JAMBI_RUN +namespace QTest{ +void addColumn(const char* name, int id); +} +#endif #endif // QTJAMBI_TEST_UTIL_H diff --git a/src/java/ant-qtjambi/io/qt/tools/ant/ForeachVersionTask.java b/src/java/ant-qtjambi/io/qt/tools/ant/ForeachVersionTask.java index 9a2845ae..4b122de7 100644 --- a/src/java/ant-qtjambi/io/qt/tools/ant/ForeachVersionTask.java +++ b/src/java/ant-qtjambi/io/qt/tools/ant/ForeachVersionTask.java @@ -24,6 +24,8 @@ public void execute() throws BuildException { String dirs = AntUtil.getPropertyAsString(propertyHelper, "qtjambi.qtdirs"); String ndk = AntUtil.getPropertyAsString(propertyHelper, "qtjambi.android.ndk"); + if(ndk==null || ndk.isEmpty()) + ndk = System.getenv("ANDROID_NDK"); String createAndroid = AntUtil.getPropertyAsString(propertyHelper, "android"); boolean maybeAndroid = ndk!=null && !ndk.isEmpty() diff --git a/src/java/ant-qtjambi/io/qt/tools/ant/InitializeBuildTask.java b/src/java/ant-qtjambi/io/qt/tools/ant/InitializeBuildTask.java index 72869a6a..4674f2bd 100644 --- a/src/java/ant-qtjambi/io/qt/tools/ant/InitializeBuildTask.java +++ b/src/java/ant-qtjambi/io/qt/tools/ant/InitializeBuildTask.java @@ -171,6 +171,7 @@ static class ModuleInfo { modules.put("pdfwidgets", new ModuleInfo("QTJAMBI_NO_PDFWIDGETS", "QtPdfWidgets")); modules.put("activex", new ModuleInfo("QTJAMBI_NO_ACTIVEX", "QtAxBase")); modules.put("httpserver", new ModuleInfo("QTJAMBI_NO_HTTPSERVER", "QtHttpServer")); + modules.put("spatialaudio", new ModuleInfo("QTJAMBI_NO_SPATIALAUDIO", "QtSpatialAudio")); } // did somebody mention something about methods never being longer than 10 diff --git a/src/java/ant-qtjambi/io/qt/tools/ant/ModifyTestResultsTask.java b/src/java/ant-qtjambi/io/qt/tools/ant/ModifyTestResultsTask.java index 48058687..4a679c6b 100644 --- a/src/java/ant-qtjambi/io/qt/tools/ant/ModifyTestResultsTask.java +++ b/src/java/ant-qtjambi/io/qt/tools/ant/ModifyTestResultsTask.java @@ -2,6 +2,7 @@ import java.io.FileInputStream; import java.io.FileOutputStream; +import java.io.IOException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; @@ -37,12 +38,16 @@ public void execute() throws BuildException { transformer.setOutputProperty(OutputKeys.INDENT, "yes"); transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2"); - for(String file : directory.list()){ + loop: for(String file : directory.list()){ if(file.endsWith(".xml")) { java.io.File xml = new java.io.File(directory, file); Document doc; try(FileInputStream fis = new FileInputStream(xml)){ doc = builder.parse(fis); + }catch(org.xml.sax.SAXParseException e) { + throw new org.xml.sax.SAXParseException(xml.getName()+" "+e.getMessage(), null, e); + }catch(IOException e) { + throw new IOException(xml.getName()+" "+e.getMessage(), e); } NodeList childNodes = doc.getChildNodes(); for(int i=0, length=childNodes.getLength(); i{ try { byte[] b = new byte[1024]; int length = System.in.read(b); if(new String(b, 0, length).startsWith("quit")) { + System.out.println("quit QtRemoteObjectsPong"); QCoreApplication.quit(); } } catch (Exception e) { @@ -170,7 +178,18 @@ public static void main(String... args) { } System.out.println("QtRemoteObjectsPong shutting down..."); }else { - System.out.println(host.lastError()); + if (args.length > 1) { + System.out.println("QtRemoteObjectsPong write hello-file..."); + QFile file = new QFile(QApplication.arguments().get(1)); + if (file.open(QIODevice.OpenModeFlag.WriteOnly)) { + file.write(new QByteArray(QApplication.arguments().get(2))); + file.close(); + }else { + System.out.println("unable to write to " + QApplication.arguments().get(1)); + } + file.dispose(); + } + System.out.println("unable to start remoting: "+host.lastError()); } host.dispose(); pong.dispose(); diff --git a/src/java/autotest/io/qt/autotests/TestConcurrent.java b/src/java/autotest/io/qt/autotests/TestConcurrent.java index f24a5ed1..a781faff 100644 --- a/src/java/autotest/io/qt/autotests/TestConcurrent.java +++ b/src/java/autotest/io/qt/autotests/TestConcurrent.java @@ -134,27 +134,23 @@ public void testMappedReduced() { for (int i=0; i future = QtConcurrent.mappedReduced(ints, i->((Integer)(i*i)).toString(), - new QtConcurrent.ReducedFunctor() { - public MutableString defaultResult() { - return new MutableString("5"); - } - - public void reduce(MutableString result, String n) { - int i = Integer.parseInt(result.value) + Integer.parseInt(n); - result.value = Integer.valueOf(i).toString(); - } - } + QFuture future = QtConcurrent.mappedReduced( + ints, + i->i*i, + (String r, Integer n) -> { + Integer i = (r.isEmpty() ? 0 : Integer.parseInt(r)) + n; + return i.toString(); + } ); assertEquals(COUNT, ints.size()); - int n=5; + int n=0; for (int i=0; i((Integer)(i*i)).toString(), - new QtConcurrent.ReducedFunctor() { - public MutableString defaultResult() { - return new MutableString("5"); - } - - public void reduce(MutableString result, String n) { - int i = Integer.parseInt(result.value) + Integer.parseInt(n); - result.value = Integer.valueOf(i).toString(); - } + String result = QtConcurrent.blockingMappedReduced(ints, + i->i*i, + (String r, Integer n) -> { + Integer i = (r.isEmpty() ? 0 : Integer.parseInt(r)) + n; + return i.toString(); } ); assertEquals(COUNT, ints.size()); - int n=5; + int n=0; for (int i=0; i future = QtConcurrent.filteredReduced(ints, + QFuture future = QtConcurrent.filteredReduced(ints, i->i >= COUNT, - new QtConcurrent.ReducedFunctor() { - public MutableInteger defaultResult() { - return new MutableInteger(3); - } - - public void reduce(MutableInteger result, Integer intermediate) { - result.value += intermediate; - } - } + (r, intermediate)->{ + return r + intermediate; + } ); future.waitForFinished(); assertEquals(COUNT*2, ints.size()); assertEquals(1, future.resultCount()); - int n=3; + int n=0; for (int i=COUNT; ii >= COUNT, - new QtConcurrent.ReducedFunctor() { - public MutableInteger defaultResult() { - return new MutableInteger(3); - } - - public void reduce(MutableInteger result, Integer intermediate) { - result.value += intermediate; - } - } - + (r, intermediate)->r + intermediate ); assertEquals(COUNT*2, ints.size()); - int n=3; + int n=0; for (int i=COUNT; i ints = new ArrayList(); + for (int i=0; i starter = QtConcurrent.startFilteredReduced( + QThreadPool.globalInstance(), + ints, + i->i >= COUNT, + (r, intermediate)->r + intermediate + ); + + QFuture future = starter.startAsynchronously(); + future.waitForFinished(); + assertEquals(COUNT*2, ints.size()); + assertEquals(1, future.resultCount()); + + int n=0; + for (int i=COUNT; i>> results = QtConcurrent.mapped(list, s->QtFuture.makeReadyFuture(Arrays.asList(QtFuture.makeReadyFuture(s), QtFuture.makeReadyFuture(s)))); + QFuture unwrapped = results.unwrap(String.class); + assertEquals(6, unwrapped.results().size()); + } } diff --git a/src/java/autotest/io/qt/autotests/TestConnections.java b/src/java/autotest/io/qt/autotests/TestConnections.java index 5c3e16e4..1973a5a1 100644 --- a/src/java/autotest/io/qt/autotests/TestConnections.java +++ b/src/java/autotest/io/qt/autotests/TestConnections.java @@ -1773,9 +1773,9 @@ public QByteArray readOnlyProperty() { @Test public void className() { SignalsAndSlotsWithMoreProperties sas = new SignalsAndSlotsWithMoreProperties(); - assertEquals("io::qt::autotests::TestConnections$SignalsAndSlotsWithMoreProperties", + assertEquals("io::qt::autotests::TestConnections::SignalsAndSlotsWithMoreProperties", sas.metaObject().className()); - assertEquals("io::qt::autotests::TestConnections$SignalsAndSlotsWithProperties", + assertEquals("io::qt::autotests::TestConnections::SignalsAndSlotsWithProperties", sas.metaObject().superClass().className()); } diff --git a/src/java/autotest/io/qt/autotests/TestContainers.java b/src/java/autotest/io/qt/autotests/TestContainers.java index 9bedcc55..d89d1a7e 100644 --- a/src/java/autotest/io/qt/autotests/TestContainers.java +++ b/src/java/autotest/io/qt/autotests/TestContainers.java @@ -645,7 +645,7 @@ public void test_create_QSet_QPoint() { @Test public void test_create_SetList() { - int setId = QMetaType.registerMetaType(QSet.class, QMetaType.fromType(String.class)); + int setId = QMetaType.qRegisterMetaType(QSet.class, QMetaType.fromType(String.class)); QList> setList = new QList<>(new QMetaType(setId)); QSet set0 = new QSet<>(String.class); set0.insert("A"); diff --git a/src/java/autotest/io/qt/autotests/TestDBusConnect.java b/src/java/autotest/io/qt/autotests/TestDBusConnect.java index ec6a3556..293d5080 100644 --- a/src/java/autotest/io/qt/autotests/TestDBusConnect.java +++ b/src/java/autotest/io/qt/autotests/TestDBusConnect.java @@ -47,6 +47,7 @@ import io.qt.core.QEventLoop; import io.qt.core.QRect; import io.qt.core.QRectF; +import io.qt.core.QThread; import io.qt.core.Qt; import io.qt.dbus.QDBusConnection; import io.qt.dbus.QDBusInterface; @@ -61,7 +62,7 @@ public class TestDBusConnect { private static QDBusConnection sb; private static Throwable exception = null; - private static Thread pongThread; + private static QThread pongThread; private static QDBusInterface iface; @BeforeClass @@ -71,7 +72,7 @@ public static void testInitialize() throws Exception { Assume.assumeTrue("QDBus session bus is not connected: "+sb.lastError().message(), sb.isConnected()); ApplicationInitializer.testInitialize(); QtDBusPong.registerTypes(); - pongThread = new Thread(() -> { + pongThread = QThread.create(() -> { QEventLoop loop = new QEventLoop(); try { System.out.println("TestDBusConnect: Deploying QtDBusPong..."); @@ -87,8 +88,11 @@ public static void testInitialize() throws Exception { pongThread.start(); pongThread.join(2000); long t1 = System.currentTimeMillis(); - String version = QtJambiInternal.majorVersion()+"."+QtJambiInternal.minorVersion()+"."+QtJambiInternal.qtjambiPatchVersion(); - File testFile = new File(new File(new File(new File(new File(System.getProperty("user.dir"), version), "build"), "tests"), "tmp"), "touch.test"); + final String version = QtJambiInternal.majorVersion()+"."+QtJambiInternal.minorVersion()+"."+QtJambiInternal.qtjambiPatchVersion(); + final String jambidir = System.getProperty("user.dir"); + final File testsDir = new File(new File(new File(new File(jambidir, version), "build"), QtJambiInternal.osArchName()), "tests"); + final File targetDir = new File(testsDir, "tmp_"+QtJambiInternal.processName()); + final File testFile = new File(targetDir, "QtDBusPong.touch.test"); while(!testFile.exists() && pongThread.isAlive()){ pongThread.join(2000); if(System.currentTimeMillis()-t1>25000) { @@ -119,16 +123,17 @@ public static void testDispose() throws Throwable { if(pongThread!=null) { pongThread.interrupt(); pongThread.join(); + pongThread.dispose(); pongThread = null; } if (exception != null) throw exception; } finally { { - String version = QtJambiInternal.majorVersion()+"."+QtJambiInternal.minorVersion()+"."+QtJambiInternal.qtjambiPatchVersion(); - String jambidir = System.getProperty("user.dir"); - final File testsDir = new File(new File(new File(jambidir, version), "build"), "tests"); - final File targetDir = new File(testsDir, "tmp_"+QtJambiInternal.processName()); + final String version = QtJambiInternal.majorVersion()+"."+QtJambiInternal.minorVersion()+"."+QtJambiInternal.qtjambiPatchVersion(); + final String jambidir = System.getProperty("user.dir"); + final File testsDir = new File(new File(new File(new File(jambidir, version), "build"), QtJambiInternal.osArchName()), "tests"); + final File targetDir = new File(testsDir, "tmp_"+QtJambiInternal.processName()); File tmpDir = new File(System.getProperty("java.io.tmpdir")); if(new File(targetDir, "pid").isFile()) { String processName = new String(Files.readAllBytes(new File(targetDir, "pid").toPath())).trim();; diff --git a/src/java/autotest/io/qt/autotests/TestInitializationCore.java b/src/java/autotest/io/qt/autotests/TestInitializationCore.java index 99e200fc..ddd1b2b3 100644 --- a/src/java/autotest/io/qt/autotests/TestInitializationCore.java +++ b/src/java/autotest/io/qt/autotests/TestInitializationCore.java @@ -32,9 +32,17 @@ import org.junit.Assert; import org.junit.Test; +import io.qt.core.QCoreApplication; +import io.qt.core.QObject; + public class TestInitializationCore extends UnitTestInitializer { @Test public void initialize() { Assert.assertTrue(io.qt.QtUtilities.initializePackage("io.qt.core")); + QCoreApplication.initialize(new String[0]); + QObject obj = new QObject(); + obj.disposeLater(); + QCoreApplication.processEvents(); + QCoreApplication.shutdown(); } } diff --git a/src/java/autotest/io/qt/autotests/TestInitializationGui.java b/src/java/autotest/io/qt/autotests/TestInitializationGui.java index 860990c8..0f502082 100644 --- a/src/java/autotest/io/qt/autotests/TestInitializationGui.java +++ b/src/java/autotest/io/qt/autotests/TestInitializationGui.java @@ -32,9 +32,20 @@ import org.junit.Assert; import org.junit.Test; +import io.qt.gui.QGuiApplication; +import io.qt.gui.QWindow; + public class TestInitializationGui extends UnitTestInitializer { @Test public void initialize() { Assert.assertTrue(io.qt.QtUtilities.initializePackage("io.qt.gui")); + QGuiApplication.initialize(new String[0]); + QWindow window = new QWindow(); + window.show(); + QGuiApplication.processEvents(); + window.hide(); + QGuiApplication.processEvents(); + window.dispose(); + QGuiApplication.shutdown(); } } diff --git a/src/java/autotest/io/qt/autotests/TestInitializationHttpServer.java b/src/java/autotest/io/qt/autotests/TestInitializationHttpServer.java new file mode 100644 index 00000000..8f257525 --- /dev/null +++ b/src/java/autotest/io/qt/autotests/TestInitializationHttpServer.java @@ -0,0 +1,40 @@ +/**************************************************************************** +** +** Copyright (C) 1992-2009 Nokia. All rights reserved. +** Copyright (C) 2009-2022 Dr. Peter Droste, Omix Visualization GmbH & Co. KG. All rights reserved. +** +** This file is part of Qt Jambi. +** +** ** $BEGIN_LICENSE$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** $END_LICENSE$ +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +****************************************************************************/ +package io.qt.autotests; + +import org.junit.Assert; +import org.junit.Test; + +public class TestInitializationHttpServer extends UnitTestInitializer { + @Test + public void initialize() { + Assert.assertTrue(io.qt.QtUtilities.initializePackage("io.qt.httpserver")); + } +} diff --git a/src/java/autotest/io/qt/autotests/TestInitializationMultimediaWidgets.java b/src/java/autotest/io/qt/autotests/TestInitializationMultimediaWidgets.java index ac47be1a..d2e898bc 100644 --- a/src/java/autotest/io/qt/autotests/TestInitializationMultimediaWidgets.java +++ b/src/java/autotest/io/qt/autotests/TestInitializationMultimediaWidgets.java @@ -32,9 +32,20 @@ import org.junit.Assert; import org.junit.Test; +import io.qt.multimedia.widgets.QVideoWidget; +import io.qt.widgets.QApplication; + public class TestInitializationMultimediaWidgets extends UnitTestInitializer { @Test public void initialize() { Assert.assertTrue(io.qt.QtUtilities.initializePackage("io.qt.multimedia.widgets")); + QApplication.initialize(new String[0]); + QVideoWidget window = new QVideoWidget(); + window.show(); + QApplication.processEvents(); + window.hide(); + QApplication.processEvents(); + window.dispose(); + QApplication.shutdown(); } } diff --git a/src/java/autotest/io/qt/autotests/TestInitializationOpenGL.java b/src/java/autotest/io/qt/autotests/TestInitializationOpenGL.java index 2ddb2c0d..ec6fd5c1 100644 --- a/src/java/autotest/io/qt/autotests/TestInitializationOpenGL.java +++ b/src/java/autotest/io/qt/autotests/TestInitializationOpenGL.java @@ -32,9 +32,20 @@ import org.junit.Assert; import org.junit.Test; +import io.qt.gui.QGuiApplication; +import io.qt.opengl.QOpenGLWindow; + public class TestInitializationOpenGL extends UnitTestInitializer { @Test public void initialize() { Assert.assertTrue(io.qt.QtUtilities.initializePackage("io.qt.opengl")); + QGuiApplication.initialize(new String[0]); + QOpenGLWindow window = new QOpenGLWindow(); + window.show(); + QGuiApplication.processEvents(); + window.hide(); + QGuiApplication.processEvents(); + window.dispose(); + QGuiApplication.shutdown(); } } diff --git a/src/java/autotest/io/qt/autotests/TestInitializationOpenGLWidgets.java b/src/java/autotest/io/qt/autotests/TestInitializationOpenGLWidgets.java index 6afbf46a..495a5906 100644 --- a/src/java/autotest/io/qt/autotests/TestInitializationOpenGLWidgets.java +++ b/src/java/autotest/io/qt/autotests/TestInitializationOpenGLWidgets.java @@ -32,9 +32,20 @@ import org.junit.Assert; import org.junit.Test; +import io.qt.opengl.widgets.QOpenGLWidget; +import io.qt.widgets.QApplication; + public class TestInitializationOpenGLWidgets extends UnitTestInitializer { @Test public void initialize() { Assert.assertTrue(io.qt.QtUtilities.initializePackage("io.qt.opengl.widgets")); + QApplication.initialize(new String[0]); + QOpenGLWidget window = new QOpenGLWidget(); + window.show(); + QApplication.processEvents(); + window.hide(); + QApplication.processEvents(); + window.dispose(); + QApplication.shutdown(); } } diff --git a/src/java/autotest/io/qt/autotests/TestInitializationPdfWidgets.java b/src/java/autotest/io/qt/autotests/TestInitializationPdfWidgets.java index af752b14..feb0d412 100644 --- a/src/java/autotest/io/qt/autotests/TestInitializationPdfWidgets.java +++ b/src/java/autotest/io/qt/autotests/TestInitializationPdfWidgets.java @@ -32,9 +32,20 @@ import org.junit.Assert; import org.junit.Test; +import io.qt.pdf.widgets.QPdfView; +import io.qt.widgets.QApplication; + public class TestInitializationPdfWidgets extends UnitTestInitializer { @Test public void initialize() { Assert.assertTrue(io.qt.QtUtilities.initializePackage("io.qt.pdf.widgets")); + QApplication.initialize(new String[0]); + QPdfView window = new QPdfView(); + window.show(); + QApplication.processEvents(); + window.hide(); + QApplication.processEvents(); + window.dispose(); + QApplication.shutdown(); } } diff --git a/src/java/autotest/io/qt/autotests/TestInitializationQuickWidgets.java b/src/java/autotest/io/qt/autotests/TestInitializationQuickWidgets.java index 422477cb..b52fe071 100644 --- a/src/java/autotest/io/qt/autotests/TestInitializationQuickWidgets.java +++ b/src/java/autotest/io/qt/autotests/TestInitializationQuickWidgets.java @@ -29,12 +29,34 @@ ****************************************************************************/ package io.qt.autotests; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; + import org.junit.Assert; import org.junit.Test; +import io.qt.core.QCoreApplication; +import io.qt.core.QLibraryInfo; +import io.qt.core.Qt; +import io.qt.quick.QQuickWindow; +import io.qt.quick.QSGRendererInterface; +import io.qt.quick.widgets.QQuickWidget; +import io.qt.widgets.QApplication; + public class TestInitializationQuickWidgets extends UnitTestInitializer { @Test - public void initialize() { + public void initialize() throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException { Assert.assertTrue(io.qt.QtUtilities.initializePackage("io.qt.quick.widgets")); + QCoreApplication.setAttribute(Qt.ApplicationAttribute.AA_ShareOpenGLContexts); + Method mtd = QQuickWindow.class.getMethod(QLibraryInfo.version().majorVersion()>5 ? "setGraphicsApi" : "setSceneGraphBackend", QSGRendererInterface.GraphicsApi.class); + mtd.invoke(null, QSGRendererInterface.GraphicsApi.OpenGL); + QApplication.initialize(new String[0]); + QQuickWidget window = new QQuickWidget(); + window.show(); + QApplication.processEvents(); + window.hide(); + QApplication.processEvents(); + window.dispose(); + QApplication.shutdown(); } } diff --git a/src/java/autotest/io/qt/autotests/TestInitializationSpatialAudio.java b/src/java/autotest/io/qt/autotests/TestInitializationSpatialAudio.java new file mode 100644 index 00000000..f7f73a09 --- /dev/null +++ b/src/java/autotest/io/qt/autotests/TestInitializationSpatialAudio.java @@ -0,0 +1,40 @@ +/**************************************************************************** +** +** Copyright (C) 1992-2009 Nokia. All rights reserved. +** Copyright (C) 2009-2022 Dr. Peter Droste, Omix Visualization GmbH & Co. KG. All rights reserved. +** +** This file is part of Qt Jambi. +** +** ** $BEGIN_LICENSE$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** $END_LICENSE$ +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +****************************************************************************/ +package io.qt.autotests; + +import org.junit.Assert; +import org.junit.Test; + +public class TestInitializationSpatialAudio extends UnitTestInitializer { + @Test + public void initialize() { + Assert.assertTrue(io.qt.QtUtilities.initializePackage("io.qt.spatialaudio")); + } +} diff --git a/src/java/autotest/io/qt/autotests/TestInitializationSvgWidgets.java b/src/java/autotest/io/qt/autotests/TestInitializationSvgWidgets.java index dcfda236..130a23d9 100644 --- a/src/java/autotest/io/qt/autotests/TestInitializationSvgWidgets.java +++ b/src/java/autotest/io/qt/autotests/TestInitializationSvgWidgets.java @@ -32,9 +32,20 @@ import org.junit.Assert; import org.junit.Test; +import io.qt.widgets.QApplication; +import io.qt.widgets.svg.QSvgWidget; + public class TestInitializationSvgWidgets extends UnitTestInitializer { @Test public void initialize() { Assert.assertTrue(io.qt.QtUtilities.initializePackage("io.qt.widgets.svg")); + QApplication.initialize(new String[0]); + QSvgWidget window = new QSvgWidget(); + window.show(); + QApplication.processEvents(); + window.hide(); + QApplication.processEvents(); + window.dispose(); + QApplication.shutdown(); } } diff --git a/src/java/autotest/io/qt/autotests/TestInitializationWebEngineWidgets.java b/src/java/autotest/io/qt/autotests/TestInitializationWebEngineWidgets.java index 34bedfc2..050cc8fa 100644 --- a/src/java/autotest/io/qt/autotests/TestInitializationWebEngineWidgets.java +++ b/src/java/autotest/io/qt/autotests/TestInitializationWebEngineWidgets.java @@ -32,9 +32,27 @@ import org.junit.Assert; import org.junit.Test; +import io.qt.core.QCoreApplication; +import io.qt.core.Qt; +import io.qt.webengine.core.*; +import io.qt.webengine.widgets.*; +import io.qt.widgets.QApplication; + public class TestInitializationWebEngineWidgets extends UnitTestInitializer { @Test public void initialize() { Assert.assertTrue(io.qt.QtUtilities.initializePackage("io.qt.webengine.widgets")); + QCoreApplication.setAttribute(Qt.ApplicationAttribute.AA_ShareOpenGLContexts); + QApplication.initialize(new String[0]); + QWebEngineProfile.defaultProfile().settings().setAttribute(QWebEngineSettings.WebAttribute.PluginsEnabled, true); + QWebEngineProfile.defaultProfile().settings().setAttribute(QWebEngineSettings.WebAttribute.DnsPrefetchEnabled, true); + QWebEngineProfile.defaultProfile().setPersistentCookiesPolicy(QWebEngineProfile.PersistentCookiesPolicy.AllowPersistentCookies); + QWebEngineView window = new QWebEngineView(); + window.show(); + QApplication.processEvents(); + window.hide(); + QApplication.processEvents(); + window.dispose(); + QApplication.shutdown(); } } diff --git a/src/java/autotest/io/qt/autotests/TestInitializationWidgets.java b/src/java/autotest/io/qt/autotests/TestInitializationWidgets.java index 6841ffbe..c981c2ba 100644 --- a/src/java/autotest/io/qt/autotests/TestInitializationWidgets.java +++ b/src/java/autotest/io/qt/autotests/TestInitializationWidgets.java @@ -32,9 +32,20 @@ import org.junit.Assert; import org.junit.Test; +import io.qt.widgets.QApplication; +import io.qt.widgets.QWidget; + public class TestInitializationWidgets extends UnitTestInitializer { @Test public void initialize() { Assert.assertTrue(io.qt.QtUtilities.initializePackage("io.qt.widgets")); + QApplication.initialize(new String[0]); + QWidget window = new QWidget(); + window.show(); + QApplication.processEvents(); + window.hide(); + QApplication.processEvents(); + window.dispose(); + QApplication.shutdown(); } } diff --git a/src/java/autotest/io/qt/autotests/TestInjectedCode.java b/src/java/autotest/io/qt/autotests/TestInjectedCode.java index 720bfb36..9b63d460 100644 --- a/src/java/autotest/io/qt/autotests/TestInjectedCode.java +++ b/src/java/autotest/io/qt/autotests/TestInjectedCode.java @@ -554,8 +554,8 @@ public void testQCborStreamReader__readByteArray() { assertTrue(reader.isString()); QCborStreamReader.StringResult result = reader.readString(); assertTrue(result!=null); - assertEquals(QCborStreamReader.StringResultCode.Ok, result.status); - assertEquals("TEST", result.data); + assertEquals(QCborStreamReader.StringResultCode.Ok, result.status()); + assertEquals("TEST", result.data()); assertEquals(QCborError.Code.NoError, reader.lastError().code()); assertTrue(reader.hasNext()); assertTrue(reader.next()); @@ -640,8 +640,8 @@ public void testQCborStreamReader__fromByteBuffer() { assertTrue(reader.isByteArray()); QCborStreamReader.StringResult result = reader.readByteArray(); assertTrue(result!=null); - assertEquals(QCborStreamReader.StringResultCode.Ok, result.status); - assertEquals(test, result.data); + assertEquals(QCborStreamReader.StringResultCode.Ok, result.status()); + assertEquals(test, result.data()); assertEquals(QCborError.Code.NoError, reader.lastError().code()); assertTrue(reader.hasNext()); assertTrue(reader.next()); @@ -1455,6 +1455,7 @@ public void testIODeviceWriteData() { assertEquals(23, iodss.inputBufferSize); assertEquals("Evil draws men together", new QByteArray(iodss.buffer).toString()); java.nio.ByteBuffer np = iodss.buffer(); + assertTrue(np.capacity()>=23); byte data[] = new byte[23]; for (int i=0; i=45); byte data[] = new byte[45]; for (int i=0; i=10); byte data[] = new byte[10]; for (int i=0; i{if("test".equals(m.name().toString()) || m.methodType()==MethodType.Signal)System.out.println(m.methodSignature()+" - "+m.cppMethodSignature());}); -// b.metaObject().properties().forEach(p->System.out.println(p.typeName()+" "+p.name()+" ==> "+p.notifySignal().cppMethodSignature())); + b.metaObject().methods().forEach(m->{if("test".equals(m.name().toString()) || m.methodType()==QMetaMethod.MethodType.Signal)System.out.println(m.methodSignature()+" - "+m.cppMethodSignature());}); + b.metaObject().properties().forEach(p->System.out.println(p.typeName()+" "+p.name()+" ==> "+p.notifySignal().cppMethodSignature())); QMetaMethod invokableMethod; { @@ -2118,6 +2118,7 @@ public void setOther(JavaProperties other) { public void testPropertiesReadWriteOnGadget() { JavaProperties javaProperties = new JavaProperties(); QMetaObject metaObject = QMetaObject.forType(JavaProperties.class); +// metaObject.properties().forEach(p->System.out.println(p.typeName()+" "+p.name())); QMetaProperty objectProperty = metaObject.property("object"); QMetaProperty otherProperty = metaObject.property("other"); QMetaProperty stringProperty = metaObject.property("string"); diff --git a/src/java/autotest/io/qt/autotests/TestMetaProgrammingQt6.java b/src/java/autotest/io/qt/autotests/TestMetaProgrammingQt6.java index 417f4c18..3a139a14 100644 --- a/src/java/autotest/io/qt/autotests/TestMetaProgrammingQt6.java +++ b/src/java/autotest/io/qt/autotests/TestMetaProgrammingQt6.java @@ -66,7 +66,8 @@ public FullOfProperties(String test) { super(); } - public final QProperty bindableProperty = new QProperty<>(); + @SuppressWarnings("unused") + public final QProperty bindableProperty = new QProperty<>(); public final Signal0 bindableChanged = new Signal0(); @QtPropertyNotify(name="ordinaryProperty") diff --git a/src/java/autotest/io/qt/autotests/TestMetaType.java b/src/java/autotest/io/qt/autotests/TestMetaType.java index 8d1cb52a..c6fcf6ab 100644 --- a/src/java/autotest/io/qt/autotests/TestMetaType.java +++ b/src/java/autotest/io/qt/autotests/TestMetaType.java @@ -45,12 +45,27 @@ import io.qt.core.QObject; import io.qt.core.QOperatingSystemVersion; import io.qt.core.QRect; +import io.qt.core.QString; import io.qt.core.QVariant; -import io.qt.gui.QColor; import io.qt.gui.QWindow; +import io.qt.internal.QtJambiInternal; public class TestMetaType extends ApplicationInitializer { - @SuppressWarnings("serial") + + @Test + public void testOwnership() { + QByteArray ba = (QByteArray)new QMetaType(QMetaType.Type.QByteArray).create(); + assertEquals(QtJambiInternal.Ownership.Java, QtJambiInternal.ownership(ba)); + } + + @Test + public void testWellTyped() { + assertEquals(new QMetaType(QMetaType.Type.QString), QMetaType.fromType(QString.class)); + assertEquals(new QMetaType(QMetaType.Type.QVariant), QMetaType.fromType(QVariant.class)); + assertEquals(new QMetaType(QMetaType.Type.QString), QMetaType.fromObject(new QString())); + assertEquals(new QMetaType(QMetaType.Type.QVariant), QMetaType.fromObject(new QVariant())); + } + @Test public void testRegisterStreams() { try { @@ -73,6 +88,7 @@ public void testRegisterStreams() { } catch (IllegalArgumentException e1) { if(QOperatingSystemVersion.current().isAnyOfType(QOperatingSystemVersion.OSType.Android)) { QMetaType.registerDataStreamOperators(new QMetaType.DataStreamInFn(){ + private static final long serialVersionUID = 1L; @Override public void accept(QDataStream s, MetaValue value) { s.writeInt(value.i); @@ -81,6 +97,7 @@ public void accept(QDataStream s, MetaValue value) { } }, new QMetaType.DataStreamOutFn(){ + private static final long serialVersionUID = 1L; @Override public MetaValue apply(QDataStream s) { MetaValue value = new MetaValue(); @@ -95,6 +112,7 @@ public MetaValue apply(QDataStream s) { } } QMetaType.registerDataStreamOperators(new QMetaType.DataStreamInFn(){ + private static final long serialVersionUID = 1L; @Override public void accept(QDataStream s, MetaValue2 value) { s.writeInt(value.i); @@ -104,6 +122,7 @@ public void accept(QDataStream s, MetaValue2 value) { } }, new QMetaType.DataStreamOutFn(){ + private static final long serialVersionUID = 1L; @Override public MetaValue2 apply(QDataStream s) { MetaValue2 value = new MetaValue2(); @@ -126,6 +145,7 @@ public MetaValue2 apply(QDataStream s) { } catch (IllegalArgumentException e1) { if(QOperatingSystemVersion.current().isAnyOfType(QOperatingSystemVersion.OSType.Android)) { QMetaType.registerDebugStreamOperator(new QMetaType.DebugStreamFn(){ + private static final long serialVersionUID = 1L; @Override public void accept(QDebug d, MetaValue value) { d.append("MetaValue [i=" + value.i + ", d=" + value.d + ", s=" + value.s + "]"); @@ -136,23 +156,28 @@ public void accept(QDebug d, MetaValue value) { } } QMetaType.registerDebugStreamOperator(new QMetaType.DebugStreamFn(){ + private static final long serialVersionUID = 1L; @Override public void accept(QDebug d, MetaValue2 value) { d.append("MetaValue2 [i=" + value.i + ", d=" + value.d + ", s=" + value.s + ", f=" + value.f + "]"); } }); - QMetaType.registerMetaType(SerializableMetaValue.class); + QMetaType.qRegisterMetaType(SerializableMetaValue.class); MetaValue mvalue = new MetaValue(); mvalue.i = 5; mvalue.d = 9.246; mvalue.s = "TEST"; QByteArray buffer = new QByteArray(); - QVariant.saveObject(new QDataStream(buffer, QIODevice.OpenModeFlag.WriteOnly), mvalue); - Object restored = QVariant.loadObject(new QDataStream(buffer, QIODevice.OpenModeFlag.ReadOnly)); - assertTrue(restored instanceof MetaValue); - assertEquals(mvalue.i, ((MetaValue)restored).i); - assertEquals(mvalue.d, ((MetaValue)restored).d, 0.01); - assertEquals(mvalue.s, ((MetaValue)restored).s); + QDataStream stream = new QDataStream(buffer, QIODevice.OpenModeFlag.WriteOnly); + stream.writeObject(mvalue); + stream.dispose(); + stream = new QDataStream(buffer, QIODevice.OpenModeFlag.ReadOnly); + MetaValue restored = stream.readObject(MetaValue.class); + stream.dispose(); + assertTrue(restored!=null); + assertEquals(mvalue.i, restored.i); + assertEquals(mvalue.d, restored.d, 0.01); + assertEquals(mvalue.s, restored.s); StringBuilder string = new StringBuilder(); try(QDebug debug = new QDebug(string)){ debug.nospace().append(restored); @@ -164,15 +189,19 @@ public void accept(QDebug d, MetaValue2 value) { svalue.d = 9.246; svalue.s = "TEST"; buffer.clear(); - QVariant.saveObject(new QDataStream(buffer, QIODevice.OpenModeFlag.WriteOnly), svalue); - restored = QVariant.loadObject(new QDataStream(buffer, QIODevice.OpenModeFlag.ReadOnly)); - assertTrue(restored instanceof SerializableMetaValue); - assertEquals(svalue.i, ((SerializableMetaValue)restored).i); - assertEquals(svalue.d, ((SerializableMetaValue)restored).d, 0.01); - assertEquals(svalue.s, ((SerializableMetaValue)restored).s); + stream = new QDataStream(buffer, QIODevice.OpenModeFlag.WriteOnly); + stream.writeObject(svalue); + stream.dispose(); + stream = new QDataStream(buffer, QIODevice.OpenModeFlag.ReadOnly); + SerializableMetaValue srestored = stream.readObject(SerializableMetaValue.class); + stream.dispose(); + assertTrue(srestored!=null); + assertEquals(svalue.i, srestored.i); + assertEquals(svalue.d, srestored.d, 0.01); + assertEquals(svalue.s, srestored.s); string = new StringBuilder(); try(QDebug debug = new QDebug(string)){ - debug.nospace().append(restored); + debug.nospace().append(srestored); } assertEquals("SerializableMetaValue [i=" + svalue.i + ", d=" + svalue.d + ", s=" + svalue.s + "]", string.toString()); @@ -191,11 +220,6 @@ public void accept(QDebug d, MetaValue2 value) { fail("IllegalArgumentException expected to be thrown."); } catch (IllegalArgumentException e) { } - try { - QMetaType.registerDataStreamOperators((QDataStream s, MyColor value)->{}, s->(MyColor)null); - fail("IllegalArgumentException expected to be thrown."); - } catch (IllegalArgumentException e) { - } try { QMetaType.registerDataStreamOperators((QDataStream s, MyObject value)->{}, s->(MyObject)null); fail("IllegalArgumentException expected to be thrown."); @@ -222,9 +246,6 @@ public static void main(String args[]) { } } -class MyColor extends QColor{ -} - class MyObject extends QObject{ } diff --git a/src/java/autotest/io/qt/autotests/TestMetaTypeQt6.java b/src/java/autotest/io/qt/autotests/TestMetaTypeQt6.java new file mode 100644 index 00000000..85e75a87 --- /dev/null +++ b/src/java/autotest/io/qt/autotests/TestMetaTypeQt6.java @@ -0,0 +1,407 @@ +/**************************************************************************** +** +** Copyright (C) 2009-2022 Dr. Peter Droste, Omix Visualization GmbH & Co. KG. All rights reserved. +** +** This file is part of Qt Jambi. +** +** ** $BEGIN_LICENSE$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** $END_LICENSE$ +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +****************************************************************************/ +package io.qt.autotests; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +import java.io.Serializable; + +import org.junit.Assert; +import org.junit.Test; + +import io.qt.QtPropertyMember; +import io.qt.core.QByteArray; +import io.qt.core.QDataStream; +import io.qt.core.QDebug; +import io.qt.core.QIODevice; +import io.qt.core.QList; +import io.qt.core.QMetaMethod; +import io.qt.core.QMetaObject; +import io.qt.core.QMetaProperty; +import io.qt.core.QMetaType; +import io.qt.core.QObject; +import io.qt.core.QOperatingSystemVersion; + +public class TestMetaTypeQt6 extends ApplicationInitializer { + @Test + public void testRegisterValueType() { + QMetaType metaType = QMetaType.fromType(CloneableMetaValue.class); + CloneableMetaValue v1 = (CloneableMetaValue)metaType.create(); + v1.d = 4.0; + v1.i = 9; + v1.s = "TEST"; + CloneableMetaValue v2 = (CloneableMetaValue)metaType.create(v1); + Assert.assertEquals(v1.i, v2.i); + Assert.assertEquals(0.000001, v1.d, v2.d); + Assert.assertEquals(v1.s, v2.s); + + try { + QMetaType.registerDataStreamOperators((QDataStream s, CloneableMetaValue value)->{ + s.writeInt(value.i); + s.writeDouble(value.d); + s.writeString(value.s); + }, s->{ + CloneableMetaValue value = new CloneableMetaValue(); + value.i = s.readInt(); + value.d = s.readDouble(); + value.s = s.readString(); + return value; + }); + } catch (IllegalArgumentException e1) { + if(QOperatingSystemVersion.current().isAnyOfType(QOperatingSystemVersion.OSType.Android)) { + QMetaType.registerDataStreamOperators(new QMetaType.DataStreamInFn(){ + private static final long serialVersionUID = 1L; + @Override + public void accept(QDataStream s, CloneableMetaValue value) { + s.writeInt(value.i); + s.writeDouble(value.d); + s.writeString(value.s); + } + }, + new QMetaType.DataStreamOutFn(){ + private static final long serialVersionUID = 1L; + @Override + public CloneableMetaValue apply(QDataStream s) { + CloneableMetaValue value = new CloneableMetaValue(); + value.i = s.readInt(); + value.d = s.readDouble(); + value.s = s.readString(); + return value; + } + }); + }else { + throw e1; + } + } + + try { + QMetaType.registerDebugStreamOperator((QDebug d, CloneableMetaValue value)->{ + d.append("CloneableMetaValue [i=" + value.i + ", d=" + value.d + ", s=" + value.s + "]"); + }); + try { + QMetaType.registerDebugStreamOperator((QDebug s, CloneableMetaValue value)->{}); + fail("RuntimeException expected to be thrown."); + } catch (RuntimeException e) { + } + } catch (IllegalArgumentException e1) { + if(QOperatingSystemVersion.current().isAnyOfType(QOperatingSystemVersion.OSType.Android)) { + QMetaType.registerDebugStreamOperator(new QMetaType.DebugStreamFn(){ + private static final long serialVersionUID = 1L; + @Override + public void accept(QDebug d, CloneableMetaValue value) { + d.append("CloneableMetaValue [i=" + value.i + ", d=" + value.d + ", s=" + value.s + "]"); + } + }); + }else { + throw e1; + } + } + QByteArray buffer = new QByteArray(); + QDataStream stream = new QDataStream(buffer, QIODevice.OpenModeFlag.WriteOnly); + stream.writeObject(v2); + stream.dispose(); + stream = new QDataStream(buffer, QIODevice.OpenModeFlag.ReadOnly); + CloneableMetaValue restored = stream.readObject(CloneableMetaValue.class); + stream.dispose(); + assertTrue(restored instanceof CloneableMetaValue); + assertEquals(v2.i, restored.i); + assertEquals(v2.d, restored.d, 0.01); + assertEquals(v2.s, restored.s); + + QList list = new QList<>(CloneableMetaValue.class); + list.resize(10); + for (CloneableMetaValue v : list) { + assertTrue(v!=null); + } + + QMetaObject mo = QMetaObject.forType(CloneableMetaValue.class); + Assert.assertEquals(3, mo.properties().size()); + + class CloneableMetaValueHolder extends QObject{ + public final Signal1 metaValueChanged = new Signal1<>(); + public final QProperty metaValue = new QProperty<>(); + public final Signal0 metaValue2Changed = new Signal0(); + public final QProperty metaValue2 = new QProperty<>(); + } + CloneableMetaValueHolder holder = new CloneableMetaValueHolder(); + QMetaProperty prop = holder.metaObject().property("metaValue"); + assertTrue(prop!=null && prop.isValid()); + Assert.assertEquals(metaType, prop.metaType()); + QMetaMethod signal = holder.metaObject().method("metaValueChanged", CloneableMetaValue.class); + assertTrue(signal!=null && signal.isValid()); + Assert.assertEquals(metaType, signal.parameterMetaType(0)); + assertTrue(holder.metaValue.value()!=null); + CloneableMetaValue[] received = {null}; + holder.metaValueChanged.connect(c->{received[0] = c;}); + holder.metaValue.setValue(v2); + assertTrue(v2!=received[0]); + Assert.assertEquals(v2, received[0]); + holder.metaValue2Changed.connect(()->{received[0] = null;}); + holder.metaValue2.setValue(v2); + Assert.assertEquals(null, received[0]); + } + + @Test + public void testRegisterIOValueType() { + QMetaType metaType = QMetaType.fromType(IOCloneableMetaValue.class); + IOCloneableMetaValue v1 = (IOCloneableMetaValue)metaType.create(); + v1.d = 4.0; + v1.i = 9; + v1.s = "TEST"; + IOCloneableMetaValue v2 = (IOCloneableMetaValue)metaType.create(v1); + Assert.assertEquals(v1.i, v2.i); + Assert.assertEquals(0.000001, v1.d, v2.d); + Assert.assertEquals(v1.s, v2.s); + QByteArray buffer = new QByteArray(); + QDataStream stream = new QDataStream(buffer, QIODevice.OpenModeFlag.WriteOnly); + stream.writeObject(v2); + stream.dispose(); + stream = new QDataStream(buffer, QIODevice.OpenModeFlag.ReadOnly); + IOCloneableMetaValue restored = stream.readObject(IOCloneableMetaValue.class); + stream.dispose(); + assertTrue(restored!=null); + assertEquals(v2.i, restored.i); + assertEquals(v2.d, restored.d, 0.01); + assertEquals(v2.s, restored.s); + + QList list = new QList<>(IOCloneableMetaValue.class); + list.resize(10); + for (IOCloneableMetaValue v : list) { + assertTrue(v!=null); + } + list.at(0).s = "TEST"; + assertEquals(list.at(0).s, null); + list.insert(0, v1); + assertTrue(v1!=list.at(0)); + Assert.assertEquals(v1.i, list.at(0).i); + Assert.assertEquals(0.000001, v1.d, list.at(0).d); + Assert.assertEquals(v1.s, list.at(0).s); + } + + @Test + public void testRegisterSerializableValueType() { + QMetaType metaType = QMetaType.fromType(SerializableCloneableMetaValue.class); + SerializableCloneableMetaValue v1 = (SerializableCloneableMetaValue)metaType.create(); + v1.d = 4.0; + v1.i = 9; + v1.s = "TEST"; + SerializableCloneableMetaValue v2 = (SerializableCloneableMetaValue)metaType.create(v1); + Assert.assertEquals(v1.i, v2.i); + Assert.assertEquals(0.000001, v1.d, v2.d); + Assert.assertEquals(v1.s, v2.s); + QByteArray buffer = new QByteArray(); + QDataStream stream = new QDataStream(buffer, QIODevice.OpenModeFlag.WriteOnly); + stream.writeObject(v2); + stream.dispose(); + stream = new QDataStream(buffer, QIODevice.OpenModeFlag.ReadOnly); + SerializableCloneableMetaValue restored = stream.readObject(SerializableCloneableMetaValue.class); + stream.dispose(); + assertTrue(restored!=null); + assertEquals(v2.i, restored.i); + assertEquals(v2.d, restored.d, 0.01); + assertEquals(v2.s, restored.s); + + QList list = new QList<>(SerializableCloneableMetaValue.class); + list.resize(10); + for (SerializableCloneableMetaValue v : list) { + assertTrue(v!=null); + } + list.at(0).s = "TEST"; + assertEquals(list.at(0).s, null); + list.insert(0, v1); + assertTrue(v1!=list.at(0)); + Assert.assertEquals(v1.i, list.at(0).i); + Assert.assertEquals(0.000001, v1.d, list.at(0).d); + Assert.assertEquals(v1.s, list.at(0).s); + } + + public static void main(String args[]) { + org.junit.runner.JUnitCore.main(TestMetaTypeQt6.class.getName()); + } +} + +class CloneableMetaValue implements Cloneable{ + @QtPropertyMember + int i; + @QtPropertyMember + double d; + @QtPropertyMember + String s; + + @Override + public CloneableMetaValue clone() { + CloneableMetaValue v = new CloneableMetaValue(); + v.d = d; + v.i = i; + v.s = s; + return v; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + long temp; + temp = Double.doubleToLongBits(d); + result = prime * result + (int) (temp ^ (temp >>> 32)); + result = prime * result + i; + result = prime * result + ((s == null) ? 0 : s.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + CloneableMetaValue other = (CloneableMetaValue) obj; + if (Double.doubleToLongBits(d) != Double.doubleToLongBits(other.d)) + return false; + if (i != other.i) + return false; + if (s == null) { + if (other.s != null) + return false; + } else if (!s.equals(other.s)) + return false; + return true; + } +} + +class IOCloneableMetaValue implements Cloneable{ + @QtPropertyMember + int i; + @QtPropertyMember + double d; + @QtPropertyMember + String s; + @Override + public IOCloneableMetaValue clone() { + IOCloneableMetaValue v = new IOCloneableMetaValue(); + v.d = d; + v.i = i; + v.s = s; + return v; + } + + @SuppressWarnings("unused") + private void writeTo(QDataStream s) { + s.writeInt(this.i); + s.writeDouble(this.d); + s.writeString(this.s); + } + + @SuppressWarnings("unused") + private void readFrom(QDataStream s) { + this.i = s.readInt(); + this.d = s.readDouble(); + this.s = s.readString(); + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + long temp; + temp = Double.doubleToLongBits(d); + result = prime * result + (int) (temp ^ (temp >>> 32)); + result = prime * result + i; + result = prime * result + ((s == null) ? 0 : s.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + IOCloneableMetaValue other = (IOCloneableMetaValue) obj; + if (Double.doubleToLongBits(d) != Double.doubleToLongBits(other.d)) + return false; + if (i != other.i) + return false; + if (s == null) { + if (other.s != null) + return false; + } else if (!s.equals(other.s)) + return false; + return true; + } +} + +class SerializableCloneableMetaValue implements Cloneable, Serializable{ + private static final long serialVersionUID = 1L; + @QtPropertyMember + int i; + @QtPropertyMember + double d; + @QtPropertyMember + String s; + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + long temp; + temp = Double.doubleToLongBits(d); + result = prime * result + (int) (temp ^ (temp >>> 32)); + result = prime * result + i; + result = prime * result + ((s == null) ? 0 : s.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + SerializableCloneableMetaValue other = (SerializableCloneableMetaValue) obj; + if (Double.doubleToLongBits(d) != Double.doubleToLongBits(other.d)) + return false; + if (i != other.i) + return false; + if (s == null) { + if (other.s != null) + return false; + } else if (!s.equals(other.s)) + return false; + return true; + } +} diff --git a/src/java/autotest/io/qt/autotests/TestMultimediaCloneableQt6.java b/src/java/autotest/io/qt/autotests/TestMultimediaCloneableQt6.java index 541bae36..27803097 100644 --- a/src/java/autotest/io/qt/autotests/TestMultimediaCloneableQt6.java +++ b/src/java/autotest/io/qt/autotests/TestMultimediaCloneableQt6.java @@ -36,7 +36,6 @@ package io.qt.autotests; import static org.junit.Assert.assertEquals; -import static org.junit.Assume.assumeTrue; import org.junit.BeforeClass; import org.junit.Test; diff --git a/src/java/autotest/io/qt/autotests/TestPropertyAndMethodCall.java b/src/java/autotest/io/qt/autotests/TestPropertyAndMethodCall.java index a2f3e504..cda4c3b5 100644 --- a/src/java/autotest/io/qt/autotests/TestPropertyAndMethodCall.java +++ b/src/java/autotest/io/qt/autotests/TestPropertyAndMethodCall.java @@ -37,6 +37,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.Objects; import org.junit.AfterClass; import org.junit.Assume; @@ -54,6 +55,8 @@ import io.qt.QtUninvokable; import io.qt.autotests.generated.General; import io.qt.autotests.generated.PropertyAndMethodCallTest; +import io.qt.core.QDataStream; +import io.qt.core.QLibraryInfo; import io.qt.core.QMetaType; import io.qt.core.QObject; import io.qt.core.QRectF; @@ -62,6 +65,7 @@ import io.qt.gui.QColor; import io.qt.gui.QDrag; import io.qt.gui.QPainter; +import io.qt.gui.QRgba64; import io.qt.internal.QtJambiInternal; import io.qt.widgets.QGraphicsItem; import io.qt.widgets.QStyleOptionGraphicsItem; @@ -76,23 +80,24 @@ public class TestPropertyAndMethodCall extends ApplicationInitializer { @BeforeClass public static void testInitialize() throws Exception { ApplicationInitializer.testInitialize(); - QMetaType.registerMetaType(TestQObject.DerivedQObject.class); - QMetaType.registerMetaType(TestQObject.CustomQtValue.class); - QMetaType.registerMetaType(TestQObject.CustomQtInterfaceValue.class); - QMetaType.registerMetaType(TestQObject.CustomJavaType.class); - QMetaType.registerMetaType(TestQObject.CustomJavaType.class); - QMetaType.registerMetaType(TestQObject.CustomQtEnum.class); - QMetaType.registerMetaType(TestQObject.CustomEnum.class); - QMetaType.registerMetaType(TestQObject.CustomQtFlags.class); - QMetaType.registerMetaType(QGraphicsItem.class); - QMetaType.registerMetaType(QStringListModel.class); - QMetaType.registerMetaType(QDrag.class); - QMetaType.registerMetaType(Qt.AspectRatioMode.class); - QMetaType.registerMetaType(Qt.Orientations.class); + QMetaType.qRegisterMetaType(TestQObject.ExtendedColor.class); + QMetaType.qRegisterMetaType(TestQObject.DerivedQObject.class); + QMetaType.qRegisterMetaType(TestQObject.CustomQtValue.class); + QMetaType.qRegisterMetaType(TestQObject.CustomQtInterfaceValue.class); + QMetaType.qRegisterMetaType(TestQObject.CustomJavaType.class); + QMetaType.qRegisterMetaType(TestQObject.CustomJavaType.class); + QMetaType.qRegisterMetaType(TestQObject.CustomQtEnum.class); + QMetaType.qRegisterMetaType(TestQObject.CustomEnum.class); + QMetaType.qRegisterMetaType(TestQObject.CustomQtFlags.class); + QMetaType.qRegisterMetaType(QGraphicsItem.class); + QMetaType.qRegisterMetaType(QStringListModel.class); + QMetaType.qRegisterMetaType(QDrag.class); + QMetaType.qRegisterMetaType(Qt.AspectRatioMode.class); + QMetaType.qRegisterMetaType(Qt.Orientations.class); object = new PropertyAndMethodCallTest(); javaObject = new TestQObject(null); -// javaObject.metaObject().methods().forEach(m->System.out.println(m.typeName() + " " + m.cppMethodSignature())); -// javaObject.metaObject().properties().forEach(p->System.out.println(p.typeName()+" "+p.name())); + javaObject.metaObject().methods().forEach(m->System.out.println(m.typeName() + " " + m.cppMethodSignature())); + javaObject.metaObject().properties().forEach(p->System.out.println(p.typeName()+" "+p.name())); } @AfterClass @@ -125,6 +130,7 @@ public void testMethodCallCustomQtEnum() { @Test public void testMethodCallCustomQtEnum2() { + Assume.assumeTrue("Checking enum null in Qt6 makes no sense", QLibraryInfo.version().majorVersion()==5); assertTrue(PropertyAndMethodCallTest.testMethodCallCustomQtEnum2(javaObject)); } @@ -133,6 +139,12 @@ public void testMethodCallCustomQtValue() { assertTrue(PropertyAndMethodCallTest.testMethodCallCustomQtValue(javaObject)); } + @Test + public void testMethodCallExtendedColor() { + Assume.assumeTrue("Extended value types are available since Qt6", QLibraryInfo.version().majorVersion()>5); + assertTrue(PropertyAndMethodCallTest.testMethodCallExtendedColor(javaObject)); + } + @Test public void testMethodCallCustomQtInterfaceValue() { assertTrue(PropertyAndMethodCallTest.testMethodCallCustomQtInterfaceValue(javaObject)); @@ -186,6 +198,7 @@ public void testFetchPropertyCustomQtEnumCPP() { @Test public void testFetchPropertyCustomQtEnum2CPP() { + Assume.assumeTrue("Checking enum null in Qt6 makes no sense", QLibraryInfo.version().majorVersion()==5); assertTrue(PropertyAndMethodCallTest.testFetchPropertyCustomQtEnum2(javaObject)); } @@ -194,6 +207,12 @@ public void testFetchPropertyCustomQtValueCPP() { assertTrue(PropertyAndMethodCallTest.testFetchPropertyCustomQtValue(javaObject)); } + @Test + public void testFetchPropertyExtendedColorCPP() { + Assume.assumeTrue("Extended value types are available since Qt6", QLibraryInfo.version().majorVersion()>5); + assertTrue(PropertyAndMethodCallTest.testFetchPropertyExtendedColor(javaObject)); + } + @Test public void testFetchPropertyCustomQtInterfaceValueCPP() { assertTrue(PropertyAndMethodCallTest.testFetchPropertyCustomQtInterfaceValue(javaObject)); @@ -261,6 +280,12 @@ public void testFetchPropertyCustomQtValueJAVA() { assertEquals(javaObject.getCustomQtValue(), javaObject.property("customQtValue")); } + @Test + public void testFetchPropertyExtendedColorJAVA() { + Assume.assumeTrue("Extended value types are available since Qt6", QLibraryInfo.version().majorVersion()>5); + assertEquals(javaObject.getExtendedColor(), javaObject.property("extendedColor")); + } + @Test public void testFetchPropertyCustomQtInterfaceValueJAVA() { assertEquals(javaObject.getCustomQtInterfaceValue(), javaObject.property("customQtInterfaceValue")); @@ -290,6 +315,20 @@ public void testFetchPropertyQtEnumJAVA() { assertEquals(Qt.AspectRatioMode.class, prop.getClass()); assertEquals(javaObject.getQtEnum(), prop); } + + @Test + public void testFetchPropertyIntConstJAVA() { + Object prop = javaObject.property("intConst"); + assertNotNull(prop); + assertEquals(42, prop); + } + + @Test + public void testFetchPropertyStaticIntConstJAVA() { + Object prop = javaObject.property("staticIntConst"); + assertNotNull(prop); + assertEquals(142, prop); + } @Test public void testFetchPropertyQtFlagsJAVA() { @@ -306,6 +345,7 @@ public void testConnectSignalsAndSlots() { @Test public void testSignalCustomEnumNULL() { + Assume.assumeTrue("Checking enum null in Qt6 makes no sense", QLibraryInfo.version().majorVersion()==5); object.connectSignals(javaObject, QtJambiInternal.useAnnotatedType); javaObject.customEnumChanged.emit(null); assertEquals(null, object.receivedCustomEnum()); @@ -372,6 +412,15 @@ public void testSignalDerivedQObject() { javaObject.derivedQObjectChanged.emit(derivedObject); assertEquals(derivedObject, object.receivedDerivedQObject()); } + + @Test + public void testSignalExtendedColor() { + Assume.assumeTrue("Extended value types are available since Qt6", QLibraryInfo.version().majorVersion()>5); + object.connectSignals(javaObject, QtJambiInternal.useAnnotatedType); + TestQObject.ExtendedColor extendedColor = new TestQObject.ExtendedColor(QRgba64.fromRgba64(0x014691ab6)); + javaObject.extendedColorChanged.emit(extendedColor); + assertEquals(extendedColor, object.receivedExtendedColor()); + } public static class TestQObject extends QObject { @@ -484,6 +533,71 @@ public void paint(QPainter painter, QStyleOptionGraphicsItem option, QWidget wid public static class CustomJavaType { } + + public static class ExtendedColor extends QColor{ + + ExtendedColor(int rgb) { + super(rgb); + text = this.name(); + } + + ExtendedColor(String name) { + super(name); + text = this.name(); + } + + ExtendedColor(QRgba64 rgba64) { + super(rgba64); + text = this.name(); + } + + ExtendedColor() { + super(); + text = this.name(); + } + + private String text; + + @QtPropertyReader + public String text() { + return text; + } + + @Override + public void writeTo(QDataStream s) { + super.writeTo(s); + s.append(text); + } + + @Override + public void readFrom(QDataStream s) { + super.readFrom(s); + text = s.readString(); + } + + @Override + public boolean equals(Object other) { + return super.equals(other) && other instanceof ExtendedColor && Objects.equals(text, ((ExtendedColor)other).text); + } + + @Override + public int hashCode() { + int result = 1; + result = 31 * result + super.hashCode(); + result = 31 * result + (text == null ? 0 : text.hashCode()); + return result; + } + + @Override + public String toString() { + return super.toString(); + } + + @Override + public ExtendedColor clone() { + return new ExtendedColor(this.rgba64()); + } + } public TestQObject(QObject obj) { super(obj); @@ -500,6 +614,9 @@ public TestQObject(QObject obj) { private Qt.AspectRatioMode qtEnum = Qt.AspectRatioMode.KeepAspectRatio; private Qt.Orientations qtFlags = new Qt.Orientations(Qt.Orientation.Horizontal); private final QColor colorPtr = new QColor(0x01abcdef); + private ExtendedColor extendedColor = new ExtendedColor(QRgba64.fromRgba64(0x01abcdef)); + public final int intConst = 42; + public static final int staticIntConst = 142; @QtPropertyMember(name="member") private String memberProperty = "QtPropertyMember"; @@ -616,7 +733,10 @@ public boolean testNumber(Number e) { public final Signal1 customIntArrayChanged = new Signal1<>(); @QtPropertyNotify(name = "derivedQObject") - public final Signal1 derivedQObjectChanged = new Signal1(); + public final Signal1 derivedQObjectChanged = new Signal1<>(); + + @QtPropertyNotify(name = "extendedColor") + public final Signal1 extendedColorChanged = new Signal1<>(); @QtPropertyReader(name = "list") public List getList() { @@ -712,6 +832,18 @@ public Qt.Orientations getQtFlags() { public boolean testQtFlags(Qt.Orientations customQtFlags) { return this.qtFlags.equals(customQtFlags); } + + public ExtendedColor getExtendedColor() { + return extendedColor; + } + + public void setExtendedColor(ExtendedColor extendedColor) { + this.extendedColor = extendedColor; + } + + public boolean testExtendedColor(ExtendedColor extendedColor) { + return this.extendedColor.equals(extendedColor); + } } public static void main(String args[]) { diff --git a/src/java/autotest/io/qt/autotests/TestQObjectPropertyQt6.java b/src/java/autotest/io/qt/autotests/TestQObjectPropertyQt6.java index 55e1c19b..d076b5d2 100644 --- a/src/java/autotest/io/qt/autotests/TestQObjectPropertyQt6.java +++ b/src/java/autotest/io/qt/autotests/TestQObjectPropertyQt6.java @@ -32,6 +32,7 @@ import static org.junit.Assert.assertTrue; import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.atomic.AtomicReference; import org.junit.Test; @@ -600,4 +601,41 @@ class PropertyOwner extends QObject{ owner.setProperty("x", 8); assertEquals(8, received[0]); } + + @Test + public void testComputedProperty() { + AtomicInteger iValue = new AtomicInteger(3); + AtomicReference sValue = new AtomicReference<>(""); + class PropertyOwner extends QObject{ + @QtPropertyMember + private final QComputedIntProperty iComputed = new QComputedIntProperty(this::computeInt); + @QtPropertyMember + private final QIntProperty iProp = new QIntProperty(()->iComputed.value()); + public final Signal1 iChanged = new Signal1<>(); + private int computeInt() { + return iValue.get(); + } + + @QtPropertyMember + private final QComputedProperty sComputed = new QComputedProperty<>(this::computeString); + @QtPropertyMember + private final QProperty sProp = new QProperty(()->sComputed.value()); + public final Signal1 sChanged = new Signal1<>(); + private String computeString() { + return sValue.get(); + } + } + PropertyOwner owner = new PropertyOwner(); + int[] iReceived = {owner.iProp.value()}; + owner.iChanged.connect(i->iReceived[0] = i); + iValue.set(5); + owner.iComputed.notifyProperty(); + assertEquals(iValue.get(), iReceived[0]); + + String[] sReceived = {owner.sProp.value()}; + owner.sChanged.connect(s->sReceived[0] = s); + sValue.set("TEST"); + owner.sComputed.notifyProperty(); + assertEquals(sValue.get(), sReceived[0]); + } } diff --git a/src/java/autotest/io/qt/autotests/TestQThread.java b/src/java/autotest/io/qt/autotests/TestQThread.java index dfc041ec..ba895eed 100644 --- a/src/java/autotest/io/qt/autotests/TestQThread.java +++ b/src/java/autotest/io/qt/autotests/TestQThread.java @@ -544,7 +544,7 @@ public void testDeleteTopLevelRunnerThread() { } @org.junit.Test - public void testDeleteChildRunnerThread() { + public void testDeleteChildRunnerThread() throws InterruptedException { QObject parent = new QObject(); WeakReference reference; { @@ -571,12 +571,14 @@ public void testDeleteChildRunnerThread() { Assert.assertTrue(reference.get()!=null); Assert.assertEquals(parent, reference.get().parent()); parent = null; - for (int i = 0; i < 3; i++) { + for (int i = 0; i < 10; i++) { ApplicationInitializer.runGC(); QCoreApplication.processEvents(); QCoreApplication.sendPostedEvents(null, QEvent.Type.DeferredDispose.value()); QCoreApplication.processEvents(); ApplicationInitializer.runGC(); + Thread.yield(); + Thread.sleep(50); if(reference.get()==null) break; } diff --git a/src/java/autotest/io/qt/autotests/TestQVariant.java b/src/java/autotest/io/qt/autotests/TestQVariant.java index dc8b14a9..dc2105d1 100644 --- a/src/java/autotest/io/qt/autotests/TestQVariant.java +++ b/src/java/autotest/io/qt/autotests/TestQVariant.java @@ -163,77 +163,77 @@ public static void testInitialize() throws Exception { @Test public void testQVariant() { - assertEquals(QMetaType.Type.Int.value(), QMetaType.metaTypeId(int.class)); - assertEquals(QMetaType.Type.LongLong.value(), QMetaType.metaTypeId(long.class)); - assertEquals(QMetaType.Type.Bool.value(), QMetaType.metaTypeId(boolean.class)); - assertEquals(QMetaType.Type.Short.value(), QMetaType.metaTypeId(short.class)); - assertEquals(QMetaType.Type.SChar.value(), QMetaType.metaTypeId(byte.class)); - assertEquals(QMetaType.Type.Double.value(), QMetaType.metaTypeId(double.class)); - assertEquals(QMetaType.Type.Float.value(), QMetaType.metaTypeId(float.class)); - assertEquals(QMetaType.Type.QChar.value(), QMetaType.metaTypeId(char.class)); - assertEquals(QMetaType.Type.Int.value(), QMetaType.metaTypeId(Integer.class)); - assertEquals(QMetaType.Type.LongLong.value(), QMetaType.metaTypeId(Long.class)); - assertEquals(QMetaType.Type.Bool.value(), QMetaType.metaTypeId(Boolean.class)); - assertEquals(QMetaType.Type.Short.value(), QMetaType.metaTypeId(Short.class)); - assertEquals(QMetaType.Type.SChar.value(), QMetaType.metaTypeId(Byte.class)); - assertEquals(QMetaType.Type.Double.value(), QMetaType.metaTypeId(Double.class)); - assertEquals(QMetaType.Type.Float.value(), QMetaType.metaTypeId(Float.class)); - assertEquals(QMetaType.Type.QChar.value(), QMetaType.metaTypeId(Character.class)); - assertEquals(QMetaType.Type.QBitArray.value(), QMetaType.metaTypeId(QBitArray.class)); - assertEquals(QMetaType.Type.QByteArray.value(), QMetaType.metaTypeId(QByteArray.class)); - assertEquals(QMetaType.Type.QBrush.value(), QMetaType.metaTypeId(QBrush.class)); - assertEquals(QMetaType.Type.QBitmap.value(), QMetaType.metaTypeId(QBitmap.class)); - assertEquals(QMetaType.Type.QCborArray.value(), QMetaType.metaTypeId(QCborArray.class)); - assertEquals(QMetaType.Type.QCborMap.value(), QMetaType.metaTypeId(QCborMap.class)); -// assertEquals(QMetaType.Type.QCborValue.value(), QMetaType.metaTypeId(QCborValue.class)); - assertEquals(QMetaType.Type.QColor.value(), QMetaType.metaTypeId(QColor.class)); - assertEquals(QMetaType.Type.QCursor.value(), QMetaType.metaTypeId(QCursor.class)); - assertEquals(QMetaType.Type.QDate.value(), QMetaType.metaTypeId(QDate.class)); - assertEquals(QMetaType.Type.QDateTime.value(), QMetaType.metaTypeId(QDateTime.class)); - assertEquals(QMetaType.Type.QEasingCurve.value(), QMetaType.metaTypeId(QEasingCurve.class)); - assertEquals(QMetaType.Type.QFont.value(), QMetaType.metaTypeId(QFont.class)); - assertEquals(QMetaType.Type.QIcon.value(), QMetaType.metaTypeId(QIcon.class)); - assertEquals(QMetaType.Type.QImage.value(), QMetaType.metaTypeId(QImage.class)); - assertEquals(QMetaType.Type.QJsonArray.value(), QMetaType.metaTypeId(QJsonArray.class)); - assertEquals(QMetaType.Type.QJsonDocument.value(), QMetaType.metaTypeId(QJsonDocument.class)); - assertEquals(QMetaType.Type.QJsonObject.value(), QMetaType.metaTypeId(QJsonObject.class)); - assertEquals(QMetaType.Type.QJsonValue.value(), QMetaType.metaTypeId(QJsonValue.class)); - assertEquals(QMetaType.Type.QKeySequence.value(), QMetaType.metaTypeId(QKeySequence.class)); - assertEquals(QMetaType.Type.QLine.value(), QMetaType.metaTypeId(QLine.class)); - assertEquals(QMetaType.Type.QLineF.value(), QMetaType.metaTypeId(QLineF.class)); - assertEquals(QMetaType.Type.QLocale.value(), QMetaType.metaTypeId(QLocale.class)); - assertEquals(QMetaType.Type.QMatrix4x4.value(), QMetaType.metaTypeId(QMatrix4x4.class)); - assertEquals(QMetaType.Type.QModelIndex.value(), QMetaType.metaTypeId(QModelIndex.class)); - assertEquals(QMetaType.Type.QPalette.value(), QMetaType.metaTypeId(QPalette.class)); - assertEquals(QMetaType.Type.QPen.value(), QMetaType.metaTypeId(QPen.class)); - assertEquals(QMetaType.Type.QPersistentModelIndex.value(), QMetaType.metaTypeId(QPersistentModelIndex.class)); - assertEquals(QMetaType.Type.QPixmap.value(), QMetaType.metaTypeId(QPixmap.class)); - assertEquals(QMetaType.Type.QPoint.value(), QMetaType.metaTypeId(QPoint.class)); - assertEquals(QMetaType.Type.QPointF.value(), QMetaType.metaTypeId(QPointF.class)); - assertEquals(QMetaType.Type.QPolygon.value(), QMetaType.metaTypeId(QPolygon.class)); - assertEquals(QMetaType.Type.QPolygonF.value(), QMetaType.metaTypeId(QPolygonF.class)); - assertEquals(QMetaType.Type.QQuaternion.value(), QMetaType.metaTypeId(QQuaternion.class)); - assertEquals(QMetaType.Type.QRect.value(), QMetaType.metaTypeId(QRect.class)); - assertEquals(QMetaType.Type.QRectF.value(), QMetaType.metaTypeId(QRectF.class)); - assertEquals(QMetaType.Type.QRegion.value(), QMetaType.metaTypeId(QRegion.class)); - assertEquals(QMetaType.Type.QRegularExpression.value(), QMetaType.metaTypeId(QRegularExpression.class)); - assertEquals(QMetaType.Type.QQuaternion.value(), QMetaType.metaTypeId(QQuaternion.class)); - assertEquals(QMetaType.Type.QSize.value(), QMetaType.metaTypeId(QSize.class)); - assertEquals(QMetaType.Type.QSizeF.value(), QMetaType.metaTypeId(QSizeF.class)); - assertEquals(QMetaType.Type.QSizePolicy.value(), QMetaType.metaTypeId(QSizePolicy.class)); - assertEquals(QMetaType.Type.QString.value(), QMetaType.metaTypeId(String.class)); - assertEquals(QMetaType.Type.QTextFormat.value(), QMetaType.metaTypeId(QTextFormat.class)); - assertEquals(QMetaType.Type.QTextLength.value(), QMetaType.metaTypeId(QTextLength.class)); - assertEquals(QMetaType.Type.QTime.value(), QMetaType.metaTypeId(QTime.class)); - assertEquals(QMetaType.Type.QTransform.value(), QMetaType.metaTypeId(QTransform.class)); - assertEquals(QMetaType.Type.QUrl.value(), QMetaType.metaTypeId(QUrl.class)); - assertEquals(QMetaType.Type.QUuid.value(), QMetaType.metaTypeId(QUuid.class)); - assertEquals(QMetaType.Type.QVector2D.value(), QMetaType.metaTypeId(QVector2D.class)); - assertEquals(QMetaType.Type.QVector3D.value(), QMetaType.metaTypeId(QVector3D.class)); - assertEquals(QMetaType.Type.QVector4D.value(), QMetaType.metaTypeId(QVector4D.class)); - assertEquals(QMetaType.Type.QVariant.value(), QMetaType.metaTypeId(QVariant.class)); - assertEquals(QMetaType.Type.QObjectStar.value(), QMetaType.metaTypeId(QObject.class)); - assertEquals(QMetaType.Type.Nullptr.value(), QMetaType.metaTypeId(null)); + assertEquals(QMetaType.Type.Int.value(), QMetaType.qMetaTypeId(int.class)); + assertEquals(QMetaType.Type.LongLong.value(), QMetaType.qMetaTypeId(long.class)); + assertEquals(QMetaType.Type.Bool.value(), QMetaType.qMetaTypeId(boolean.class)); + assertEquals(QMetaType.Type.Short.value(), QMetaType.qMetaTypeId(short.class)); + assertEquals(QMetaType.Type.SChar.value(), QMetaType.qMetaTypeId(byte.class)); + assertEquals(QMetaType.Type.Double.value(), QMetaType.qMetaTypeId(double.class)); + assertEquals(QMetaType.Type.Float.value(), QMetaType.qMetaTypeId(float.class)); + assertEquals(QMetaType.Type.QChar.value(), QMetaType.qMetaTypeId(char.class)); + assertEquals(QMetaType.Type.Int.value(), QMetaType.qMetaTypeId(Integer.class)); + assertEquals(QMetaType.Type.LongLong.value(), QMetaType.qMetaTypeId(Long.class)); + assertEquals(QMetaType.Type.Bool.value(), QMetaType.qMetaTypeId(Boolean.class)); + assertEquals(QMetaType.Type.Short.value(), QMetaType.qMetaTypeId(Short.class)); + assertEquals(QMetaType.Type.SChar.value(), QMetaType.qMetaTypeId(Byte.class)); + assertEquals(QMetaType.Type.Double.value(), QMetaType.qMetaTypeId(Double.class)); + assertEquals(QMetaType.Type.Float.value(), QMetaType.qMetaTypeId(Float.class)); + assertEquals(QMetaType.Type.QChar.value(), QMetaType.qMetaTypeId(Character.class)); + assertEquals(QMetaType.Type.QBitArray.value(), QMetaType.qMetaTypeId(QBitArray.class)); + assertEquals(QMetaType.Type.QByteArray.value(), QMetaType.qMetaTypeId(QByteArray.class)); + assertEquals(QMetaType.Type.QBrush.value(), QMetaType.qMetaTypeId(QBrush.class)); + assertEquals(QMetaType.Type.QBitmap.value(), QMetaType.qMetaTypeId(QBitmap.class)); + assertEquals(QMetaType.Type.QCborArray.value(), QMetaType.qMetaTypeId(QCborArray.class)); + assertEquals(QMetaType.Type.QCborMap.value(), QMetaType.qMetaTypeId(QCborMap.class)); +// assertEquals(QMetaType.Type.QCborValue.value(), QMetaType.qMetaTypeId(QCborValue.class)); + assertEquals(QMetaType.Type.QColor.value(), QMetaType.qMetaTypeId(QColor.class)); + assertEquals(QMetaType.Type.QCursor.value(), QMetaType.qMetaTypeId(QCursor.class)); + assertEquals(QMetaType.Type.QDate.value(), QMetaType.qMetaTypeId(QDate.class)); + assertEquals(QMetaType.Type.QDateTime.value(), QMetaType.qMetaTypeId(QDateTime.class)); + assertEquals(QMetaType.Type.QEasingCurve.value(), QMetaType.qMetaTypeId(QEasingCurve.class)); + assertEquals(QMetaType.Type.QFont.value(), QMetaType.qMetaTypeId(QFont.class)); + assertEquals(QMetaType.Type.QIcon.value(), QMetaType.qMetaTypeId(QIcon.class)); + assertEquals(QMetaType.Type.QImage.value(), QMetaType.qMetaTypeId(QImage.class)); + assertEquals(QMetaType.Type.QJsonArray.value(), QMetaType.qMetaTypeId(QJsonArray.class)); + assertEquals(QMetaType.Type.QJsonDocument.value(), QMetaType.qMetaTypeId(QJsonDocument.class)); + assertEquals(QMetaType.Type.QJsonObject.value(), QMetaType.qMetaTypeId(QJsonObject.class)); + assertEquals(QMetaType.Type.QJsonValue.value(), QMetaType.qMetaTypeId(QJsonValue.class)); + assertEquals(QMetaType.Type.QKeySequence.value(), QMetaType.qMetaTypeId(QKeySequence.class)); + assertEquals(QMetaType.Type.QLine.value(), QMetaType.qMetaTypeId(QLine.class)); + assertEquals(QMetaType.Type.QLineF.value(), QMetaType.qMetaTypeId(QLineF.class)); + assertEquals(QMetaType.Type.QLocale.value(), QMetaType.qMetaTypeId(QLocale.class)); + assertEquals(QMetaType.Type.QMatrix4x4.value(), QMetaType.qMetaTypeId(QMatrix4x4.class)); + assertEquals(QMetaType.Type.QModelIndex.value(), QMetaType.qMetaTypeId(QModelIndex.class)); + assertEquals(QMetaType.Type.QPalette.value(), QMetaType.qMetaTypeId(QPalette.class)); + assertEquals(QMetaType.Type.QPen.value(), QMetaType.qMetaTypeId(QPen.class)); + assertEquals(QMetaType.Type.QPersistentModelIndex.value(), QMetaType.qMetaTypeId(QPersistentModelIndex.class)); + assertEquals(QMetaType.Type.QPixmap.value(), QMetaType.qMetaTypeId(QPixmap.class)); + assertEquals(QMetaType.Type.QPoint.value(), QMetaType.qMetaTypeId(QPoint.class)); + assertEquals(QMetaType.Type.QPointF.value(), QMetaType.qMetaTypeId(QPointF.class)); + assertEquals(QMetaType.Type.QPolygon.value(), QMetaType.qMetaTypeId(QPolygon.class)); + assertEquals(QMetaType.Type.QPolygonF.value(), QMetaType.qMetaTypeId(QPolygonF.class)); + assertEquals(QMetaType.Type.QQuaternion.value(), QMetaType.qMetaTypeId(QQuaternion.class)); + assertEquals(QMetaType.Type.QRect.value(), QMetaType.qMetaTypeId(QRect.class)); + assertEquals(QMetaType.Type.QRectF.value(), QMetaType.qMetaTypeId(QRectF.class)); + assertEquals(QMetaType.Type.QRegion.value(), QMetaType.qMetaTypeId(QRegion.class)); + assertEquals(QMetaType.Type.QRegularExpression.value(), QMetaType.qMetaTypeId(QRegularExpression.class)); + assertEquals(QMetaType.Type.QQuaternion.value(), QMetaType.qMetaTypeId(QQuaternion.class)); + assertEquals(QMetaType.Type.QSize.value(), QMetaType.qMetaTypeId(QSize.class)); + assertEquals(QMetaType.Type.QSizeF.value(), QMetaType.qMetaTypeId(QSizeF.class)); + assertEquals(QMetaType.Type.QSizePolicy.value(), QMetaType.qMetaTypeId(QSizePolicy.class)); + assertEquals(QMetaType.Type.QString.value(), QMetaType.qMetaTypeId(String.class)); + assertEquals(QMetaType.Type.QTextFormat.value(), QMetaType.qMetaTypeId(QTextFormat.class)); + assertEquals(QMetaType.Type.QTextLength.value(), QMetaType.qMetaTypeId(QTextLength.class)); + assertEquals(QMetaType.Type.QTime.value(), QMetaType.qMetaTypeId(QTime.class)); + assertEquals(QMetaType.Type.QTransform.value(), QMetaType.qMetaTypeId(QTransform.class)); + assertEquals(QMetaType.Type.QUrl.value(), QMetaType.qMetaTypeId(QUrl.class)); + assertEquals(QMetaType.Type.QUuid.value(), QMetaType.qMetaTypeId(QUuid.class)); + assertEquals(QMetaType.Type.QVector2D.value(), QMetaType.qMetaTypeId(QVector2D.class)); + assertEquals(QMetaType.Type.QVector3D.value(), QMetaType.qMetaTypeId(QVector3D.class)); + assertEquals(QMetaType.Type.QVector4D.value(), QMetaType.qMetaTypeId(QVector4D.class)); + assertEquals(QMetaType.Type.QVariant.value(), QMetaType.qMetaTypeId(QVariant.class)); + assertEquals(QMetaType.Type.QObjectStar.value(), QMetaType.qMetaTypeId(QObject.class)); + assertEquals(QMetaType.Type.Nullptr.value(), QMetaType.qMetaTypeId(null)); assertEquals("JObjectWrapper", QMetaType.fromType(Object.class).name().toString()); assertEquals("JCollectionWrapper", QMetaType.fromType(List.class).name().toString()); assertEquals("JMapWrapper", QMetaType.fromType(Map.class).name().toString()); @@ -242,8 +242,8 @@ public void testQVariant() { assertEquals(new QSize(5, 5), QVariant.convert(new QSizeF(5, 5), QSize.class)); assertEquals(new QLine(6, 5, 8, 1), QVariant.convert(new QLineF(5.8, 5.2, 8.3, 1.2), QLine.class)); Tulip tulip = new Tulip(); - assertEquals(QMetaType.Type.QStringList.value(), QVariant.type(tulip.listRef())); - assertEquals(QMetaType.Type.QByteArrayList.value(), QVariant.type(tulip.byteArrayListRef())); + assertEquals(new QMetaType(QMetaType.Type.QStringList), QMetaType.fromObject(tulip.listRef())); + assertEquals(new QMetaType(QMetaType.Type.QByteArrayList), QMetaType.fromObject(tulip.byteArrayListRef())); } @Test @@ -1221,10 +1221,7 @@ public void testQVariant(String name, Object object, double expectedDouble, bool List expectedList, boolean canConvertList, Map expectedMap, boolean canConvertMap) { assertEquals("Can convert String", canConvertString, QVariant.canConvertToString(object)); - assertEquals("Can convert Double", canConvertDouble, QVariant.canConvertToDouble(object)); assertEquals("Can convert ByteArray", canConvertByteArray, QVariant.canConvertToByteArray(object)); - assertEquals("Can convert Int", canConvertInt, QVariant.canConvertToInt(object)); - assertEquals("Can convert Bool", canConvertBool, QVariant.canConvertToBoolean(object)); assertEquals("Can convert BitArray", canConvertBitArray, QVariant.canConvertToBitArray(object)); assertEquals("Can convert Char", canConvertChar, QVariant.canConvertToChar(object)); assertEquals("Can convert Date", canConvertDate, QVariant.canConvertToDate(object)); @@ -1238,10 +1235,13 @@ public void testQVariant(String name, Object object, double expectedDouble, bool assertEquals("Can convert SizeF", canConvertSizeF, QVariant.canConvertToSizeF(object)); assertEquals("Can convert List", canConvertList, QVariant.canConvertToList(object)); assertEquals("Can convert Map", canConvertMap, QVariant.canConvertToMap(object)); + assertEquals("Can convert Double", canConvertDouble, QVariant.canConvertToDouble(object)); + assertEquals("Can convert Int", canConvertInt, QVariant.canConvertToInt(object)); + assertEquals("Can convert Bool", canConvertBool, QVariant.canConvertToBoolean(object)); assertEquals(expectedString, QVariant.toString(object)); assertEquals(expectedDouble, QVariant.toDouble(object), 0.0); - assertEquals(expectedInt, QVariant.toInt(object), 0.0); + assertEquals(expectedInt, QVariant.toInt(object)); assertEquals(expectedBool, QVariant.toBoolean(object)); assertEquals(expectedBitArray, QVariant.toBitArray(object)); assertEquals(expectedChar, QVariant.toChar(object)); diff --git a/src/java/autotest/io/qt/autotests/TestQml.java b/src/java/autotest/io/qt/autotests/TestQml.java index 38f559c7..bf5eee66 100644 --- a/src/java/autotest/io/qt/autotests/TestQml.java +++ b/src/java/autotest/io/qt/autotests/TestQml.java @@ -832,7 +832,7 @@ public void run_testSingletonInstance() { QtQml.qmlRegisterType(MessageBody.class, "io.qt.test", 1, 0, "MessageBody"); QtQml.qmlRegisterType(Message.class, "io.qt.test", 1, 0, "Message"); Singleton s = new Singleton(); - QtQml.qmlRegisterSingletonInstance(s, "io.qt.test", 1, 0, "TextSource"); + QtQml.qmlRegisterSingletonInstance("io.qt.test", 1, 0, "TextSource", s); QtQml.ValueCallback valueCallback; QtQml.qmlRegisterSingletonType("io.qt.test", 1, 0, "AuthorSource", valueCallback = (QQmlEngine qmlEngine, QJSEngine jsEngine)->{ QJSValue example = jsEngine.newObject(); @@ -886,7 +886,7 @@ class SingletonObject extends QObject{ disposed[0] = true; }); WeakReference weakSingleton = new WeakReference<>(singleton); - QtQml.qmlRegisterSingletonInstance(singleton, "signal.test", 1, 0, "Singleton"); + QtQml.qmlRegisterSingletonInstance("signal.test", 1, 0, "Singleton", singleton); QByteArray data = new QByteArray("import QtQuick 2.0\n" + "import signal.test 1.0\n" + "Item {\n" + @@ -1010,7 +1010,7 @@ public void run_testProvidingAttachedProperties() { public void run_testRegisterUncreatableClass() { class Uncreatable extends QObject{} QtQml.qmlClearTypeRegistrations(); - QtQml.qmlRegisterUncreatableClass(Uncreatable.class, "io.qt.test", 1, 0, "Uncreatable", "not creatable"); + QtQml.qmlRegisterUncreatableType(Uncreatable.class, "io.qt.test", 1, 0, "Uncreatable", "not creatable"); QByteArray data = new QByteArray("import io.qt.test 1.0\n" + "Uncreatable {\n" + "}"); diff --git a/src/java/autotest/io/qt/autotests/TestQmlPlugin.java b/src/java/autotest/io/qt/autotests/TestQmlPlugin.java index 562d7e02..0d06c811 100644 --- a/src/java/autotest/io/qt/autotests/TestQmlPlugin.java +++ b/src/java/autotest/io/qt/autotests/TestQmlPlugin.java @@ -37,7 +37,6 @@ import io.qt.core.QByteArray; import io.qt.core.QCoreApplication; -import io.qt.core.QDir; import io.qt.core.QMetaObject; import io.qt.core.QMetaProperty; import io.qt.core.QObject; diff --git a/src/java/autotest/io/qt/autotests/TestQmlQt6.java b/src/java/autotest/io/qt/autotests/TestQmlQt6.java index 01a6e799..168bab7b 100644 --- a/src/java/autotest/io/qt/autotests/TestQmlQt6.java +++ b/src/java/autotest/io/qt/autotests/TestQmlQt6.java @@ -28,13 +28,30 @@ ****************************************************************************/ package io.qt.autotests; +//import static io.qt.core.QMetaType.*; +import static io.qt.qml.QtQml.qmlClearTypeRegistrations; +import static io.qt.qml.QtQml.qmlRegisterType; + import org.junit.Assert; +import org.junit.Assume; import org.junit.Test; +import io.qt.QtEnumerator; +import io.qt.QtPropertyReader; +import io.qt.QtPropertyWriter; import io.qt.core.QByteArray; import io.qt.core.QCoreApplication; import io.qt.core.QIntProperty; +import io.qt.core.QLibraryInfo; +import io.qt.core.QList; +import io.qt.core.QMetaMethod; +import io.qt.core.QMetaObject; +import io.qt.core.QMetaType; import io.qt.core.QObject; +import io.qt.core.QRectF; +import io.qt.core.QVariant; +import io.qt.core.QVersionNumber; +import io.qt.gui.QVector4D; import io.qt.qml.QJSEngine; import io.qt.qml.QJSValue; import io.qt.qml.QQmlComponent; @@ -73,7 +90,8 @@ public void setNumber(int number) { public void run_testSingletonInstance() { QtQml.qmlClearTypeRegistrations(); Singleton s = new Singleton(); - QtQml.qmlRegisterSingletonInstance(s, "io.qt.test", 1, 0, "Singleton"); + int id = QtQml.qmlRegisterSingletonInstance("io.qt.test", 1, 0, "Singleton", s); + Assert.assertTrue(id!=-1); QByteArray data = new QByteArray("import io.qt.test 1.0\n" + "import QtQuick 2.0\n" + "Item{\n" + @@ -97,4 +115,252 @@ public void run_testSingletonInstance() { Assert.assertEquals(29, iprop.value()); Assert.assertEquals(29, root.property("number")); } + + @SuppressWarnings({ "unchecked", "rawtypes" }) + @Test + public void run_testValueType() { + Assume.assumeTrue("Qt version >= 6.4", QLibraryInfo.version().compareTo(new QVersionNumber(6,4))>=0); + QtQml.qmlClearTypeRegistrations(); + int id = QtQml.qmlRegisterType((Class)CloneableMetaValue.class, "io.qt.test", 1, 0, "mval"); + Assert.assertTrue(id!=-1); + QByteArray data = new QByteArray("import io.qt.test 1.0\n" + + "import QtQuick 2.0\n" + + "Item{\n" + + " property mval customValue;\n" + + " property list customValues;\n" + + "}"); + QQmlEngine engine = new QQmlEngine(); + QQmlComponent component = new QQmlComponent(engine); + component.setData(data, null); + Assert.assertEquals(component.errorString().trim(), QQmlComponent.Status.Ready, component.status()); + Assert.assertEquals(component.errorString().trim(), 0, component.errors().size()); + QObject root = component.create(); + Object customValue = root.property("customValue"); + Assert.assertTrue(customValue instanceof CloneableMetaValue); + Object customValues = root.property("customValues"); + Assert.assertTrue(customValues instanceof QList); + QList list = (QList)customValues; + Assert.assertEquals(0, list.size()); + try { + list.add(""); + Assert.fail("IllegalArgumentException expected"); + } catch (IllegalArgumentException e) { + } + list.add(new CloneableMetaValue()); + } + + static class CustomGadgetType + { + public CustomGadgetType() {} + private QRectF rect = new QRectF(); + + @QtPropertyReader(name="rect") + public QRectF getRect() { + return rect; + } + @QtPropertyWriter(name="rect") + public void setRect(QRectF rect) { + this.rect = rect; + } + } + + static class CustomValueType implements Cloneable + { + public CustomValueType() {} + + public CustomValueType(int i, double d, String s) { + this.i = i; + this.d = d; + this.s = s; + } + + CustomValueType(CustomValueType other) { + this.i = other.i; + this.d = other.d; + this.s = other.s; + } + private int i; + private double d; + private String s = ""; + + @QtPropertyReader(name="self") + public CustomValueType self() { + return this; + } + + @QtPropertyReader(name="i") + public int getI() { + return i; + } + @QtPropertyWriter(name="i") + public void setI(int i) { + this.i = i; + } + @QtPropertyReader(name="d") + public double getD() { + return d; + } + @QtPropertyWriter(name="d") + public void setD(double d) { + this.d = d; + } + @QtPropertyReader(name="s") + public String getS() { + return s; + } + @QtPropertyWriter(name="s") + public void setS(String s) { + this.s = s; + } + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + long temp; + temp = Double.doubleToLongBits(d); + result = prime * result + (int) (temp ^ (temp >>> 32)); + result = prime * result + i; + result = prime * result + ((s == null) ? 0 : s.hashCode()); + return result; + } + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + CustomValueType other = (CustomValueType) obj; + if (Double.doubleToLongBits(d) != Double.doubleToLongBits(other.d)) + return false; + if (i != other.i) + return false; + if (s == null) { + if (other.s != null) + return false; + } else if (!s.equals(other.s)) + return false; + return true; + } + @Override + public String toString() { + return "CustomValueType [i=" + i + ", d=" + d + ", s=" + s + "]"; + } + + @Override + public CustomValueType clone(){ + return new CustomValueType(this); + } + }; + + static class ObjectType extends QObject{ + public ObjectType() { + super(); + } + public ObjectType(QDeclarativeConstructor constructor) { + super(constructor); + } + public ObjectType(QObject parent) { + super(parent); + } + + public enum SomeEnum implements QtEnumerator{A,B,C,D}; + public final Signal0 vectorChanged = new Signal0(); + public final Signal0 someEnumChanged = new Signal0(); + public final Signal0 customValueTypeChanged = new Signal0(); + + private QVector4D vector = new QVector4D(); + private SomeEnum someEnum = SomeEnum.A; + private CustomValueType customValueType = new CustomValueType(); + private CustomGadgetType customGadgetType = new CustomGadgetType(); + private java.lang.Throwable throwable; + + public QVector4D getVector() { + return vector; + } + public void setVector(QVector4D vector) { + this.vector = vector; + vectorChanged.emit(); + } + public SomeEnum getSomeEnum() { + return someEnum; + } + public void setSomeEnum(SomeEnum someEnum) { + this.someEnum = someEnum; + someEnumChanged.emit(); + } + public CustomValueType getCustomValueType() { + return customValueType; + } + public void setCustomValueType(CustomValueType customValueType) { + if(customValueType==null) + customValueType = new CustomValueType(); + this.customValueType = customValueType; + customValueTypeChanged.emit(); + } + + public CustomGadgetType getCustomGadgetType() { + return customGadgetType; + } + + public void setCustomGadgetType(CustomGadgetType customGadgetType) { + this.customGadgetType = customGadgetType; + } + public java.lang.Throwable getThrowable() { + return throwable; + } + public void setThrowable(java.lang.Throwable throwable) { + this.throwable = throwable; + } + } + + @Test + public void testCustomTypes() { + qmlClearTypeRegistrations(); + qmlRegisterType(ObjectType.class, "io.qt.test", 1, 0, "ObjectType"); + QByteArray data = new QByteArray("import io.qt.test 1.0\n" + + "import QtQuick 2.0\n" + + "Item{\n" + + " property ObjectType object: ObjectType{\n" + + " vector: Qt.vector4d(1,2,3,4)\n" + + " someEnum: ObjectType.D\n" + + " customValueType.i: 5\n" + + " customValueType.d: 7.9\n" + + " customValueType.s: \"TEST\"\n" + + " }\n" + + " property int someEnum: object.someEnum\n" + + " function changeObject(){\n" + + " object.someEnum = ObjectType.B;\n" + + " object.customValueType.i = 6;\n" + + " object.customValueType.d = 3.9;\n" + + " object.customValueType.s = \"TEST2\";\n" + + " }\n" + + "}"); + QQmlEngine engine = new QQmlEngine(); + engine.setOutputWarningsToStandardError(true); + QQmlComponent component = new QQmlComponent(engine); + component.setData(data, null); + Assert.assertEquals(component.errorString().trim(), QQmlComponent.Status.Ready, component.status()); + Assert.assertEquals(component.errorString().trim(), 0, component.errors().size()); + QObject root = component.create(); + ObjectType object = (ObjectType)root.property("object"); + Assert.assertEquals(new QVector4D(1,2,3,4), object.vector); + Assert.assertEquals(ObjectType.SomeEnum.D, object.someEnum); + ObjectType.SomeEnum someEnum = QVariant.convert(root.property("someEnum"), ObjectType.SomeEnum.class); + Assert.assertEquals(ObjectType.SomeEnum.D, someEnum); + QMetaObject mo = root.metaObject(); + QMetaMethod changeObject = mo.method("changeObject"); + changeObject.invoke(root); + Assert.assertEquals(ObjectType.SomeEnum.B, object.someEnum); + someEnum = QVariant.convert(root.property("someEnum"), ObjectType.SomeEnum.class); + Assert.assertEquals(ObjectType.SomeEnum.B, someEnum); + Assert.assertEquals(QMetaType.fromType(CustomGadgetType.class), QVariant.fromValue(new CustomGadgetType()).metaType()); + Assert.assertEquals(QMetaType.fromType(CustomValueType.class), QVariant.fromValue(new CustomValueType()).metaType()); + Assert.assertEquals(QMetaType.fromName("JObjectWrapper"), QVariant.fromValue(new ObjectType()).metaType()); +// QMetaObject.forType(ObjectType.class).properties().forEach(p->System.out.println(p.typeName()+" "+p.name())); +// System.out.println(QMetaType.fromType(java.lang.Runnable.class).flags()); +// System.out.println(QMetaObject.forType(Runnable.class).methods()); +// System.out.println(QMetaObject.forType(Runnable.class).properties()); + } } diff --git a/src/java/autotest/io/qt/autotests/TestQuickPaintItemQt6.java b/src/java/autotest/io/qt/autotests/TestQuickPaintItemQt6.java index af9b1bd4..7a2b374a 100644 --- a/src/java/autotest/io/qt/autotests/TestQuickPaintItemQt6.java +++ b/src/java/autotest/io/qt/autotests/TestQuickPaintItemQt6.java @@ -29,14 +29,33 @@ ****************************************************************************/ package io.qt.autotests; -import org.junit.*; -import io.qt.core.*; -import io.qt.gui.*; -import io.qt.*; -import io.qt.qml.*; -import io.qt.quick.*; -import io.qt.autotests.TestQuickQt6.*; -import static io.qt.autotests.TestQuickQt6.*; +import static io.qt.autotests.TestQuickQt6.loop; +import static io.qt.autotests.TestQuickQt6.painted; +import static io.qt.autotests.TestQuickQt6.updatePaintNode_begone; +import static io.qt.autotests.TestQuickQt6.updatePaintNode_ended; + +import org.junit.Assert; +import org.junit.Assume; +import org.junit.BeforeClass; +import org.junit.Test; + +import io.qt.NativeAccess; +import io.qt.core.QEventLoop; +import io.qt.core.QMetaObject; +import io.qt.core.QSize; +import io.qt.core.QSizeF; +import io.qt.core.QTimer; +import io.qt.core.Qt; +import io.qt.gui.QGuiApplication; +import io.qt.gui.QPainter; +import io.qt.gui.QSurfaceFormat; +import io.qt.qml.QtQml; +import io.qt.quick.QQuickItem; +import io.qt.quick.QQuickPaintedItem; +import io.qt.quick.QQuickRenderTarget; +import io.qt.quick.QQuickWindow; +import io.qt.quick.QSGNode; +import io.qt.quick.QSGRendererInterface; public class TestQuickPaintItemQt6 extends ApplicationInitializer { diff --git a/src/java/autotest/io/qt/autotests/TestQuickTextureD3DQt6.java b/src/java/autotest/io/qt/autotests/TestQuickTextureD3DQt6.java new file mode 100644 index 00000000..42c782f2 --- /dev/null +++ b/src/java/autotest/io/qt/autotests/TestQuickTextureD3DQt6.java @@ -0,0 +1,98 @@ +/**************************************************************************** +** +** Copyright (C) 1992-2009 Nokia. All rights reserved. +** Copyright (C) 2009-2022 Dr. Peter Droste, Omix Visualization GmbH & Co. KG. All rights reserved. +** +** This file is part of Qt Jambi. +** +** ** $BEGIN_LICENSE$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** $END_LICENSE$ +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +****************************************************************************/ +package io.qt.autotests; + +import org.junit.Assert; +import org.junit.Assume; +import org.junit.BeforeClass; +import org.junit.Test; + +import io.qt.core.QCoreApplication; +import io.qt.core.QEventLoop; +import io.qt.core.QOperatingSystemVersion; +import io.qt.core.QSize; +import io.qt.core.QTimer; +import io.qt.core.Qt; +import io.qt.gui.QColor; +import io.qt.gui.QGuiApplication; +import io.qt.gui.QPixmap; +import io.qt.gui.QSurface; +import io.qt.quick.QQuickRenderTarget; +import io.qt.quick.QQuickWindow; +import io.qt.quick.QSGNode; +import io.qt.quick.QSGRendererInterface; +import io.qt.quick.QSGTexture; +import io.qt.quick.nativeinterface.QSGD3D11Texture; + +public class TestQuickTextureD3DQt6 extends ApplicationInitializer { + + @BeforeClass + public static void testInitialize() throws Exception { + Assume.assumeTrue(QOperatingSystemVersion.current().isAnyOfType(QOperatingSystemVersion.OSType.Windows)); + QCoreApplication.setAttribute(Qt.ApplicationAttribute.AA_ShareOpenGLContexts); + ApplicationInitializer.testInitializeWithGui(); + Assume.assumeTrue("A screen is required to create a window.", QGuiApplication.primaryScreen()!=null); + io.qt.QtUtilities.loadQtLibrary("OpenGL"); + } + + @Test + public void testD3DTecture() { + QQuickWindow.setGraphicsApi(QSGRendererInterface.GraphicsApi.Direct3D11); + QQuickWindow window = new QQuickWindow(); + Assume.assumeTrue(window.surfaceType()==QSurface.SurfaceType.Direct3DSurface); + try { + QEventLoop loop = new QEventLoop(); + QSGTexture[] texture = {null}; + TestQuickQt6.TestItem item = new TestQuickQt6.TestItem() { + @Override + protected QSGNode updatePaintNode(QSGNode arg__1, UpdatePaintNodeData arg__2) { + QPixmap pixmap = new QPixmap(100, 100); + pixmap.fill(new QColor(Qt.GlobalColor.magenta)); + texture[0] = window.createTextureFromImage(pixmap.toImage()); + return arg__1; + } + }; + item.setParentItem(window.contentItem()); + window.contentItem().setEnabled(true); + window.show(); + window.sceneGraphInitialized.connect(loop::quit); + QTimer.singleShot(20000, loop::quit); + loop.exec(); + Assert.assertTrue(texture[0]!=null); + QSGD3D11Texture openglTexture = texture[0].nativeInterface(QSGD3D11Texture.class); + Assert.assertTrue(openglTexture!=null); + QQuickRenderTarget target = QQuickRenderTarget.fromD3D11Texture(openglTexture.nativeTexture(), new QSize(100, 100)); + Assert.assertTrue(target!=null); + }finally { + window.close(); + window.dispose(); + } + } +} diff --git a/src/java/autotest/io/qt/autotests/TestQuickTextureMetalQt6.java b/src/java/autotest/io/qt/autotests/TestQuickTextureMetalQt6.java new file mode 100644 index 00000000..4b3725ff --- /dev/null +++ b/src/java/autotest/io/qt/autotests/TestQuickTextureMetalQt6.java @@ -0,0 +1,97 @@ +/**************************************************************************** +** +** Copyright (C) 1992-2009 Nokia. All rights reserved. +** Copyright (C) 2009-2022 Dr. Peter Droste, Omix Visualization GmbH & Co. KG. All rights reserved. +** +** This file is part of Qt Jambi. +** +** ** $BEGIN_LICENSE$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** $END_LICENSE$ +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +****************************************************************************/ +package io.qt.autotests; + +import org.junit.Assert; +import org.junit.Assume; +import org.junit.BeforeClass; +import org.junit.Test; + +import io.qt.core.QEventLoop; +import io.qt.core.QOperatingSystemVersion; +import io.qt.core.QSize; +import io.qt.core.QTimer; +import io.qt.core.Qt; +import io.qt.gui.QColor; +import io.qt.gui.QGuiApplication; +import io.qt.gui.QPixmap; +import io.qt.gui.QSurface; +import io.qt.quick.QQuickRenderTarget; +import io.qt.quick.QQuickWindow; +import io.qt.quick.QSGNode; +import io.qt.quick.QSGRendererInterface; +import io.qt.quick.QSGTexture; +import io.qt.quick.nativeinterface.QSGMetalTexture; + +public class TestQuickTextureMetalQt6 extends ApplicationInitializer { + + @BeforeClass + public static void testInitialize() throws Exception { + Assume.assumeTrue("nativeInterface() never works in ative Qt.", false); + Assume.assumeTrue(QOperatingSystemVersion.current().isAnyOfType(QOperatingSystemVersion.OSType.MacOS, QOperatingSystemVersion.OSType.IOS)); + ApplicationInitializer.testInitializeWithGui(); + Assume.assumeTrue("A screen is required to create a window.", QGuiApplication.primaryScreen()!=null); + io.qt.QtUtilities.loadQtLibrary("OpenGL"); + } + + @Test + public void testMetalTecture() { + QQuickWindow.setGraphicsApi(QSGRendererInterface.GraphicsApi.Metal); + QQuickWindow window = new QQuickWindow(); + Assume.assumeTrue(window.surfaceType()==QSurface.SurfaceType.MetalSurface); + try { + QEventLoop loop = new QEventLoop(); + QSGTexture[] texture = {null}; + TestQuickQt6.TestItem item = new TestQuickQt6.TestItem() { + @Override + protected QSGNode updatePaintNode(QSGNode arg__1, UpdatePaintNodeData arg__2) { + QPixmap pixmap = new QPixmap(100, 100); + pixmap.fill(new QColor(Qt.GlobalColor.magenta)); + texture[0] = window.createTextureFromImage(pixmap.toImage()); + return arg__1; + } + }; + item.setParentItem(window.contentItem()); + window.contentItem().setEnabled(true); + window.show(); + window.sceneGraphInitialized.connect(loop::quit); + QTimer.singleShot(20000, loop::quit); + loop.exec(); + Assert.assertTrue(texture[0]!=null); + QSGMetalTexture openglTexture = texture[0].nativeInterface(QSGMetalTexture.class); + Assert.assertTrue(openglTexture!=null); + QQuickRenderTarget target = QQuickRenderTarget.fromMetalTexture(openglTexture.nativeTexture(), new QSize(100, 100)); + Assert.assertTrue(target!=null); + }finally { + window.close(); + window.dispose(); + } + } +} diff --git a/src/java/autotest/io/qt/autotests/TestQuickTextureOpenGLQt6.java b/src/java/autotest/io/qt/autotests/TestQuickTextureOpenGLQt6.java new file mode 100644 index 00000000..3c325582 --- /dev/null +++ b/src/java/autotest/io/qt/autotests/TestQuickTextureOpenGLQt6.java @@ -0,0 +1,97 @@ +/**************************************************************************** +** +** Copyright (C) 1992-2009 Nokia. All rights reserved. +** Copyright (C) 2009-2022 Dr. Peter Droste, Omix Visualization GmbH & Co. KG. All rights reserved. +** +** This file is part of Qt Jambi. +** +** ** $BEGIN_LICENSE$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** $END_LICENSE$ +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +****************************************************************************/ +package io.qt.autotests; + +import org.junit.Assert; +import org.junit.Assume; +import org.junit.BeforeClass; +import org.junit.Test; + +import io.qt.core.QCoreApplication; +import io.qt.core.QEventLoop; +import io.qt.core.QSize; +import io.qt.core.QTimer; +import io.qt.core.Qt; +import io.qt.gui.QColor; +import io.qt.gui.QGuiApplication; +import io.qt.gui.QPixmap; +import io.qt.gui.QSurface; +import io.qt.quick.QQuickRenderTarget; +import io.qt.quick.QQuickWindow; +import io.qt.quick.QSGNode; +import io.qt.quick.QSGRendererInterface; +import io.qt.quick.QSGTexture; +import io.qt.quick.nativeinterface.QSGOpenGLTexture; + +public class TestQuickTextureOpenGLQt6 extends ApplicationInitializer { + + @BeforeClass + public static void testInitialize() throws Exception { + QCoreApplication.setAttribute(Qt.ApplicationAttribute.AA_ShareOpenGLContexts); + ApplicationInitializer.testInitializeWithGui(); + Assume.assumeTrue("A screen is required to create a window.", QGuiApplication.primaryScreen()!=null); + io.qt.QtUtilities.loadQtLibrary("OpenGL"); + } + + @Test + public void testOpenGLTecture() { + QQuickWindow.setGraphicsApi(QSGRendererInterface.GraphicsApi.OpenGL); + Assume.assumeTrue(QQuickWindow.graphicsApi()==QSGRendererInterface.GraphicsApi.OpenGL); + QQuickWindow window = new QQuickWindow(); + Assume.assumeTrue(window.surfaceType()==QSurface.SurfaceType.OpenGLSurface); + try { + QEventLoop loop = new QEventLoop(); + QSGTexture[] texture = {null}; + TestQuickQt6.TestItem item = new TestQuickQt6.TestItem() { + @Override + protected QSGNode updatePaintNode(QSGNode arg__1, UpdatePaintNodeData arg__2) { + QPixmap pixmap = new QPixmap(100, 100); + pixmap.fill(new QColor(Qt.GlobalColor.magenta)); + texture[0] = window.createTextureFromImage(pixmap.toImage()); + return arg__1; + } + }; + item.setParentItem(window.contentItem()); + window.contentItem().setEnabled(true); + window.show(); + window.sceneGraphInitialized.connect(loop::quit); + QTimer.singleShot(20000, loop::quit); + loop.exec(); + Assert.assertTrue(texture[0]!=null); + QSGOpenGLTexture openglTexture = texture[0].nativeInterface(QSGOpenGLTexture.class); + Assert.assertTrue(openglTexture!=null); + QQuickRenderTarget target = QQuickRenderTarget.fromOpenGLTexture(openglTexture.nativeTexture(), new QSize(100, 100)); + Assert.assertTrue(target!=null); + }finally { + window.close(); + window.dispose(); + } + } +} diff --git a/src/java/autotest/io/qt/autotests/TestQuickTextureVulkanQt6.java b/src/java/autotest/io/qt/autotests/TestQuickTextureVulkanQt6.java new file mode 100644 index 00000000..57eb0b34 --- /dev/null +++ b/src/java/autotest/io/qt/autotests/TestQuickTextureVulkanQt6.java @@ -0,0 +1,99 @@ +/**************************************************************************** +** +** Copyright (C) 1992-2009 Nokia. All rights reserved. +** Copyright (C) 2009-2022 Dr. Peter Droste, Omix Visualization GmbH & Co. KG. All rights reserved. +** +** This file is part of Qt Jambi. +** +** ** $BEGIN_LICENSE$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** $END_LICENSE$ +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +****************************************************************************/ +package io.qt.autotests; + +import org.junit.Assert; +import org.junit.Assume; +import org.junit.BeforeClass; +import org.junit.Test; + +import io.qt.autotests.generated.General; +import io.qt.core.QEventLoop; +import io.qt.core.QSize; +import io.qt.core.QTimer; +import io.qt.core.Qt; +import io.qt.gui.QColor; +import io.qt.gui.QGuiApplication; +import io.qt.gui.QPixmap; +import io.qt.gui.QSurface; +import io.qt.quick.QQuickRenderTarget; +import io.qt.quick.QQuickWindow; +import io.qt.quick.QSGNode; +import io.qt.quick.QSGRendererInterface; +import io.qt.quick.QSGTexture; +import io.qt.quick.nativeinterface.QSGVulkanTexture; + +public class TestQuickTextureVulkanQt6 extends ApplicationInitializer { + + @BeforeClass + public static void testInitialize() throws Exception { + Assume.assumeTrue("Qt build has no Vulkan support.", General.canVulkan()); + ApplicationInitializer.testInitializeWithGui(); + Assume.assumeTrue("A screen is required to create a window.", QGuiApplication.primaryScreen()!=null); + io.qt.QtUtilities.loadQtLibrary("OpenGL"); + } + + @Test + public void testVulkanTecture() { + QQuickWindow.setGraphicsApi(QSGRendererInterface.GraphicsApi.Vulkan); + QQuickWindow window = new QQuickWindow(); + Assume.assumeTrue("Window needs Vulkan support.", window.surfaceType()==QSurface.SurfaceType.VulkanSurface); + try { + QEventLoop loop = new QEventLoop(); + boolean[] hasVulkanInstance = {false}; + QSGTexture[] texture = {null}; + TestQuickQt6.TestItem item = new TestQuickQt6.TestItem() { + @Override + protected QSGNode updatePaintNode(QSGNode arg__1, UpdatePaintNodeData arg__2) { + QPixmap pixmap = new QPixmap(100, 100); + pixmap.fill(new QColor(Qt.GlobalColor.magenta)); + if(hasVulkanInstance[0] = General.hasVulkanInstance(window)) + texture[0] = window.createTextureFromImage(pixmap.toImage()); + return arg__1; + } + }; + item.setParentItem(window.contentItem()); + window.contentItem().setEnabled(true); + window.show(); + window.sceneGraphInitialized.connect(loop::quit); + QTimer.singleShot(20000, loop::quit); + loop.exec(); + Assume.assumeTrue("Window is missing QVulkanInstance.", hasVulkanInstance[0]); + Assert.assertTrue(texture[0]!=null); + QSGVulkanTexture openglTexture = texture[0].nativeInterface(QSGVulkanTexture.class); + Assert.assertTrue(openglTexture!=null); + QQuickRenderTarget target = QQuickRenderTarget.fromVulkanImage(openglTexture.nativeImage(), openglTexture.nativeImageLayout(), new QSize(100, 100)); + Assert.assertTrue(target!=null); + }finally { + window.close(); + window.dispose(); + } + } +} diff --git a/src/java/autotest/io/qt/autotests/TestRemoteObjects.java b/src/java/autotest/io/qt/autotests/TestRemoteObjects.java index a6692359..1c26a162 100644 --- a/src/java/autotest/io/qt/autotests/TestRemoteObjects.java +++ b/src/java/autotest/io/qt/autotests/TestRemoteObjects.java @@ -53,27 +53,28 @@ import io.qt.core.QMetaType; import io.qt.core.QObject; import io.qt.core.QRect; +import io.qt.core.QThread; import io.qt.core.QTimer; import io.qt.core.QUrl; import io.qt.core.Qt; import io.qt.gui.QColor; import io.qt.gui.QColorConstants; +import io.qt.internal.QtJambiInternal; import io.qt.remoteobjects.QRemoteObjectDynamicReplica; import io.qt.remoteobjects.QRemoteObjectNode; import io.qt.remoteobjects.QRemoteObjectPendingCall; import io.qt.remoteobjects.QRemoteObjectPendingReply; import io.qt.remoteobjects.QtRemoteObjects; -import io.qt.internal.QtJambiInternal; public class TestRemoteObjects extends UnitTestInitializer { private static Throwable exception = null; - private static Thread pongThread; + private static QThread pongThread; @BeforeClass public static void testInitialize() throws Throwable { ApplicationInitializer.testInitialize(); - pongThread = new Thread(() -> { + pongThread = QThread.create(() -> { QEventLoop loop = new QEventLoop(); try { System.out.println("Deploying QtRemoteObjectsPong..."); @@ -88,8 +89,11 @@ public static void testInitialize() throws Throwable { pongThread.start(); pongThread.join(2000); long t1 = System.currentTimeMillis(); - String version = QtJambiInternal.majorVersion()+"."+QtJambiInternal.minorVersion()+"."+QtJambiInternal.qtjambiPatchVersion(); - File testFile = new File(new File(new File(new File(new File(System.getProperty("user.dir"), version), "build"), "tests"), "tmp"), "touch.test"); + final String version = QtJambiInternal.majorVersion()+"."+QtJambiInternal.minorVersion()+"."+QtJambiInternal.qtjambiPatchVersion(); + final String jambidir = System.getProperty("user.dir"); + final File testsDir = new File(new File(new File(new File(jambidir, version), "build"), QtJambiInternal.osArchName()), "tests"); + final File targetDir = new File(testsDir, "tmp_"+QtJambiInternal.processName()); + final File testFile = new File(targetDir, "QtRemoteObjectsPong.touch.test"); while(!testFile.exists() && pongThread.isAlive()){ pongThread.join(2000); if(System.currentTimeMillis()-t1>25000) { @@ -110,16 +114,17 @@ public static void testDispose() throws Throwable { if(pongThread!=null) { pongThread.interrupt(); pongThread.join(); + pongThread.dispose(); pongThread = null; } if (exception != null) throw exception; } finally { { - String version = QtJambiInternal.majorVersion()+"."+QtJambiInternal.minorVersion()+"."+QtJambiInternal.qtjambiPatchVersion(); - String jambidir = System.getProperty("user.dir"); - final File testsDir = new File(new File(new File(jambidir, version), "build"), "tests"); - final File targetDir = new File(testsDir, "tmp_"+QtJambiInternal.processName()); + final String version = QtJambiInternal.majorVersion()+"."+QtJambiInternal.minorVersion()+"."+QtJambiInternal.qtjambiPatchVersion(); + final String jambidir = System.getProperty("user.dir"); + final File testsDir = new File(new File(new File(new File(jambidir, version), "build"), QtJambiInternal.osArchName()), "tests"); + final File targetDir = new File(testsDir, "tmp_"+QtJambiInternal.processName()); File tmpDir = new File(System.getProperty("java.io.tmpdir")); if(new File(targetDir, "pid").isFile()) { String processName = new String(Files.readAllBytes(new File(targetDir, "pid").toPath())).trim();; @@ -131,7 +136,7 @@ public static void testDispose() throws Throwable { } } if(targetDir.isDirectory() && !Boolean.getBoolean("qtjambi.deployer.skip.deletion")) { - Logger.getLogger("io.qt.autotests").log(Level.FINEST, ()->"Cleaning deployer directory "+targetDir); + Logger.getLogger("io.qt.autotests").log(Level.FINEST, "Cleaning deployer directory {0}", targetDir); ApplicationInitializer.clearAndDelete(targetDir); } } @@ -142,7 +147,7 @@ public static void testDispose() throws Throwable { @Test public void testPingPong() throws Throwable { - QMetaType.registerMetaType(NonQtType.class); + QMetaType.qRegisterMetaType(NonQtType.class); QRemoteObjectNode node = new QRemoteObjectNode(new QUrl("local:ropong")); QRemoteObjectDynamicReplica pong = node.acquireDynamic("pong"); QTimer timer = new QTimer(); @@ -151,107 +156,113 @@ public void testPingPong() throws Throwable timer.timeout.connect(QCoreApplication::quit); timer.start(); Throwable exception[] = {new AssertionError("Replica not initialized")}; - pong.initialized.connect(()->{ - exception[0] = null; - timer.stop(); - timer.timeout.disconnect(); - QObject object = new QObject(); - object.destroyed.connect(()->{ - try { - AbstractPublicSignal0 pongSignal = (AbstractPublicSignal0)QMetaObject.findSignal(pong, "pong"); - AbstractPublicSignal0 pingSignal = (AbstractPublicSignal0)QMetaObject.findSignal(pong, "ping"); - Assert.assertTrue(pongSignal!=null); - Assert.assertTrue(pingSignal!=null); - boolean[] received = {false,false}; - pongSignal.connect(()->received[0] = true); - pingSignal.connect(()->received[1] = true); - QEventLoop loop = new QEventLoop(); - timer.timeout.connect(loop::quit); - pingSignal.connect(loop::quit); - timer.start(); - QMetaObject.invokeMethod(pong, "emitPing"); - loop.exec(); - timer.stop(); - timer.timeout.disconnect(); - Assert.assertTrue("pong not received", received[0]); - Assert.assertTrue("ping not received", received[1]); - pongSignal.disconnect(); - pingSignal.disconnect(); - - Object result; - result = QMetaObject.invokeMethod(pong, "getInt"); - if(result instanceof QRemoteObjectPendingCall) { - QRemoteObjectPendingReply pending = new QRemoteObjectPendingReply<>((QRemoteObjectPendingCall)result, int.class); - if(!pending.isFinished()) - pending.waitForFinished(); - Assert.assertEquals(QRemoteObjectPendingCall.Error.NoError, pending.error()); - Assert.assertEquals(Integer.valueOf(5), pending.returnValue()); - }else { - Assert.fail("QRemoteObjectPendingCall expected but was "+result); - } - result = QMetaObject.invokeMethod(pong, "toRect", 2,3,4,5); - if(result instanceof QRemoteObjectPendingCall) { - QRemoteObjectPendingReply pending = new QRemoteObjectPendingReply<>((QRemoteObjectPendingCall)result, QRect.class); - if(!pending.isFinished()) - pending.waitForFinished(); - Assert.assertEquals(QRemoteObjectPendingCall.Error.NoError, pending.error()); - Assert.assertEquals(new QRect(2,3,4,5), pending.returnValue()); - }else { - Assert.fail("QRemoteObjectPendingCall expected but was "+result); - } - result = QMetaObject.invokeMethod(pong, "getIntArray"); - if(result instanceof QRemoteObjectPendingCall) { - QRemoteObjectPendingReply pending = new QRemoteObjectPendingReply<>((QRemoteObjectPendingCall)result, int[].class); - if(!pending.isFinished()) - pending.waitForFinished(); - Assert.assertEquals(QRemoteObjectPendingCall.Error.NoError, pending.error()); - int[] array = pending.returnValue(); - Assert.assertTrue(array!=null); - Assert.assertEquals(5, array.length); - Assert.assertEquals(1, array[0]); - Assert.assertEquals(2, array[1]); - Assert.assertEquals(3, array[2]); - Assert.assertEquals(4, array[3]); - Assert.assertEquals(5, array[4]); - }else { - Assert.fail("QRemoteObjectPendingCall expected but was "+result); - } - result = QMetaObject.invokeMethod(pong, "getNonQtType"); - if(result instanceof QRemoteObjectPendingCall) { - QRemoteObjectPendingReply pending = new QRemoteObjectPendingReply<>((QRemoteObjectPendingCall)result, NonQtType.class); - if(!pending.isFinished()) - pending.waitForFinished(); - Assert.assertEquals(QRemoteObjectPendingCall.Error.NoError, pending.error()); - NonQtType value = pending.returnValue(); - Assert.assertTrue(value!=null); - Assert.assertEquals(5, value.i); - Assert.assertEquals(2.5, value.d, 0.0000001); - Assert.assertEquals("TEST", value.s); - Assert.assertEquals(false, value.b); - }else { - Assert.fail("QRemoteObjectPendingCall expected but was "+result); - } - - result = QMetaObject.invokeMethod(pong, "getColor"); - if(result instanceof QRemoteObjectPendingCall) { - QRemoteObjectPendingReply pending = new QRemoteObjectPendingReply<>((QRemoteObjectPendingCall)result, QColor.class); - if(!pending.isFinished()) - pending.waitForFinished(); - Assert.assertEquals(QRemoteObjectPendingCall.Error.NoError, pending.error()); - Assert.assertEquals(new QColor(Qt.GlobalColor.magenta), pending.returnValue()); - }else { - Assert.fail("QRemoteObjectPendingCall expected but was "+result); + try { + pong.initialized.connect(()->{ + exception[0] = null; + timer.stop(); + timer.timeout.disconnect(); + QObject object = new QObject(); + object.destroyed.connect(()->{ + try { + AbstractPublicSignal0 pongSignal = (AbstractPublicSignal0)QMetaObject.findSignal(pong, "pong"); + AbstractPublicSignal0 pingSignal = (AbstractPublicSignal0)QMetaObject.findSignal(pong, "ping"); + Assert.assertTrue(pongSignal!=null); + Assert.assertTrue(pingSignal!=null); + boolean[] received = {false,false}; + pongSignal.connect(()->received[0] = true); + pingSignal.connect(()->received[1] = true); + QEventLoop loop = new QEventLoop(); + timer.timeout.connect(loop::quit); + pingSignal.connect(loop::quit); + timer.start(); + QMetaObject.invokeMethod(pong, "emitPing"); + loop.exec(); + timer.stop(); + timer.timeout.disconnect(); + Assert.assertTrue("pong not received", received[0]); + Assert.assertTrue("ping not received", received[1]); + pongSignal.disconnect(); + pingSignal.disconnect(); + + Object result; + result = QMetaObject.invokeMethod(pong, "getInt"); + if(result instanceof QRemoteObjectPendingCall) { + QRemoteObjectPendingReply pending = new QRemoteObjectPendingReply<>((QRemoteObjectPendingCall)result, int.class); + if(!pending.isFinished()) + pending.waitForFinished(); + Assert.assertEquals(QRemoteObjectPendingCall.Error.NoError, pending.error()); + Assert.assertEquals(Integer.valueOf(5), pending.returnValue()); + }else { + Assert.fail("QRemoteObjectPendingCall expected but was "+result); + } + result = QMetaObject.invokeMethod(pong, "toRect", 2,3,4,5); + if(result instanceof QRemoteObjectPendingCall) { + QRemoteObjectPendingReply pending = new QRemoteObjectPendingReply<>((QRemoteObjectPendingCall)result, QRect.class); + if(!pending.isFinished()) + pending.waitForFinished(); + Assert.assertEquals(QRemoteObjectPendingCall.Error.NoError, pending.error()); + Assert.assertEquals(new QRect(2,3,4,5), pending.returnValue()); + }else { + Assert.fail("QRemoteObjectPendingCall expected but was "+result); + } + result = QMetaObject.invokeMethod(pong, "getIntArray"); + if(result instanceof QRemoteObjectPendingCall) { + QRemoteObjectPendingReply pending = new QRemoteObjectPendingReply<>((QRemoteObjectPendingCall)result, int[].class); + if(!pending.isFinished()) + pending.waitForFinished(); + Assert.assertEquals(QRemoteObjectPendingCall.Error.NoError, pending.error()); + int[] array = pending.returnValue(); + Assert.assertTrue(array!=null); + Assert.assertEquals(5, array.length); + Assert.assertEquals(1, array[0]); + Assert.assertEquals(2, array[1]); + Assert.assertEquals(3, array[2]); + Assert.assertEquals(4, array[3]); + Assert.assertEquals(5, array[4]); + }else { + Assert.fail("QRemoteObjectPendingCall expected but was "+result); + } + result = QMetaObject.invokeMethod(pong, "getNonQtType"); + if(result instanceof QRemoteObjectPendingCall) { + QRemoteObjectPendingReply pending = new QRemoteObjectPendingReply<>((QRemoteObjectPendingCall)result, NonQtType.class); + if(!pending.isFinished()) + pending.waitForFinished(); + Assert.assertEquals(QRemoteObjectPendingCall.Error.NoError, pending.error()); + NonQtType value = pending.returnValue(); + Assert.assertTrue(value!=null); + Assert.assertEquals(5, value.i); + Assert.assertEquals(2.5, value.d, 0.0000001); + Assert.assertEquals("TEST", value.s); + Assert.assertEquals(false, value.b); + }else { + Assert.fail("QRemoteObjectPendingCall expected but was "+result); + } + + result = QMetaObject.invokeMethod(pong, "getColor"); + if(result instanceof QRemoteObjectPendingCall) { + QRemoteObjectPendingReply pending = new QRemoteObjectPendingReply<>((QRemoteObjectPendingCall)result, QColor.class); + if(!pending.isFinished()) + pending.waitForFinished(); + Assert.assertEquals(QRemoteObjectPendingCall.Error.NoError, pending.error()); + Assert.assertEquals(new QColor(Qt.GlobalColor.magenta), pending.returnValue()); + }else { + Assert.fail("QRemoteObjectPendingCall expected but was "+result); + } + }catch(Throwable t) { + exception[0] = t; + }finally { + QCoreApplication.quit(); + QMetaObject.invokeMethod(pong, "quit"); } - }catch(Throwable t) { - exception[0] = t; - }finally { - QCoreApplication.quit(); - QMetaObject.invokeMethod(pong, "quit"); - } + }); + object.disposeLater(); }); - object.disposeLater(); - }); - QCoreApplication.exec(); + QCoreApplication.exec(); + }finally { + timer.dispose(); + pong.dispose(); + node.dispose(); + } if(exception[0]!=null) throw exception[0]; } diff --git a/src/java/autotest/io/qt/autotests/TestRetroHelper.java b/src/java/autotest/io/qt/autotests/TestRetroHelper.java index ffde5e54..cd8d4b76 100644 --- a/src/java/autotest/io/qt/autotests/TestRetroHelper.java +++ b/src/java/autotest/io/qt/autotests/TestRetroHelper.java @@ -33,27 +33,22 @@ import io.qt.InternalAccess; import io.qt.autotests.generated.General; -import io.qt.internal.QtJambiInternal; public class TestRetroHelper extends ApplicationInitializer { - private void testCallerClassImpl() { + private void testImpl() { Assert.assertEquals(TestRetroHelper.class, General.internalAccess.callerClassProvider().get()); + InternalAccess.CallerContext info = General.internalAccess.callerContextProvider().get(); + Assert.assertTrue(info!=null); + Assert.assertEquals(TestRetroHelper.class, info.declaringClass); + Assert.assertEquals("test", info.methodName); } @Test - public void testCallerClass() { - testCallerClassImpl(); + public void test() { + testImpl(); } - @Test - public void testInvocationInfo() { - InternalAccess.CallerContext info = General.internalAccess.callerContextProvider().get(); - Assert.assertTrue(info!=null); - Assert.assertEquals(TestRetroHelper.class, info.declaringClass); - Assert.assertEquals("testInvocationInfo", info.methodName); - } - public static void main(String args[]) { org.junit.runner.JUnitCore.main(TestRetroHelper.class.getName()); } diff --git a/src/java/autotest/io/qt/autotests/TestSQLInjectedCodeQt5.java b/src/java/autotest/io/qt/autotests/TestSQLInjectedCodeQt5.java index d6642ec0..591d3958 100644 --- a/src/java/autotest/io/qt/autotests/TestSQLInjectedCodeQt5.java +++ b/src/java/autotest/io/qt/autotests/TestSQLInjectedCodeQt5.java @@ -80,7 +80,6 @@ public void testSqlTableModelBeforeInsertJava() { QSqlRecord record = stms.myRecord(); assertEquals(3456, record.value("javaInt")); - assertEquals(3456, QVariant.toInt(record.value("javaInt"))); } @Test @@ -91,8 +90,7 @@ public void testSqlTableModelBeforeInsertCpp() { QSqlRecord record = new QSqlRecord(); stms.beforeInsert.emit(record); - - assertEquals(1234, QVariant.toInt(record.value("cppInt"))); + assertEquals(1234, record.value("cppInt")); } @Test diff --git a/src/java/autotest/io/qt/autotests/TestSignalSlotWithCustomTypes.java b/src/java/autotest/io/qt/autotests/TestSignalSlotWithCustomTypes.java index 826a8c5a..7041dd08 100644 --- a/src/java/autotest/io/qt/autotests/TestSignalSlotWithCustomTypes.java +++ b/src/java/autotest/io/qt/autotests/TestSignalSlotWithCustomTypes.java @@ -46,7 +46,7 @@ import io.qt.gui.QIcon; import io.qt.gui.QPainter; import io.qt.widgets.QGraphicsItem; -import io.qt.widgets.QSpinBox; +import io.qt.widgets.QSlider; import io.qt.widgets.QStyleOptionGraphicsItem; import io.qt.widgets.QWidget; @@ -256,11 +256,11 @@ public void testVariantSlot() { class Foobar extends QObject { void onChanged(Object arg) { result[0] = arg; } } - QSpinBox spinner = new QSpinBox(); + QSlider slider = new QSlider(); Foobar foo = new Foobar(); - QMetaObject.Connection connection = spinner.valueChanged.connect(foo::onChanged); + QMetaObject.Connection connection = slider.valueChanged.connect(foo::onChanged); Assert.assertTrue(connection!=null && connection.isConnected()); - spinner.setValue(5); + slider.setValue(5); Assert.assertEquals(5, result[0]); } } diff --git a/src/java/autotest/io/qt/autotests/TestSqlInjectedCodeQt6.java b/src/java/autotest/io/qt/autotests/TestSqlInjectedCodeQt6.java index 8a8d91fe..294fdbda 100644 --- a/src/java/autotest/io/qt/autotests/TestSqlInjectedCodeQt6.java +++ b/src/java/autotest/io/qt/autotests/TestSqlInjectedCodeQt6.java @@ -45,11 +45,11 @@ package io.qt.autotests; import static org.junit.Assert.assertEquals; + import org.junit.Test; import io.qt.autotests.generated.SqlTableModelSubclass; import io.qt.core.QMetaType; -import io.qt.core.QVariant; import io.qt.sql.QSqlDatabase; import io.qt.sql.QSqlField; import io.qt.sql.QSqlRecord; @@ -77,7 +77,6 @@ public void testSqlTableModelBeforeInsertJava() { QSqlRecord record = stms.myRecord(); assertEquals(3456, record.value("javaInt")); - assertEquals(3456, QVariant.toInt(record.value("javaInt"))); } @Test @@ -88,8 +87,7 @@ public void testSqlTableModelBeforeInsertCpp() { QSqlRecord record = new QSqlRecord(); stms.beforeInsert.emit(record); - - assertEquals(1234, QVariant.toInt(record.value("cppInt"))); + assertEquals(1234, record.value("cppInt")); } @Test diff --git a/src/java/autotest/io/qt/autotests/TestTestlib.java b/src/java/autotest/io/qt/autotests/TestTestlib.java index dc3fab87..24032f83 100644 --- a/src/java/autotest/io/qt/autotests/TestTestlib.java +++ b/src/java/autotest/io/qt/autotests/TestTestlib.java @@ -30,15 +30,17 @@ import static org.junit.Assert.*; +import org.junit.Assert; import org.junit.Test; import io.qt.*; import io.qt.core.*; import io.qt.test.*; +import static io.qt.test.QTest.*; -public class TestTestlib extends ApplicationInitializer { +public class TestTestlib extends UnitTestInitializer { @Test - public void test() { + public void testSignalSpy() { class Object extends QObject{ final Signal2<@QtPrimitiveType Integer, String> sig = new Signal2<>(); } @@ -55,5 +57,85 @@ class Object extends QObject{ signalSpy.dispose(); assertTrue(signalSpy.isDisposed()); // assertTrue(list.isDisposed()); - } + } + + @Test + public void testMain() { + TestObject.initMainCalled = false; + TestObject.test1Called = false; + TestObject.test2Called = false; + TestObject.test3Called = false; + TestObject.test4Called = false; + TestObject.main(); + Assert.assertTrue("initMain not called", TestObject.initMainCalled); + Assert.assertTrue("initTestCase not called", TestObject.initTestCaseCalled); + Assert.assertTrue("test1 not called", TestObject.test1Called); + Assert.assertTrue("test2 not called", TestObject.test2Called); + Assert.assertTrue("test3 not called", TestObject.test3Called); + Assert.assertTrue("test4 not called", TestObject.test4Called); + } + + @Test + public void testTest() { + tst_QTimer.main(); + } + + @SuppressWarnings("unused") + public static class TestObject extends QObject{ + static boolean initMainCalled; + static boolean initTestCaseCalled; + static boolean test1Called; + static boolean test2Called; + static boolean test3Called; + static boolean test4Called; + public static void initMain() { + initMainCalled = true; + } + public void initTestCase() { + initTestCaseCalled = true; + } + public static void main(String... args) { + QTEST_MAIN(args); + } + + private void test1() { + test1Called = true; + } + private void test2() { + test2Called = true; + + } + private void test3() { + test3Called = true; + + } + private void test4() { + test4Called = true; + + } + } + + @SuppressWarnings("unused") + public static class tst_QTimer extends QObject{ + public static void initMain() { +// QLogging.qInstallLoggingMessageHandler(); + } + private static final int TIMEOUT_TIMEOUT = 200; + private void timeout() + { + QTimer timer = new QTimer(); + QSignalSpy timeoutSpy = new QSignalSpy(timer.timeout); + timer.start(100); + + QCOMPARE(timeoutSpy.count(), 0); + + QTRY_VERIFY_WITH_TIMEOUT(()->timeoutSpy.count() > 0, TIMEOUT_TIMEOUT); + int oldCount = timeoutSpy.count(); + + QTRY_VERIFY_WITH_TIMEOUT(()->timeoutSpy.count() > oldCount, TIMEOUT_TIMEOUT); + } + public static void main(String... args) { + QTEST_MAIN(args); + } + } } diff --git a/src/java/autotest/io/qt/autotests/UnitTestInitializer.java b/src/java/autotest/io/qt/autotests/UnitTestInitializer.java index 43ccb510..5aec17ad 100644 --- a/src/java/autotest/io/qt/autotests/UnitTestInitializer.java +++ b/src/java/autotest/io/qt/autotests/UnitTestInitializer.java @@ -4,7 +4,6 @@ import java.io.InputStreamReader; import org.junit.ClassRule; -import org.junit.internal.runners.statements.RunAfters; import org.junit.rules.TestRule; import org.junit.runner.Description; import org.junit.runners.model.Statement; @@ -14,31 +13,34 @@ public abstract class UnitTestInitializer { @ClassRule public static final TestRule rule = new TestRule(){ @Override public Statement apply(Statement base, Description description) { - if(base instanceof RunAfters) - { - if(System.getenv().containsKey("QTJAMBI_TEST_ATTACH")) { - System.out.println(description.getTestClass().getSimpleName()+" continues after input:"); - try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in))){ - String l = br.readLine(); - while(l==null || l.isEmpty()){ - Thread.sleep(500); - l = br.readLine(); - } - } catch (Exception e) { - throw new ExceptionInInitializerError(e); + if(System.getenv().containsKey("QTJAMBI_TEST_ATTACH") || Boolean.getBoolean("test.attach")) { + System.out.println(description.getTestClass().getSimpleName()+" continues after input:"); + try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in))){ + String l = br.readLine(); + while(l==null || l.isEmpty()){ + Thread.sleep(500); + l = br.readLine(); } - }else if(System.getenv().containsKey("QTJAMBI_TEST_DELAY")) { - try { - int delay = Integer.parseInt(System.getenv("QTJAMBI_TEST_DELAY")); - for (int i = delay; i > 0; --i) { - System.out.println(description.getTestClass().getSimpleName()+" starts in "+i+"s"); - Thread.sleep(1000); - } - } catch (Exception e) { - throw new ExceptionInInitializerError(e); + } catch (Exception e) { + throw new ExceptionInInitializerError(e); + } + }else if(System.getenv().containsKey("QTJAMBI_TEST_DELAY") || !"".equals(System.getProperty("test.delay", ""))) { + try { + int delay = Integer.parseInt(System.getenv().containsKey("QTJAMBI_TEST_DELAY") ? System.getenv("QTJAMBI_TEST_DELAY") : System.getProperty("test.delay", "")); + for (int i = delay; i > 0; --i) { + System.out.println(description.getTestClass().getSimpleName()+" starts in "+i+"s"); + Thread.sleep(1000); } + } catch (Exception e) { + throw new ExceptionInInitializerError(e); } } + if(description.getTestClass().getSimpleName().startsWith("TestInitialization")) { + System.clearProperty("io.qt.no-deployment-spec"); + System.clearProperty("io.qt.library-path-override"); + System.clearProperty("io.qt.qml-imports"); + System.clearProperty("io.qt.pluginpath"); + } return base; }}; } diff --git a/src/java/qtjambi-modules/qtjambi.deployer/io/qt/qtjambi/deployer/BundleGenerator.java b/src/java/qtjambi-modules/qtjambi.deployer/io/qt/qtjambi/deployer/BundleGenerator.java index 492240c9..4a583499 100644 --- a/src/java/qtjambi-modules/qtjambi.deployer/io/qt/qtjambi/deployer/BundleGenerator.java +++ b/src/java/qtjambi-modules/qtjambi.deployer/io/qt/qtjambi/deployer/BundleGenerator.java @@ -84,6 +84,7 @@ static Function> getArrayListFactory(){ _pluginsModules.put("sqldrivers", "sql"); _pluginsModules.put("styles", "widgets"); _pluginsModules.put("qmltooling", "qml"); + _pluginsModules.put("qmllint", "qml"); _pluginsModules.put("scenegraph", "quick"); _pluginsModules.put("opcua", "opcua"); _pluginsModules.put("position", "positioning"); @@ -110,6 +111,7 @@ static Function> getArrayListFactory(){ _pluginsModules.put("mediaservice", "multimedia"); _pluginsModules.put("resourcepolicy", "multimedia"); _pluginsModules.put("playlistformats", "multimedia"); + _pluginsModules.put("multimedia", "multimedia"); _pluginsModules.put("bearer", "network"); _pluginsModules.put("qtwebengine", "webenginecore"); Map> _pluginsByModules = new TreeMap<>(); @@ -458,6 +460,10 @@ private static String findTargetModule(String name) { return "gui"; }else if(name.equals("designercomponents")) { return "designer"; + }else if(name.equals("waylandeglclienthwintegration") || name.equals("wlshellintegration")) { + return "waylandclient"; + }else if(name.equals("waylandeglcompositorhwintegration")) { + return "waylandcompositor"; }else if(name.startsWith("quickcontrols2") || name.startsWith("quickdialogs2") || name.startsWith("quicklayout") @@ -782,6 +788,9 @@ private static void generateBundles(File targetDir, File qtdir, String osArchNam for(File qmlsubDir : qmlDir.listFiles()) { if(qmlsubDir.isDirectory()) switch(qmlsubDir.getName()) { + case "QtAudioEngine": + qmllibs.put("QtMultimedia", qmlsubDir); + break; case "QtQuick": qmllibs.put(qmlsubDir.getName(), qmlsubDir); for(File quicklib : qmlsubDir.listFiles()) { @@ -941,10 +950,18 @@ public void close() throws IOException { symlinkElement.setAttribute("name", libraryFile.getParentFile().getName()+"/"+libraryFile.getName()+"/Versions/Current"); symlinkElement.setAttribute("target", libraryFile.getParentFile().getName()+"/"+libFilePath); doc.getDocumentElement().appendChild(symlinkElement); - symlinkElement = doc.createElement("symlink"); - symlinkElement.setAttribute("name", libraryFile.getParentFile().getName()+"/"+libraryFile.getName()+"/Resources"); - symlinkElement.setAttribute("target", libraryFile.getParentFile().getName()+"/"+libraryFile.getName()+"/Versions/Current/Resources"); - doc.getDocumentElement().appendChild(symlinkElement); + if(resourcesDir.isDirectory()) { + symlinkElement = doc.createElement("symlink"); + symlinkElement.setAttribute("name", libraryFile.getParentFile().getName()+"/"+libraryFile.getName()+"/Resources"); + symlinkElement.setAttribute("target", libraryFile.getParentFile().getName()+"/"+libraryFile.getName()+"/Versions/Current/Resources"); + doc.getDocumentElement().appendChild(symlinkElement); + } + if(helpersDir.isDirectory()) { + symlinkElement = doc.createElement("symlink"); + symlinkElement.setAttribute("name", libraryFile.getParentFile().getName()+"/"+libraryFile.getName()+"/Helpers"); + symlinkElement.setAttribute("target", libraryFile.getParentFile().getName()+"/"+libraryFile.getName()+"/Versions/Current/Helpers"); + doc.getDocumentElement().appendChild(symlinkElement); + } symlinkElement = doc.createElement("symlink"); symlinkElement.setAttribute("name", libraryFile.getParentFile().getName()+"/"+libraryFile.getName()+"/"+libName); symlinkElement.setAttribute("target", libraryFile.getParentFile().getName()+"/"+libraryFile.getName()+"/Versions/Current/"+libName); diff --git a/src/java/qtjambi-modules/qtjambi.spatialaudio/build.xml b/src/java/qtjambi-modules/qtjambi.spatialaudio/build.xml new file mode 100644 index 00000000..ad757d1e --- /dev/null +++ b/src/java/qtjambi-modules/qtjambi.spatialaudio/build.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/src/java/qtjambi-modules/qtjambi/Qt5/io/qt/core/QVariant.java b/src/java/qtjambi-modules/qtjambi/Qt5/io/qt/core/QVariant.java deleted file mode 100644 index af74ad95..00000000 --- a/src/java/qtjambi-modules/qtjambi/Qt5/io/qt/core/QVariant.java +++ /dev/null @@ -1,1182 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 1992-2009 Nokia. All rights reserved. -** Copyright (C) 2009-2022 Dr. Peter Droste, Omix Visualization GmbH & Co. KG. All rights reserved. -** -** This file is part of Qt Jambi. -** -** ** $BEGIN_LICENSE$ -** Commercial Usage -** Licensees holding valid Qt Commercial licenses may use this file in -** accordance with the Qt Commercial License Agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Nokia. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this -** package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** If you are unsure which license is appropriate for your use, please -** contact the sales department at qt-sales@nokia.com. -** $END_LICENSE$ - -** -** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -** -****************************************************************************/ - -package io.qt.core; - -import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.TreeMap; - -import io.qt.QFlags; -import io.qt.QNoNativeResourcesException; -import io.qt.QtByteEnumerator; -import io.qt.QtEnumerator; -import io.qt.QtExtensibleEnum; -import io.qt.QtLongEnumerator; -import io.qt.QtObjectInterface; -import io.qt.QtShortEnumerator; - -/** - * The QVariant class contains a set of static methods to convert between datatypes. - *

- * You can check with this class whether a datatype can be converted to another. - * This is datatypes which cannot simply be cast to each other, but requires - * processing to convert, i.e., you cannot use the instanceof operator as you would - * for classes with the same super class. -*/ -public final class QVariant { - @io.qt.NativeAccess - private QVariant(int userType, Object value, boolean dummy){ - this.userType = userType; - this.value = value; - } - - public QVariant(int userType){ - this(userType, null); - } - - public static QVariant fromValue(Object value){ - return new QVariant(type(value), value); - } - - public QVariant(int userType, Object value){ - this.userType = userType; - this.value = new QMetaType(userType).create(value); - } - - private final int userType; - - private final Object value; - - @io.qt.NativeAccess - public int userType() { - return userType; - } - - @io.qt.NativeAccess - public Object value() { - return new QMetaType(userType).create(value); - } - - public T value(Class cl) { - return convert(value(), cl); - } - - public boolean isValid() { - return userType!=QMetaType.Type.UnknownType.value(); - } - - @Override - public String toString() { - if(isValid()) { - return convert(value(), String.class); - }else { - return "QVariant(Invalid)"; - } - } - - @Override - public boolean equals(Object other) { - if(!isValid()) { - if(other instanceof QVariant) - return !((QVariant) other).isValid(); - return other==null; - }else if(other instanceof QVariant){ - QVariant variant = (QVariant) other; - if(userType==variant.userType) { - return java.util.Objects.equals(value, variant.value); - } - return false; - } - else return java.util.Objects.equals(value, other); - } - - public static boolean isValid(Object variant) { - if(variant instanceof QVariant) - return ((QVariant) variant).isValid(); - return true; - } - - @QtExtensibleEnum - public enum Type implements io.qt.QtEnumerator{ - Invalid(QMetaType.Type.UnknownType.value()), - Boolean(QMetaType.Type.Bool.value()), - Int(QMetaType.Type.Int.value()), - Long(QMetaType.Type.LongLong.value()), - Double(QMetaType.Type.Double.value()), - Char(QMetaType.Type.QChar.value()), - Map(QMetaType.Type.QVariantMap.value()), - List(QMetaType.Type.QVariantList.value()), - String(QMetaType.Type.QString.value()), - StringList(QMetaType.Type.QStringList.value()), - ByteArray(QMetaType.Type.QByteArray.value()), - BitArray(QMetaType.Type.QBitArray.value()), - Date(QMetaType.Type.QDate.value()), - Time(QMetaType.Type.QTime.value()), - DateTime(QMetaType.Type.QDateTime.value()), - Url(QMetaType.Type.QUrl.value()), - Locale(QMetaType.Type.QLocale.value()), - Rect(QMetaType.Type.QRect.value()), - RectF(QMetaType.Type.QRectF.value()), - Size(QMetaType.Type.QSize.value()), - SizeF(QMetaType.Type.QSizeF.value()), - Line(QMetaType.Type.QLine.value()), - LineF(QMetaType.Type.QLineF.value()), - Point(QMetaType.Type.QPoint.value()), - PointF(QMetaType.Type.QPointF.value()), - RegExp(QMetaType.Type.QRegExp.value()), - RegularExpression(QMetaType.Type.QRegularExpression.value()), - Hash(QMetaType.Type.QVariantHash.value()), - EasingCurve(QMetaType.Type.QEasingCurve.value()), - Uuid(QMetaType.Type.QUuid.value()), - ModelIndex(QMetaType.Type.QModelIndex.value()), - PersistentModelIndex(QMetaType.Type.QPersistentModelIndex.value()), - LastCoreType(QMetaType.Type.LastCoreType.value()), - Font(QMetaType.Type.QFont.value()), - Pixmap(QMetaType.Type.QPixmap.value()), - Brush(QMetaType.Type.QBrush.value()), - Color(QMetaType.Type.QColor.value()), - Palette(QMetaType.Type.QPalette.value()), - Image(QMetaType.Type.QImage.value()), - Polygon(QMetaType.Type.QPolygon.value()), - Region(QMetaType.Type.QRegion.value()), - Bitmap(QMetaType.Type.QBitmap.value()), - Cursor(QMetaType.Type.QCursor.value()), - KeySequence(QMetaType.Type.QKeySequence.value()), - Pen(QMetaType.Type.QPen.value()), - TextLength(QMetaType.Type.QTextLength.value()), - TextFormat(QMetaType.Type.QTextFormat.value()), - Matrix(QMetaType.Type.QMatrix.value()), - Transform(QMetaType.Type.QTransform.value()), - Matrix4x4(QMetaType.Type.QMatrix4x4.value()), - Vector2D(QMetaType.Type.QVector2D.value()), - Vector3D(QMetaType.Type.QVector3D.value()), - Vector4D(QMetaType.Type.QVector4D.value()), - Quaternion(QMetaType.Type.QQuaternion.value()), - PolygonF(QMetaType.Type.QPolygonF.value()), - Icon(QMetaType.Type.QIcon.value()), - LastGuiType(QMetaType.Type.LastGuiType.value()), - SizePolicy(QMetaType.Type.QSizePolicy.value()), - UserType(QMetaType.Type.User.value()), - ; - private int val; - private Type(int val) { this.val = val; } - public int value() { return val; } - - public static Type resolve(int value) { - { - return QtJambi_LibraryUtilities.internal.resolveEnum(Type.class, value, null); - } - } - - public static Type resolve(int value, String name) { - if(name==null || name.isEmpty()) - return resolve(value); - else - return QtJambi_LibraryUtilities.internal.resolveEnum(Type.class, value, name); - } - }; - - private static Class dbusVariant; - private static boolean dbusVariantResolved; - - private static boolean isDBusVariant(Object value, Class cl) { - if(!dbusVariantResolved) { - dbusVariantResolved = true; - Class _dbusVariant = null; - try { - _dbusVariant = Class.forName("io.qt.dbus.QDBusVariant"); - } catch (Exception e) { - } - dbusVariant = _dbusVariant; - } - return dbusVariant!=null && cl!=dbusVariant && dbusVariant.isInstance(value); - } - - public static Object convert(Object obj, QMetaType.Type type) { - return convert(obj, type.value(), null); - } - public static Object convert(Object obj, QMetaType.Type type, boolean ok[]) { - return convert(obj, type.value(), ok); - } - public static Object convert(Object obj, Type type) { - return convert(obj, type.value(), null); - } - public static Object convert(Object obj, Type type, boolean ok[]) { - return convert(obj, type.value(), ok); - } - public static Object convert(Object obj, int userType) { - return convert(obj, userType, null); - } - - private static native Object convert(Object obj, int userType, boolean ok[]); - - public static boolean canConvert(Object obj, QMetaType.Type type) { - return canConvert(obj, type.value()); - } - public static boolean canConvert(Object obj, Type type) { - return canConvert(obj, type.value()); - } - - public static boolean canConvert(Object obj, int targetType) { - return QMetaType.javaType(targetType).isInstance(obj) || canConvertByType(type(obj), targetType); - } - - private static native boolean canConvertByType(int sourceType, int targetType); - - public static int type(Object obj) { - if(obj==null) - return QMetaType.Type.Nullptr.value(); - if(obj.getClass()==QList.class) { - return QMetaType.fromType(QList.class, ((QList)obj).elementMetaType()).id(); - }else if(obj.getClass()==QQueue.class) { - return QMetaType.fromType(QQueue.class, ((QQueue)obj).elementMetaType()).id(); - }else if(obj.getClass()==QStack.class) { - return QMetaType.fromType(QStack.class, ((QStack)obj).elementMetaType()).id(); - }else if(obj.getClass()==QVector.class) { - return QMetaType.fromType(QVector.class, ((QVector)obj).elementMetaType()).id(); - }else if(obj.getClass()==QSet.class) { - return QMetaType.fromType(QSet.class, ((QSet)obj).elementMetaType()).id(); - }else if(obj.getClass()==QLinkedList.class) { - return QMetaType.fromType(QLinkedList.class, ((QLinkedList)obj).elementMetaType()).id(); - }else if(obj.getClass()==QMultiMap.class) { - return QMetaType.fromType(QMultiMap.class, ((QMultiMap)obj).keyMetaType(), ((QMultiMap)obj).valueMetaType()).id(); - }else if(obj.getClass()==QMap.class) { - return QMetaType.fromType(QMap.class, ((QMap)obj).keyMetaType(), ((QMap)obj).valueMetaType()).id(); - }else if(obj.getClass()==QMultiHash.class) { - return QMetaType.fromType(QMultiHash.class, ((QMultiHash)obj).keyMetaType(), ((QMultiHash)obj).valueMetaType()).id(); - }else if(obj.getClass()==QHash.class) { - return QMetaType.fromType(QHash.class, ((QHash)obj).keyMetaType(), ((QHash)obj).valueMetaType()).id(); - } - return QMetaType.fromType(obj.getClass()).id(); - } - - private static void setOk(boolean ok[], boolean isOk) - { - if (ok != null && ok.length > 0) - ok[0] = isOk; - } - - public static boolean canConvertToDouble(Object obj) - { - return obj instanceof Number || canConvert(obj, Type.Double); - } - public static double toDouble(Object obj) { return toDouble(obj, null); } - public static double toDouble(Object obj, boolean ok[]) - { - if (obj==null) { - setOk(ok, true); - return 0.0; - } else if (obj instanceof Number) { - setOk(ok, true); - return ((Number) obj).doubleValue(); - } else { - return __qt_toDouble(obj, ok); - } - } - private static native double __qt_toDouble(Object variant, boolean ok[]); - - public static boolean canConvertToFloat(Object obj) - { - return obj instanceof Number || canConvert(obj, QMetaType.Type.Float); - } - public static float toFloat(Object obj) { return toFloat(obj, null); } - public static float toFloat(Object obj, boolean ok[]) - { - if (obj==null) { - setOk(ok, true); - return 0.f; - } else if (obj instanceof Number) { - setOk(ok, true); - return ((Number) obj).floatValue(); - } else { - return __qt_toFloat(obj, ok); - } - } - private static native float __qt_toFloat(Object variant, boolean ok[]); - - public static boolean canConvertToString(Object obj) - { - return true; - } - - /** - * {@inheritDoc} - */ - public static String toString(Object obj) - { - return obj==null ? "" : __qt_toString(obj); - } - private static native String __qt_toString(Object variant); - - public static boolean canConvertToBoolean(Object obj) - { - return obj instanceof Boolean || obj instanceof Number || canConvert(obj, Type.Boolean); - } - public static boolean toBoolean(Object obj) - { - if (obj==null) { - return false; - } else if (obj instanceof Boolean) { - return (Boolean) obj; - } else if (obj instanceof Number) { - return ((Number) obj).intValue() != 0; - } else { - return __qt_toBoolean(obj); - } - } - private static native boolean __qt_toBoolean(Object obj); - - public static boolean canConvertToByteArray(Object obj) - { - return obj instanceof QByteArray || canConvert(obj, Type.ByteArray); - } - public static QByteArray toByteArray(Object obj) - { - if(obj instanceof QByteArray) { - if(!((QtObjectInterface)obj).isDisposed()) - return (QByteArray)obj; - }else if(obj!=null){ - Object returned = convert(obj, Type.ByteArray); - if (returned instanceof QByteArray) { - return (QByteArray)returned; - } - } - return new QByteArray(); - } - - public static boolean canConvertToBitArray(Object obj) - { - return obj instanceof QBitArray || canConvert(obj, Type.BitArray); - } - public static QBitArray toBitArray(Object obj) - { - if(obj instanceof QBitArray) { - if(!((QtObjectInterface)obj).isDisposed()) - return (QBitArray)obj; - }else if(obj!=null){ - Object returned = convert(obj, Type.BitArray); - if (returned instanceof QBitArray) { - return (QBitArray)returned; - } - } - return new QBitArray(); - } - - public static boolean canConvertToChar(Object obj) - { - return obj instanceof Character || canConvert(obj, Type.Char); - } - public static char toChar(Object obj) - { - if(obj==null) - return 0; - else if (obj instanceof Character) - return (Character) obj; - else - return __qt_toChar(obj); - } - private static native char __qt_toChar(Object obj); - - public static boolean canConvertToDate(Object obj) - { - return obj instanceof QDate || canConvert(obj, Type.Date); - } - public static QDate toDate(Object obj) - { - if(obj instanceof QDate) { - if(!((QtObjectInterface)obj).isDisposed()) - return (QDate)obj; - }else if(obj!=null){ - Object returned = convert(obj, Type.Date); - if (returned instanceof QDate) { - return (QDate)returned; - } - } - return new QDate(); - } - - public static boolean canConvertToDateTime(Object obj) - { - return obj instanceof QDateTime || canConvert(obj, Type.DateTime); - } - public static QDateTime toDateTime(Object obj) - { - if(obj instanceof QDateTime) { - if(!((QtObjectInterface)obj).isDisposed()) - return (QDateTime)obj; - }else if(obj!=null){ - Object returned = convert(obj, Type.DateTime); - if (returned instanceof QDateTime) { - return (QDateTime)returned; - } - } - return new QDateTime(); - } - - public static boolean canConvertToInt(Object obj) - { - return obj instanceof Number || canConvert(obj, Type.Int); - } - public static int toInt(Object obj) { return toInt(obj, null); } - public static int toInt(Object obj, boolean ok[]) - { - if(obj==null) { - return 0; - }else if (obj instanceof Number) { - setOk(ok, true); - return ((Number) obj).intValue(); - } else { - return __qt_toInt(obj, ok); - } - } - private static native int __qt_toInt(Object obj, boolean ok[]); - - public static boolean canConvertToLine(Object obj) - { - return obj instanceof QLine || canConvert(obj, Type.Line); - } - public static QLine toLine(Object obj) - { - if(obj instanceof QLine) { - if(!((QtObjectInterface)obj).isDisposed()) - return (QLine)obj; - }else if(obj!=null){ - Object returned = convert(obj, Type.Line); - if (returned instanceof QLine) { - return (QLine) returned; - } - } - return new QLine(); - } - public static boolean canConvertToLineF(Object obj) - { - return obj instanceof QLineF || canConvert(obj, Type.LineF); - } - public static QLineF toLineF(Object obj) - { - if(obj instanceof QLineF) { - if(!((QtObjectInterface)obj).isDisposed()) - return (QLineF)obj; - }else if(obj!=null){ - Object returned = convert(obj, Type.LineF); - if (returned instanceof QLineF) { - return (QLineF)returned; - } - } - return new QLineF(); - } - - public static boolean canConvertToLocale(Object obj) - { - return obj instanceof QLocale || canConvert(obj, Type.Locale); - } - public static QLocale toLocale(Object obj) - { - if(obj instanceof QLocale) { - if(!((QtObjectInterface)obj).isDisposed()) - return (QLocale)obj; - }else if(obj!=null){ - Object returned = convert(obj, Type.Locale); - if (returned instanceof QLocale) { - return (QLocale)returned; - } - } - return new QLocale(); - } - - public static boolean canConvertToPoint(Object obj) - { - return obj instanceof QPoint || canConvert(obj, Type.Point); - } - public static QPoint toPoint(Object obj) - { - if(obj instanceof QPoint) { - if(!((QtObjectInterface)obj).isDisposed()) - return (QPoint)obj; - }else if(obj!=null){ - Object returned = convert(obj, Type.Point); - if (returned instanceof QPoint) { - return (QPoint) returned; - } - } - return new QPoint(); - } - - public static boolean canConvertToPointF(Object obj) - { - return obj instanceof QPointF || canConvert(obj, Type.PointF); - } - public static QPointF toPointF(Object obj) - { - if(obj instanceof QPointF) { - if(!((QtObjectInterface)obj).isDisposed()) - return (QPointF)obj; - }else if(obj!=null){ - Object returned = convert(obj, Type.PointF); - if (returned instanceof QPointF) { - return (QPointF)returned; - } - } - return new QPointF(); - } - - public static boolean canConvertToRect(Object obj) - { - return obj instanceof QRect || canConvert(obj, Type.Rect); - } - public static QRect toRect(Object obj) - { - if(obj instanceof QRect) { - if(!((QtObjectInterface)obj).isDisposed()) - return (QRect)obj; - }else if(obj!=null){ - Object returned = convert(obj, Type.Rect); - if (returned instanceof QRect) { - return (QRect)returned; - } - } - return new QRect(); - } - - public static boolean canConvertToRectF(Object obj) - { - return obj instanceof QRectF || canConvert(obj, Type.RectF); - } - public static QRectF toRectF(Object obj) - { - if(obj instanceof QRectF) { - if(!((QtObjectInterface)obj).isDisposed()) - return (QRectF)obj; - }else if(obj!=null){ - Object returned = convert(obj, Type.RectF); - if (returned instanceof QRectF) { - return (QRectF)returned; - } - } - return new QRectF(); - } - - public static boolean canConvertToRegExp(Object obj) - { - return obj instanceof QRegExp || canConvert(obj, Type.RegExp); - } - public static QRegExp toRegExp(Object obj) - { - if(obj instanceof QRegExp) { - if(!((QtObjectInterface)obj).isDisposed()) - return (QRegExp)obj; - }else if(obj!=null){ - Object returned = convert(obj, Type.RegExp); - if (returned instanceof QRegExp) { - return (QRegExp)returned; - } - } - return new QRegExp(); - } - - public static boolean canConvertToRegularExpression(Object obj) - { - return obj instanceof QRegularExpression || canConvert(obj, Type.RegularExpression); - } - public static QRegularExpression toRegularExpression(Object obj) - { - if(obj instanceof QRegularExpression) { - if(!((QtObjectInterface)obj).isDisposed()) - return (QRegularExpression)obj; - }else if(obj!=null){ - Object returned = convert(obj, Type.RegularExpression); - if (returned instanceof QRegularExpression) { - return (QRegularExpression)returned; - } - } - return new QRegularExpression(); - } - - public static boolean canConvertToSize(Object obj) - { - return obj instanceof QSize || canConvert(obj, Type.Size); - } - public static QSize toSize(Object obj) - { - if(obj instanceof QSize) { - if(!((QtObjectInterface)obj).isDisposed()) - return (QSize)obj; - }else if(obj!=null){ - Object returned = convert(obj, Type.Size); - if (returned instanceof QSize) { - return (QSize)returned; - } - } - return new QSize(); - } - - public static boolean canConvertToSizeF(Object obj) - { - return obj instanceof QSizeF || canConvert(obj, Type.SizeF); - } - public static QSizeF toSizeF(Object obj) - { - if(obj instanceof QSizeF) { - if(!((QtObjectInterface)obj).isDisposed()) - return (QSizeF)obj; - }else if(obj!=null){ - Object returned = convert(obj, Type.SizeF); - if (returned instanceof QSizeF) { - return (QSizeF)returned; - } - } - return new QSizeF(); - } - - public static boolean canConvertToTime(Object obj) - { - return obj instanceof QTime || canConvert(obj, Type.Time); - } - public static QTime toTime(Object obj) - { - if(obj instanceof QTime) { - if(!((QtObjectInterface)obj).isDisposed()) - return (QTime)obj; - }else if(obj!=null){ - Object returned = convert(obj, Type.Time); - if (returned instanceof QTime) { - return (QTime)returned; - } - } - return new QTime(); - } - - public static boolean canConvertToLong(Object obj) - { - return obj instanceof Number || canConvert(obj, Type.Long); - } - public static long toLong(Object obj) { return toLong(obj, null); } - public static long toLong(Object obj, boolean ok[]) - { - if(obj==null) { - setOk(ok, true); - return 0; - }else if (obj instanceof Number) { - setOk(ok, true); - return ((Number) obj).longValue(); - } else { - return __qt_toLong(obj, ok); - } - } - private static native long __qt_toLong(Object obj, boolean ok[]); - - public static boolean canConvertToList(Object obj) - { - return obj instanceof Collection || canConvert(obj, Type.List); - } - public static List toList(Object obj) - { - if (obj instanceof Collection){ - if (obj instanceof List) - return (List)obj; - List list = new ArrayList(); - list.addAll((Collection) obj); - return list; - }else if(obj!=null) { - Object returned = convert(obj, Type.List); - if (returned instanceof List) { - return (List)returned; - } - } - return Collections.emptyList(); - } - - public static boolean canConvertToStringList(Object obj) - { - return obj instanceof Collection || canConvert(obj, Type.StringList); - } - @SuppressWarnings("unchecked") - public static List toStringList(Object obj) - { - if (obj instanceof Collection){ - if (obj instanceof List) { - boolean fail = false; - for(Object entry : (List)obj) { - if(!(entry instanceof String)) { - fail = true; - break; - } - } - if(fail) - return (List)obj; - } - List list = new ArrayList(); - for(Object entry : (Collection)obj) { - list.add(entry==null ? null : entry.toString()); - } - return list; - }else if(obj!=null) { - Object returned = convert(obj, Type.StringList); - if (returned instanceof List) { - return (List)returned; - } - } - return Collections.emptyList(); - } - - public static boolean canConvertToCollection(Object obj) - { - return obj instanceof Collection || canConvert(obj, Type.List); - } - public static Collection toCollection(Object obj) - { - if (obj instanceof Collection){ - return (Collection)obj; - }else if(obj!=null) { - Object returned = convert(obj, Type.List); - if (returned instanceof Collection) { - return (Collection)returned; - } - } - return Collections.emptyList(); - } - - public static boolean canConvertToMap(Object obj) - { - return obj instanceof Map || canConvert(obj, Type.Hash); - } - - @SuppressWarnings("unchecked") - public static Map toMap(Object obj) - { - if (obj instanceof Map) { - Map otherMap = (Map) obj; - boolean convert = false; - for (Map.Entry e : otherMap.entrySet()){ - if(!(e.getKey() instanceof String)){ - convert = true; - break; - } - } - if(convert){ - Map map = new TreeMap(); - for (Map.Entry e : otherMap.entrySet()) - map.put(e.getKey().toString(), e.getValue()); - return map; - }else{ - return (Map) obj; - } - }else if(obj!=null) { - Object returned = convert(obj, Type.Hash); - if(returned instanceof Map) { - Map otherMap = (Map) returned; - boolean convert = false; - for (Map.Entry e : otherMap.entrySet()){ - if(!(e.getKey() instanceof String)){ - convert = true; - break; - } - } - if(convert){ - Map map = new TreeMap(); - for (Map.Entry e : otherMap.entrySet()) - map.put(e.getKey().toString(), e.getValue()); - return map; - }else{ - return (Map) returned; - } - } - } - return Collections.emptyMap(); - } - - @SuppressWarnings("unchecked") - public static T convert(Object value, Class < T > cl) { - if(cl.isInstance(value)) { - if(value instanceof QtObjectInterface) { - if(!((QtObjectInterface)value).isDisposed()) { - return cl.cast(value); - } - }else { - return cl.cast(value); - } - } - if(isDBusVariant(value, cl)){ - int type = QMetaType.metaTypeId(cl); - return convert(convert(value, type), cl); - } - - if(cl==int.class){ - if(value instanceof Integer) - return (T)value; - boolean[] ok = {false}; - value = QVariant.toInt(value, ok); - if(!ok[0]){ - throw new NumberFormatException("Cannot convert to "+cl.getName()); - } - return (T)value; - }else if(cl==byte.class){ - if(value instanceof Byte) - return (T)value; - boolean[] ok = {false}; - value = (byte)QVariant.toInt(value, ok); - if(!ok[0]){ - throw new NumberFormatException("Cannot convert to "+cl.getName()); - } - return (T)value; - }else if(cl==short.class){ - if(value instanceof Short) - return (T)value; - boolean[] ok = {false}; - value = (short)QVariant.toInt(value, ok); - if(!ok[0]){ - throw new NumberFormatException("Cannot convert to "+cl.getName()); - } - return (T)value; - }else if(cl==long.class){ - if(value instanceof Long) - return (T)value; - boolean[] ok = {false}; - value = QVariant.toLong(value, ok); - if(!ok[0]){ - throw new NumberFormatException("Cannot convert to "+cl.getName()); - } - return (T)value; - }else if(cl==double.class){ - if(value instanceof Double) - return (T)value; - boolean[] ok = {false}; - value = QVariant.toDouble(value, ok); - if(!ok[0]){ - throw new NumberFormatException("Cannot convert to "+cl.getName()); - } - return (T)value; - }else if(cl==float.class){ - if(value instanceof Float) - return (T)value; - boolean[] ok = {false}; - value = (float)QVariant.toDouble(value, ok); - if(!ok[0]){ - throw new NumberFormatException("Cannot convert to "+cl.getName()); - } - return (T)value; - }else if(cl==char.class){ - if(value instanceof Character) - return (T)value; - if(!QVariant.canConvertToChar(value)){ - throw new NumberFormatException("Cannot convert to "+cl.getName()); - } - value = QVariant.toChar(value); - return (T)value; - }else if(cl==boolean.class){ - if(value instanceof Boolean) - return (T)value; - if(!QVariant.canConvertToBoolean(value)){ - throw new NumberFormatException("Cannot convert to "+cl.getName()); - } - value = QVariant.toBoolean(value); - return (T)value; - }else if(cl==QBitArray.class){ - if(value instanceof QBitArray) - return cl.cast(value); - if(QVariant.canConvertToBitArray(value)){ - value = QVariant.toBitArray(value); - return cl.cast(value); - } - return null; - }else if(cl==QByteArray.class){ - if(value instanceof QByteArray) - return cl.cast(value); - if(QVariant.canConvertToByteArray(value)){ - value = QVariant.toByteArray(value); - return cl.cast(value); - } - return null; - }else if(cl==QDate.class){ - if(value instanceof QDate) - return cl.cast(value); - if(QVariant.canConvertToDate(value)){ - value = QVariant.toDate(value); - return cl.cast(value); - } - return null; - }else if(cl==QDateTime.class){ - if(value instanceof QDateTime) - return cl.cast(value); - if(QVariant.canConvertToDateTime(value)){ - value = QVariant.toDateTime(value); - return cl.cast(value); - } - return null; - }else if(cl==QTime.class){ - if(value instanceof QTime) - return cl.cast(value); - if(QVariant.canConvertToTime(value)){ - value = QVariant.toTime(value); - return cl.cast(value); - } - return null; - }else if(cl==QLine.class){ - if(value instanceof QLine) - return cl.cast(value); - if(QVariant.canConvertToLine(value)){ - value = QVariant.toLine(value); - return cl.cast(value); - } - return null; - }else if(cl==List.class){ - if(value instanceof List) - return cl.cast(value); - if(QVariant.canConvertToList(value)){ - value = QVariant.toList(value); - return cl.cast(value); - } - return null; - }else if(cl==QLocale.class){ - if(value instanceof QLocale) - return cl.cast(value); - if(QVariant.canConvertToLocale(value)){ - value = QVariant.toLocale(value); - return cl.cast(value); - } - return null; - }else if(cl==QPoint.class){ - if(value instanceof QPoint) - return cl.cast(value); - if(QVariant.canConvertToPoint(value)){ - value = QVariant.toPoint(value); - return cl.cast(value); - } - return null; - }else if(cl==Map.class){ - if(value instanceof Map) - return cl.cast(value); - if(QVariant.canConvertToMap(value)){ - value = QVariant.toMap(value); - return cl.cast(value); - } - return null; - }else if(cl==QRect.class){ - if(value instanceof QRect) - return cl.cast(value); - if(QVariant.canConvertToRect(value)){ - value = QVariant.toRect(value); - return cl.cast(value); - } - return null; - }else if(cl==QRectF.class){ - if(value instanceof QRectF) - return cl.cast(value); - if(QVariant.canConvertToRectF(value)){ - value = QVariant.toRectF(value); - return cl.cast(value); - } - return null; - }else if(cl==QSize.class){ - if(value instanceof QSize) - return cl.cast(value); - if(QVariant.canConvertToSize(value)){ - value = QVariant.toSize(value); - return cl.cast(value); - } - return null; - }else if(cl==QSizeF.class){ - if(value instanceof QSizeF) - return cl.cast(value); - if(QVariant.canConvertToSizeF(value)){ - value = QVariant.toSizeF(value); - return cl.cast(value); - } - return null; - }else if(cl==QRegExp.class){ - if(value instanceof QRegExp) - return cl.cast(value); - if(QVariant.canConvertToRegExp(value)){ - value = QVariant.toRegExp(value); - return cl.cast(value); - } - return null; - }else if(Enum.class.isAssignableFrom(cl)){ - if(QVariant.canConvertToEnum((Class>)cl, value)){ - value = QVariant.toEnum((Class>)cl, value); - return cl.cast(value); - } - return null; - }else if(cl==String.class){ - return value!=null ? cl.cast(value.toString()) : cl.cast(""); - } - int type = QMetaType.metaTypeId(cl); - if(canConvert(value, type)) { - return cl.cast(convert(value, type)); - } - return cl.cast(value); - } - - public static > boolean canConvertToEnum(Class enumClass, Object obj) - { - if(enumClass.isInstance(obj)) { - return true; - }else if(QtEnumerator.class.isAssignableFrom(enumClass) - || QtByteEnumerator.class.isAssignableFrom(enumClass) - || QtShortEnumerator.class.isAssignableFrom(enumClass)) { - return canConvertToInt(obj); - }else if(QtLongEnumerator.class.isAssignableFrom(enumClass)) { - return canConvertToLong(obj); - }else if (canConvertToInt(obj)) { - boolean[] ok = {false}; - int value = toInt(obj, ok); - E[] constants = enumClass.getEnumConstants(); - return constants!=null && ok[0] && value> E toEnum(Class enumClass, Object obj) { - return toEnum(enumClass, obj, (boolean[])null); - } - - public static > E toEnum(Class enumClass, Object obj, boolean ok[]) { - if(enumClass.isInstance(obj)) { - try { - return enumClass.cast(obj); - } catch (Exception e) { - } - }else if(QtEnumerator.class.isAssignableFrom(enumClass)) { - try { - Method resolveMethod = enumClass.getMethod("resolve", int.class); - int i = toInt(obj, ok); - if(ok==null || ok[0]) - return enumClass.cast(resolveMethod.invoke(null, java.lang.Integer.valueOf(i))); - } catch (Exception e) { - } - }else if(QtByteEnumerator.class.isAssignableFrom(enumClass)) { - try { - Method resolveMethod = enumClass.getMethod("resolve", byte.class); - byte i = (byte)toInt(obj, ok); - if(ok==null || ok[0]) - return enumClass.cast(resolveMethod.invoke(null, java.lang.Byte.valueOf(i))); - } catch (Exception e) { - } - }else if(QtShortEnumerator.class.isAssignableFrom(enumClass)) { - try { - Method resolveMethod = enumClass.getMethod("resolve", short.class); - short i = (short)toInt(obj, ok); - if(ok==null || ok[0]) - return enumClass.cast(resolveMethod.invoke(null, java.lang.Short.valueOf(i))); - } catch (Exception e) { - } - }else if(QtLongEnumerator.class.isAssignableFrom(enumClass)) { - try { - Method resolveMethod = enumClass.getMethod("resolve", long.class); - long l = toLong(obj, ok); - if(ok==null || ok[0]) - return enumClass.cast(resolveMethod.invoke(null, java.lang.Long.valueOf(l))); - } catch (Exception e) { - } - }else if (canConvertToInt(obj)) { - int value = toInt(obj, ok); - E[] constants = enumClass.getEnumConstants(); - if(constants!=null && (ok==null || ok[0] && value0) - ok[0] = false; - return null; - } - - public static > F toFlags(Class flagsClass, Object obj) { - return toFlags(flagsClass, obj, null); - } - - public static > F toFlags(Class flagsClass, Object obj, boolean ok[]) { - if(flagsClass.isInstance(obj)) { - try{ - return flagsClass.cast(obj); - } catch (Exception e) { - } - }else if (canConvertToInt(obj)) { - int value = toInt(obj, ok); - try{ - return flagsClass.getConstructor(int.class).newInstance(value); - } catch (Exception e) { - } - } - if(ok!=null && ok.length>0) - ok[0] = false; - return null; - } - - public static void saveObject(QDataStream stream, Object variant){ - saveObject(stream, variant, null); - } - - public static void saveObject(QDataStream stream, Object variant, Boolean[] ok){ - long nativeId = QtJambi_LibraryUtilities.internal.nativeId(stream); - if (nativeId == 0) - throw new QNoNativeResourcesException("Function call on incomplete object of type: " +stream.getClass().getName()); - saveObject(nativeId, variant, ok); - } - - public static Object loadObject(QDataStream stream){ - return loadObject(stream, null); - } - - public static Object loadObject(QDataStream stream, Boolean[] ok){ - long nativeId = QtJambi_LibraryUtilities.internal.nativeId(stream); - if (nativeId == 0) - throw new QNoNativeResourcesException("Function call on incomplete object of type: " +stream.getClass().getName()); - return loadObject(nativeId, ok); - } - - private static native void saveObject(long stream_nativeId, Object variant, Boolean[] ok); - - private static native Object loadObject(long stream_nativeId, Boolean[] ok); -} diff --git a/src/java/qtjambi-modules/qtjambi/Qt6/io/qt/core/QFuture.java b/src/java/qtjambi-modules/qtjambi/Qt6/io/qt/core/QFuture.java index cc82d2ab..28efb9ee 100644 --- a/src/java/qtjambi-modules/qtjambi/Qt6/io/qt/core/QFuture.java +++ b/src/java/qtjambi-modules/qtjambi/Qt6/io/qt/core/QFuture.java @@ -420,4 +420,28 @@ public QFuture onCanceled(QObject context, java.lang.Runnable function){ } @io.qt.QtUninvokable private native static QFuture onCanceledContext(long __this_nativeId, long contextId, java.lang.Object function); + + public QFuture unwrap(Class flatType){ + QFutureInterface promise = new QFutureInterface<>(QFutureInterfaceBase.State.Pending); + this.then(nested->{ + promise.reportStarted(); + try { + for(T result : nested.results()) { + if(result instanceof QFuture) { + QFuture future = ((QFuture) result).unwrap(flatType); + promise.reportResults(future.results()); + }else if(result==null || flatType.isInstance(result)){ + promise.reportResult(flatType.cast(result)); + } + } + }catch(Throwable e) { + promise.reportException(e); + } + promise.reportFinished(); + }).onCanceled(() -> { + promise.reportCanceled(); + promise.reportFinished(); + }); + return promise.future(); + } } diff --git a/src/java/qtjambi-modules/qtjambi/Qt6/io/qt/core/QProperty.java b/src/java/qtjambi-modules/qtjambi/Qt6/io/qt/core/QProperty.java index 6cf3089f..77dd34e7 100644 --- a/src/java/qtjambi-modules/qtjambi/Qt6/io/qt/core/QProperty.java +++ b/src/java/qtjambi-modules/qtjambi/Qt6/io/qt/core/QProperty.java @@ -252,8 +252,6 @@ public T value() @QtUninvokable public void setValue(T newValue) { - if(newValue!=null && !QVariant.canConvert(newValue, d.metaType)) - throw new ClassCastException("Cannot cast value to "+d.metaType.name()); d.removeBinding(); if (d.setValueBypassingBindings(this, newValue)) d.notifyObservers(this); diff --git a/src/java/qtjambi-modules/qtjambi/Qt6/io/qt/core/QPropertyBinding.java b/src/java/qtjambi-modules/qtjambi/Qt6/io/qt/core/QPropertyBinding.java index 2ae10dae..86516b80 100644 --- a/src/java/qtjambi-modules/qtjambi/Qt6/io/qt/core/QPropertyBinding.java +++ b/src/java/qtjambi-modules/qtjambi/Qt6/io/qt/core/QPropertyBinding.java @@ -181,15 +181,15 @@ static QMetaType analyzeMetaType(Serializable functor) { QtUtilities.Supplier supplier = (QtUtilities.Supplier)functor; Object value = supplier.get(); if(value!=null && !QtJambiInternal.getClass(value).isArray()) { - int t = QVariant.type(value); + QMetaType t = QMetaType.fromObject(value); String typeName; - if(t!=QMetaType.Type.UnknownType.value() - && t!=QMetaType.Type.Void.value() - && !(typeName = new QMetaType(t).name()).equals("JObjectWrapper") + if(t.id()!=QMetaType.Type.UnknownType.value() + && t.id()!=QMetaType.Type.Void.value() + && !(typeName = t.name()).equals("JObjectWrapper") && !typeName.equals("JEnumWrapper") && !typeName.equals("JMapWrapper") && !typeName.equals("JCollectionWrapper")) { - return new QMetaType(t); + return t; } } } diff --git a/src/java/qtjambi-modules/qtjambi/Qt6/io/qt/core/QVariant.java b/src/java/qtjambi-modules/qtjambi/Qt6/io/qt/core/QVariant.java deleted file mode 100644 index d79e10dd..00000000 --- a/src/java/qtjambi-modules/qtjambi/Qt6/io/qt/core/QVariant.java +++ /dev/null @@ -1,1167 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 1992-2009 Nokia. All rights reserved. -** Copyright (C) 2009-2022 Dr. Peter Droste, Omix Visualization GmbH & Co. KG. All rights reserved. -** -** This file is part of Qt Jambi. -** -** ** $BEGIN_LICENSE$ -** Commercial Usage -** Licensees holding valid Qt Commercial licenses may use this file in -** accordance with the Qt Commercial License Agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Nokia. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this -** package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** If you are unsure which license is appropriate for your use, please -** contact the sales department at qt-sales@nokia.com. -** $END_LICENSE$ - -** -** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -** -****************************************************************************/ - -package io.qt.core; - -import java.lang.reflect.Method; -import java.util.Collection; -import java.util.Collections; -import java.util.List; -import java.util.Map; - -import io.qt.QFlags; -import io.qt.QNoNativeResourcesException; -import io.qt.QtByteEnumerator; -import io.qt.QtEnumerator; -import io.qt.QtExtensibleEnum; -import io.qt.QtLongEnumerator; -import io.qt.QtObjectInterface; -import io.qt.QtShortEnumerator; -import io.qt.internal.QtJambiInternal; - -/** - * The QVariant class contains a set of static methods to convert between datatypes. - *

- * You can check with this class whether a datatype can be converted to another. - * This is datatypes which cannot simply be cast to each other, but requires - * processing to convert, i.e., you cannot use the instanceof operator as you would - * for classes with the same super class. -*/ -public final class QVariant { - @io.qt.NativeAccess - private QVariant(int userType, Object value, boolean dummy){ - this.metaType = new QMetaType(userType); - this.value = value; - } - - public QVariant(QMetaType.Type metaType){ - this(metaType, null); - } - - public QVariant(QMetaType metaType){ - this(metaType, null); - } - - public static QVariant fromValue(Object value){ - return new QVariant(new QMetaType(type(value)), value); - } - - public QVariant(QMetaType.Type metaType, Object value){ - this.metaType = new QMetaType(metaType); - this.value = this.metaType.create(value); - } - - public QVariant(QMetaType metaType, Object value){ - this.metaType = metaType.clone(); - this.value = metaType.create(value); - } - - private final QMetaType metaType; - - private final Object value; - - @io.qt.NativeAccess - public int userType() { - return metaType.id(); - } - - public QMetaType metaType() { - return metaType.clone(); - } - - @io.qt.NativeAccess - public Object value() { - return metaType.create(value); - } - - public T value(Class cl) { - return convert(value(), cl); - } - - public boolean isValid() { - return metaType.isValid(); - } - - @Override - public String toString() { - if(isValid()) { - return convert(value(), String.class); - }else { - return "QVariant(Invalid)"; - } - } - - @Override - public boolean equals(Object other) { - if(!isValid()) { - if(other instanceof QVariant) - return !((QVariant) other).isValid(); - return other==null; - }else if(other instanceof QVariant){ - QVariant variant = (QVariant) other; - if(metaType.equals(variant.metaType)) { - return java.util.Objects.equals(value, variant.value); - } - return false; - } - else return java.util.Objects.equals(value, other); - } - - public static boolean isValid(Object variant) { - if(variant instanceof QVariant) - return ((QVariant) variant).isValid(); - return true; - } - - @QtExtensibleEnum - @Deprecated - public enum Type implements io.qt.QtEnumerator{ - Invalid(QMetaType.Type.UnknownType.value()), - Boolean(QMetaType.Type.Bool.value()), - Int(QMetaType.Type.Int.value()), - Long(QMetaType.Type.LongLong.value()), - Double(QMetaType.Type.Double.value()), - Char(QMetaType.Type.QChar.value()), - Map(QMetaType.Type.QVariantMap.value()), - List(QMetaType.Type.QVariantList.value()), - String(QMetaType.Type.QString.value()), - StringList(QMetaType.Type.QStringList.value()), - ByteArray(QMetaType.Type.QByteArray.value()), - BitArray(QMetaType.Type.QBitArray.value()), - Date(QMetaType.Type.QDate.value()), - Time(QMetaType.Type.QTime.value()), - DateTime(QMetaType.Type.QDateTime.value()), - Url(QMetaType.Type.QUrl.value()), - Locale(QMetaType.Type.QLocale.value()), - Rect(QMetaType.Type.QRect.value()), - RectF(QMetaType.Type.QRectF.value()), - Size(QMetaType.Type.QSize.value()), - SizeF(QMetaType.Type.QSizeF.value()), - Line(QMetaType.Type.QLine.value()), - LineF(QMetaType.Type.QLineF.value()), - Point(QMetaType.Type.QPoint.value()), - PointF(QMetaType.Type.QPointF.value()), - RegularExpression(QMetaType.Type.QRegularExpression.value()), - Hash(QMetaType.Type.QVariantHash.value()), - EasingCurve(QMetaType.Type.QEasingCurve.value()), - Uuid(QMetaType.Type.QUuid.value()), - ModelIndex(QMetaType.Type.QModelIndex.value()), - PersistentModelIndex(QMetaType.Type.QPersistentModelIndex.value()), - LastCoreType(QMetaType.Type.LastCoreType.value()), - Font(QMetaType.Type.QFont.value()), - Pixmap(QMetaType.Type.QPixmap.value()), - Brush(QMetaType.Type.QBrush.value()), - Color(QMetaType.Type.QColor.value()), - Palette(QMetaType.Type.QPalette.value()), - Image(QMetaType.Type.QImage.value()), - Polygon(QMetaType.Type.QPolygon.value()), - Region(QMetaType.Type.QRegion.value()), - Bitmap(QMetaType.Type.QBitmap.value()), - Cursor(QMetaType.Type.QCursor.value()), - KeySequence(QMetaType.Type.QKeySequence.value()), - Pen(QMetaType.Type.QPen.value()), - TextLength(QMetaType.Type.QTextLength.value()), - TextFormat(QMetaType.Type.QTextFormat.value()), - Transform(QMetaType.Type.QTransform.value()), - Matrix4x4(QMetaType.Type.QMatrix4x4.value()), - Vector2D(QMetaType.Type.QVector2D.value()), - Vector3D(QMetaType.Type.QVector3D.value()), - Vector4D(QMetaType.Type.QVector4D.value()), - Quaternion(QMetaType.Type.QQuaternion.value()), - PolygonF(QMetaType.Type.QPolygonF.value()), - Icon(QMetaType.Type.QIcon.value()), - LastGuiType(QMetaType.Type.LastGuiType.value()), - SizePolicy(QMetaType.Type.QSizePolicy.value()), - UserType(QMetaType.Type.User.value()), - ; - private int val; - private Type(int val) { this.val = val; } - public int value() { return val; } - - public static Type resolve(int value) { - { - return QtJambi_LibraryUtilities.internal.resolveEnum(Type.class, value, null); - } - } - - public static Type resolve(int value, String name) { - if(name==null || name.isEmpty()) - return resolve(value); - else - return QtJambi_LibraryUtilities.internal.resolveEnum(Type.class, value, name); - } - }; - - private static Class dbusVariant; - private static boolean dbusVariantResolved; - - private static boolean isDBusVariant(Object value, Class cl) { - if(!dbusVariantResolved) { - dbusVariantResolved = true; - Class _dbusVariant = null; - try { - _dbusVariant = Class.forName("io.qt.dbus.QDBusVariant"); - } catch (Exception e) { - } - dbusVariant = _dbusVariant; - } - return dbusVariant!=null && cl!=dbusVariant && dbusVariant.isInstance(value); - } - - public static Object convert(Object obj, QMetaType.Type type) { - return convert(obj, type.value(), null); - } - public static Object convert(Object obj, QMetaType.Type type, boolean ok[]) { - return convert(obj, type.value(), ok); - } - @Deprecated - public static Object convert(Object obj, Type type) { - return convert(obj, type.value(), null); - } - @Deprecated - public static Object convert(Object obj, Type type, boolean ok[]) { - return convert(obj, type.value(), ok); - } - public static Object convert(Object obj, int userType) { - return convert(obj, userType, null); - } - public static Object convert(Object obj, QMetaType userType) { - return convert(obj, userType.id(), null); - } - - private static native Object convert(Object obj, int userType, boolean ok[]); - - public static boolean canConvert(Object obj, QMetaType type) { - return type.javaType().isInstance(obj) || canConvertByType(type(obj), type.id()); - } - public static boolean canConvert(Object obj, QMetaType.Type type) { - return QMetaType.javaType(type.value()).isInstance(obj) || canConvertByType(type(obj), type.value()); - } - @Deprecated - public static boolean canConvert(Object obj, Type type) { - return QMetaType.javaType(type.value()).isInstance(obj) || canConvertByType(type(obj), type.value()); - } - - public static boolean canConvert(Object obj, int targetType) { - return QMetaType.javaType(targetType).isInstance(obj) || canConvertByType(type(obj), targetType); - } - - private static native boolean canConvertByType(int sourceType, int targetType); - - public static int type(Object obj) { - if(obj==null) - return QMetaType.Type.Nullptr.value(); - Class objClass = QtJambiInternal.getClass(obj); - if(objClass==QList.class) { - return QMetaType.fromType(QList.class, ((QList)obj).elementMetaType()).id(); - }else if(objClass==QQueue.class) { - return QMetaType.fromType(QQueue.class, ((QQueue)obj).elementMetaType()).id(); - }else if(objClass==QStack.class) { - return QMetaType.fromType(QStack.class, ((QStack)obj).elementMetaType()).id(); - }else if(objClass==QSet.class) { - return QMetaType.fromType(QSet.class, ((QSet)obj).elementMetaType()).id(); - }else if(objClass==QMultiMap.class) { - return QMetaType.fromType(QMultiMap.class, ((QMultiMap)obj).keyMetaType(), ((QMultiMap)obj).valueMetaType()).id(); - }else if(objClass==QMap.class) { - return QMetaType.fromType(QMap.class, ((QMap)obj).keyMetaType(), ((QMap)obj).valueMetaType()).id(); - }else if(objClass==QMultiHash.class) { - return QMetaType.fromType(QMultiHash.class, ((QMultiHash)obj).keyMetaType(), ((QMultiHash)obj).valueMetaType()).id(); - }else if(objClass==QHash.class) { - return QMetaType.fromType(QHash.class, ((QHash)obj).keyMetaType(), ((QHash)obj).valueMetaType()).id(); - } - return QMetaType.fromType(objClass).id(); - } - - private static void setOk(boolean ok[], boolean isOk) - { - if (ok != null && ok.length > 0) - ok[0] = isOk; - } - - public static boolean canConvertToDouble(Object obj) - { - return obj instanceof Number || canConvert(obj, QMetaType.Type.Double); - } - public static double toDouble(Object obj) { return toDouble(obj, null); } - public static double toDouble(Object obj, boolean ok[]) - { - if (obj==null) { - setOk(ok, true); - return 0.0; - } else if (obj instanceof Number) { - setOk(ok, true); - return ((Number) obj).doubleValue(); - } else { - return __qt_toDouble(obj, ok); - } - } - private static native double __qt_toDouble(Object variant, boolean ok[]); - - public static boolean canConvertToFloat(Object obj) - { - return obj instanceof Number || canConvert(obj, QMetaType.Type.Float); - } - public static float toFloat(Object obj) { return toFloat(obj, null); } - public static float toFloat(Object obj, boolean ok[]) - { - if (obj==null) { - setOk(ok, true); - return 0.f; - } else if (obj instanceof Number) { - setOk(ok, true); - return ((Number) obj).floatValue(); - } else { - return __qt_toFloat(obj, ok); - } - } - private static native float __qt_toFloat(Object variant, boolean ok[]); - - public static boolean canConvertToString(Object obj) - { - return true; - } - - /** - * {@inheritDoc} - */ - public static String toString(Object obj) - { - return obj==null ? "" : __qt_toString(obj); - } - private static native String __qt_toString(Object variant); - - public static boolean canConvertToBoolean(Object obj) - { - return obj instanceof Boolean || obj instanceof Number || canConvert(obj, QMetaType.Type.Bool); - } - public static boolean toBoolean(Object obj) - { - if (obj==null) { - return false; - } else if (obj instanceof Boolean) { - return (Boolean) obj; - } else if (obj instanceof Number) { - return ((Number) obj).intValue() != 0; - } else { - return __qt_toBoolean(obj); - } - } - private static native boolean __qt_toBoolean(Object obj); - - public static boolean canConvertToByteArray(Object obj) - { - return obj instanceof QByteArray || canConvert(obj, QMetaType.Type.QByteArray); - } - public static QByteArray toByteArray(Object obj) - { - if(obj instanceof QByteArray) { - if(!((QtObjectInterface)obj).isDisposed()) - return (QByteArray)obj; - }else if(obj!=null){ - Object returned = convert(obj, QMetaType.Type.QByteArray); - if (returned instanceof QByteArray) { - return (QByteArray)returned; - } - } - return new QByteArray(); - } - - public static boolean canConvertToBitArray(Object obj) - { - return obj instanceof QBitArray || canConvert(obj, QMetaType.Type.QBitArray); - } - public static QBitArray toBitArray(Object obj) - { - if(obj instanceof QBitArray) { - if(!((QtObjectInterface)obj).isDisposed()) - return (QBitArray)obj; - }else if(obj!=null){ - Object returned = convert(obj, QMetaType.Type.QBitArray); - if (returned instanceof QBitArray) { - return (QBitArray)returned; - } - } - return new QBitArray(); - } - - public static boolean canConvertToChar(Object obj) - { - return obj instanceof Character || canConvert(obj, QMetaType.Type.QChar); - } - public static char toChar(Object obj) - { - if(obj==null) - return 0; - else if (obj instanceof Character) - return (Character) obj; - else - return __qt_toChar(obj); - } - private static native char __qt_toChar(Object obj); - - public static boolean canConvertToDate(Object obj) - { - return obj instanceof QDate || canConvert(obj, QMetaType.Type.QDate); - } - public static QDate toDate(Object obj) - { - if(obj instanceof QDate) { - if(!((QtObjectInterface)obj).isDisposed()) - return (QDate)obj; - }else if(obj!=null){ - Object returned = convert(obj, QMetaType.Type.QDate); - if (returned instanceof QDate) { - return (QDate)returned; - } - } - return new QDate(); - } - - public static boolean canConvertToDateTime(Object obj) - { - return obj instanceof QDateTime || canConvert(obj, QMetaType.Type.QDateTime); - } - public static QDateTime toDateTime(Object obj) - { - if(obj instanceof QDateTime) { - if(!((QtObjectInterface)obj).isDisposed()) - return (QDateTime)obj; - }else if(obj!=null){ - Object returned = convert(obj, QMetaType.Type.QDateTime); - if (returned instanceof QDateTime) { - return (QDateTime)returned; - } - } - return new QDateTime(); - } - - public static boolean canConvertToInt(Object obj) - { - return obj instanceof Number || canConvert(obj, QMetaType.Type.Int); - } - public static int toInt(Object obj) { return toInt(obj, null); } - public static int toInt(Object obj, boolean ok[]) - { - if(obj==null) { - return 0; - }else if (obj instanceof Number) { - setOk(ok, true); - return ((Number) obj).intValue(); - } else { - return __qt_toInt(obj, ok); - } - } - private static native int __qt_toInt(Object obj, boolean ok[]); - - public static boolean canConvertToLine(Object obj) - { - return obj instanceof QLine || canConvert(obj, QMetaType.Type.QLine); - } - public static QLine toLine(Object obj) - { - if(obj instanceof QLine) { - if(!((QtObjectInterface)obj).isDisposed()) - return (QLine)obj; - }else if(obj!=null){ - Object returned = convert(obj, QMetaType.Type.QLine); - if (returned instanceof QLine) { - return (QLine) returned; - } - } - return new QLine(); - } - public static boolean canConvertToLineF(Object obj) - { - return obj instanceof QLineF || canConvert(obj, QMetaType.Type.QLineF); - } - public static QLineF toLineF(Object obj) - { - if(obj instanceof QLineF) { - if(!((QtObjectInterface)obj).isDisposed()) - return (QLineF)obj; - }else if(obj!=null){ - Object returned = convert(obj, QMetaType.Type.QLineF); - if (returned instanceof QLineF) { - return (QLineF)returned; - } - } - return new QLineF(); - } - - public static boolean canConvertToLocale(Object obj) - { - return obj instanceof QLocale || canConvert(obj, QMetaType.Type.QLocale); - } - public static QLocale toLocale(Object obj) - { - if(obj instanceof QLocale) { - if(!((QtObjectInterface)obj).isDisposed()) - return (QLocale)obj; - }else if(obj!=null){ - Object returned = convert(obj, QMetaType.Type.QLocale); - if (returned instanceof QLocale) { - return (QLocale)returned; - } - } - return new QLocale(); - } - - public static boolean canConvertToPoint(Object obj) - { - return obj instanceof QPoint || canConvert(obj, QMetaType.Type.QPoint); - } - public static QPoint toPoint(Object obj) - { - if(obj instanceof QPoint) { - if(!((QtObjectInterface)obj).isDisposed()) - return (QPoint)obj; - }else if(obj!=null){ - Object returned = convert(obj, QMetaType.Type.QPoint); - if (returned instanceof QPoint) { - return (QPoint) returned; - } - } - return new QPoint(); - } - - public static boolean canConvertToPointF(Object obj) - { - return obj instanceof QPointF || canConvert(obj, QMetaType.Type.QPointF); - } - public static QPointF toPointF(Object obj) - { - if(obj instanceof QPointF) { - if(!((QtObjectInterface)obj).isDisposed()) - return (QPointF)obj; - }else if(obj!=null){ - Object returned = convert(obj, QMetaType.Type.QPointF); - if (returned instanceof QPointF) { - return (QPointF)returned; - } - } - return new QPointF(); - } - - public static boolean canConvertToRect(Object obj) - { - return obj instanceof QRect || canConvert(obj, QMetaType.Type.QRect); - } - public static QRect toRect(Object obj) - { - if(obj instanceof QRect) { - if(!((QtObjectInterface)obj).isDisposed()) - return (QRect)obj; - }else if(obj!=null){ - Object returned = convert(obj, QMetaType.Type.QRect); - if (returned instanceof QRect) { - return (QRect)returned; - } - } - return new QRect(); - } - - public static boolean canConvertToRectF(Object obj) - { - return obj instanceof QRectF || canConvert(obj, QMetaType.Type.QRectF); - } - public static QRectF toRectF(Object obj) - { - if(obj instanceof QRectF) { - if(!((QtObjectInterface)obj).isDisposed()) - return (QRectF)obj; - }else if(obj!=null){ - Object returned = convert(obj, QMetaType.Type.QRectF); - if (returned instanceof QRectF) { - return (QRectF)returned; - } - } - return new QRectF(); - } - - public static boolean canConvertToRegularExpression(Object obj) - { - return obj instanceof QRegularExpression || canConvert(obj, QMetaType.Type.QRegularExpression); - } - public static QRegularExpression toRegularExpression(Object obj) - { - if(obj instanceof QRegularExpression) { - if(!((QtObjectInterface)obj).isDisposed()) - return (QRegularExpression)obj; - }else if(obj!=null){ - Object returned = convert(obj, QMetaType.Type.QRegularExpression); - if (returned instanceof QRegularExpression) { - return (QRegularExpression)returned; - } - } - return new QRegularExpression(); - } - - public static boolean canConvertToSize(Object obj) - { - return obj instanceof QSize || canConvert(obj, QMetaType.Type.QSize); - } - public static QSize toSize(Object obj) - { - if(obj instanceof QSize) { - if(!((QtObjectInterface)obj).isDisposed()) - return (QSize)obj; - }else if(obj!=null){ - Object returned = convert(obj, QMetaType.Type.QSize); - if (returned instanceof QSize) { - return (QSize)returned; - } - } - return new QSize(); - } - - public static boolean canConvertToSizeF(Object obj) - { - return obj instanceof QSizeF || canConvert(obj, QMetaType.Type.QSizeF); - } - public static QSizeF toSizeF(Object obj) - { - if(obj instanceof QSizeF) { - if(!((QtObjectInterface)obj).isDisposed()) - return (QSizeF)obj; - }else if(obj!=null){ - Object returned = convert(obj, QMetaType.Type.QSizeF); - if (returned instanceof QSizeF) { - return (QSizeF)returned; - } - } - return new QSizeF(); - } - - public static boolean canConvertToTime(Object obj) - { - return obj instanceof QTime || canConvert(obj, QMetaType.Type.QTime); - } - public static QTime toTime(Object obj) - { - if(obj instanceof QTime) { - if(!((QtObjectInterface)obj).isDisposed()) - return (QTime)obj; - }else if(obj!=null){ - Object returned = convert(obj, QMetaType.Type.QTime); - if (returned instanceof QTime) { - return (QTime)returned; - } - } - return new QTime(); - } - - public static boolean canConvertToLong(Object obj) - { - return obj instanceof Number || canConvert(obj, QMetaType.Type.LongLong); - } - public static long toLong(Object obj) { return toLong(obj, null); } - public static long toLong(Object obj, boolean ok[]) - { - if(obj==null) { - setOk(ok, true); - return 0; - }else if (obj instanceof Number) { - setOk(ok, true); - return ((Number) obj).longValue(); - } else { - return __qt_toLong(obj, ok); - } - } - private static native long __qt_toLong(Object obj, boolean ok[]); - - public static boolean canConvertToList(Object obj) - { - return obj instanceof Collection || canConvert(obj, QMetaType.Type.QVariantList); - } - @SuppressWarnings("unchecked") - public static QList toList(Object obj) - { - if (obj instanceof Collection){ - if (obj instanceof QList && ((QList)obj).elementMetaType().javaType()==Object.class) - return (QList)obj; - QList list = QList.createVariantList(); - list.addAll((Collection) obj); - return list; - }else if(obj!=null) { - Object returned = convert(obj, QMetaType.Type.QVariantList); - if (returned instanceof QList) { - return (QList)returned; - } - } - return QList.createVariantList(); - } - - public static boolean canConvertToStringList(Object obj) - { - return obj instanceof Collection || canConvert(obj, QMetaType.Type.QStringList); - } - public static QStringList toStringList(Object obj) - { - if (obj instanceof Collection){ - if (obj instanceof QStringList) { - return (QStringList)obj; - } - QStringList list = new QStringList(); - for(Object entry : (Collection)obj) { - list.add(entry==null ? null : entry.toString()); - } - return list; - }else if(obj!=null) { - Object returned = convert(obj, QMetaType.Type.QStringList); - if (returned instanceof QStringList) { - return (QStringList)returned; - } - } - return new QStringList(); - } - - public static boolean canConvertToCollection(Object obj) - { - return obj instanceof Collection || canConvert(obj, QMetaType.Type.QVariantList); - } - public static Collection toCollection(Object obj) - { - if (obj instanceof Collection){ - return (Collection)obj; - }else if(obj!=null) { - Object returned = convert(obj, QMetaType.Type.QVariantList); - if (returned instanceof Collection) { - return (Collection)returned; - } - } - return Collections.emptyList(); - } - - public static boolean canConvertToMap(Object obj) - { - return obj instanceof Map || canConvert(obj, QMetaType.Type.QVariantHash); - } - - @SuppressWarnings("unchecked") - public static QHash toHash(Object obj) - { - if (obj instanceof Map) { - if(obj instanceof QHash - && ((QHash)obj).keyMetaType().javaType()==String.class - && ((QHash)obj).valueMetaType().javaType()==Object.class) { - return (QHash) obj; - } - Map otherMap = (Map) obj; - QHash map = QHash.createVariantHash(); - for (Map.Entry e : otherMap.entrySet()) - map.put(e.getKey().toString(), e.getValue()); - return map; - }else if(obj!=null) { - Object returned = convert(obj, QMetaType.Type.QVariantHash); - if(returned instanceof QHash) { - return (QHash) returned; - } - } - return QHash.createVariantHash(); - } - - @SuppressWarnings("unchecked") - public static QMap toMap(Object obj) - { - if (obj instanceof Map) { - if(obj instanceof QMap - && ((QMap)obj).keyMetaType().javaType()==String.class - && ((QMap)obj).valueMetaType().javaType()==Object.class) { - return (QMap) obj; - } - Map otherMap = (Map) obj; - QMap map = QMap.createVariantMap(); - for (Map.Entry e : otherMap.entrySet()) - map.put(e.getKey().toString(), e.getValue()); - return map; - }else if(obj!=null) { - Object returned = convert(obj, QMetaType.Type.QVariantHash); - if(returned instanceof QMap) { - return (QMap) returned; - } - } - return QMap.createVariantMap(); - } - - @SuppressWarnings("unchecked") - public static T convert(Object value, Class < T > cl) { - if(cl.isInstance(value)) { - if(value instanceof QtObjectInterface) { - if(!((QtObjectInterface)value).isDisposed()) { - return cl.cast(value); - } - }else { - return cl.cast(value); - } - } - if(isDBusVariant(value, cl)){ - int type = QMetaType.metaTypeId(cl); - return convert(convert(value, type), cl); - } - - if(cl==int.class){ - if(value instanceof Integer) - return (T)value; - boolean[] ok = {false}; - value = QVariant.toInt(value, ok); - if(!ok[0]){ - throw new NumberFormatException("Cannot convert to "+cl.getName()); - } - return (T)value; - }else if(cl==byte.class){ - if(value instanceof Byte) - return (T)value; - boolean[] ok = {false}; - value = (byte)QVariant.toInt(value, ok); - if(!ok[0]){ - throw new NumberFormatException("Cannot convert to "+cl.getName()); - } - return (T)value; - }else if(cl==short.class){ - if(value instanceof Short) - return (T)value; - boolean[] ok = {false}; - value = (short)QVariant.toInt(value, ok); - if(!ok[0]){ - throw new NumberFormatException("Cannot convert to "+cl.getName()); - } - return (T)value; - }else if(cl==long.class){ - if(value instanceof Long) - return (T)value; - boolean[] ok = {false}; - value = QVariant.toLong(value, ok); - if(!ok[0]){ - throw new NumberFormatException("Cannot convert to "+cl.getName()); - } - return (T)value; - }else if(cl==double.class){ - if(value instanceof Double) - return (T)value; - boolean[] ok = {false}; - value = QVariant.toDouble(value, ok); - if(!ok[0]){ - throw new NumberFormatException("Cannot convert to "+cl.getName()); - } - return (T)value; - }else if(cl==float.class){ - if(value instanceof Float) - return (T)value; - boolean[] ok = {false}; - value = (float)QVariant.toDouble(value, ok); - if(!ok[0]){ - throw new NumberFormatException("Cannot convert to "+cl.getName()); - } - return (T)value; - }else if(cl==char.class){ - if(value instanceof Character) - return (T)value; - if(!QVariant.canConvertToChar(value)){ - throw new NumberFormatException("Cannot convert to "+cl.getName()); - } - value = QVariant.toChar(value); - return (T)value; - }else if(cl==boolean.class){ - if(value instanceof Boolean) - return (T)value; - if(!QVariant.canConvertToBoolean(value)){ - throw new NumberFormatException("Cannot convert to "+cl.getName()); - } - value = QVariant.toBoolean(value); - return (T)value; - }else if(cl==QBitArray.class){ - if(value instanceof QBitArray) - return cl.cast(value); - if(QVariant.canConvertToBitArray(value)){ - value = QVariant.toBitArray(value); - return cl.cast(value); - } - return null; - }else if(cl==QByteArray.class){ - if(value instanceof QByteArray) - return cl.cast(value); - if(QVariant.canConvertToByteArray(value)){ - value = QVariant.toByteArray(value); - return cl.cast(value); - } - return null; - }else if(cl==QDate.class){ - if(value instanceof QDate) - return cl.cast(value); - if(QVariant.canConvertToDate(value)){ - value = QVariant.toDate(value); - return cl.cast(value); - } - return null; - }else if(cl==QDateTime.class){ - if(value instanceof QDateTime) - return cl.cast(value); - if(QVariant.canConvertToDateTime(value)){ - value = QVariant.toDateTime(value); - return cl.cast(value); - } - return null; - }else if(cl==QTime.class){ - if(value instanceof QTime) - return cl.cast(value); - if(QVariant.canConvertToTime(value)){ - value = QVariant.toTime(value); - return cl.cast(value); - } - return null; - }else if(cl==QLine.class){ - if(value instanceof QLine) - return cl.cast(value); - if(QVariant.canConvertToLine(value)){ - value = QVariant.toLine(value); - return cl.cast(value); - } - return null; - }else if(cl==List.class){ - if(value instanceof List) - return cl.cast(value); - if(QVariant.canConvertToList(value)){ - value = QVariant.toList(value); - return cl.cast(value); - } - return null; - }else if(cl==QLocale.class){ - if(value instanceof QLocale) - return cl.cast(value); - if(QVariant.canConvertToLocale(value)){ - value = QVariant.toLocale(value); - return cl.cast(value); - } - return null; - }else if(cl==QPoint.class){ - if(value instanceof QPoint) - return cl.cast(value); - if(QVariant.canConvertToPoint(value)){ - value = QVariant.toPoint(value); - return cl.cast(value); - } - return null; - }else if(cl==Map.class){ - if(value instanceof Map) - return cl.cast(value); - if(QVariant.canConvertToMap(value)){ - value = QVariant.toMap(value); - return cl.cast(value); - } - return null; - }else if(cl==QRect.class){ - if(value instanceof QRect) - return cl.cast(value); - if(QVariant.canConvertToRect(value)){ - value = QVariant.toRect(value); - return cl.cast(value); - } - return null; - }else if(cl==QRectF.class){ - if(value instanceof QRectF) - return cl.cast(value); - if(QVariant.canConvertToRectF(value)){ - value = QVariant.toRectF(value); - return cl.cast(value); - } - return null; - }else if(cl==QSize.class){ - if(value instanceof QSize) - return cl.cast(value); - if(QVariant.canConvertToSize(value)){ - value = QVariant.toSize(value); - return cl.cast(value); - } - return null; - }else if(cl==QSizeF.class){ - if(value instanceof QSizeF) - return cl.cast(value); - if(QVariant.canConvertToSizeF(value)){ - value = QVariant.toSizeF(value); - return cl.cast(value); - } - return null; - }else if(Enum.class.isAssignableFrom(cl)){ - if(QVariant.canConvertToEnum((Class>)cl, value)){ - value = QVariant.toEnum((Class>)cl, value); - return cl.cast(value); - } - return null; - }else if(cl==String.class){ - return value!=null ? cl.cast(value.toString()) : cl.cast(""); - } - int type = QMetaType.metaTypeId(cl); - if(canConvert(value, type)) { - return cl.cast(convert(value, type)); - } - return cl.cast(value); - } - - public static > boolean canConvertToEnum(Class enumClass, Object obj) - { - if(enumClass.isInstance(obj)) { - return true; - }else if(QtEnumerator.class.isAssignableFrom(enumClass) - || QtByteEnumerator.class.isAssignableFrom(enumClass) - || QtShortEnumerator.class.isAssignableFrom(enumClass)) { - return canConvertToInt(obj); - }else if(QtLongEnumerator.class.isAssignableFrom(enumClass)) { - return canConvertToLong(obj); - }else if (canConvertToInt(obj)) { - boolean[] ok = {false}; - int value = toInt(obj, ok); - E[] constants = enumClass.getEnumConstants(); - return constants!=null && ok[0] && value> E toEnum(Class enumClass, Object obj) { - return toEnum(enumClass, obj, (boolean[])null); - } - - public static > E toEnum(Class enumClass, Object obj, boolean ok[]) { - if(enumClass.isInstance(obj)) { - try { - return enumClass.cast(obj); - } catch (Exception e) { - } - }else if(QtEnumerator.class.isAssignableFrom(enumClass)) { - try { - Method resolveMethod = enumClass.getMethod("resolve", int.class); - int i = toInt(obj, ok); - if(ok==null || ok[0]) - return enumClass.cast(resolveMethod.invoke(null, java.lang.Integer.valueOf(i))); - } catch (Exception e) { - } - }else if(QtByteEnumerator.class.isAssignableFrom(enumClass)) { - try { - Method resolveMethod = enumClass.getMethod("resolve", byte.class); - byte i = (byte)toInt(obj, ok); - if(ok==null || ok[0]) - return enumClass.cast(resolveMethod.invoke(null, java.lang.Byte.valueOf(i))); - } catch (Exception e) { - } - }else if(QtShortEnumerator.class.isAssignableFrom(enumClass)) { - try { - Method resolveMethod = enumClass.getMethod("resolve", short.class); - short i = (short)toInt(obj, ok); - if(ok==null || ok[0]) - return enumClass.cast(resolveMethod.invoke(null, java.lang.Short.valueOf(i))); - } catch (Exception e) { - } - }else if(QtLongEnumerator.class.isAssignableFrom(enumClass)) { - try { - Method resolveMethod = enumClass.getMethod("resolve", long.class); - long l = toLong(obj, ok); - if(ok==null || ok[0]) - return enumClass.cast(resolveMethod.invoke(null, java.lang.Long.valueOf(l))); - } catch (Exception e) { - } - }else if (canConvertToInt(obj)) { - int value = toInt(obj, ok); - E[] constants = enumClass.getEnumConstants(); - if(constants!=null && (ok==null || ok[0] && value0) - ok[0] = false; - return null; - } - - public static > F toFlags(Class flagsClass, Object obj) { - return toFlags(flagsClass, obj, null); - } - - public static > F toFlags(Class flagsClass, Object obj, boolean ok[]) { - if(flagsClass.isInstance(obj)) { - try{ - return flagsClass.cast(obj); - } catch (Exception e) { - } - }else if (canConvertToInt(obj)) { - int value = toInt(obj, ok); - try{ - return flagsClass.getConstructor(int.class).newInstance(value); - } catch (Exception e) { - } - } - if(ok!=null && ok.length>0) - ok[0] = false; - return null; - } - - public static void saveObject(QDataStream stream, Object variant){ - saveObject(stream, variant, null); - } - - public static void saveObject(QDataStream stream, Object variant, Boolean[] ok){ - long nativeId = QtJambi_LibraryUtilities.internal.nativeId(stream); - if (nativeId == 0) - throw new QNoNativeResourcesException("Function call on incomplete object of type: " +stream.getClass().getName()); - saveObject(nativeId, variant, ok); - } - - public static Object loadObject(QDataStream stream){ - return loadObject(stream, null); - } - - public static Object loadObject(QDataStream stream, Boolean[] ok){ - long nativeId = QtJambi_LibraryUtilities.internal.nativeId(stream); - if (nativeId == 0) - throw new QNoNativeResourcesException("Function call on incomplete object of type: " +stream.getClass().getName()); - return loadObject(nativeId, ok); - } - - private static native void saveObject(long stream_nativeId, Object variant, Boolean[] ok); - - private static native Object loadObject(long stream_nativeId, Boolean[] ok); -} diff --git a/src/java/qtjambi-modules/qtjambi/Qt6/io/qt/internal/AbstractMetaObjectTools.java b/src/java/qtjambi-modules/qtjambi/Qt6/io/qt/internal/AbstractMetaObjectTools.java index d6f37f11..c5fcad95 100644 --- a/src/java/qtjambi-modules/qtjambi/Qt6/io/qt/internal/AbstractMetaObjectTools.java +++ b/src/java/qtjambi-modules/qtjambi/Qt6/io/qt/internal/AbstractMetaObjectTools.java @@ -43,6 +43,7 @@ import java.util.List; import java.util.Map; +import io.qt.QPropertyDeclarationException; import io.qt.QtObject; import io.qt.QtPointerType; import io.qt.QtPrimitiveType; @@ -269,18 +270,24 @@ static QtJambiPropertyInfo analyzeProperty(QObject containingObject, QtObject pr if(info.propertyIndex>=0) { QMetaProperty metaProperty = containingObject.metaObject().properties().at(info.propertyIndex); remainingProperties.removeOne(metaProperty); - if(!Modifier.isFinal(info.field.getModifiers())) - throw new RuntimeException("QProperty field "+info.field.getName()+" is not final."); + if(!Modifier.isFinal(info.field.getModifiers())) { + if(!Boolean.getBoolean("qtjambi.allow-nonfinal-qproperties") && !Boolean.getBoolean("io.qt.allow-nonfinal-qproperties")) { + java.util.logging.Logger.getLogger("io.qt.internal").severe(String.format("Missing modifier 'final' at property field %1$s.%2$s. Specify JVM argument -Dqtjambi.allow-nonfinal-qproperties=true to disable this error.", info.field.getDeclaringClass().getSimpleName(), info.field.getName())); + throw new QPropertyDeclarationException(String.format("Missing modifier 'final' at property field %1$s.%2$s.", info.field.getDeclaringClass().getSimpleName(), info.field.getName())); + } + } return new QtJambiPropertyInfo(info.field, metaProperty); }else { foundField = info.field; } break; } + } catch (QPropertyDeclarationException e) { + throw e; } catch (Throwable e) {} } if(foundField==null) - throw new RuntimeException("Cannot find member field belonging to QProperty instance."); + throw new QPropertyDeclarationException("Cannot find member field belonging to QProperty instance."); MetaObjectTools.QPropertyTypeInfo pinfo = getQPropertyTypeInfo(foundField); int t = registerMetaType( pinfo.propertyType, diff --git a/src/java/qtjambi-modules/qtjambi/Retro/io/qt/internal/RetroHelper.java b/src/java/qtjambi-modules/qtjambi/Retro/io/qt/internal/RetroHelper.java index baefe4ca..56d75fcb 100644 --- a/src/java/qtjambi-modules/qtjambi/Retro/io/qt/internal/RetroHelper.java +++ b/src/java/qtjambi-modules/qtjambi/Retro/io/qt/internal/RetroHelper.java @@ -29,7 +29,11 @@ package io.qt.internal; +import java.io.File; +import java.lang.invoke.MethodType; import java.lang.reflect.AnnotatedElement; +import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.net.MalformedURLException; import java.util.HashSet; @@ -38,6 +42,7 @@ import java.util.function.Function; import java.util.function.IntFunction; import java.util.function.Supplier; +import java.util.logging.Logger; import io.qt.InternalAccess.CallerContext; @@ -48,6 +53,7 @@ private static interface Implementor{ Supplier> callerClassProvider(); IntFunction classAccessChecker(); String processName(); + boolean isProcessAlive(String pid); T getAnnotatedOwnerType(T actualType); } @@ -61,15 +67,25 @@ private static class DefaultImplementor implements Implementor{ stackFrame = stackWalker.walk(stream->stream.limit(number+3).skip(number+2).findFirst()); } if(stackFrame.isPresent()) { + String methodDescriptor = null; + MethodType methodType = null; + try { + methodDescriptor = stackFrame.get().getDescriptor(); + } catch (UnsupportedOperationException e) {} + try{ + methodType = stackFrame.get().getMethodType(); + } catch (UnsupportedOperationException e) {} return new io.qt.InternalAccess.CallerContext( stackFrame.get().getDeclaringClass(), - stackFrame.get().getMethodName(), + stackFrame.get().getMethodName(), + methodDescriptor, + methodType, stackFrame.get().getLineNumber()); } } return null; }; - private String processName = ""+ProcessHandle.current().pid(); + private String processName = Long.toUnsignedString(ProcessHandle.current().pid()); @Override public Supplier> callerClassProvider(){ @@ -96,17 +112,40 @@ public T getAnnotatedOwnerType(T actualType){ } return null; } + + @Override + public boolean isProcessAlive(String pid) { + ProcessHandle process = ProcessHandle.of(Long.parseUnsignedLong(pid)).orElse(null); + return process!=null && process.isAlive(); + } } private static class Java8Implementor implements Implementor{ Java8Implementor() { super(); - Method getAnnotatedOwnerType = null; + Function getAnnotatedOwnerTypeSupplier = null; try { - getAnnotatedOwnerType = java.lang.reflect.AnnotatedType.class.getMethod("getAnnotatedOwnerType"); + Method getAnnotatedOwnerType = java.lang.reflect.AnnotatedType.class.getMethod("getAnnotatedOwnerType"); + getAnnotatedOwnerTypeSupplier = a->{ + try { + return (AnnotatedElement)getAnnotatedOwnerType.invoke(a); + } catch (RuntimeException | Error e) { + throw e; + } catch (InvocationTargetException e) { + try { + throw e.getTargetException(); + } catch (RuntimeException | Error e2) { + throw e2; + }catch(Throwable t) { + throw new RuntimeException(t); + } + }catch(Throwable t) { + throw new RuntimeException(t); + } + }; } catch (Throwable e2) { } - this.getAnnotatedOwnerTypeSupplier = getAnnotatedOwnerType==null ? null : QtJambiInternal.functionFromMethod(getAnnotatedOwnerType); + this.getAnnotatedOwnerTypeSupplier = getAnnotatedOwnerTypeSupplier; this.classAccessChecker = number->{ StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace(); @@ -116,6 +155,7 @@ private static class Java8Implementor implements Implementor{ if(element.getClassName().equals(Thread.class.getName()) && element.getMethodName().equals("getStackTrace")) { postStackTrace = true; + --number; } }else { if(!element.getClassName().startsWith("jdk.internal.reflect") @@ -123,7 +163,7 @@ private static class Java8Implementor implements Implementor{ && !element.getClassName().startsWith("io.qt.internal.RetroHelper")) { if(number==0){ try { - return new io.qt.InternalAccess.CallerContext(Class.forName(element.getClassName()), element.getMethodName(), element.getLineNumber()); + return new io.qt.InternalAccess.CallerContext(Class.forName(element.getClassName()), element.getMethodName(), null, null, element.getLineNumber()); } catch (ClassNotFoundException e) { ++number; } @@ -138,14 +178,27 @@ private static class Java8Implementor implements Implementor{ try { Class reflectionClass = Class.forName("sun.reflect.Reflection"); Method getCallerClass = reflectionClass.getMethod("getCallerClass", int.class); - Function> getCallerClassFun = QtJambiInternal.functionFromMethod(getCallerClass); _callerClassProvider = ()->{ - return getCallerClassFun.apply(4); + try { + return (Class)getCallerClass.invoke(null, 4); + } catch (RuntimeException | Error e) { + throw e; + } catch (InvocationTargetException e) { + try { + throw e.getTargetException(); + } catch (RuntimeException | Error e2) { + throw e2; + }catch(Throwable t) { + throw new RuntimeException(t); + } + }catch(Throwable t) { + throw new RuntimeException(t); + } }; } catch (Throwable e) { _callerClassProvider = ()->{ Class result = Object.class; - io.qt.InternalAccess.CallerContext info = classAccessChecker().apply(1); + io.qt.InternalAccess.CallerContext info = classAccessChecker().apply(2); if(info!=null && info.declaringClass!=null) { result = info.declaringClass; } @@ -160,13 +213,24 @@ private static class Java8Implementor implements Implementor{ Class factoryClass = Class.forName("java.lang.management.ManagementFactory"); Method getRuntimeMXBean = factoryClass.getMethod("getRuntimeMXBean"); Object runtimeMXBean = getRuntimeMXBean.invoke(null); - Method getName = runtimeMXBean.getClass().getMethod("getName"); - pid = (String)getName.invoke(runtimeMXBean); + try { + Field jvm = runtimeMXBean.getClass().getDeclaredField("jvm"); + jvm.setAccessible(true); + Object management = jvm.get(runtimeMXBean); + Method method = management.getClass().getDeclaredMethod("getProcessId"); + method.setAccessible(true); + pid = ""+method.invoke(management); + } catch (Throwable e) { + Method getName = runtimeMXBean.getClass().getMethod("getName"); + getName.setAccessible(true); + pid = (String)getName.invoke(runtimeMXBean); + int index = pid.indexOf('@'); + if(index>0) + pid = pid.substring(0, index); + } } catch (Throwable e) { + Logger.getLogger("io.qt.internal").throwing("Java8Implementor", "", e); } - int index = pid.indexOf('@'); - if(index>0) - pid = pid.substring(0, index); this.processName = pid; } @@ -205,6 +269,31 @@ public T getAnnotatedOwnerType(T actualType) { } return null; } + + @Override + public boolean isProcessAlive(String pid) { + switch (NativeLibraryManager.operatingSystem) { + case Linux: + return new File("/proc/"+pid+"/exe").exists(); + case MacOSX: + try { + Process process = Runtime.getRuntime().exec(new String[]{"ps", "-p", pid}); + return process.waitFor()==0; + } catch (Throwable e) { + } + break; + case Windows: + try { + Process process = Runtime.getRuntime().exec(new String[]{"tasklist", "/FI", "PID eq "+pid}); + return process.waitFor()==0; + } catch (Throwable e) { + } + break; + default: + break; + } + return true; //...because unknown + } } private static final Implementor implementor; @@ -227,7 +316,7 @@ static IntFunction classAccessChecker(){ } static Supplier callerContextProvider() { - return ()->implementor.classAccessChecker().apply(0); + return ()->implementor.classAccessChecker().apply(2); } static T getAnnotatedOwnerType(T actualType) { @@ -283,4 +372,8 @@ static Package getDefinedPackage(ClassLoader cl, String pkg) { } catch (Throwable e) {} return null; } + + static boolean isProcessAlive(String pid) { + return implementor.isProcessAlive(pid); + } } diff --git a/src/java/qtjambi-modules/qtjambi/RetroJDK8/io/qt/internal/RetroHelper.java b/src/java/qtjambi-modules/qtjambi/RetroJDK8/io/qt/internal/RetroHelper.java index be39c999..e12977cd 100644 --- a/src/java/qtjambi-modules/qtjambi/RetroJDK8/io/qt/internal/RetroHelper.java +++ b/src/java/qtjambi-modules/qtjambi/RetroJDK8/io/qt/internal/RetroHelper.java @@ -30,10 +30,8 @@ package io.qt.internal; import java.lang.invoke.MethodHandle; -import java.lang.reflect.AnnotatedType; -import java.lang.reflect.Method; -import java.lang.reflect.Constructor; -import java.lang.management.ManagementFactory; +import java.lang.reflect.*; +import java.lang.management.*; import java.util.function.Supplier; import java.util.stream.Stream; import java.util.Optional; @@ -41,6 +39,7 @@ import java.util.HashSet; import java.util.function.Function; import java.util.function.IntFunction; +import java.io.File; final class RetroHelper { private RetroHelper() {throw new RuntimeException();} @@ -61,8 +60,27 @@ static AnnotatedType getAnnotatedOwnerType(AnnotatedType actualType) { private static IntFunction classAccessChecker; private static Supplier> callerClassProvider; private static MethodHandle getAnnotatedOwnerTypeHandle; + private static final String processName; static { + + String pid = ""; + RuntimeMXBean runtimeMXBean = ManagementFactory.getRuntimeMXBean(); + try { + Field jvm = runtimeMXBean.getClass().getDeclaredField("jvm"); + jvm.setAccessible(true); + Object management = jvm.get(runtimeMXBean); + Method method = management.getClass().getDeclaredMethod("getProcessId"); + method.setAccessible(true); + pid = ""+method.invoke(management); + } catch (Throwable e) { + pid = runtimeMXBean.getName(); + int index = pid.indexOf('@'); + if(index>0) + pid = pid.substring(0, index); + } + processName = pid; + MethodHandle _getAnnotatedOwnerTypeHandle = null; try { Method getAnnotatedOwnerType = AnnotatedType.class.getMethod("getAnnotatedOwnerType"); @@ -178,11 +196,7 @@ static Supplier callerContextProvider() { } static String processName() { - String pid = ManagementFactory.getRuntimeMXBean().getName(); - int index = pid.indexOf('@'); - if(index>0) - pid = pid.substring(0, index); - return pid; + return processName; } static void onExit(Runnable runnable) { @@ -224,4 +238,28 @@ static Package getDefinedPackage(ClassLoader cl, String pkg) { } catch (Throwable e) {} return null; } + + static boolean isProcessAlive(String pid) { + switch (NativeLibraryManager.operatingSystem) { + case Linux: + return new File("/proc/"+pid+"/exe").exists(); + case MacOSX: + try { + Process process = Runtime.getRuntime().exec(new String[]{"ps", "-p", pid}); + return process.waitFor()==0; + } catch (Throwable e) { + } + break; + case Windows: + try { + Process process = Runtime.getRuntime().exec(new String[]{"tasklist", "/FI", "PID eq "+pid}); + return process.waitFor()==0; + } catch (Throwable e) { + } + break; + default: + break; + } + return true; //...because unknown + } } diff --git a/src/java/qtjambi-modules/qtjambi/main/io/qt/InternalAccess.java b/src/java/qtjambi-modules/qtjambi/main/io/qt/InternalAccess.java index 5726229e..a1f8be02 100644 --- a/src/java/qtjambi-modules/qtjambi/main/io/qt/InternalAccess.java +++ b/src/java/qtjambi-modules/qtjambi/main/io/qt/InternalAccess.java @@ -29,11 +29,16 @@ ****************************************************************************/ package io.qt; +import java.lang.invoke.MethodType; import java.lang.reflect.Constructor; +import java.lang.reflect.Method; import java.lang.reflect.Parameter; import java.util.Collection; +import java.util.function.BiFunction; +import java.util.function.Function; import java.util.function.Supplier; +import io.qt.core.QMetaObject; import io.qt.core.QObject; public interface InternalAccess { @@ -141,15 +146,19 @@ public interface Cleanable { Class findGeneratedSuperclass(Class clazz); public final class CallerContext{ - public CallerContext(Class declaringClass, String methodName, int lineNumber) { + public CallerContext(Class declaringClass, String methodName, String methodDescriptor, MethodType methodType, int lineNumber) { super(); this.declaringClass = declaringClass; this.methodName = methodName; + this.methodDescriptor = methodDescriptor; + this.methodType = methodType; this.lineNumber = lineNumber; } public final Class declaringClass; public final String methodName; + public final String methodDescriptor; + public final MethodType methodType; public final int lineNumber; } @@ -165,5 +174,19 @@ public CallerContext(Class declaringClass, String methodName, int lineNumber) Supplier getFactory0(Constructor constructor); + Function getFactory1(Constructor constructor); + + BiFunction getFactory2(Constructor constructor); + + QMetaObject.Method3 getFactory3(Constructor constructor); + + QMetaObject.Method4 getFactory4(Constructor constructor); + + QMetaObject.Method5 getFactory5(Constructor constructor); + + T invokeContructor(Constructor constructor, Object... args) throws Throwable; + + Object invokeMethod(Method method, Object object, Object... args) throws Throwable; + Package getDefinedPackage(ClassLoader cl, String pkg); } diff --git a/src/java/qtjambi-modules/qtjambi/main/io/qt/QPropertyDeclarationException.java b/src/java/qtjambi-modules/qtjambi/main/io/qt/QPropertyDeclarationException.java new file mode 100644 index 00000000..20b3ecae --- /dev/null +++ b/src/java/qtjambi-modules/qtjambi/main/io/qt/QPropertyDeclarationException.java @@ -0,0 +1,41 @@ +/**************************************************************************** +** +** Copyright (C) 2009-2022 Dr. Peter Droste, Omix Visualization GmbH & Co. KG. All rights reserved. +** +** This file is part of Qt Jambi. +** +** ** $BEGIN_LICENSE$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** $END_LICENSE$ + +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +****************************************************************************/ +package io.qt; + +/** + * The QPropertyDeclarationException class is thrown when a QProperty's declaration is not welformed. + */ +public class QPropertyDeclarationException extends RuntimeException { + private static final long serialVersionUID = 1L; + + public QPropertyDeclarationException(String message) { + super(message); + } +} diff --git a/src/java/qtjambi-modules/qtjambi/main/io/qt/QtAsGadget.java b/src/java/qtjambi-modules/qtjambi/main/io/qt/QtAsGadget.java new file mode 100644 index 00000000..1b0bde15 --- /dev/null +++ b/src/java/qtjambi-modules/qtjambi/main/io/qt/QtAsGadget.java @@ -0,0 +1,45 @@ +/**************************************************************************** +** +** Copyright (C) 2009-2022 Dr. Peter Droste, Omix Visualization GmbH & Co. KG. All rights reserved. +** +** This file is part of Qt Jambi. +** +** ** $BEGIN_LICENSE$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** $END_LICENSE$ + +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +****************************************************************************/ +package io.qt; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * This annotation marks a class to be gadget, i.e. QMetaObject analyzer detects properties and methods automatically. + */ +@Documented +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.TYPE) +public @interface QtAsGadget { +} diff --git a/src/java/qtjambi-modules/qtjambi/main/io/qt/QtUtilities.java b/src/java/qtjambi-modules/qtjambi/main/io/qt/QtUtilities.java index 07a02511..65157a48 100644 --- a/src/java/qtjambi-modules/qtjambi/main/io/qt/QtUtilities.java +++ b/src/java/qtjambi-modules/qtjambi/main/io/qt/QtUtilities.java @@ -39,6 +39,7 @@ import java.io.File; import java.util.Collections; +import io.qt.InternalAccess.CallerContext; import io.qt.core.QMetaObject; import io.qt.core.QVersionNumber; import io.qt.internal.QtJambiInternal; @@ -107,6 +108,24 @@ public static void loadJambiLibrary(String library) { public static void loadLibrary(String lib) { QtJambiInternal.loadLibrary(lib); } + + /** + * Use a class (e.g. from third party library) as gadget. + * @see io.qt.QtAsGadget + * @see io.qt.core.QMetaObject#forType(Class) + */ + public static void useAsGadget(Class clazz) { + QtJambiInternal.useAsGadget(clazz); + } + + /** + * Define a package (e.g. from third party library) to let all its classes considered to be gadgets. + * @see io.qt.QtAsGadget + * @see io.qt.core.QMetaObject#forType(Class) + */ + public static void usePackageContentAsGadgets(String _package) { + QtJambiInternal.usePackageContentAsGadgets(_package); + } public static File jambiDeploymentDir() { return QtJambiInternal.jambiDeploymentDir(); @@ -140,11 +159,31 @@ public static QMetaObject.DisposedSignal getSignalOnDispose(QtObjectInterface ob } public static void initializeNativeObject(QtObjectInterface object) { - QtJambiInternal.initializeNativeObject(object, Collections.emptyMap()); + Class cls = QtJambi_LibraryUtilities.internal.getClass(object); + CallerContext callerInfo = QtJambi_LibraryUtilities.internal.callerContextProvider().get(); + if (callerInfo.declaringClass == null || !callerInfo.declaringClass.isAssignableFrom(cls) + || !"".equals(callerInfo.methodName)) { + throw new RuntimeException(new IllegalAccessException( + "QtUtilities.initializeNativeObject(...) can only be called from inside the given object's constructor. Expected: " + + cls.getName() + "., found: " + + (callerInfo.declaringClass == null ? "null" : callerInfo.declaringClass.getName()) + "." + + callerInfo.methodName)); + } + QtJambiInternal.initializeNativeObject(callerInfo.declaringClass, object, Collections.emptyMap()); } public static void initializeNativeObject(QtObjectInterface object, QtArgument.Stream arguments) { - QtJambiInternal.initializeNativeObject(object, arguments.arguments()); + Class cls = QtJambi_LibraryUtilities.internal.getClass(object); + CallerContext callerInfo = QtJambi_LibraryUtilities.internal.callerContextProvider().get(); + if (callerInfo.declaringClass == null || !callerInfo.declaringClass.isAssignableFrom(cls) + || !"".equals(callerInfo.methodName)) { + throw new RuntimeException(new IllegalAccessException( + "QtUtilities.initializeNativeObject(...) can only be called from inside the given object's constructor. Expected: " + + cls.getName() + "., found: " + + (callerInfo.declaringClass == null ? "null" : callerInfo.declaringClass.getName()) + "." + + callerInfo.methodName)); + } + QtJambiInternal.initializeNativeObject(callerInfo.declaringClass, object, arguments.arguments()); } @FunctionalInterface diff --git a/src/java/qtjambi-modules/qtjambi/main/io/qt/core/QLogging.java b/src/java/qtjambi-modules/qtjambi/main/io/qt/core/QLogging.java index dc1177ed..4b0809f7 100644 --- a/src/java/qtjambi-modules/qtjambi/main/io/qt/core/QLogging.java +++ b/src/java/qtjambi-modules/qtjambi/main/io/qt/core/QLogging.java @@ -283,6 +283,37 @@ public static void qWarning(String message, Object...args) { showMessageFromSupplier(QtMsgType.QtWarningMsg.value(), format(message, args)); } + /** + * Changes the output of the default message handler. + * @see https://doc.qt.io/qt/qtglobal.html#qSetMessagePattern + */ + @QtUninvokable + public static native void qSetMessagePattern(String pattern); + + /** + * @see https://doc.qt.io/qt/qtglobal.html#qFormatLogMessage + */ + @QtUninvokable + public static String qFormatLogMessage(QtMsgType type, QMessageLogContext context, String str) { + return qFormatLogMessage(type==null ? 0 : type.value(), QtJambi_LibraryUtilities.internal.nativeId(context), str); + } + + @QtUninvokable + private static native String qFormatLogMessage(int type, long context, String str); + + @QtUninvokable + public static void qErrnoWarning(String message, Object...args) { + qErrnoWarning(-1, message, args); + } + + @QtUninvokable + public static void qErrnoWarning(int code, String message, Object...args) { + qErrnoWarning(code, args==null || args.length==0 ? message : format(message, args).get()); + } + + @QtUninvokable + private native static void qErrnoWarning(int code, String message); + /** * Calls the message handler with the debug message. * @see https://doc.qt.io/qt/qtglobal.html#qDebug diff --git a/src/java/qtjambi-modules/qtjambi/main/io/qt/core/QMetaObject.java b/src/java/qtjambi-modules/qtjambi/main/io/qt/core/QMetaObject.java index d55d6313..c70af60d 100644 --- a/src/java/qtjambi-modules/qtjambi/main/io/qt/core/QMetaObject.java +++ b/src/java/qtjambi-modules/qtjambi/main/io/qt/core/QMetaObject.java @@ -63,7 +63,6 @@ import io.qt.QtSignalEmitterInterface; import io.qt.QtThreadAffineInterface; import io.qt.QtUninvokable; -import io.qt.QtUtilities; import io.qt.internal.QtJambiInternal; import io.qt.internal.QtJambiPropertyInfo; import io.qt.internal.QtJambiSignals; @@ -822,12 +821,7 @@ public Class type(){ private static native Class type(long metaObjectPointer); @QtUninvokable - public static QMetaObject forType(Class clazz) { - QtUtilities.initializePackage(clazz); - return __qt_forType(clazz); - } - @QtUninvokable - private static native QMetaObject __qt_forType(Class clazz); + public static native QMetaObject forType(Class clazz); @QtUninvokable private static native Class exactType(long metaObjectPointer); diff --git a/src/java/qtjambi-modules/qtjambi/main/io/qt/internal/MetaObjectTools.java b/src/java/qtjambi-modules/qtjambi/main/io/qt/internal/MetaObjectTools.java index 0cd1aac1..f4bdeb87 100644 --- a/src/java/qtjambi-modules/qtjambi/main/io/qt/internal/MetaObjectTools.java +++ b/src/java/qtjambi-modules/qtjambi/main/io/qt/internal/MetaObjectTools.java @@ -49,6 +49,7 @@ import java.util.Arrays; import java.util.Collections; import java.util.HashMap; +import java.util.HashSet; import java.util.Hashtable; import java.util.List; import java.util.Map; @@ -59,8 +60,10 @@ import io.qt.NativeAccess; import io.qt.QFlags; +import io.qt.QPropertyDeclarationException; import io.qt.QSignalDeclarationException; import io.qt.QSignalInitializationException; +import io.qt.QtAsGadget; import io.qt.QtByteEnumerator; import io.qt.QtClassInfo; import io.qt.QtEnumerator; @@ -610,7 +613,7 @@ else if(clazz.isArray()) { @Override public int size() {return 0; } }; - final String classname = clazz.getName().replace(".", "::"); + final String classname = clazz.getName().replace(".", "::").replace("$", "::"); Hashtable classInfos = new Hashtable(); @@ -662,19 +665,24 @@ public ParameterInfo(io.qt.core.QMetaType.Type type) { Set addedMethodSignatures = new TreeSet<>(); List signalIsClone = new ArrayList<>(); List> allSignalParameterInfos = new ArrayList<>(); -// cl.getEnclosingClass() != QInstanceMemberSignals.class boolean isQObject = QObject.class.isAssignableFrom(clazz); -// if(QObject.class.isAssignableFrom(clazz)) + boolean isGadget = clazz.isAnnotationPresent(QtAsGadget.class); + if(isQObject && isGadget){ + throw new IllegalStateException("Must not annotate QObject type '"+clazz.getTypeName()+"' with @QtAsGadget."); + } + if(!isQObject && !isGadget){ + isGadget = gadgetClasses.contains(clazz) || gadgetPackages.contains(clazz.getPackage().getName()); + } { TreeSet declaredFields = new TreeSet<>((m1, m2)->{ return m1.getName().compareTo(m2.getName()); }); declaredFields.addAll(Arrays.asList(clazz.getDeclaredFields())); signalLoop: for (Field declaredField : declaredFields) { - Class signalClass = declaredField.getType(); - if(isQObjectSignalType(signalClass)) { + Class fieldType = declaredField.getType(); + if(isQObjectSignalType(fieldType)) { if (!Modifier.isStatic(declaredField.getModifiers())) { - if(!isQObject && signalClass.getEnclosingClass() == QObject.class) + if(!isQObject && fieldType.getEnclosingClass() == QObject.class) throw new QSignalDeclarationException(String.format("Declaration error at signal %1$s.%2$s: do not use QObject signals within non-QObjects.", clazz.getSimpleName(), declaredField.getName())); // If we can't convert all the types we don't list the signal List> emitParameterTypes = new ArrayList<>(); @@ -690,15 +698,11 @@ public ParameterInfo(io.qt.core.QMetaType.Type type) { if(metaTypeDecl!=null) { if(metaTypeDecl.id()!=0) { metaTypeId = metaTypeDecl.id(); - if(signalType.isPointer || signalType.isReference) { - metaTypeId = registerRefMetaType(metaTypeId, signalType.isPointer, signalType.isReference); - } + metaTypeId = registerRefMetaType(metaTypeId, signalType.isPointer, signalType.isReference); typeName = new QMetaType(metaTypeId).name().toString(); }else if(metaTypeDecl.type()!=QMetaType.Type.UnknownType){ metaTypeId = metaTypeDecl.type().value(); - if(signalType.isPointer || signalType.isReference) { - metaTypeId = registerRefMetaType(metaTypeId, signalType.isPointer, signalType.isReference); - } + metaTypeId = registerRefMetaType(metaTypeId, signalType.isPointer, signalType.isReference); typeName = new QMetaType(metaTypeId).name().toString(); }else { if(metaTypeDecl.name().isEmpty()) @@ -719,7 +723,7 @@ public ParameterInfo(io.qt.core.QMetaType.Type type) { }else{ typeName = internalTypeNameOfClass(signalType.type, signalType.genericType); if(signalType.isPointer) { - if(!typeName.endsWith("*")) { + if(!typeName.isEmpty() && !typeName.endsWith("*")) { typeName += "*"; } } @@ -727,7 +731,7 @@ public ParameterInfo(io.qt.core.QMetaType.Type type) { if(typeName.endsWith("*")) { typeName = typeName.substring(0, typeName.length()-2); } - if(!typeName.endsWith("&")) { + if(!typeName.isEmpty() && !typeName.endsWith("&")) { typeName += "&"; } } @@ -751,7 +755,7 @@ public ParameterInfo(io.qt.core.QMetaType.Type type) { signalParameterInfos.add(new ParameterInfo(type)); } } - long methodId = findEmitMethodId(signalClass, emitParameterTypes); + long methodId = findEmitMethodId(fieldType, emitParameterTypes); String methodSignature = String.format("%1$s(%2$s)", declaredField.getName(), String.join(", ", cppTypes)); if(!addedMethodSignatures.contains(methodSignature) && methodId!=0) { if (!Modifier.isFinal(declaredField.getModifiers())) { @@ -772,57 +776,57 @@ public ParameterInfo(io.qt.core.QMetaType.Type type) { addedMethodSignatures.add(methodSignature); signalIsClone.add(Boolean.FALSE); allSignalParameterInfos.add(new ArrayList<>(signalParameterInfos)); - metaData.signalInfos.add(new SignalInfo(declaredField, new ArrayList<>(signalTypes), signalClass, new int[signalTypes.size()], methodId)); + metaData.signalInfos.add(new SignalInfo(declaredField, new ArrayList<>(signalTypes), fieldType, new int[signalTypes.size()], methodId)); signals.put(declaredField.getName(), declaredField); Runnable addDefaultSignal = ()->{ signalTypes.remove(signalTypes.size()-1); signalParameterInfos.remove(signalParameterInfos.size()-1); cppTypes.remove(cppTypes.size()-1); emitParameterTypes.remove(emitParameterTypes.size()-1); - long _methodId = findEmitMethodId(signalClass, emitParameterTypes); + long _methodId = findEmitMethodId(fieldType, emitParameterTypes); String _methodSignature = String.format("%1$s(%2$s)", declaredField.getName(), String.join(", ", cppTypes)); if(!addedMethodSignatures.contains(_methodSignature) && _methodId!=0) { addedMethodSignatures.add(_methodSignature); signalIsClone.add(Boolean.TRUE); allSignalParameterInfos.add(new ArrayList<>(signalParameterInfos)); - metaData.signalInfos.add(new SignalInfo(declaredField, new ArrayList<>(signalTypes), signalClass, new int[signalTypes.size()], _methodId)); + metaData.signalInfos.add(new SignalInfo(declaredField, new ArrayList<>(signalTypes), fieldType, new int[signalTypes.size()], _methodId)); } }; switch(signalTypes.size()) { case 9: - if(QMetaObject.Emitable8.class.isAssignableFrom(signalClass)) { + if(QMetaObject.Emitable8.class.isAssignableFrom(fieldType)) { addDefaultSignal.run(); }else break; case 8: - if(QMetaObject.Emitable7.class.isAssignableFrom(signalClass)) { + if(QMetaObject.Emitable7.class.isAssignableFrom(fieldType)) { addDefaultSignal.run(); }else break; case 7: - if(QMetaObject.Emitable6.class.isAssignableFrom(signalClass)) { + if(QMetaObject.Emitable6.class.isAssignableFrom(fieldType)) { addDefaultSignal.run(); }else break; case 6: - if(QMetaObject.Emitable5.class.isAssignableFrom(signalClass)) { + if(QMetaObject.Emitable5.class.isAssignableFrom(fieldType)) { addDefaultSignal.run(); }else break; case 5: - if(QMetaObject.Emitable4.class.isAssignableFrom(signalClass)) { + if(QMetaObject.Emitable4.class.isAssignableFrom(fieldType)) { addDefaultSignal.run(); }else break; case 4: - if(QMetaObject.Emitable3.class.isAssignableFrom(signalClass)) { + if(QMetaObject.Emitable3.class.isAssignableFrom(fieldType)) { addDefaultSignal.run(); }else break; case 3: - if(QMetaObject.Emitable2.class.isAssignableFrom(signalClass)) { + if(QMetaObject.Emitable2.class.isAssignableFrom(fieldType)) { addDefaultSignal.run(); }else break; case 2: - if(QMetaObject.Emitable1.class.isAssignableFrom(signalClass)) { + if(QMetaObject.Emitable1.class.isAssignableFrom(fieldType)) { addDefaultSignal.run(); }else break; case 1: - if(QMetaObject.Emitable0.class.isAssignableFrom(signalClass)) { + if(QMetaObject.Emitable0.class.isAssignableFrom(fieldType)) { addDefaultSignal.run(); }else break; } @@ -830,18 +834,18 @@ public ParameterInfo(io.qt.core.QMetaType.Type type) { }else { throw new QSignalDeclarationException(String.format("Modifier 'static' not allowed for signal %1$s.%2$s. Use QStaticMemberSignals instead to declare a static signal.", clazz.getSimpleName(), declaredField.getName())); } - }else if(isQObject && QtJambiSignals.AbstractMultiSignal.class.isAssignableFrom(signalClass) && QObject.class!=signalClass.getEnclosingClass()) { + }else if(isQObject && QtJambiSignals.AbstractMultiSignal.class.isAssignableFrom(fieldType) && QObject.class!=fieldType.getEnclosingClass()) { if(Modifier.isStatic(declaredField.getModifiers())) throw new QSignalDeclarationException(String.format("Modifier 'static' not allowed for signal %1$s.%2$s. Use QStaticMemberSignals instead to declare a static signal.", clazz.getSimpleName(), declaredField.getName())); - if(declaredField.getDeclaringClass()!=signalClass.getEnclosingClass()) + if(declaredField.getDeclaringClass()!=fieldType.getEnclosingClass()) throw new QSignalDeclarationException(String.format("Declaration error at signal %1$s.%2$s: Multi signal class has to be declared in the class using it.", clazz.getSimpleName(), declaredField.getName())); - if(!Modifier.isFinal(signalClass.getModifiers())) - throw new QSignalDeclarationException(String.format("Missing modifier 'final' at signal class %1$s.", signalClass.getTypeName())); + if(!Modifier.isFinal(fieldType.getModifiers())) + throw new QSignalDeclarationException(String.format("Missing modifier 'final' at signal class %1$s.", fieldType.getTypeName())); if (!Modifier.isFinal(declaredField.getModifiers())) throw new QSignalDeclarationException(String.format("Missing modifier 'final' at signal %1$s.%2$s.", clazz.getSimpleName(), declaredField.getName())); - Map>,QtJambiSignals.EmitMethodInfo> emitMethods = QtJambiSignals.findEmitMethods(signalClass); + Map>,QtJambiSignals.EmitMethodInfo> emitMethods = QtJambiSignals.findEmitMethods(fieldType); if(emitMethods.keySet().isEmpty()) - throw new QSignalDeclarationException(String.format("Missing modifier emit methods at signal class %1$s.", signalClass.getTypeName())); + throw new QSignalDeclarationException(String.format("Missing modifier emit methods at signal class %1$s.", fieldType.getTypeName())); for (QtJambiSignals.EmitMethodInfo emitMethodInfo : emitMethods.values()) { if(emitMethodInfo.methodId==0) continue; @@ -858,15 +862,11 @@ public ParameterInfo(io.qt.core.QMetaType.Type type) { if(metaTypeDecl!=null) { if(metaTypeDecl.id()!=0) { metaTypeId = metaTypeDecl.id(); - if(signalType.isPointer || signalType.isReference) { - metaTypeId = registerRefMetaType(metaTypeId, signalType.isPointer, signalType.isReference); - } + metaTypeId = registerRefMetaType(metaTypeId, signalType.isPointer, signalType.isReference); typeName = new QMetaType(metaTypeId).name().toString(); }else if(metaTypeDecl.type()!=QMetaType.Type.UnknownType){ metaTypeId = metaTypeDecl.type().value(); - if(signalType.isPointer || signalType.isReference) { - metaTypeId = registerRefMetaType(metaTypeId, signalType.isPointer, signalType.isReference); - } + metaTypeId = registerRefMetaType(metaTypeId, signalType.isPointer, signalType.isReference); typeName = new QMetaType(metaTypeId).name().toString(); }else { if(metaTypeDecl.name().isEmpty()) @@ -887,7 +887,7 @@ public ParameterInfo(io.qt.core.QMetaType.Type type) { }else{ typeName = internalTypeNameOfClass(signalType.type, signalType.genericType); if(signalType.isPointer) { - if(!typeName.endsWith("*")) { + if(!typeName.isEmpty() && !typeName.endsWith("*")) { typeName += "*"; } } @@ -895,7 +895,7 @@ public ParameterInfo(io.qt.core.QMetaType.Type type) { if(typeName.endsWith("*")) { typeName = typeName.substring(0, typeName.length()-2); } - if(!typeName.endsWith("&")) { + if(!typeName.isEmpty() && !typeName.endsWith("&")) { typeName += "&"; } } @@ -943,6 +943,12 @@ public ParameterInfo(io.qt.core.QMetaType.Type type) { if(member.enabled()) { String property = member.name(); if(isQObject && isValidQProperty(declaredField)) { + if (!Modifier.isFinal(declaredField.getModifiers())) { + if(!Boolean.getBoolean("qtjambi.allow-nonfinal-qproperties") && !Boolean.getBoolean("io.qt.allow-nonfinal-qproperties")) { + java.util.logging.Logger.getLogger("io.qt.internal").severe(String.format("Missing modifier 'final' at property field %1$s.%2$s. Specify JVM argument -Dqtjambi.allow-nonfinal-qproperties=true to disable this error.", declaredField.getDeclaringClass().getSimpleName(), declaredField.getName())); + throw new QPropertyDeclarationException(String.format("Missing modifier 'final' at property field %1$s.%2$s.", clazz.getSimpleName(), declaredField.getName())); + } + } propertyQPropertyFields.put(property, declaredField); }else { propertyMembers.put(property, declaredField); @@ -954,9 +960,15 @@ public ParameterInfo(io.qt.core.QMetaType.Type type) { propertyUserResolvers.put(property, isUser(declaredField, clazz)); propertyRequiredResolvers.put(property, isRequired(declaredField, clazz)); propertyConstantResolvers.put(property, isConstant(declaredField)); - propertyFinalResolvers.put(property, true); + propertyFinalResolvers.put(property, false); } }else if(isQObject && isValidQProperty(declaredField)) { + if (!Modifier.isFinal(declaredField.getModifiers())) { + if(!Boolean.getBoolean("qtjambi.allow-nonfinal-qproperties") && !Boolean.getBoolean("io.qt.allow-nonfinal-qproperties")) { + java.util.logging.Logger.getLogger("io.qt.internal").severe(String.format("Missing modifier 'final' at property field %1$s.%2$s. Specify JVM argument -Dqtjambi.allow-nonfinal-qproperties=true to disable this error.", declaredField.getDeclaringClass().getSimpleName(), declaredField.getName())); + throw new QPropertyDeclarationException(String.format("Missing modifier 'final' at property field %1$s.%2$s.", clazz.getSimpleName(), declaredField.getName())); + } + } String property = declaredField.getName(); propertyQPropertyFields.put(property, declaredField); propertyDesignableResolvers.put(property, isDesignable(declaredField, clazz)); @@ -966,14 +978,24 @@ public ParameterInfo(io.qt.core.QMetaType.Type type) { propertyUserResolvers.put(property, isUser(declaredField, clazz)); propertyRequiredResolvers.put(property, isRequired(declaredField, clazz)); propertyConstantResolvers.put(property, isConstant(declaredField)); - propertyFinalResolvers.put(property, true); + propertyFinalResolvers.put(property, false); + }else if((isQObject || isGadget) && Modifier.isFinal(declaredField.getModifiers()) && Modifier.isPublic(declaredField.getModifiers())) { + String property = declaredField.getName(); + propertyMembers.put(property, declaredField); + propertyDesignableResolvers.put(property, isDesignable(declaredField, clazz)); + propertyScriptableResolvers.put(property, isScriptable(declaredField, clazz)); + propertyEditableResolvers.put(property, isEditable(declaredField, clazz)); + propertyStoredResolvers.put(property, isStored(declaredField, clazz)); + propertyUserResolvers.put(property, isUser(declaredField, clazz)); + propertyRequiredResolvers.put(property, false); + propertyConstantResolvers.put(property, true); + propertyFinalResolvers.put(property, false); } } } } List> allConstructorParameterInfos = new ArrayList<>(); -// if(QObject.class.isAssignableFrom(clazz)) { TreeSet> declaredConstructors = new TreeSet<>((m1, m2)->{ return m1.toGenericString().compareTo(m2.toGenericString()); @@ -1014,15 +1036,11 @@ public ParameterInfo(io.qt.core.QMetaType.Type type) { if(metaTypeDecl!=null) { if(metaTypeDecl.id()!=0) { metaTypeId = metaTypeDecl.id(); - if(isPointer || isReference) { - metaTypeId = registerRefMetaType(metaTypeId, isPointer, isReference); - } + metaTypeId = registerRefMetaType(metaTypeId, isPointer, isReference); typeName = new QMetaType(metaTypeId).name().toString(); }else if(metaTypeDecl.type()!=QMetaType.Type.UnknownType){ metaTypeId = metaTypeDecl.type().value(); - if(isPointer || isReference) { - metaTypeId = registerRefMetaType(metaTypeId, isPointer, isReference); - } + metaTypeId = registerRefMetaType(metaTypeId, isPointer, isReference); typeName = new QMetaType(metaTypeId).name().toString(); }else { if(metaTypeDecl.name().isEmpty()) @@ -1042,14 +1060,16 @@ public ParameterInfo(io.qt.core.QMetaType.Type type) { } }else { typeName = internalTypeNameOfClass(parameterTypes[j], genericParameterTypes[j]); - if(isPointer && !typeName.endsWith("*")) { - typeName += "*"; + if(isPointer) { + if(!typeName.isEmpty() && !typeName.endsWith("*")) { + typeName += "*"; + } } if(isReference) { - if(typeName.endsWith("*")) { + if(typeName.endsWith("*")) { typeName = typeName.substring(0, typeName.length()-2); } - if(!typeName.endsWith("&")) { + if(!typeName.isEmpty() && !typeName.endsWith("&")) { typeName += "&"; } } @@ -1103,7 +1123,7 @@ public ParameterInfo(io.qt.core.QMetaType.Type type) { if ( ( ( - QObject.class.isAssignableFrom(clazz) + (isQObject || isGadget) && !declaredMethod.isAnnotationPresent(QtUninvokable.class) && !Modifier.isStatic(declaredMethod.getModifiers()) ) || ( @@ -1141,15 +1161,11 @@ public ParameterInfo(io.qt.core.QMetaType.Type type) { if(metaTypeDecl!=null) { if(metaTypeDecl.id()!=0) { metaTypeId = metaTypeDecl.id(); - if(isPointer || isReference) { - metaTypeId = registerRefMetaType(metaTypeId, isPointer, isReference); - } + metaTypeId = registerRefMetaType(metaTypeId, isPointer, isReference); typeName = new QMetaType(metaTypeId).name().toString(); }else if(metaTypeDecl.type()!=QMetaType.Type.UnknownType){ metaTypeId = metaTypeDecl.type().value(); - if(isPointer || isReference) { - metaTypeId = registerRefMetaType(metaTypeId, isPointer, isReference); - } + metaTypeId = registerRefMetaType(metaTypeId, isPointer, isReference); typeName = new QMetaType(metaTypeId).name().toString(); }else { if(metaTypeDecl.name().isEmpty()) @@ -1169,14 +1185,16 @@ public ParameterInfo(io.qt.core.QMetaType.Type type) { } }else { typeName = internalTypeNameOfClass(declaredMethod.getReturnType(), declaredMethod.getGenericReturnType()); - if(isPointer && !typeName.endsWith("*")) { - typeName += "*"; + if(isPointer) { + if(!typeName.isEmpty() && !typeName.endsWith("*")) { + typeName += "*"; + } } if(isReference) { - if(typeName.endsWith("*")) { + if(typeName.endsWith("*")) { typeName = typeName.substring(0, typeName.length()-2); } - if(!typeName.endsWith("&")) { + if(!typeName.isEmpty() && !typeName.endsWith("&")) { typeName += "&"; } } @@ -1257,14 +1275,16 @@ public ParameterInfo(io.qt.core.QMetaType.Type type) { } }else { typeName = internalTypeNameOfClass(parameterTypes[j], genericParameterTypes[j]); - if(isPointer && !typeName.endsWith("*")) { - typeName += "*"; + if(isPointer) { + if(!typeName.isEmpty() && !typeName.endsWith("*")) { + typeName += "*"; + } } if(isReference) { - if(typeName.endsWith("*")) { + if(typeName.endsWith("*")) { typeName = typeName.substring(0, typeName.length()-2); } - if(!typeName.endsWith("&")) { + if(!typeName.isEmpty() && !typeName.endsWith("&")) { typeName += "&"; } } @@ -1298,7 +1318,7 @@ public ParameterInfo(io.qt.core.QMetaType.Type type) { methodFlags.put(declaredMethod, MethodFlags.MethodMethod); metaData.hasStaticMembers = true; }else{ - if(!QObject.class.isAssignableFrom(clazz)) { + if(!isQObject) { // we need to make sure that static_metacall is set metaData.hasStaticMembers = true; methodFlags.put(declaredMethod, MethodFlags.MethodMethod); @@ -1321,8 +1341,7 @@ public ParameterInfo(io.qt.core.QMetaType.Type type) { if ( (reader != null && reader.enabled()) - && isValidGetter(declaredMethod) - && !internalTypeNameOfClass(declaredMethod.getReturnType(), declaredMethod.getGenericReturnType()).equals("")) { + && isValidGetter(declaredMethod)) { String name = reader.name(); // If the return type of the property reader is not registered, then @@ -1332,7 +1351,7 @@ && isValidGetter(declaredMethod) if ( (QFlags.class.isAssignableFrom(returnType) || Enum.class.isAssignableFrom(returnType)) && !isEnumAllowedForProperty(returnType) ) { - int type = registerMetaType(returnType); + int type = QMetaType.qRegisterMetaType(returnType); if(type==QMetaType.Type.UnknownType.value()) { System.err.println("Problem in property '" + name + "' in '" + clazz.getName() + "' with return type '"+returnType.getName() @@ -1372,7 +1391,7 @@ && isValidSetter(declaredMethod)) { // Check naming convention by looking for setXxx patterns, but only if it hasn't already been // annotated as a writer - if (QObject.class.isAssignableFrom(clazz) + if ((isQObject || isGadget) && writer == null && reader == null // reader can't be a writer, cause the signature doesn't match, just an optimization && declaredMethodName.startsWith("set") @@ -1804,7 +1823,7 @@ else if (Modifier.isPublic(constructor.getModifiers())) int metaObjectFlags = 0; if(!propertyReaders.isEmpty()){ - if(!QObject.class.isAssignableFrom(clazz)) { + if(!isQObject) { metaObjectFlags |= PropertyAccessInStaticMetaCall.value(); } metaData.metaData.set(PROPERTY_METADATA_INDEX, metaData.metaData.size()); @@ -1978,7 +1997,7 @@ else if (Modifier.isPublic(constructor.getModifiers())) }else{ typeName = internalTypeNameOfClass(propertyType, genericPropertyType); if(isPointer) { - if(!typeName.endsWith("*")) { + if(!typeName.isEmpty() && !typeName.endsWith("*")) { typeName += "*"; } } @@ -1986,7 +2005,7 @@ else if (Modifier.isPublic(constructor.getModifiers())) if(typeName.endsWith("*")) { typeName = typeName.substring(0, typeName.length()-2); } - if(!typeName.endsWith("&")) { + if(!typeName.isEmpty() && !typeName.endsWith("&")) { typeName += "&"; } } @@ -2491,4 +2510,15 @@ public static boolean isQObjectSignalType(Class cl) { && cl.getEnclosingClass() != QStaticMemberSignals.class && cl.getEnclosingClass() != QDeclarableSignals.class && !QtJambiSignals.findEmitMethods(cl).isEmpty(); } + + private final static Set> gadgetClasses = Collections.synchronizedSet(new HashSet<>()); + private final static Set gadgetPackages = Collections.synchronizedSet(new HashSet<>()); + + public static void useAsGadget(Class clazz) { + gadgetClasses.add(clazz); + } + + public static void usePackageContentAsGadgets(String _package) { + gadgetPackages.add(_package); + } } diff --git a/src/java/qtjambi-modules/qtjambi/main/io/qt/internal/NativeLibraryManager.java b/src/java/qtjambi-modules/qtjambi/main/io/qt/internal/NativeLibraryManager.java index ace43c51..b30a4a00 100644 --- a/src/java/qtjambi-modules/qtjambi/main/io/qt/internal/NativeLibraryManager.java +++ b/src/java/qtjambi-modules/qtjambi/main/io/qt/internal/NativeLibraryManager.java @@ -344,6 +344,20 @@ private static class LibVersion{ if(operatingSystem!=OperatingSystem.Android) { try{ Preferences preferences = Preferences.userNodeForPackage(NativeLibraryManager.class); + Preferences pids = preferences.node("qtjambi.pids"); + for(String pid : pids.keys()) { + if(!RetroHelper.isProcessAlive(pid)) { + String dir = pids.get(pid, ""); + File jambiTempDir = new File(dir); + if(jambiTempDir.exists() && jambiTempDir.isDirectory()) { + clearAndDelete(jambiTempDir); + pids.remove(pid); + } + } + } + if(pids.keys().length==0) { + preferences.remove("qtjambi.pids"); + } String dirs = preferences.get("qtjambi.previous.deployment.dir", null); if(dirs!=null && !dirs.isEmpty()) { preferences.remove("qtjambi.previous.deployment.dir"); @@ -355,66 +369,25 @@ private static class LibVersion{ } }catch(Throwable t) {} } - - boolean loadQtJambiFromLibraryPath = noDeploymentSpec; - boolean loadQtFromLibraryPath = loadQtJambiFromLibraryPath; - @SuppressWarnings("unused") - File _qtDeploymentDir = null; - File _jambiDeploymentDir = null; - if(!loadQtJambiFromLibraryPath){ - List libraryPaths = new ArrayList<>(); - if (System.getProperties().contains("io.qt.library-path-override")) { - libraryPaths.addAll(javaLibraryPathOverrides.computeIfAbsent(System.getProperty("io.qt.library-path-override"), NativeLibraryManager::splitPath)); - } else { - libraryPaths.addAll(javaLibraryPaths.computeIfAbsent(System.getProperty("java.library.path"), NativeLibraryManager::splitPath)); - } - libraryPaths = mergeJniLibdir(libraryPaths); - - List replacements = new ArrayList<>(); - configuration = decideConfiguration(); - if(configuration!=null) { - String libFormat = qtjambiLibraryName(null, "QtJambi", configuration, replacements, QtJambi_LibraryUtilities.qtMajorVersion, QtJambi_LibraryUtilities.qtMinorVersion, QtJambi_LibraryUtilities.qtJambiPatch); - loop1: for (String path : libraryPaths) { - Iterator iter = replacements.iterator(); - do { - String lib; - if(!iter.hasNext()) { - lib = libFormat; - }else { - lib = String.format(libFormat, iter.next()); - } - File f = new File(path, lib); - if (f.exists()) { - loadQtJambiFromLibraryPath = true; - _jambiDeploymentDir = f.getParentFile(); - break loop1; - } - }while(iter.hasNext()); - } - }else { - replacements.clear(); - String libFormat = qtjambiLibraryName(null, "QtJambi", Configuration.Release, replacements, QtJambi_LibraryUtilities.qtMajorVersion, QtJambi_LibraryUtilities.qtMinorVersion, QtJambi_LibraryUtilities.qtJambiPatch); - loop1: for (String path : libraryPaths) { - Iterator iter = replacements.iterator(); - do { - String lib; - if(!iter.hasNext()) { - lib = libFormat; - }else { - lib = String.format(libFormat, iter.next()); - } - File f = new File(path, lib); - if (f.exists()) { - loadQtJambiFromLibraryPath = true; - _jambiDeploymentDir = f.getParentFile(); - configuration = Configuration.Release; - break loop1; - } - }while(iter.hasNext()); - } - if(!loadQtJambiFromLibraryPath) { - replacements.clear(); - libFormat = qtjambiLibraryName(null, "QtJambi", Configuration.Debug, replacements, QtJambi_LibraryUtilities.qtMajorVersion, QtJambi_LibraryUtilities.qtMinorVersion, QtJambi_LibraryUtilities.qtJambiPatch); + try { + boolean loadQtJambiFromLibraryPath = noDeploymentSpec; + boolean loadQtFromLibraryPath = loadQtJambiFromLibraryPath; + @SuppressWarnings("unused") + File _qtDeploymentDir = null; + File _jambiDeploymentDir = null; + if(!loadQtJambiFromLibraryPath){ + List libraryPaths = new ArrayList<>(); + if (System.getProperties().contains("io.qt.library-path-override")) { + libraryPaths.addAll(javaLibraryPathOverrides.computeIfAbsent(System.getProperty("io.qt.library-path-override"), NativeLibraryManager::splitPath)); + } else { + libraryPaths.addAll(javaLibraryPaths.computeIfAbsent(System.getProperty("java.library.path"), NativeLibraryManager::splitPath)); + } + libraryPaths = mergeJniLibdir(libraryPaths); + + List replacements = new ArrayList<>(); + configuration = decideConfiguration(); + if(configuration!=null) { + String libFormat = qtjambiLibraryName(null, "QtJambi", configuration, replacements, QtJambi_LibraryUtilities.qtMajorVersion, QtJambi_LibraryUtilities.qtMinorVersion, QtJambi_LibraryUtilities.qtJambiPatch); loop1: for (String path : libraryPaths) { Iterator iter = replacements.iterator(); do { @@ -428,177 +401,220 @@ private static class LibVersion{ if (f.exists()) { loadQtJambiFromLibraryPath = true; _jambiDeploymentDir = f.getParentFile(); - configuration = Configuration.Debug; + break loop1; + } + }while(iter.hasNext()); + } + }else { + replacements.clear(); + String libFormat = qtjambiLibraryName(null, "QtJambi", Configuration.Release, replacements, QtJambi_LibraryUtilities.qtMajorVersion, QtJambi_LibraryUtilities.qtMinorVersion, QtJambi_LibraryUtilities.qtJambiPatch); + loop1: for (String path : libraryPaths) { + Iterator iter = replacements.iterator(); + do { + String lib; + if(!iter.hasNext()) { + lib = libFormat; + }else { + lib = String.format(libFormat, iter.next()); + } + File f = new File(path, lib); + if (f.exists()) { + loadQtJambiFromLibraryPath = true; + _jambiDeploymentDir = f.getParentFile(); + configuration = Configuration.Release; break loop1; } }while(iter.hasNext()); } - } - if(configuration==null) - configuration = Configuration.Release; - } - replacements.clear(); - String libFormat = qtLibraryName("Qt", "Core", null, null, configuration, replacements, QtJambi_LibraryUtilities.qtMajorVersion, QtJambi_LibraryUtilities.qtMinorVersion, -1); - loop1: for (String path : libraryPaths) { - Iterator iter = replacements.iterator(); - do { - String lib; - if(!iter.hasNext()) { - lib = libFormat; - }else { - lib = String.format(libFormat, iter.next()); - } - File f = new File(path, lib); - switch(operatingSystem) { - case Linux: - // libQt5Core.so.5 could point to libQt5Core.so.5.x with x < qtMinorVersion - if(f.exists() && ( - lib.endsWith(".so."+QtJambi_LibraryUtilities.qtMajorVersion) - || lib.endsWith(".so") - ) && Files.isSymbolicLink(f.toPath())) { - try { - File link = Files.readSymbolicLink(f.toPath()).toFile(); - if(lib.endsWith(".so")) { - if(!link.getName().startsWith(lib+"."+QtJambi_LibraryUtilities.qtMajorVersion+"."+QtJambi_LibraryUtilities.qtMinorVersion)) { - f = null; - continue; - } - }else { - if(!link.getName().startsWith(lib+"."+QtJambi_LibraryUtilities.qtMinorVersion)) { - f = null; - continue; + if(!loadQtJambiFromLibraryPath) { + replacements.clear(); + libFormat = qtjambiLibraryName(null, "QtJambi", Configuration.Debug, replacements, QtJambi_LibraryUtilities.qtMajorVersion, QtJambi_LibraryUtilities.qtMinorVersion, QtJambi_LibraryUtilities.qtJambiPatch); + loop1: for (String path : libraryPaths) { + Iterator iter = replacements.iterator(); + do { + String lib; + if(!iter.hasNext()) { + lib = libFormat; + }else { + lib = String.format(libFormat, iter.next()); + } + File f = new File(path, lib); + if (f.exists()) { + loadQtJambiFromLibraryPath = true; + _jambiDeploymentDir = f.getParentFile(); + configuration = Configuration.Debug; + break loop1; + } + }while(iter.hasNext()); + } + } + if(configuration==null) + configuration = Configuration.Release; + } + replacements.clear(); + String libFormat = qtLibraryName("Qt", "Core", null, null, configuration, replacements, QtJambi_LibraryUtilities.qtMajorVersion, QtJambi_LibraryUtilities.qtMinorVersion, -1); + loop1: for (String path : libraryPaths) { + Iterator iter = replacements.iterator(); + do { + String lib; + if(!iter.hasNext()) { + lib = libFormat; + }else { + lib = String.format(libFormat, iter.next()); + } + File f = new File(path, lib); + switch(operatingSystem) { + case Linux: + // libQt5Core.so.5 could point to libQt5Core.so.5.x with x < qtMinorVersion + if(f.exists() && ( + lib.endsWith(".so."+QtJambi_LibraryUtilities.qtMajorVersion) + || lib.endsWith(".so") + ) && Files.isSymbolicLink(f.toPath())) { + try { + File link = Files.readSymbolicLink(f.toPath()).toFile(); + if(lib.endsWith(".so")) { + if(!link.getName().startsWith(lib+"."+QtJambi_LibraryUtilities.qtMajorVersion+"."+QtJambi_LibraryUtilities.qtMinorVersion)) { + f = null; + continue; + } + }else { + if(!link.getName().startsWith(lib+"."+QtJambi_LibraryUtilities.qtMinorVersion)) { + f = null; + continue; + } } + } catch (IOException e) { } - } catch (IOException e) { - } - } - break; - default: - break; - } - if (f!=null && f.exists()) { - loadQtFromLibraryPath = true; - _qtDeploymentDir = f.getParentFile(); - break loop1; - } - }while(iter.hasNext()); - } - } - - if(!loadQtJambiFromLibraryPath || !loadQtFromLibraryPath){ - File tmpDir = new File(System.getProperty("java.io.tmpdir")); - String deploymentdir = System.getProperty("io.qt.deploymentdir", ""); - boolean keepDeployment = Boolean.getBoolean("io.qt.keep-temp-deployment"); - String dirprefix = "v"; - if(deploymentdir!=null - && !deploymentdir.isEmpty() - && !"tmp".equalsIgnoreCase(deploymentdir) - && !"temp".equalsIgnoreCase(deploymentdir)) { - keepDeployment = true; - if("user".equalsIgnoreCase(deploymentdir)) { - switch (operatingSystem) { - case Windows: - tmpDir = new File(System.getProperty("user.home"), "AppData\\Local\\QtJambi"); - break; - case Linux: - tmpDir = new File(System.getProperty("user.home"), ".local/share/QtJambi"); - break; - case MacOSX: - tmpDir = new File(System.getProperty("user.home"), "Library/Application Support/QtJambi"); - break; - default: - break; - } - }else if("common".equalsIgnoreCase(deploymentdir)) { - switch (operatingSystem) { - case Windows: - tmpDir = new File("C:\\ProgramData\\QtJambi"); - break; - case Linux: - tmpDir = new File("/usr/local/share/QtJambi"); - break; - case MacOSX: - tmpDir = new File("/Library/Application Support/QtJambi"); - break; - default: - break; - } - }else { - File deploymentDir = new File(deploymentdir); - if(!deploymentDir.isAbsolute()) { - deploymentDir = new File(System.getProperty("user.home"), deploymentdir); + } + break; + default: + break; + } + if (f!=null && f.exists()) { + loadQtFromLibraryPath = true; + _qtDeploymentDir = f.getParentFile(); + break loop1; + } + }while(iter.hasNext()); + } + } + + if(!loadQtJambiFromLibraryPath || !loadQtFromLibraryPath){ + File tmpDir = new File(System.getProperty("java.io.tmpdir")); + String deploymentdir = System.getProperty("io.qt.deploymentdir", ""); + boolean keepDeployment = Boolean.getBoolean("io.qt.keep-temp-deployment"); + String dirprefix = "v"; + if(deploymentdir!=null + && !deploymentdir.isEmpty() + && !"tmp".equalsIgnoreCase(deploymentdir) + && !"temp".equalsIgnoreCase(deploymentdir)) { + keepDeployment = true; + if("user".equalsIgnoreCase(deploymentdir)) { + switch (operatingSystem) { + case Windows: + tmpDir = new File(System.getProperty("user.home"), "AppData\\Local\\QtJambi"); + break; + case Linux: + tmpDir = new File(System.getProperty("user.home"), ".local/share/QtJambi"); + break; + case MacOSX: + tmpDir = new File(System.getProperty("user.home"), "Library/Application Support/QtJambi"); + break; + default: + break; + } + }else if("common".equalsIgnoreCase(deploymentdir)) { + switch (operatingSystem) { + case Windows: + tmpDir = new File("C:\\ProgramData\\QtJambi"); + break; + case Linux: + tmpDir = new File("/usr/local/share/QtJambi"); + break; + case MacOSX: + tmpDir = new File("/Library/Application Support/QtJambi"); + break; + default: + break; + } + }else { + File deploymentDir = new File(deploymentdir); + if(!deploymentDir.isAbsolute()) { + deploymentDir = new File(System.getProperty("user.home"), deploymentdir); + } + if(!deploymentDir.getName().toLowerCase().startsWith("qtjambi")) + dirprefix = "QtJambi"; + tmpDir = deploymentDir; } - if(deploymentDir.getName().toLowerCase().startsWith("qtjambi")) - dirprefix = "QtJambi"; - tmpDir = deploymentDir; - } - jambiDeploymentDir = new File(tmpDir, dirprefix + QtJambi_LibraryUtilities.qtMajorVersion + "." + QtJambi_LibraryUtilities.qtMinorVersion + "." + QtJambi_LibraryUtilities.qtJambiPatch); - }else { - if(keepDeployment) { - jambiDeploymentDir = new File(tmpDir, "QtJambi" + QtJambi_LibraryUtilities.qtMajorVersion + "." + QtJambi_LibraryUtilities.qtMinorVersion + "." + QtJambi_LibraryUtilities.qtJambiPatch + "_" + System.getProperty("user.name")); + jambiDeploymentDir = new File(tmpDir, dirprefix + QtJambi_LibraryUtilities.qtMajorVersion + "." + QtJambi_LibraryUtilities.qtMinorVersion + "." + QtJambi_LibraryUtilities.qtJambiPatch); }else { - jambiDeploymentDir = new File(tmpDir, "QtJambi" + QtJambi_LibraryUtilities.qtMajorVersion + "." + QtJambi_LibraryUtilities.qtMinorVersion + "." + QtJambi_LibraryUtilities.qtJambiPatch + "_" + System.getProperty("user.name") + "_" + RetroHelper.processName()); + if(keepDeployment) { + switch (operatingSystem) { + case Linux: + if(!tmpDir.getAbsolutePath().startsWith(System.getProperty("user.home"))) { + jambiDeploymentDir = new File(tmpDir, "QtJambi" + QtJambi_LibraryUtilities.qtMajorVersion + "." + QtJambi_LibraryUtilities.qtMinorVersion + "." + QtJambi_LibraryUtilities.qtJambiPatch + "_" + System.getProperty("user.name")); + break; + } + default: + jambiDeploymentDir = new File(tmpDir, "QtJambi" + QtJambi_LibraryUtilities.qtMajorVersion + "." + QtJambi_LibraryUtilities.qtMinorVersion + "." + QtJambi_LibraryUtilities.qtJambiPatch); + break; + } + }else { + if(RetroHelper.processName()!=null && !RetroHelper.processName().isEmpty()){ + jambiDeploymentDir = new File(tmpDir, "QtJambi" + QtJambi_LibraryUtilities.qtMajorVersion + "." + QtJambi_LibraryUtilities.qtMinorVersion + "." + QtJambi_LibraryUtilities.qtJambiPatch + "_" + RetroHelper.processName()); + try{ + Preferences preferences = Preferences.userNodeForPackage(NativeLibraryManager.class); + Preferences pids = preferences.node("qtjambi.pids"); + pids.put(RetroHelper.processName(), jambiDeploymentDir.getAbsolutePath()); + }catch(Throwable t) {} + }else { + jambiDeploymentDir = new File(tmpDir, "QtJambi" + QtJambi_LibraryUtilities.qtMajorVersion + "." + QtJambi_LibraryUtilities.qtMinorVersion + "." + QtJambi_LibraryUtilities.qtJambiPatch + "_" + System.getProperty("user.name")); + } + } } - } - deleteTmpDeployment = !keepDeployment; - if(deleteTmpDeployment) - Logger.getLogger("io.qt.internal").log(Level.FINEST, ()->"Requires deletion of tmp deployment directory "+jambiDeploymentDir.getAbsolutePath()+" during pogram termination."); - - - - { - File _jambiJarDir = null; - String classURL = ""+NativeLibraryManager.class.getResource("NativeLibraryManager.class"); - int index; - if(classURL.startsWith("jar:file:") && (index = classURL.indexOf("!/"))>0) { - String jarFileURL = classURL.substring(4, index); - File jarFile = null; - try { - jarFile = new File(new URL(jarFileURL).toURI()); - } catch (URISyntaxException | MalformedURLException e) { - } - if(jarFile!=null && jarFile.exists()) { - _jambiJarDir = jarFile.getParentFile(); - } + deleteTmpDeployment = !keepDeployment; + if(deleteTmpDeployment) + Logger.getLogger("io.qt.internal").log(Level.FINEST, ()->"Requires deletion of tmp deployment directory "+jambiDeploymentDir.getAbsolutePath()+" during pogram termination."); + + + + { + File _jambiJarDir = null; + String classURL = ""+NativeLibraryManager.class.getResource("NativeLibraryManager.class"); + int index; + if(classURL.startsWith("jar:file:") && (index = classURL.indexOf("!/"))>0) { + String jarFileURL = classURL.substring(4, index); + File jarFile = null; + try { + jarFile = new File(new URL(jarFileURL).toURI()); + } catch (URISyntaxException | MalformedURLException e) { + } + if(jarFile!=null && jarFile.exists()) { + _jambiJarDir = jarFile.getParentFile(); + } + } + jambiJarDir = _jambiJarDir; } - jambiJarDir = _jambiJarDir; - } - - - ClassLoader loader = classLoader(); - // Multiple descriptors maybe found - Enumeration specsFound = Collections.emptyEnumeration(); - try { - specsFound = loader.getResources("qtjambi-deployment.xml"); - } catch (IOException e) { - Logger.getLogger("io.qt.internal").log(Level.WARNING, "", e); - } - // FIXME: Want searchForDescriptors/parse/resolve/unpack/load phases separated - - dontSearchDeploymentSpec = specsFound.hasMoreElements(); - - if(!dontSearchDeploymentSpec && jambiJarDir!=null) { - List foundURLs = new ArrayList<>(); - boolean isDebug = false; - if(!loadQtJambiFromLibraryPath) { - if("debug".equals(System.getProperty("io.qt.debug"))) { - File nativeFile = new File(jambiJarDir, String.format("qtjambi-native-%1$s-debug-%2$s.%3$s.%4$s.jar", osArchName, QtJambi_LibraryUtilities.qtMajorVersion, QtJambi_LibraryUtilities.qtMinorVersion, QtJambi_LibraryUtilities.qtJambiPatch)); - if(nativeFile.exists()) { - isDebug = true; - try { - foundURLs.add(new URL("jar:"+nativeFile.toURI()+"!/qtjambi-deployment.xml")); - } catch (IOException e) { - } - } - }else { - File nativeFile = new File(jambiJarDir, String.format("qtjambi-native-%1$s-%2$s.%3$s.%4$s.jar", osArchName, QtJambi_LibraryUtilities.qtMajorVersion, QtJambi_LibraryUtilities.qtMinorVersion, QtJambi_LibraryUtilities.qtJambiPatch)); - if(nativeFile.exists()) { - try { - foundURLs.add(new URL("jar:"+nativeFile.toURI()+"!/qtjambi-deployment.xml")); - } catch (IOException e) { - } - }else { - nativeFile = new File(jambiJarDir, String.format("qtjambi-native-%1$s-debug-%2$s.%3$s.%4$s.jar", osArchName, QtJambi_LibraryUtilities.qtMajorVersion, QtJambi_LibraryUtilities.qtMinorVersion, QtJambi_LibraryUtilities.qtJambiPatch)); + + + ClassLoader loader = classLoader(); + // Multiple descriptors maybe found + Enumeration specsFound = Collections.emptyEnumeration(); + try { + specsFound = loader.getResources("qtjambi-deployment.xml"); + } catch (IOException e) { + Logger.getLogger("io.qt.internal").log(Level.WARNING, "", e); + } + // FIXME: Want searchForDescriptors/parse/resolve/unpack/load phases separated + + dontSearchDeploymentSpec = specsFound.hasMoreElements(); + + if(!dontSearchDeploymentSpec && jambiJarDir!=null) { + List foundURLs = new ArrayList<>(); + boolean isDebug = false; + if(!loadQtJambiFromLibraryPath) { + if("debug".equals(System.getProperty("io.qt.debug"))) { + File nativeFile = new File(jambiJarDir, String.format("qtjambi-native-%1$s-debug-%2$s.%3$s.%4$s.jar", osArchName, QtJambi_LibraryUtilities.qtMajorVersion, QtJambi_LibraryUtilities.qtMinorVersion, QtJambi_LibraryUtilities.qtJambiPatch)); if(nativeFile.exists()) { isDebug = true; try { @@ -606,142 +622,165 @@ private static class LibVersion{ } catch (IOException e) { } } - } - } - String infix; - if(isDebug) { - infix = String.format("-native-%1$s-debug-%2$s.%3$s.", osArchName, QtJambi_LibraryUtilities.qtMajorVersion, QtJambi_LibraryUtilities.qtMinorVersion); - }else { - infix = String.format("-native-%1$s-%2$s.%3$s.", osArchName, QtJambi_LibraryUtilities.qtMajorVersion, QtJambi_LibraryUtilities.qtMinorVersion); - } - for(String f : jambiJarDir.list()) { - if(f.startsWith("qtjambi-plugin-") && f.contains(infix)) { - try { - foundURLs.add(new URL("jar:"+new File(jambiJarDir, f).toURI()+"!/qtjambi-deployment.xml")); - } catch (IOException e) { - } - } - } - } - if(!loadQtFromLibraryPath) { - int qtPatchVersion = -1; - String libPrefix = String.format("qt-lib-core-native-%1$s%2$s-%3$s.%4$s.", osArchName, isDebug && operatingSystem!=OperatingSystem.Linux ? "-debug" : "", QtJambi_LibraryUtilities.qtMajorVersion, QtJambi_LibraryUtilities.qtMinorVersion); - for(File lib : jambiJarDir.listFiles()) { - if(lib.isFile() && lib.getName().startsWith(libPrefix) && lib.getName().endsWith(".jar")) { - String version = lib.getName().substring(libPrefix.length(), lib.getName().length()-4); - int v = Integer.parseInt(version); - if(v>qtPatchVersion) - qtPatchVersion = v; - } - } - if(qtPatchVersion>=0) { - String libSuffix = String.format("-native-%1$s%2$s-%3$s.%4$s.%5$s.jar", osArchName, isDebug && operatingSystem!=OperatingSystem.Linux ? "-debug" : "", QtJambi_LibraryUtilities.qtMajorVersion, QtJambi_LibraryUtilities.qtMinorVersion, qtPatchVersion); - for(File lib : jambiJarDir.listFiles()) { - if(lib.isFile() && lib.getName().startsWith("qt-") && lib.getName().endsWith(libSuffix)) { - try { - foundURLs.add(new URL("jar:"+lib.toURI()+"!/qtjambi-deployment.xml")); + }else { + File nativeFile = new File(jambiJarDir, String.format("qtjambi-native-%1$s-%2$s.%3$s.%4$s.jar", osArchName, QtJambi_LibraryUtilities.qtMajorVersion, QtJambi_LibraryUtilities.qtMinorVersion, QtJambi_LibraryUtilities.qtJambiPatch)); + if(nativeFile.exists()) { + try { + foundURLs.add(new URL("jar:"+nativeFile.toURI()+"!/qtjambi-deployment.xml")); } catch (IOException e) { } - } - } - } - } - if(!foundURLs.isEmpty()) - specsFound = Collections.enumeration(foundURLs); - } - - while (specsFound.hasMoreElements()) { - URL url = specsFound.nextElement(); - - if(loadedDeploymentSpecUrls.contains(url)) - continue; - loadedDeploymentSpecUrls.add(url); - - reporter.report("Found ", url.toString()); - - DeploymentSpec spec = null; - String protocol = url.getProtocol(); - if (protocol.equals("jar")) { - // Using toExternalForm() will convert a space character into %20 which breaks java.lang.File use of the resulting path. - String eform = url.toExternalForm(); - - // Try to decide the name of the .jar file to have a - // reference point for later.. - int start = 4; //"jar:".length(); - int end = eform.indexOf("!/", start); - // eform has the "jar:url!/entry" format - if (end != -1) { - try { - URL jarUrl = new URL(eform.substring(start, end)); - String jarName = new File(jarUrl.getFile()).getName(); + }else { + nativeFile = new File(jambiJarDir, String.format("qtjambi-native-%1$s-debug-%2$s.%3$s.%4$s.jar", osArchName, QtJambi_LibraryUtilities.qtMajorVersion, QtJambi_LibraryUtilities.qtMinorVersion, QtJambi_LibraryUtilities.qtJambiPatch)); + if(nativeFile.exists()) { + isDebug = true; + try { + foundURLs.add(new URL("jar:"+nativeFile.toURI()+"!/qtjambi-deployment.xml")); + } catch (IOException e) { + } + } + } + } + String infix; + if(isDebug) { + infix = String.format("-native-%1$s-debug-%2$s.%3$s.", osArchName, QtJambi_LibraryUtilities.qtMajorVersion, QtJambi_LibraryUtilities.qtMinorVersion); + }else { + infix = String.format("-native-%1$s-%2$s.%3$s.", osArchName, QtJambi_LibraryUtilities.qtMajorVersion, QtJambi_LibraryUtilities.qtMinorVersion); + } + for(String f : jambiJarDir.list()) { + if(f.startsWith("qtjambi-plugin-") && f.contains(infix)) { try { - reporter.report("Loading ", jarName, " from ", eform); - spec = unpackDeploymentSpec(url, jarName, null); - } catch (ParserConfigurationException | SAXException | ZipException e) { - Logger.getLogger("io.qt.internal").log(Level.WARNING, String.format("Unable to load native libraries from %1$s: %2$s", (jarName==null ? jarUrl : jarName), e.getMessage()), e); + foundURLs.add(new URL("jar:"+new File(jambiJarDir, f).toURI()+"!/qtjambi-deployment.xml")); } catch (IOException e) { } - } catch (MalformedURLException e) { - Logger.getLogger("io.qt.internal").log(Level.WARNING, "", e); } - } - } else if (protocol.equals("file")) { - // No unpack since we presume we are already unpacked - try { - spec = unpackDeploymentSpec(url, null, Boolean.FALSE); - } catch (ParserConfigurationException | SAXException | ZipException e) { - Logger.getLogger("io.qt.internal").log(Level.WARNING, String.format("Unable to load native libraries from %1$s: %2$s", url, e.getMessage()), e); - } catch (IOException e) { - } - } - if(spec != null) { - if("qtjambi".equals(spec.getModule())) - deploymentSpec.add(0, spec); - else - deploymentSpec.add(spec); - } - } - if(!deploymentSpec.isEmpty()) { - DeploymentSpec qtjambiSpec = deploymentSpec.get(0); - if(Configuration.Release.toString().compareToIgnoreCase(qtjambiSpec.getConfiguration()) == 0) - configuration = Configuration.Release; - else if(Configuration.Debug.toString().compareToIgnoreCase(qtjambiSpec.getConfiguration()) == 0) - configuration = Configuration.Debug; - else if(Configuration.Test.toString().compareToIgnoreCase(qtjambiSpec.getConfiguration()) == 0) - configuration = Configuration.Test; - else - configuration = Configuration.Release; - switch (operatingSystem) { - case Windows: - qtJambiLibraryPath = new File(qtjambiSpec.getBaseDir(), "bin").getAbsolutePath(); - break; - default: - qtJambiLibraryPath = new File(qtjambiSpec.getBaseDir(), "lib").getAbsolutePath(); - break; - } - for(DeploymentSpec spec : deploymentSpec) { - if(spec.getCompiler()!=null && qtjambiSpec.getCompiler()!=null && !spec.getCompiler().equals(qtjambiSpec.getCompiler())) { - throw new DeploymentSpecException(String.format("Native deployments of different builts: %1$s and %2$s", qtjambiSpec.getCompiler(), spec.getCompiler())); - }else if(!spec.getConfiguration().equals(qtjambiSpec.getConfiguration())) { - if(operatingSystem==OperatingSystem.Windows || spec.getModule()==null || !spec.getModule().startsWith("qt.lib.")) { - throw new DeploymentSpecException(String.format("Native deployments of different configurations: %1$s and %2$s", qtjambiSpec.getConfiguration(), spec.getConfiguration())); - } - } - } - }else if(configuration==null){ - configuration = decideConfiguration(); - } - }else { - if(configuration==null) - configuration = decideConfiguration(); - deleteTmpDeployment = false; - dontSearchDeploymentSpec = true; - jambiDeploymentDir = _jambiDeploymentDir; - jambiJarDir = null; - } - - if(VERBOSE_LOADING) - System.out.println(reporter.recentReports()); + } + } + if(!loadQtFromLibraryPath) { + int qtPatchVersion = -1; + String libPrefix = String.format("qt-lib-core-native-%1$s%2$s-%3$s.%4$s.", osArchName, isDebug && operatingSystem==OperatingSystem.Windows ? "-debug" : "", QtJambi_LibraryUtilities.qtMajorVersion, QtJambi_LibraryUtilities.qtMinorVersion); + for(File lib : jambiJarDir.listFiles()) { + if(lib.isFile() && lib.getName().startsWith(libPrefix) && lib.getName().endsWith(".jar")) { + String version = lib.getName().substring(libPrefix.length(), lib.getName().length()-4); + int v = Integer.parseInt(version); + if(v>qtPatchVersion) + qtPatchVersion = v; + } + } + if(qtPatchVersion>=0) { + String libSuffix = String.format("-native-%1$s%2$s-%3$s.%4$s.%5$s.jar", osArchName, isDebug && operatingSystem==OperatingSystem.Windows ? "-debug" : "", QtJambi_LibraryUtilities.qtMajorVersion, QtJambi_LibraryUtilities.qtMinorVersion, qtPatchVersion); + for(File lib : jambiJarDir.listFiles()) { + if(lib.isFile() && lib.getName().startsWith("qt-") && lib.getName().endsWith(libSuffix)) { + try { + foundURLs.add(new URL("jar:"+lib.toURI()+"!/qtjambi-deployment.xml")); + } catch (IOException e) { + } + } + } + } + } + if(!foundURLs.isEmpty()) + specsFound = Collections.enumeration(foundURLs); + } + + while (specsFound.hasMoreElements()) { + URL url = specsFound.nextElement(); + + if(loadedDeploymentSpecUrls.contains(url)) + continue; + loadedDeploymentSpecUrls.add(url); + + reporter.report("Found ", url.toString()); + + DeploymentSpec spec = null; + String protocol = url.getProtocol(); + if (protocol.equals("jar")) { + // Using toExternalForm() will convert a space character into %20 which breaks java.lang.File use of the resulting path. + String eform = url.toExternalForm(); + + // Try to decide the name of the .jar file to have a + // reference point for later.. + int start = 4; //"jar:".length(); + int end = eform.indexOf("!/", start); + // eform has the "jar:url!/entry" format + if (end != -1) { + try { + URL jarUrl = new URL(eform.substring(start, end)); + String jarName = new File(jarUrl.getFile()).getName(); + try { + reporter.report("Loading ", jarName, " from ", eform); + spec = unpackDeploymentSpec(url, jarName, null); + } catch (ParserConfigurationException | SAXException | ZipException e) { + Logger.getLogger("io.qt.internal").log(Level.WARNING, String.format("Unable to load native libraries from %1$s: %2$s", (jarName==null ? jarUrl : jarName), e.getMessage()), e); + } catch (IOException e) { + } + } catch (MalformedURLException e) { + Logger.getLogger("io.qt.internal").log(Level.WARNING, "", e); + } + } + } else if (protocol.equals("file")) { + // No unpack since we presume we are already unpacked + try { + spec = unpackDeploymentSpec(url, null, Boolean.FALSE); + } catch (ParserConfigurationException | SAXException | ZipException e) { + Logger.getLogger("io.qt.internal").log(Level.WARNING, String.format("Unable to load native libraries from %1$s: %2$s", url, e.getMessage()), e); + } catch (IOException e) { + } + } + if(spec != null) { + if("qtjambi".equals(spec.getModule())) + deploymentSpec.add(0, spec); + else + deploymentSpec.add(spec); + } + } + if(!deploymentSpec.isEmpty()) { + DeploymentSpec qtjambiSpec = deploymentSpec.get(0); + if(Configuration.Release.toString().compareToIgnoreCase(qtjambiSpec.getConfiguration()) == 0) + configuration = Configuration.Release; + else if(Configuration.Debug.toString().compareToIgnoreCase(qtjambiSpec.getConfiguration()) == 0) + configuration = Configuration.Debug; + else if(Configuration.Test.toString().compareToIgnoreCase(qtjambiSpec.getConfiguration()) == 0) + configuration = Configuration.Test; + else + configuration = Configuration.Release; + switch (operatingSystem) { + case Windows: + qtJambiLibraryPath = new File(qtjambiSpec.getBaseDir(), "bin").getAbsolutePath(); + break; + default: + qtJambiLibraryPath = new File(qtjambiSpec.getBaseDir(), "lib").getAbsolutePath(); + break; + } + for(DeploymentSpec spec : deploymentSpec) { + if(spec.getCompiler()!=null && qtjambiSpec.getCompiler()!=null && !spec.getCompiler().equals(qtjambiSpec.getCompiler())) { + throw new DeploymentSpecException(String.format("Native deployments of different builts: %1$s and %2$s", qtjambiSpec.getCompiler(), spec.getCompiler())); + }else if(!spec.getConfiguration().equals(qtjambiSpec.getConfiguration())) { + if(operatingSystem==OperatingSystem.Windows || spec.getModule()==null || !spec.getModule().startsWith("qt.")) { + throw new DeploymentSpecException(String.format("Native deployments of different configurations: %1$s and %2$s", qtjambiSpec.getConfiguration(), spec.getConfiguration())); + } + } + } + }else if(configuration==null){ + configuration = decideConfiguration(); + } + }else { + if(configuration==null) + configuration = decideConfiguration(); + deleteTmpDeployment = false; + dontSearchDeploymentSpec = true; + jambiDeploymentDir = _jambiDeploymentDir; + jambiJarDir = null; + } + } catch (RuntimeException | Error e) { + Logger.getLogger("io.qt.internal").log(Level.WARNING, "", e); + throw e; + } catch (Throwable e) { + Logger.getLogger("io.qt.internal").log(Level.WARNING, "", e); + throw new ExceptionInInitializerError(e); + }finally { + if(VERBOSE_LOADING) + System.out.println(reporter.recentReports()); + } } private static void clearAndDelete(File directory) { @@ -930,12 +969,12 @@ private static void deployContainerAccess(String library) { static void resetDeploymentSpecs() { deploymentSpec.clear(); if(deleteTmpDeployment) { + Preferences preferences = Preferences.userNodeForPackage(NativeLibraryManager.class); if(jambiDeploymentDir.exists() && jambiDeploymentDir.isDirectory()) { Logger.getLogger("io.qt.internal").log(Level.FINEST, ()->"Deleting tmp deployment directory "+jambiDeploymentDir.getAbsolutePath()+"."); clearAndDelete(jambiDeploymentDir); if(jambiDeploymentDir.exists() && jambiDeploymentDir.isDirectory()) { Logger.getLogger("io.qt.internal").log(Level.FINEST, "Preparing pending deletion..."); - Preferences preferences = Preferences.userNodeForPackage(NativeLibraryManager.class); String dirs = preferences.get("qtjambi.previous.deployment.dir", null); if(dirs!=null && !dirs.isEmpty()) { preferences.put("qtjambi.previous.deployment.dir", dirs + File.pathSeparator + jambiDeploymentDir.getAbsolutePath()); @@ -946,6 +985,13 @@ static void resetDeploymentSpecs() { }else { Logger.getLogger("io.qt.internal").log(Level.FINEST, ()->"Tmp deployment directory "+jambiDeploymentDir.getAbsolutePath()+" does not exist."); } + try{ + Preferences pids = preferences.node("qtjambi.pids"); + pids.remove(RetroHelper.processName()); + if(pids.keys().length==0) { + preferences.remove("qtjambi.pids"); + } + }catch(Throwable t) {} } } @@ -1418,7 +1464,7 @@ static void loadUtilityLibrary(String library, String version, LibraryRequiremen switch(libraryRequirementMode) { case ProvideOnly: availability.extractLibrary(); - break; + return; case Optional: if(!availability.isAvailable()) return; @@ -1727,7 +1773,7 @@ private static File loadNativeLibrary(Class callerClass, Availability availab System.out.println(reporter.recentReports()); } catch (RuntimeException | Error e) { if(VERBOSE_LOADING) - System.err.println(reporter.recentReports()); + System.out.println(reporter.recentReports()); throw e; } catch (Throwable e) { if(reporter.toString().isEmpty()) { diff --git a/src/java/qtjambi-modules/qtjambi/main/io/qt/internal/QtJambiInternal.java b/src/java/qtjambi-modules/qtjambi/main/io/qt/internal/QtJambiInternal.java index 0a020e35..44e6ecf0 100644 --- a/src/java/qtjambi-modules/qtjambi/main/io/qt/internal/QtJambiInternal.java +++ b/src/java/qtjambi-modules/qtjambi/main/io/qt/internal/QtJambiInternal.java @@ -124,6 +124,7 @@ import io.qt.core.QQueue; import io.qt.core.QSet; import io.qt.core.QStack; +import io.qt.core.QStringList; import io.qt.core.QVariant; import io.qt.core.Qt; import io.qt.internal.QtJambiSignals.AbstractSignal; @@ -940,27 +941,6 @@ public void clean() { public static final char SlotPrefix = '1'; public static final char SignalPrefix = '2'; - static Class getComplexType(Class primitiveType) { - if (primitiveType == int.class) - return Integer.class; - else if (primitiveType == double.class) - return Double.class; - else if (primitiveType == long.class) - return Long.class; - else if (primitiveType == float.class) - return Float.class; - else if (primitiveType == short.class) - return Short.class; - else if (primitiveType == boolean.class) - return Boolean.class; - else if (primitiveType == char.class) - return Character.class; - else if (primitiveType == byte.class) - return Byte.class; - else - return primitiveType; - } - static QtJambiSignals.SlotInvoker getSlotInvoker(Method slot, MethodHandle slotHandle){ return methodInvocationHandler.getSlotInvoker(slot, slotHandle); } @@ -1332,6 +1312,7 @@ public static Class findGeneratedSuperclass(Class clazz) { private static final int BOOLEAN_ARRAY_MAGIC = 0x04040406; private static final int CHAR_ARRAY_MAGIC = 0x04040407; private static final int OBJECT_ARRAY_MAGIC = 0x04040408; + private static final int OBJECT_ARRAY_MAGIC_V2 = 0x04040409; private static ReadWriteHandles getReadWriteHandles(Class _cls) { return readWriteHandles.computeIfAbsent(_cls, cls ->{ @@ -1358,6 +1339,7 @@ private static ReadWriteHandles getReadWriteHandles(Class _cls) { }); } + @SuppressWarnings("deprecation") @NativeAccess private static Object readSerializableJavaObject(final QDataStream s) throws ClassNotFoundException, IOException { Object res = null; @@ -1481,6 +1463,19 @@ public int read() throws IOException { } } break; + case OBJECT_ARRAY_MAGIC_V2: + length = s.readInt(); + { + cls = Class.forName(s.readString()); + res = Array.newInstance(cls, length); + for (int i = 0; i < length; i++) { + QVariant variant = new QVariant(); + variant.load(s); + Array.set(res, i, variant.value()); + variant.dispose(); + } + } + break; case RWH_MAGIC: cls = Class.forName(s.readString()); ReadWriteHandles readWriteHandles = getReadWriteHandles(cls); @@ -1583,11 +1578,13 @@ private static void writeSerializableJavaObject(QDataStream s, Object o) throws } }else { Object[] array = (Object[])o; - s.writeInt(OBJECT_ARRAY_MAGIC); + s.writeInt(OBJECT_ARRAY_MAGIC_V2); s.writeString(objectClass.getComponentType().getName()); s.writeInt(array.length); for (int i = 0; i < array.length; i++) { - QVariant.saveObject(s, array[i]); + QVariant variant = new QVariant(array[i]); + variant.save(s); + variant.dispose(); } } }else { @@ -1680,8 +1677,13 @@ private static void debugObject(QDebug s, Object o) { static native String libraryFilePath(); public static void registerDataStreamOperators(int metaType, Class classType, java.util.function.BiConsumer datastreamInFn, java.util.function.Function datastreamOutFn) { + boolean isCustomValueType = isCustomValueType(metaType); if(!isObjectWrapperType(metaType)) { - if(classType.isArray()) + if(isCustomValueType) { + if(metaTypeHasDataStreamOperators(metaType)) { + throw new RuntimeException(String.format("Datastream operators already exist for type %1$s.", classType.getTypeName())); + } + }else if(classType.isArray()) throw new IllegalArgumentException(String.format("Unable to register datastream operators for type %1$s.", classType.getTypeName())); else throw new IllegalArgumentException(String.format("Unable to register datastream operators for type %1$s (%2$s).", classType.getTypeName(), new QMetaType(metaType).name())); @@ -1689,12 +1691,19 @@ public static void registerDataStreamOperators(int metaType, Class classT DataStreamFunctions functions = dataStreamFunctions.computeIfAbsent(classType, cls->new DataStreamFunctions(datastreamInFn, datastreamOutFn)); if(functions.datastreamInFn!=datastreamInFn || functions.datastreamOutFn!=datastreamOutFn) throw new RuntimeException(String.format("Datastream operators already exist for type %1$s.", classType.getTypeName())); + if(isCustomValueType) + registerCustomDataStreamOperators(metaType); } @SuppressWarnings("unchecked") public static void registerDebugStreamOperator(int metaType, Class classType, java.util.function.BiConsumer debugstreamFn) { + boolean isCustomValueType = isCustomValueType(metaType); if(!isObjectWrapperType(metaType)) { - if(classType.isArray()) + if(isCustomValueType) { + if(metaTypeHasDebugStreamOperator(metaType)) { + throw new RuntimeException(String.format("Debug stream operator already exists for type %1$s.", classType.getTypeName())); + } + }else if(classType.isArray()) throw new IllegalArgumentException(String.format("Unable to register debug stream operator for type %1$s.", classType.getTypeName())); else throw new IllegalArgumentException(String.format("Unable to register debug stream operator for type %1$s (%2$s).", classType.getTypeName(), classType.getTypeName())); @@ -1702,9 +1711,18 @@ public static void registerDebugStreamOperator(int metaType, Class classT java.util.function.BiConsumer fun = debugStreamFunctions.computeIfAbsent(classType, c->(java.util.function.BiConsumer)debugstreamFn); if(fun!=debugstreamFn) throw new RuntimeException(String.format("Debug stream operator already exists for type %1$s.", classType.getTypeName())); + if(isCustomValueType) + registerCustomDebugStreamOperator(metaType); } private static native boolean isObjectWrapperType(int metaType); + + //Qt6 only! + private static native boolean isCustomValueType(int metaType); + private static native boolean metaTypeHasDataStreamOperators(int metaType); + private static native boolean metaTypeHasDebugStreamOperator(int metaType); + private static native void registerCustomDataStreamOperators(int metaType); + private static native void registerCustomDebugStreamOperator(int metaType); @NativeAccess static boolean isGeneratedClass(Class clazz) { @@ -2219,11 +2237,89 @@ private static Class findDefaultImplementation(Class clazz, io.qt.core.QMetaType... instantiations) { + initializePackage(clazz); + Object[] typeParameters = clazz.getTypeParameters(); + if(typeParameters.length>0) { + if(typeParameters.length!=(instantiations!=null ? instantiations.length : 0)) { + if(instantiations==null || instantiations.length==0) { + return null; + } + throw new IllegalArgumentException("Number of instantiations does not correspond to number of type parameters."); + } + for (QMetaType instantiation : instantiations) { + if(instantiation.id()==0) + throw new IllegalArgumentException("Invalid instantiation."); + } + switch(typeParameters.length) { + case 1: + if(instantiations[0].id()!=QMetaType.Type.Void.value()) { + if(clazz==QList.class && instantiations[0].id()==QMetaType.Type.QString.value()) { + return QMetaType.Type.QStringList; + }else if(clazz==QList.class && instantiations[0].id()==QMetaType.Type.QByteArray.value()) { + return QMetaType.Type.QByteArrayList; + }else if(clazz==QList.class && instantiations[0].id()==QMetaType.Type.QVariant.value()) { + return QMetaType.Type.QVariantList; + }else if(clazz.getName().startsWith("io.qt.core.Q") && QtJambiCollectionObject.class.isAssignableFrom(clazz)) { + return String.format("%1$s<%2$s>", clazz.getSimpleName(), instantiations[0].name()); + }else if(clazz==java.util.Set.class) { + return String.format("QSet<%1$s>", instantiations[0].name()); + }else if(clazz==java.util.Queue.class) { + return String.format("QQueue<%1$s>", instantiations[0].name()); + }else if(clazz==java.util.Deque.class) { + return String.format("QStack<%1$s>", instantiations[0].name()); + }else if(clazz.isInterface() && java.util.List.class.isAssignableFrom(clazz)) { + return String.format("QList<%1$s>", instantiations[0].name()); + } + } + break; + case 2: + if(instantiations[0].id()!=QMetaType.Type.Void.value() && instantiations[1].id()!=QMetaType.Type.Void.value()) { + if(clazz==QMap.class + && instantiations[0].id()==QMetaType.Type.QString.value() + && instantiations[1].id()==QMetaType.Type.QVariant.value()) { + return QMetaType.Type.QVariantMap; + }else if(clazz==QHash.class + && instantiations[0].id()==QMetaType.Type.QString.value() + && instantiations[1].id()==QMetaType.Type.QVariant.value()) { + return QMetaType.Type.QVariantHash; + }else if(clazz.getName().startsWith("io.qt.core.Q") && (QtJambiAbstractMapObject.class.isAssignableFrom(clazz) || QtJambiAbstractMultiMapObject.class.isAssignableFrom(clazz))) { + return String.format("%1$s<%2$s,%3$s>", clazz.getSimpleName(), instantiations[0].name(), instantiations[1].name()); + }else if(clazz==java.util.Map.class) { + return String.format("QHash<%1$s,%2$s>", instantiations[0].name(), instantiations[1].name()); + }else if(clazz==java.util.TreeMap.class) { + return String.format("QMap<%1$s,%2$s>", instantiations[0].name(), instantiations[1].name()); + }else if(clazz==java.util.HashMap.class) { + return String.format("QHash<%1$s>", instantiations[0].name(), instantiations[1].name()); + }else if(clazz.isInterface() && java.util.NavigableMap.class.isAssignableFrom(clazz)) { + return String.format("QMap<%1$s,%2$s>", instantiations[0].name(), instantiations[1].name()); + } + } + break; + } + if(io.qt.QtObjectInterface.class.isAssignableFrom(clazz)) { + String name = clazz.getSimpleName(); + QStringList _instantiations = new QStringList(); + for (QMetaType instantiation : instantiations) { + _instantiations.add(instantiation.name().toString()); + } + return String.format("%1$s<%2$s>", name, _instantiations.join(',')); + } + }else { + if(instantiations!=null && instantiations.length>0) { + throw new IllegalArgumentException("Type "+clazz.getName()+" does not accept instantiations."); + } + } + return null; + } public static boolean initializePackage(ClassLoader classLoader, java.lang.Package pkg) { return pkg != null && initializePackage(classLoader, pkg.getName()); } + @NativeAccess public static boolean initializePackage(java.lang.Class cls) { return cls != null && cls.getPackage() != null && initializePackage(cls.getClassLoader(), cls.getPackage().getName()); } @@ -2511,9 +2607,9 @@ else if(actualTypes[1] instanceof TypeVariable) { String keyName = internalTypeNameOfClass((Class) keyType, actualTypes[0]); String valueName = internalTypeNameOfClass((Class) valueType, actualTypes[1]); if(keyType==actualTypes[0]) - QMetaType.registerMetaType((Class) keyType); + QMetaType.qRegisterMetaType((Class) keyType); if(valueType==actualTypes[1]) - QMetaType.registerMetaType((Class) valueType); + QMetaType.qRegisterMetaType((Class) valueType); if(cls==NavigableMap.class) { return String.format("QMap<%1$s,%2$s>", keyName, valueName); }else if(cls==Map.class) { @@ -2549,7 +2645,7 @@ else if(actualTypes[0] instanceof TypeVariable) { if(elementType instanceof Class) { String elementName = internalTypeNameOfClass((Class) elementType, actualTypes[0]); if(elementType==actualTypes[0]) - QMetaType.registerMetaType((Class) elementType); + QMetaType.qRegisterMetaType((Class) elementType); if(cls==Collection.class || cls==Queue.class || cls==Deque.class @@ -2589,27 +2685,8 @@ else if(actualTypes[0] instanceof TypeVariable) { native static String internalTypeNameByClass(Class cls); - private static native int __qt_registerMetaType(Class clazz, boolean isPointer, boolean isReference); - - private static native int __qt_registerMetaType2(int id, boolean isPointer, boolean isReference); - - private static native int __qt_registerContainerMetaType(Class containerType, int... instantiations); - - static int registerRefMetaType(int id, boolean isPointer, boolean isReference) { - if(!isPointer && !isReference) - return id; - return __qt_registerMetaType2(id, isPointer, isReference); - } - + static native int registerRefMetaType(int id, boolean isPointer, boolean isReference); - public static int registerMetaType(Class clazz) { - return registerMetaType(clazz, clazz, null, false, false); - } - - public static int registerMetaType(Class clazz, int[] instantiations) { - return __qt_registerContainerMetaType(clazz, instantiations); - } - public static native int findMetaType(String name); static int registerMetaType(Parameter parameter) { @@ -2647,9 +2724,9 @@ public static int registerMetaType(Class clazz, Type genericType, AnnotatedEl } } if(isPointer) { - id = __qt_registerMetaType2(id, true, false); + id = registerRefMetaType(id, true, false); }else if(isReference){ - id = __qt_registerMetaType2(id, false, true); + id = registerRefMetaType(id, false, true); } return id; } @@ -2685,7 +2762,7 @@ public static int registerMetaType(Class clazz, Type genericType, AnnotatedEl } else if (actualTypeArguments[0] == QByteArray.class) { return QMetaType.Type.QByteArrayList.value(); } else if (actualTypeArguments[0] instanceof Class) { - if (metaTypeId((Class) actualTypeArguments[0]) == QMetaType.Type.QVariant.value()) { + if (QMetaType.qMetaTypeId((Class) actualTypeArguments[0]) == QMetaType.Type.QVariant.value()) { return QMetaType.Type.QVariantList.value(); } } @@ -2706,18 +2783,17 @@ else if(actualTypeArguments[0] instanceof TypeVariable) { if(elementType!=0) { int cotainerMetaType; if(AbstractMetaObjectTools.isListType(clazz)) { - cotainerMetaType = __qt_registerContainerMetaType(clazz, elementType); + cotainerMetaType = QMetaType.qRegisterMetaType(clazz, new QMetaType(elementType)); }else if(Deque.class==parameterizedType.getRawType()) { - cotainerMetaType = __qt_registerContainerMetaType(QStack.class, elementType); + cotainerMetaType = QMetaType.qRegisterMetaType(QStack.class, new QMetaType(elementType)); }else if(Queue.class==parameterizedType.getRawType()) { - cotainerMetaType = __qt_registerContainerMetaType(QQueue.class, elementType); + cotainerMetaType = QMetaType.qRegisterMetaType(QQueue.class, new QMetaType(elementType)); }else if(Set.class==parameterizedType.getRawType()) { - cotainerMetaType = __qt_registerContainerMetaType(QSet.class, elementType); + cotainerMetaType = QMetaType.qRegisterMetaType(QSet.class, new QMetaType(elementType)); }else { - cotainerMetaType = __qt_registerContainerMetaType(QList.class, elementType); + cotainerMetaType = QMetaType.qRegisterMetaType(QList.class, new QMetaType(elementType)); } - if(isPointer || isReference) - cotainerMetaType = __qt_registerMetaType2(cotainerMetaType, isPointer, isReference); + cotainerMetaType = registerRefMetaType(cotainerMetaType, isPointer, isReference); return cotainerMetaType; } } else if (( @@ -2732,12 +2808,12 @@ else if(actualTypeArguments[0] instanceof TypeVariable) { if (actualTypeArguments[0] == String.class && actualTypeArguments[1] instanceof Class) { if(NavigableMap.class==parameterizedType.getRawType()) { - if (metaTypeId((Class) actualTypeArguments[1]) == QMetaType.Type.QVariant.value()) { + if (QMetaType.qMetaTypeId((Class) actualTypeArguments[1]) == QMetaType.Type.QVariant.value()) { return QMetaType.Type.QVariantMap.value(); } } if(Map.class==parameterizedType.getRawType()) { - if (metaTypeId((Class) actualTypeArguments[1]) == QMetaType.Type.QVariant.value()) { + if (QMetaType.qMetaTypeId((Class) actualTypeArguments[1]) == QMetaType.Type.QVariant.value()) { return QMetaType.Type.QVariantHash.value(); } } @@ -2771,36 +2847,26 @@ else if(actualTypeArguments[1] instanceof TypeVariable) { if(keyType!=0 && valueType!=0) { int cotainerMetaType; if(NavigableMap.class==parameterizedType.getRawType()) { - cotainerMetaType = __qt_registerContainerMetaType(QMap.class, keyType, valueType); + cotainerMetaType = QMetaType.qRegisterMetaType(QMap.class, new QMetaType(keyType), new QMetaType(valueType)); }else if(Map.class==parameterizedType.getRawType()) { - cotainerMetaType = __qt_registerContainerMetaType(QHash.class, keyType, valueType); + cotainerMetaType = QMetaType.qRegisterMetaType(QHash.class, new QMetaType(keyType), new QMetaType(valueType)); }else { - cotainerMetaType = __qt_registerContainerMetaType(clazz, keyType, valueType); + cotainerMetaType = QMetaType.qRegisterMetaType(clazz, new QMetaType(keyType), new QMetaType(valueType)); } - if(isPointer || isReference) - cotainerMetaType = __qt_registerMetaType2(cotainerMetaType, isPointer, isReference); + cotainerMetaType = registerRefMetaType(cotainerMetaType, isPointer, isReference); return cotainerMetaType; } } } } - return __qt_registerMetaType(clazz, isPointer, isReference); - } - - private static native int __qt_metaTypeId(Class clazz); - - public static int metaTypeId(Class clazz) { - initializePackage(clazz); - return __qt_metaTypeId(clazz); + return registerRefMetaType(QMetaType.qRegisterMetaType(clazz), isPointer, isReference); } - public static native Class javaTypeForMetaTypeId(int metaTypeId); - public static int objectMetaTypeId(Object o) { if (o == null) { return QMetaType.Type.Nullptr.value(); } else { - return metaTypeId(QtJambiInternal.getClass(o)); + return QMetaType.qMetaTypeId(QtJambiInternal.getClass(o)); } } @@ -2808,7 +2874,7 @@ public static int nextMetaTypeId(Class clazz) { int id = QMetaType.Type.UnknownType.value(); if (QtObjectInterface.class.isAssignableFrom(clazz)) { initializePackage(clazz); - id = __qt_metaTypeId(clazz); + id = QMetaType.qMetaTypeId(clazz); if (QMetaType.Type.UnknownType.value() == id) { if (!clazz.isInterface()) id = nextMetaTypeId(clazz.getSuperclass()); @@ -2822,7 +2888,7 @@ public static int nextMetaTypeId(Class clazz) { } } } else { - id = __qt_metaTypeId(clazz); + id = QMetaType.qMetaTypeId(clazz); } return id; } @@ -2923,19 +2989,9 @@ private static void reportException(String methodName, Throwable e) { } } - public static void initializeNativeObject(QtObjectInterface object, Map, List> arguments) + public static void initializeNativeObject(Class declaringClass, QtObjectInterface object, Map, List> arguments) throws IllegalArgumentException { - Class cls = getClass(object); - io.qt.InternalAccess.CallerContext callerInfo = RetroHelper.classAccessChecker().apply(2); - if (callerInfo.declaringClass == null || !callerInfo.declaringClass.isAssignableFrom(cls) - || !"".equals(callerInfo.methodName)) { - throw new RuntimeException(new IllegalAccessException( - "QtUtilities.initializeNativeObject(...) can only be called from inside the given object's constructor. Expected: " - + cls.getName() + "., found: " - + (callerInfo.declaringClass == null ? "null" : callerInfo.declaringClass.getName()) + "." - + callerInfo.methodName)); - } - __qt_initializeNativeObject(callerInfo.declaringClass, object, findInterfaceLink(object, true, false), arguments); + __qt_initializeNativeObject(declaringClass, object, findInterfaceLink(object, true, false), arguments); } static void initializeNativeObject(QtObjectInterface object, NativeLink link) throws IllegalArgumentException { @@ -3576,6 +3632,14 @@ public static void loadUtilityLibrary(String library, String version, LibraryReq public static void loadLibrary(String lib) { NativeLibraryManager.loadLibrary(lib); } + + public static void useAsGadget(Class clazz) { + MetaObjectTools.useAsGadget(clazz); + } + + public static void usePackageContentAsGadgets(String _package) { + MetaObjectTools.usePackageContentAsGadgets(_package); + } public static File jambiDeploymentDir() { return NativeLibraryManager.jambiDeploymentDir(); @@ -3616,25 +3680,6 @@ public static boolean isMinGWBuilt() { public static String osArchName() { return NativeLibraryManager.osArchName(); } - - public static Object createMetaType(int id, Class javaType, Object copy) { - if (copy != null && javaType != null) { - if (javaType.isPrimitive()) { - copy = getComplexType(javaType).cast(copy); - } else { - if (Collection.class.isAssignableFrom(javaType)) { - copy = Collection.class.cast(copy); - } else if (Map.class.isAssignableFrom(javaType)) { - copy = Map.class.cast(copy); - } else { - copy = javaType.cast(copy); - } - } - } - return __qt_createMetaType(id, copy); - } - - private native static Object __qt_createMetaType(int id, Object copy); @NativeAccess private static IntFunction invocationInfoProvider(){ @@ -4581,6 +4626,41 @@ public Supplier getFactory0(Constructor constructor) { return QtJambiInternal.getFactory0(constructor); } + @Override + public Function getFactory1(Constructor constructor) { + return QtJambiInternal.getFactory1(constructor); + } + + @Override + public BiFunction getFactory2(Constructor constructor) { + return QtJambiInternal.getFactory2(constructor); + } + + @Override + public Method3 getFactory3(Constructor constructor) { + return QtJambiInternal.getFactory3(constructor); + } + + @Override + public Method4 getFactory4(Constructor constructor) { + return QtJambiInternal.getFactory4(constructor); + } + + @Override + public Method5 getFactory5(Constructor constructor) { + return QtJambiInternal.getFactory5(constructor); + } + + @Override + public T invokeContructor(Constructor constructor, Object... args) throws Throwable { + return QtJambiInternal.invokeContructor(constructor, args); + } + + @Override + public Object invokeMethod(Method method, Object object, Object... args) throws Throwable { + return QtJambiInternal.invokeMethod(method, object, args); + } + @Override public Package getDefinedPackage(ClassLoader cl, String pkg) { return RetroHelper.getDefinedPackage(cl, pkg); diff --git a/src/java/qtjambi-modules/qtjambi/main/io/qt/internal/QtJambiPlugins.java b/src/java/qtjambi-modules/qtjambi/main/io/qt/internal/QtJambiPlugins.java index 60e54744..d4a87ce7 100644 --- a/src/java/qtjambi-modules/qtjambi/main/io/qt/internal/QtJambiPlugins.java +++ b/src/java/qtjambi-modules/qtjambi/main/io/qt/internal/QtJambiPlugins.java @@ -160,6 +160,22 @@ private static QObject loadPluginInstance(String libPath, String className, Stri try { foundClass = Class.forName(className); } catch (ClassNotFoundException e) { + List classNameSplit = new ArrayList<>(); + classNameSplit.addAll(Arrays.asList(className.split("\\."))); + StringBuilder name = new StringBuilder(); + while(!classNameSplit.isEmpty()) { + if(name.length()!=0) + name.append('.'); + name.append(classNameSplit.remove(0)); + try { + Class.forName(name.toString()); + while(!classNameSplit.isEmpty()) { + name.append('$'); + name.append(classNameSplit.remove(0)); + } + foundClass = Class.forName(name.toString()); + } catch (ClassNotFoundException e2) {} + } } if(foundClass==null) { QFileInfo libFile = new QFileInfo(QDir.fromNativeSeparators(libPath)); diff --git a/src/java/qtjambi-modules/qtjambi/main/io/qt/internal/QtJambiResources.java b/src/java/qtjambi-modules/qtjambi/main/io/qt/internal/QtJambiResources.java index 639d64b5..f40830bc 100644 --- a/src/java/qtjambi-modules/qtjambi/main/io/qt/internal/QtJambiResources.java +++ b/src/java/qtjambi-modules/qtjambi/main/io/qt/internal/QtJambiResources.java @@ -386,7 +386,7 @@ private static URL makeUrl(String path) { try { URLAlias urlAlias = checkNeedWorkaround(result); if (urlAlias.file != null) { // Due to workaround - if (!urlAlias.file.isFile()) + if (!urlAlias.file.exists()) result = null; } else if(!urlAlias.url.toString().endsWith("/")){ URLConnection urlConn = urlAlias.url.openConnection(); diff --git a/src/java/qtjambi-plugins/plugins.xml b/src/java/qtjambi-plugins/plugins.xml index 6bb298b5..f831bbee 100644 --- a/src/java/qtjambi-plugins/plugins.xml +++ b/src/java/qtjambi-plugins/plugins.xml @@ -247,14 +247,13 @@ tofile="${deploymentdir}/${moduledash}-native-android-common-${qtjambi.jar.version}-sources.jar"/> create empty ${deploymentdir}/${moduledash}-native-android-common-${qtjambi.jar.version}-javadoc.jar - + - diff --git a/src/java/qtjambi-plugins/qsqljdbc/Qt5/io/qt/sql/jdbc/QJdbcSqlVariantUtil.java b/src/java/qtjambi-plugins/qsqljdbc/Qt5/io/qt/sql/jdbc/QJdbcSqlVariantUtil.java index b47dd75b..ae9d9a83 100644 --- a/src/java/qtjambi-plugins/qsqljdbc/Qt5/io/qt/sql/jdbc/QJdbcSqlVariantUtil.java +++ b/src/java/qtjambi-plugins/qsqljdbc/Qt5/io/qt/sql/jdbc/QJdbcSqlVariantUtil.java @@ -58,13 +58,13 @@ class QJdbcSqlVariantUtil javaToVariant.put("java.lang.Integer", QVariant.Type.Int); // Int javaToVariant.put("java.lang.Short", QVariant.Type.Int); // Int javaToVariant.put("java.lang.Byte", QVariant.Type.Int); // Int - javaToVariant.put("java.lang.Boolean", QVariant.Type.Boolean); // Bool + javaToVariant.put("java.lang.Boolean", QVariant.Type.Bool); // Bool javaToVariant.put("java.lang.Byte[]", QVariant.Type.ByteArray); // ByteArray javaToVariant.put("java.util.Date", QVariant.Type.Date); // Date javaToVariant.put("java.sql.Date", QVariant.Type.Date); // Date javaToVariant.put("java.lang.Float", QVariant.Type.Double); // Double javaToVariant.put("java.lang.Double", QVariant.Type.Double); // Double - javaToVariant.put("java.lang.Long", QVariant.Type.Long); // LongLong + javaToVariant.put("java.lang.Long", QVariant.Type.LongLong); // LongLong javaToVariant.put("java.sql.Time", QVariant.Type.Time); // Time javaToVariant.put("java.sql.TimeStamp", QVariant.Type.DateTime); // DateTime javaToVariant.put("java.net.Url", QVariant.Type.Url); // Url @@ -91,10 +91,10 @@ static QVariant.Type javaTypeIdToVariantType(int variantType) return QVariant.Type.Int; // Int case Types.BOOLEAN: case Types.BIT: - return QVariant.Type.Boolean; // Bool + return QVariant.Type.Bool; // Bool case Types.BIGINT: case Types.DECIMAL: - return QVariant.Type.Long; // LongLong + return QVariant.Type.LongLong; // LongLong case Types.DATE: return QVariant.Type.Date; // Date case Types.DOUBLE: diff --git a/www/Android.md b/www/Android.md index 6ef529ed..c2356ed6 100644 --- a/www/Android.md +++ b/www/Android.md @@ -68,8 +68,8 @@ Therefore, open the file `app/build.gradle`. Add the following lines to the `dependencies` section (for ABI arm64-v8a): ```gradle - implementation 'io.qtjambi:qtjambi:6.3.4' - implementation 'io.qtjambi:qtjambi-native-android-arm64:6.3.4' + implementation 'io.qtjambi:qtjambi:6.3.5' + implementation 'io.qtjambi:qtjambi-native-android-arm64:6.3.5' implementation files('qt-lib-core-native-android-arm64-6.3.1.jar', 'qt-lib-core-native-android-common-6.3.1.jar', 'qt-lib-gui-native-android-arm64-6.3.1.jar', diff --git a/www/Characteristics-of-QtJambi.md b/www/Characteristics-of-QtJambi.md index bfe0bc85..94a9f245 100644 --- a/www/Characteristics-of-QtJambi.md +++ b/www/Characteristics-of-QtJambi.md @@ -203,9 +203,8 @@ maps to `QWidget.addActions(java.util.Collection)`. ### QVariant -The generic Qt type `QVariant` is directly mapped to `java.lang.Object`. -However, the Java class `QVariant` provides static conversion methods -from `Object` to primitives and typical Qt value types. +The generic Qt type `QVariant` is directly mapped to `java.lang.Object` int Java. +However, the Java class `ioqt.core.QVariant` makes type management functionalities available. ## Operator Overloads @@ -565,8 +564,7 @@ public final void setText(String text){...} public final void clearText(){...} ``` -...creates a property "text" with reader, writer, resetter and notify -signal. +...creates a property "text" with reader, writer, resetter and notify signal. Further annotations reflect the corresponding features of Qt properties: @@ -581,6 +579,16 @@ Further annotations reflect the corresponding features of Qt properties: Qt6 provides `QProperty` as bindable property member. +You don't need `QtPropertyReader` and `QtPropertyWriter` annotation of your getters and setters follow the Java or Qt design: +In QObject-derived classes, `int getFoo()` and `void setFoo(int)` is auto-detected as property `foo`. +Likewise, signal `fooChanged` is auto-detected as corresponding notifier even without `QtPropertyNotify` annotation and +method `bindableFoo()` returning `QBindable` is auto-detected as corresponding bindable even without `QtPropertyBindable` annotation. + +In QObject-derived classes, public final fields are considered to be constant (read-only) properties. +Additionally, a `final QProperty<...> fooProperty` field is automatically considered to be property `foo`. You don't need getter, setter and bindable. + +If your class declares a getter or setter but you don't intend to use it as Qt property you can annotate `@QtPropertyReader(enabled=false)`. + ### Dynamic Member Access The classes defined in Java are fully compatible with Qt's [meta-object @@ -613,6 +621,17 @@ if(internalObject.inherits(QPaintDevice.class)){ } ``` +## Gadgets + +Basically, every Java class can be used as gadget, i.e. as meta-programmable type in Qt, so called gadgets. +Gadgets are not QObject-based types with invokable methods and/or properties. In contrast to QObject a gadget class cannot declare native signals. + +QtJambi does not auto-detect properties and invokable methods on non-QObject classes. +You explicitely need to specify `@QtPropertyReader/Writer` annotation for every property as well as `@QtInvokable` for every method. +Alternatively, you can enable auto-detection by annotating the gadget class with `@QtAsGadget`. +If you want to use other classes as gadgets, e.g. from third-party library, you may specify `QtUtilities.useAsGadget(class)` +or `QtUtilities.usePackageContentAsGadgets(package)` at startup. + ## Threads Like Java, [Qt provides extensive thread @@ -947,7 +966,7 @@ device.close(); ``` shell java -Djava.library.path= - -p qtjambi-6.3.4.jar:qtjambi-uic-6.3.4.jar + -p qtjambi-6.3.5.jar:qtjambi-uic-6.3.5.jar -m qtjambi.uic --output=src --package=com.myapplication.widgets com/myapplication/widgets/mainwindow.ui ``` @@ -955,7 +974,7 @@ Alternative way to call it: ``` shell java -Djava.library.path= - -cp qtjambi-6.3.4.jar:qtjambi-uic-6.3.4.jar + -cp qtjambi-6.3.5.jar:qtjambi-uic-6.3.5.jar io.qt.uic.Main --output=src --package=com.myapplication.widgets com/myapplication/widgets/mainwindow.ui ``` @@ -1199,7 +1218,7 @@ and *QtJambi* libraries: ``` shell java -Djava.library.path= - -p qtjambi-6.3.4.jar:qtjambi-deployer-6.3.4.jar + -p qtjambi-6.3.5.jar:qtjambi-deployer-6.3.5.jar -m qtjambi.deployer plugin --class-name=my.company.CustomImageIOPlugin --class-path=my-company-library.jar @@ -1211,7 +1230,7 @@ Alternative way to call it: ``` shell java -Djava.library.path= - -cp qtjambi-6.3.4.jar:qtjambi-deployer-6.3.4.jar + -cp qtjambi-6.3.5.jar:qtjambi-deployer-6.3.5.jar io.qt.qtjambi.deployer.Main plugin --class-name=my.company.CustomImageIOPlugin --class-path=my-company-library.jar @@ -1238,7 +1257,7 @@ This is especially necessary on macOS (arm64). ``` shell java -Djava.library.path= - -p qtjambi-6.3.4.jar:qtjambi-deployer-6.3.4.jar + -p qtjambi-6.3.5.jar:qtjambi-deployer-6.3.5.jar -m qtjambi.deployer plugin --class-name=my.company.CustomImageIOPlugin --class-path=my-company-library.jar diff --git a/www/How-to-bundle-Qt-libraries.md b/www/How-to-bundle-Qt-libraries.md index dcd4cd36..55f49401 100644 --- a/www/How-to-bundle-Qt-libraries.md +++ b/www/How-to-bundle-Qt-libraries.md @@ -10,7 +10,7 @@ on *Linux* and *macOS*. ``` shell java -Djava.library.path= - -p qtjambi-6.3.4.jar:qtjambi-deployer-6.3.4.jar + -p qtjambi-6.3.5.jar:qtjambi-deployer-6.3.5.jar -m qtjambi.deployer qt ``` @@ -18,7 +18,7 @@ Alternative way to call it: ``` shell java -Djava.library.path= - -cp qtjambi-6.3.4.jar:qtjambi-deployer-6.3.4.jar + -cp qtjambi-6.3.5.jar:qtjambi-deployer-6.3.5.jar io.qt.qtjambi.deployer.Main qt ``` diff --git a/www/How-to-deploy-QtJambi-applications.md b/www/How-to-deploy-QtJambi-applications.md index 9912cc7a..779ce35e 100644 --- a/www/How-to-deploy-QtJambi-applications.md +++ b/www/How-to-deploy-QtJambi-applications.md @@ -7,7 +7,7 @@ along with platform-dependent **qtjambi-deployer-native-X.jar** for all platform In the examples below, we assume you created an application in a jar file `my-company-app.jar` with main class `my.company.app.Main` -depending on `qtjambi-6.3.4.jar`. +depending on `qtjambi-6.3.5.jar`. Call the app deployer as shown below. Make sure the library path points to the *Qt* libraries being `bin` on *Windows* and `lib` @@ -15,7 +15,7 @@ on *Linux* and *macOS*. ``` shell java -Djava.library.path= - -p qtjambi-6.3.4.jar:qtjambi-deployer-6.3.4.jar + -p qtjambi-6.3.5.jar:qtjambi-deployer-6.3.5.jar -m qtjambi.deployer app ``` @@ -23,7 +23,7 @@ Alternative way to call it: ``` shell java -Djava.library.path= - -cp qtjambi-6.3.4.jar:qtjambi-deployer-6.3.4.jar + -cp qtjambi-6.3.5.jar:qtjambi-deployer-6.3.5.jar io.qt.qtjambi.deployer.Main app ``` @@ -70,8 +70,8 @@ installation directory | plugins | ... (platforms, styles and others) | lib - | qtjambi-6.3.4.jar - | qtjambi-native-windows-x64-6.3.4.jar + | qtjambi-6.3.5.jar + | qtjambi-native-windows-x64-6.3.5.jar | my-company-app.jar | jre | ... (Java Runtime Environment) @@ -82,11 +82,11 @@ append the following commands to the above listed *QtJambi deployer* command: ``` shell java -Djava.library.path= - -p qtjambi-6.3.4.jar:qtjambi-deployer-6.3.4.jar + -p qtjambi-6.3.5.jar:qtjambi-deployer-6.3.5.jar -m qtjambi.deployer app --application=MyCompanyApp --executable=utilities/QtJambiLauncher.exe - --class-path=../lib/my-company-app.jar:../lib/qtjambi-6.3.4.jar:../lib/qtjambi-native-windows-x64-6.3.4.jar + --class-path=../lib/my-company-app.jar:../lib/qtjambi-6.3.5.jar:../lib/qtjambi-native-windows-x64-6.3.5.jar --library-path=. --jvm-path=../jre --main-class=my.company.app.Main @@ -111,8 +111,8 @@ installation directory | libQt6Core.so[.6.3.0] | libQt6Gui.so[.6.3.0] | libQt6Widgets.so[.6.3.0] - | qtjambi-6.3.4.jar - | qtjambi-native-linux-x64-6.3.4.jar + | qtjambi-6.3.5.jar + | qtjambi-native-linux-x64-6.3.5.jar | my-company-app.jar | jre | ... (Java Runtime Environment) @@ -123,11 +123,11 @@ the following commands to the above listed *QtJambi deployer* command: ``` shell java -Djava.library.path= - -p qtjambi-6.3.4.jar:qtjambi-deployer-6.3.4.jar + -p qtjambi-6.3.5.jar:qtjambi-deployer-6.3.5.jar -m qtjambi.deployer app --application=MyCompanyApp --executable=utilities/QtJambiLauncher - --class-path=lib/my-company-app.jar:lib/qtjambi-6.3.4.jar:lib/qtjambi-native-linux-x64-6.3.4.jar + --class-path=lib/my-company-app.jar:lib/qtjambi-6.3.5.jar:lib/qtjambi-native-linux-x64-6.3.5.jar --library-path=lib --jvm-path=jre --main-class=my.company.app.Main @@ -155,8 +155,8 @@ installation directory | QtGui.framework | QtWidgets.framework | lib - | qtjambi-6.3.4.jar - | qtjambi-native-macos-6.3.4.jar + | qtjambi-6.3.5.jar + | qtjambi-native-macos-6.3.5.jar | my-company-app.jar | jre | ... (Java Runtime Environment) @@ -170,11 +170,11 @@ append the following commands to the above listed *QtJambi deployer* command: ``` shell java -Djava.library.path= - -p qtjambi-6.3.4.jar:qtjambi-deployer-6.3.4.jar + -p qtjambi-6.3.5.jar:qtjambi-deployer-6.3.5.jar -m qtjambi.deployer app --application=MyCompanyApp --executable=utilities/QtJambiLauncher.app - --class-path=../lib/my-company-app.jar:../lib/qtjambi-6.3.4.jar:../lib/qtjambi-native-macos-6.3.4.jar + --class-path=../lib/my-company-app.jar:../lib/qtjambi-6.3.5.jar:../lib/qtjambi-native-macos-6.3.5.jar --library-path=../Frameworks --jvm-path=../jre --main-class=my.company.app.Main diff --git a/www/How-to-develop-Qt-in-Java.md b/www/How-to-develop-Qt-in-Java.md index 4909a63a..8d260d0a 100644 --- a/www/How-to-develop-Qt-in-Java.md +++ b/www/How-to-develop-Qt-in-Java.md @@ -13,11 +13,13 @@ to your project: $VERSION ``` -(exchange `$VERSION` either by `5.15.9`, `6.2.7` or by `6.3.4`). +(exchange `$VERSION` either by `5.15.10`, `6.2.8`, `6.3.5` or by `6.4.0`). Otherwise, download QtJambi JAR file from [Maven Central Repository](https://search.maven.org/artifact/io.qtjambi/qtjambi/). Find the [list of all available QtJambi modules](www/Modules.md). +## Example Program + Create a file **Test.java** containing the following code ``` java @@ -34,33 +36,52 @@ public class Test { Compile the file: ``` powershell -javac -cp qtjambi-6.3.4.jar Test.java +javac -cp qtjambi-6.4.0.jar Test.java ``` +## Executing Example + For execution you need the platform dependent binaries of *QtJambi*. For -instance, if you are working on Windows download and unpack the win64 -binaries. The required DLLs are to be found in the `bin` folder (`lib` -folder on Linux and macOS). Additionally, you need *Qt*. Use the [Qt +instance, if you are working on Windows download the *windows-x64* +binaries. Additionally, you need *Qt*. Use the [Qt installer](https://www.qt.io/download-qt-installer) to install Qt on your system. Make sure you are using the same Qt version and QtJambi -version (e.g. 5.15 or 6.3). +version (e.g. 5.15 or 6.3). On Linux, you can alternatively use Qt system libraries (correct version provided). +The required DLLs are to be found in the `bin` folder on Windows and `lib` folder on Linux and macOS, respectively. When running a QtJambi application you have to make the locations of Qt and QtJambi libraries known to Java. Therefore, use the **PATH** environment (**LD\_LIBRARY\_PATH** on Linux, **DYLD\_FRAMEWORK\_PATH** on -macOS) or the Java runtime property **java.library.path**. The example -program can be executed this way: +macOS) or the Java runtime property **java.library.path**. + +The example program can be executed this way on Windows: ``` powershell -java -cp qtjambi-6.3.4.jar;qtjambi-native-windows-x64-6.3.4.jar;. -Djava.library.path=C:\Qt\6.2.0\msvc2019_64\bin Test +java -cp qtjambi-6.4.0.jar;qtjambi-native-windows-x64-6.4.0.jar;. -Djava.library.path=C:\Qt\6.4.0\msvc2019_64\bin Test +``` + +On Linux it looks this way: + +``` bash +java -cp qtjambi-6.4.0.jar:qtjambi-native-linux-x64-6.4.0.jar:. -Djava.library.path=/Qt/6.4.0/gcc_64/lib Test ``` -On *macOS* you need to use the start parameter `-XstartOnFirstThread`: +On macOS you additionally need to use the start parameter -XstartOnFirstThread: ``` bash -java -XstartOnFirstThread -cp qtjambi-6.3.4.jar:qtjambi-native-windows-x64-6.3.4.jar:. -Djava.library.path=C:\Qt\6.2.0\msvc2019_64\bin Test +java -cp qtjambi-6.4.0.jar:qtjambi-native-macos-6.4.0.jar:. -Djava.library.path=/Qt/6.4.0/macos/lib -XstartOnFirstThread Test ``` +### Native Components + +QtJambi automatically detects the required native component jars if they are located next to their Java counterparts. +You can simply skip `qtjambi-native-OS-VERSION.jar` in your classpath (`-cp`). Nevertheless, `qtjambi-native-OS-VERSION.jar` bundles are +extracted every time at program startup. By default, this is a process specific temporal directory purged after program shutdown. +Alternatively, you can use Java system property `io.qt.deploymentdir` to let libraries to be exctacted and persist in user +application data path or common directory ([see below](#library-management)). + +## Further Reading + In general, you can start learning how to use Qt in Java [as it is introduced for C++](https://doc.qt.io/qt-6/gettingstarted.html#create-your-first-applications). @@ -73,11 +94,13 @@ here](How-to-deploy-QtJambi-applications.md). [Read more about developing applications for Android](Android.md). See [QtJambi 5.15 API Reference -Documentation](https://doc.qtjambi.io/5.15.9/), +Documentation](https://doc.qtjambi.io/5.15.10/), [QtJambi 6.2 API Reference -Documentation](https://doc.qtjambi.io/6.2.7/) -and [QtJambi 6.3 API Reference -Documentation](https://doc.qtjambi.io/6.3.4/) +Documentation](https://doc.qtjambi.io/6.2.8/) +[QtJambi 6.3 API Reference +Documentation](https://doc.qtjambi.io/6.3.5/) +and [QtJambi 6.4 API Reference +Documentation](https://doc.qtjambi.io/6.4.0/) ## Useful Java System Properties for QtJambi diff --git a/www/Modules.md b/www/Modules.md index 8e7f3c4a..92a1e120 100644 --- a/www/Modules.md +++ b/www/Modules.md @@ -11,1558 +11,2078 @@ QtJambi is available for Qt5 and Qt6. All modules are published as Maven Artifac $VERSION ``` -Here, exchange `$VERSION` either by `5.15.9`, by `6.2.7` or by `6.3.4`. Exchange `$MODULE` by *QtJambi* module name as listed below. +Here, exchange `$VERSION` either by `5.15.10`, by `6.2.8` or by `6.3.5`. Exchange `$MODULE` by *QtJambi* module name as listed below. Alternatively, you can download corresponding QtJambi modules as JAR file from [Maven Central Repository](https://search.maven.org/search?q=io.qtjambi). All *QtJambi* modules consist of a Java part (minimum java version: JDK8) and a native component. Native components are avaiable for Windows (x64), Linux (x64), macOS (x64 and arm64) and Android (x86, x86_64, armeabi-v7a, arm64-v8a). +## QtJambi for Qt 6.4 + +QtJambi 6.4.0 requires Qt 6.4.x whereas x can be any patch version. +Following Qt 6.4 modules are provided by QtJambi: + +### Qt6 Essentials + +* [QtCore](https://doc.qt.io/qt-6/qtcore-index.html), [QtGui](https://doc.qt.io/qt-6/qtgui-index.html) and [QtWidgets](https://doc.qt.io/qt-6/qtwidgets-index.html) in module **qtjambi**: + * [**qtjambi-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi/6.4.0/jar) + * [**qtjambi-native-windows-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-native-windows-x64/6.4.0/jar) + * [**qtjambi-native-linux-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-native-linux-x64/6.4.0/jar) + * [**qtjambi-native-macos-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-native-macos/6.4.0/jar) + * [**qtjambi-native-android-x86-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-native-android-x86/6.4.0/jar) + * [**qtjambi-native-android-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-native-android-x64/6.4.0/jar) + * [**qtjambi-native-android-arm-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-native-android-arm/6.4.0/jar) + * [**qtjambi-native-android-arm64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-native-android-arm64/6.4.0/jar) +* [QtDBus](https://doc.qt.io/qt-6/qtdbus-index.html) in module **qtjambi-dbus**: + * [**qtjambi-dbus-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-dbus/6.4.0/jar) + * [**qtjambi-dbus-native-windows-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-dbus-native-windows-x64/6.4.0/jar) + * [**qtjambi-dbus-native-linux-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-dbus-native-linux-x64/6.4.0/jar) + * [**qtjambi-dbus-native-macos-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-dbus-native-macos/6.4.0/jar) + * [**qtjambi-dbus-native-android-x86-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-dbus-native-android-x86/6.4.0/jar) + * [**qtjambi-dbus-native-android-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-dbus-native-android-x64/6.4.0/jar) + * [**qtjambi-dbus-native-android-arm-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-dbus-native-android-arm/6.4.0/jar) + * [**qtjambi-dbus-native-android-arm64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-dbus-native-android-arm64/6.4.0/jar) +* [QtNetwork](https://doc.qt.io/qt-6/qtnetwork-index.html) in module **qtjambi-network**: + * [**qtjambi-network-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network/6.4.0/jar) + * [**qtjambi-network-native-windows-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network-native-windows-x64/6.4.0/jar) + * [**qtjambi-network-native-linux-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network-native-linux-x64/6.4.0/jar) + * [**qtjambi-network-native-macos-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network-native-macos/6.4.0/jar) + * [**qtjambi-network-native-android-x86-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network-native-android-x86/6.4.0/jar) + * [**qtjambi-network-native-android-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network-native-android-x64/6.4.0/jar) + * [**qtjambi-network-native-android-arm-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network-native-android-arm/6.4.0/jar) + * [**qtjambi-network-native-android-arm64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network-native-android-arm64/6.4.0/jar) +* [QtQml](https://doc.qt.io/qt-6/qtqml-index.html) in module **qtjambi-qml**: + * [**qtjambi-qml-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml/6.4.0/jar) + * [**qtjambi-qml-native-windows-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml-native-windows-x64/6.4.0/jar) + * [**qtjambi-qml-native-linux-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml-native-linux-x64/6.4.0/jar) + * [**qtjambi-qml-native-macos-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml-native-macos/6.4.0/jar) + * [**qtjambi-qml-native-android-x86-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml-native-android-x86/6.4.0/jar) + * [**qtjambi-qml-native-android-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml-native-android-x64/6.4.0/jar) + * [**qtjambi-qml-native-android-arm-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml-native-android-arm/6.4.0/jar) + * [**qtjambi-qml-native-android-arm64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml-native-android-arm64/6.4.0/jar) +* [QtQuick](https://doc.qt.io/qt-6/qtquick-index.html) in module **qtjambi-quick**: + * [**qtjambi-quick-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick/6.4.0/jar) + * [**qtjambi-quick-native-windows-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick-native-windows-x64/6.4.0/jar) + * [**qtjambi-quick-native-linux-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick-native-linux-x64/6.4.0/jar) + * [**qtjambi-quick-native-macos-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick-native-macos/6.4.0/jar) + * [**qtjambi-quick-native-android-x86-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick-native-android-x86/6.4.0/jar) + * [**qtjambi-quick-native-android-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick-native-android-x64/6.4.0/jar) + * [**qtjambi-quick-native-android-arm-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick-native-android-arm/6.4.0/jar) + * [**qtjambi-quick-native-android-arm64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick-native-android-arm64/6.4.0/jar) +* [QtQuickControls](https://doc.qt.io/qt-6/qtquickcontrols-index.html) in module **qtjambi-quickcontrols**: + * [**qtjambi-quickcontrols-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols/6.4.0/jar) + * [**qtjambi-quickcontrols-native-windows-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols-native-windows-x64/6.4.0/jar) + * [**qtjambi-quickcontrols-native-linux-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols-native-linux-x64/6.4.0/jar) + * [**qtjambi-quickcontrols-native-macos-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols-native-macos/6.4.0/jar) + * [**qtjambi-quickcontrols-native-android-x86-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols-native-android-x86/6.4.0/jar) + * [**qtjambi-quickcontrols-native-android-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols-native-android-x64/6.4.0/jar) + * [**qtjambi-quickcontrols-native-android-arm-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols-native-android-arm/6.4.0/jar) + * [**qtjambi-quickcontrols-native-android-arm64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols-native-android-arm64/6.4.0/jar) +* [QtQuickTest](https://doc.qt.io/qt-6/qtquicktest-index.html) in module **qtjambi-quicktest**: + * [**qtjambi-quicktest-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest/6.4.0/jar) + * [**qtjambi-quicktest-native-windows-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest-native-windows-x64/6.4.0/jar) + * [**qtjambi-quicktest-native-linux-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest-native-linux-x64/6.4.0/jar) + * [**qtjambi-quicktest-native-macos-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest-native-macos/6.4.0/jar) + * [**qtjambi-quicktest-native-android-x86-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest-native-android-x86/6.4.0/jar) + * [**qtjambi-quicktest-native-android-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest-native-android-x64/6.4.0/jar) + * [**qtjambi-quicktest-native-android-arm-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest-native-android-arm/6.4.0/jar) + * [**qtjambi-quicktest-native-android-arm64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest-native-android-arm64/6.4.0/jar) +* [QtTest](https://doc.qt.io/qt-6/qttest-index.html) in module **qtjambi-test**: + * [**qtjambi-test-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test/6.4.0/jar) + * [**qtjambi-test-native-windows-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test-native-windows-x64/6.4.0/jar) + * [**qtjambi-test-native-linux-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test-native-linux-x64/6.4.0/jar) + * [**qtjambi-test-native-macos-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test-native-macos/6.4.0/jar) + * [**qtjambi-test-native-android-x86-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test-native-android-x86/6.4.0/jar) + * [**qtjambi-test-native-android-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test-native-android-x64/6.4.0/jar) + * [**qtjambi-test-native-android-arm-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test-native-android-arm/6.4.0/jar) + * [**qtjambi-test-native-android-arm64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test-native-android-arm64/6.4.0/jar) + +### Qt6 Add-Ons + +* [QtBluetooth](https://doc.qt.io/qt-6/qtbluetooth-index.html) in module **qtjambi-bluetooth**: + * [**qtjambi-bluetooth-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth/6.4.0/jar) + * [**qtjambi-bluetooth-native-windows-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth-native-windows-x64/6.4.0/jar) + * [**qtjambi-bluetooth-native-linux-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth-native-linux-x64/6.4.0/jar) + * [**qtjambi-bluetooth-native-macos-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth-native-macos/6.4.0/jar) + * [**qtjambi-bluetooth-native-android-x86-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth-native-android-x86/6.4.0/jar) + * [**qtjambi-bluetooth-native-android-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth-native-android-x64/6.4.0/jar) + * [**qtjambi-bluetooth-native-android-arm-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth-native-android-arm/6.4.0/jar) + * [**qtjambi-bluetooth-native-android-arm64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth-native-android-arm64/6.4.0/jar) +* [QtCharts](https://doc.qt.io/qt-6/qtcharts-index.html) in module **qtjambi-charts**: + * [**qtjambi-charts-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts/6.4.0/jar) + * [**qtjambi-charts-native-windows-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts-native-windows-x64/6.4.0/jar) + * [**qtjambi-charts-native-linux-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts-native-linux-x64/6.4.0/jar) + * [**qtjambi-charts-native-macos-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts-native-macos/6.4.0/jar) + * [**qtjambi-charts-native-android-x86-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts-native-android-x86/6.4.0/jar) + * [**qtjambi-charts-native-android-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts-native-android-x64/6.4.0/jar) + * [**qtjambi-charts-native-android-arm-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts-native-android-arm/6.4.0/jar) + * [**qtjambi-charts-native-android-arm64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts-native-android-arm64/6.4.0/jar) +* [QtDataVisualization](https://doc.qt.io/qt-6/qtdatavisualization-index.html) in module **qtjambi-datavisualization**: + * [**qtjambi-datavisualization-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization/6.4.0/jar) + * [**qtjambi-datavisualization-native-windows-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization-native-windows-x64/6.4.0/jar) + * [**qtjambi-datavisualization-native-linux-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization-native-linux-x64/6.4.0/jar) + * [**qtjambi-datavisualization-native-macos-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization-native-macos/6.4.0/jar) + * [**qtjambi-datavisualization-native-android-x86-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization-native-android-x86/6.4.0/jar) + * [**qtjambi-datavisualization-native-android-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization-native-android-x64/6.4.0/jar) + * [**qtjambi-datavisualization-native-android-arm-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization-native-android-arm/6.4.0/jar) + * [**qtjambi-datavisualization-native-android-arm64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization-native-android-arm64/6.4.0/jar) +* [QtConcurrent](https://doc.qt.io/qt-6/qtconcurrent-index.html) in module **qtjambi-concurrent**: + * [**qtjambi-concurrent-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent/6.4.0/jar) + * [**qtjambi-concurrent-native-windows-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent-native-windows-x64/6.4.0/jar) + * [**qtjambi-concurrent-native-linux-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent-native-linux-x64/6.4.0/jar) + * [**qtjambi-concurrent-native-macos-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent-native-macos/6.4.0/jar) + * [**qtjambi-concurrent-native-android-x86-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent-native-android-x86/6.4.0/jar) + * [**qtjambi-concurrent-native-android-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent-native-android-x64/6.4.0/jar) + * [**qtjambi-concurrent-native-android-arm-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent-native-android-arm/6.4.0/jar) + * [**qtjambi-concurrent-native-android-arm64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent-native-android-arm64/6.4.0/jar) +* [QtHelp](https://doc.qt.io/qt-6/qthelp-index.html) in module **qtjambi-help**: + * [**qtjambi-help-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help/6.4.0/jar) + * [**qtjambi-help-native-windows-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help-native-windows-x64/6.4.0/jar) + * [**qtjambi-help-native-linux-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help-native-linux-x64/6.4.0/jar) + * [**qtjambi-help-native-macos-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help-native-macos/6.4.0/jar) + * [**qtjambi-help-native-android-x86-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help-native-android-x86/6.4.0/jar) + * [**qtjambi-help-native-android-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help-native-android-x64/6.4.0/jar) + * [**qtjambi-help-native-android-arm-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help-native-android-arm/6.4.0/jar) + * [**qtjambi-help-native-android-arm64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help-native-android-arm64/6.4.0/jar) +* [QtOpenGL](https://doc.qt.io/qt-6/qtopengl-index.html) in module **qtjambi-opengl**: + * [**qtjambi-opengl-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-opengl/6.4.0/jar) + * [**qtjambi-opengl-native-windows-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-opengl-native-windows-x64/6.4.0/jar) + * [**qtjambi-opengl-native-linux-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-opengl-native-linux-x64/6.4.0/jar) + * [**qtjambi-opengl-native-macos-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-opengl-native-macos/6.4.0/jar) + * [**qtjambi-opengl-native-android-x86-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-opengl-native-android-x86/6.4.0/jar) + * [**qtjambi-opengl-native-android-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-opengl-native-android-x64/6.4.0/jar) + * [**qtjambi-opengl-native-android-arm-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-opengl-native-android-arm/6.4.0/jar) + * [**qtjambi-opengl-native-android-arm64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-opengl-native-android-arm64/6.4.0/jar) +* [QtOpenGLWidgets](https://doc.qt.io/qt-6/qtopenglwidgets-module.html) in module **qtjambi-openglwidgets**: + * [**qtjambi-openglwidgets-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-openglwidgets/6.4.0/jar) + * [**qtjambi-openglwidgets-native-windows-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-openglwidgets-native-windows-x64/6.4.0/jar) + * [**qtjambi-openglwidgets-native-linux-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-openglwidgets-native-linux-x64/6.4.0/jar) + * [**qtjambi-openglwidgets-native-macos-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-openglwidgets-native-macos/6.4.0/jar) + * [**qtjambi-openglwidgets-native-android-x86-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-openglwidgets-native-android-x86/6.4.0/jar) + * [**qtjambi-openglwidgets-native-android-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-openglwidgets-native-android-x64/6.4.0/jar) + * [**qtjambi-openglwidgets-native-android-arm-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-openglwidgets-native-android-arm/6.4.0/jar) + * [**qtjambi-openglwidgets-native-android-arm64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-openglwidgets-native-android-arm64/6.4.0/jar) +* [QtMultimedia](https://doc.qt.io/qt-6/qtmultimedia-index.html) in module **qtjambi-multimedia**: + * [**qtjambi-multimedia-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia/6.4.0/jar) + * [**qtjambi-multimedia-native-windows-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia-native-windows-x64/6.4.0/jar) + * [**qtjambi-multimedia-native-linux-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia-native-linux-x64/6.4.0/jar) + * [**qtjambi-multimedia-native-macos-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia-native-macos/6.4.0/jar) + * [**qtjambi-multimedia-native-android-x86-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia-native-android-x86/6.4.0/jar) + * [**qtjambi-multimedia-native-android-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia-native-android-x64/6.4.0/jar) + * [**qtjambi-multimedia-native-android-arm-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia-native-android-arm/6.4.0/jar) + * [**qtjambi-multimedia-native-android-arm64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia-native-android-arm64/6.4.0/jar) +* [QtMultimediaWidgets](https://doc.qt.io/qt-6/qtmultimedia-index.html) in module **qtjambi-multimediawidgets**: + * [**qtjambi-multimediawidgets-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets/6.4.0/jar) + * [**qtjambi-multimediawidgets-native-windows-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets-native-windows-x64/6.4.0/jar) + * [**qtjambi-multimediawidgets-native-linux-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets-native-linux-x64/6.4.0/jar) + * [**qtjambi-multimediawidgets-native-macos-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets-native-macos/6.4.0/jar) + * [**qtjambi-multimediawidgets-native-android-x86-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets-native-android-x86/6.4.0/jar) + * [**qtjambi-multimediawidgets-native-android-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets-native-android-x64/6.4.0/jar) + * [**qtjambi-multimediawidgets-native-android-arm-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets-native-android-arm/6.4.0/jar) + * [**qtjambi-multimediawidgets-native-android-arm64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets-native-android-arm64/6.4.0/jar) +* [QtNfc](https://doc.qt.io/qt-6/qtnfc-index.html) in module **qtjambi-nfc**: + * [**qtjambi-nfc-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc/6.4.0/jar) + * [**qtjambi-nfc-native-windows-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc-native-windows-x64/6.4.0/jar) + * [**qtjambi-nfc-native-linux-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc-native-linux-x64/6.4.0/jar) + * [**qtjambi-nfc-native-macos-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc-native-macos/6.4.0/jar) + * [**qtjambi-nfc-native-android-x86-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc-native-android-x86/6.4.0/jar) + * [**qtjambi-nfc-native-android-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc-native-android-x64/6.4.0/jar) + * [**qtjambi-nfc-native-android-arm-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc-native-android-arm/6.4.0/jar) + * [**qtjambi-nfc-native-android-arm64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc-native-android-arm64/6.4.0/jar) +* [QtNetworkAuth](https://doc.qt.io/qt-6/qtnetworkauth-index.html) in module **qtjambi-networkauth**: + * [**qtjambi-networkauth-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth/6.4.0/jar) + * [**qtjambi-networkauth-native-windows-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth-native-windows-x64/6.4.0/jar) + * [**qtjambi-networkauth-native-linux-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth-native-linux-x64/6.4.0/jar) + * [**qtjambi-networkauth-native-macos-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth-native-macos/6.4.0/jar) + * [**qtjambi-networkauth-native-android-x86-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth-native-android-x86/6.4.0/jar) + * [**qtjambi-networkauth-native-android-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth-native-android-x64/6.4.0/jar) + * [**qtjambi-networkauth-native-android-arm-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth-native-android-arm/6.4.0/jar) + * [**qtjambi-networkauth-native-android-arm64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth-native-android-arm64/6.4.0/jar) +* [QtPositioning](https://doc.qt.io/qt-6/qtpositioning-index.html) in module **qtjambi-positioning**: + * [**qtjambi-positioning-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning/6.4.0/jar) + * [**qtjambi-positioning-native-windows-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning-native-windows-x64/6.4.0/jar) + * [**qtjambi-positioning-native-linux-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning-native-linux-x64/6.4.0/jar) + * [**qtjambi-positioning-native-macos-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning-native-macos/6.4.0/jar) + * [**qtjambi-positioning-native-android-x86-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning-native-android-x86/6.4.0/jar) + * [**qtjambi-positioning-native-android-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning-native-android-x64/6.4.0/jar) + * [**qtjambi-positioning-native-android-arm-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning-native-android-arm/6.4.0/jar) + * [**qtjambi-positioning-native-android-arm64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning-native-android-arm64/6.4.0/jar) +* [QtPrintSupport](https://doc.qt.io/qt-6/qtprintsupport-index.html) in module **qtjambi-printsupport**: + * [**qtjambi-printsupport-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport/6.4.0/jar) + * [**qtjambi-printsupport-native-windows-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport-native-windows-x64/6.4.0/jar) + * [**qtjambi-printsupport-native-linux-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport-native-linux-x64/6.4.0/jar) + * [**qtjambi-printsupport-native-macos-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport-native-macos/6.4.0/jar) + * [**qtjambi-printsupport-native-android-x86-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport-native-android-x86/6.4.0/jar) + * [**qtjambi-printsupport-native-android-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport-native-android-x64/6.4.0/jar) + * [**qtjambi-printsupport-native-android-arm-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport-native-android-arm/6.4.0/jar) + * [**qtjambi-printsupport-native-android-arm64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport-native-android-arm64/6.4.0/jar) +* [QtQuick3D](https://doc.qt.io/qt-6/qtquick3d-index.html) in module **qtjambi-quick3d**: + * [**qtjambi-quick3d-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d/6.4.0/jar) + * [**qtjambi-quick3d-native-windows-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d-native-windows-x64/6.4.0/jar) + * [**qtjambi-quick3d-native-linux-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d-native-linux-x64/6.4.0/jar) + * [**qtjambi-quick3d-native-macos-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d-native-macos/6.4.0/jar) + * [**qtjambi-quick3d-native-android-x86-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d-native-android-x86/6.4.0/jar) + * [**qtjambi-quick3d-native-android-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d-native-android-x64/6.4.0/jar) + * [**qtjambi-quick3d-native-android-arm-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d-native-android-arm/6.4.0/jar) + * [**qtjambi-quick3d-native-android-arm64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d-native-android-arm64/6.4.0/jar) +* [QtQuickWidgets](https://doc.qt.io/qt-6/qtquickwidgets-module.html) in module **qtjambi-quickwidgets**: + * [**qtjambi-quickwidgets-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets/6.4.0/jar) + * [**qtjambi-quickwidgets-native-windows-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets-native-windows-x64/6.4.0/jar) + * [**qtjambi-quickwidgets-native-linux-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets-native-linux-x64/6.4.0/jar) + * [**qtjambi-quickwidgets-native-macos-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets-native-macos/6.4.0/jar) + * [**qtjambi-quickwidgets-native-android-x86-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets-native-android-x86/6.4.0/jar) + * [**qtjambi-quickwidgets-native-android-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets-native-android-x64/6.4.0/jar) + * [**qtjambi-quickwidgets-native-android-arm-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets-native-android-arm/6.4.0/jar) + * [**qtjambi-quickwidgets-native-android-arm64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets-native-android-arm64/6.4.0/jar) +* [QtRemoteObjects](https://doc.qt.io/qt-6/qtremoteobjects-module.html) in module **qtjambi-remoteobjects**: + * [**qtjambi-remoteobjects-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects/6.4.0/jar) + * [**qtjambi-remoteobjects-native-windows-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects-native-windows-x64/6.4.0/jar) + * [**qtjambi-remoteobjects-native-linux-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects-native-linux-x64/6.4.0/jar) + * [**qtjambi-remoteobjects-native-macos-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects-native-macos/6.4.0/jar) + * [**qtjambi-remoteobjects-native-android-x86-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects-native-android-x86/6.4.0/jar) + * [**qtjambi-remoteobjects-native-android-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects-native-android-x64/6.4.0/jar) + * [**qtjambi-remoteobjects-native-android-arm-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects-native-android-arm/6.4.0/jar) + * [**qtjambi-remoteobjects-native-android-arm64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects-native-android-arm64/6.4.0/jar) +* [QtSCXML](https://doc.qt.io/qt-6/qtscxml-index.html) in module **qtjambi-scxml**: + * [**qtjambi-scxml-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml/6.4.0/jar) + * [**qtjambi-scxml-native-windows-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml-native-windows-x64/6.4.0/jar) + * [**qtjambi-scxml-native-linux-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml-native-linux-x64/6.4.0/jar) + * [**qtjambi-scxml-native-macos-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml-native-macos/6.4.0/jar) + * [**qtjambi-scxml-native-android-x86-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml-native-android-x86/6.4.0/jar) + * [**qtjambi-scxml-native-android-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml-native-android-x64/6.4.0/jar) + * [**qtjambi-scxml-native-android-arm-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml-native-android-arm/6.4.0/jar) + * [**qtjambi-scxml-native-android-arm64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml-native-android-arm64/6.4.0/jar) +* [QtSensors](https://doc.qt.io/qt-6/qtsensors-index.html) in module **qtjambi-sensors**: + * [**qtjambi-sensors-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors/6.4.0/jar) + * [**qtjambi-sensors-native-windows-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors-native-windows-x64/6.4.0/jar) + * [**qtjambi-sensors-native-linux-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors-native-linux-x64/6.4.0/jar) + * [**qtjambi-sensors-native-macos-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors-native-macos/6.4.0/jar) + * [**qtjambi-sensors-native-android-x86-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors-native-android-x86/6.4.0/jar) + * [**qtjambi-sensors-native-android-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors-native-android-x64/6.4.0/jar) + * [**qtjambi-sensors-native-android-arm-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors-native-android-arm/6.4.0/jar) + * [**qtjambi-sensors-native-android-arm64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors-native-android-arm64/6.4.0/jar) +* [QtSerialBus](https://doc.qt.io/qt-6/qtserialbus-index.html) in module **qtjambi-serialbus**: + * [**qtjambi-serialbus-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus/6.4.0/jar) + * [**qtjambi-serialbus-native-windows-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus-native-windows-x64/6.4.0/jar) + * [**qtjambi-serialbus-native-linux-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus-native-linux-x64/6.4.0/jar) + * [**qtjambi-serialbus-native-macos-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus-native-macos/6.4.0/jar) + * [**qtjambi-serialbus-native-android-x86-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus-native-android-x86/6.4.0/jar) + * [**qtjambi-serialbus-native-android-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus-native-android-x64/6.4.0/jar) + * [**qtjambi-serialbus-native-android-arm-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus-native-android-arm/6.4.0/jar) + * [**qtjambi-serialbus-native-android-arm64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus-native-android-arm64/6.4.0/jar) +* [QtSerialPort](https://doc.qt.io/qt-6/qtserialport-index.html) in module **qtjambi-serialport**: + * [**qtjambi-serialport-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport/6.4.0/jar) + * [**qtjambi-serialport-native-windows-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport-native-windows-x64/6.4.0/jar) + * [**qtjambi-serialport-native-linux-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport-native-linux-x64/6.4.0/jar) + * [**qtjambi-serialport-native-macos-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport-native-macos/6.4.0/jar) + * [**qtjambi-serialport-native-android-x86-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport-native-android-x86/6.4.0/jar) + * [**qtjambi-serialport-native-android-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport-native-android-x64/6.4.0/jar) + * [**qtjambi-serialport-native-android-arm-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport-native-android-arm/6.4.0/jar) + * [**qtjambi-serialport-native-android-arm64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport-native-android-arm64/6.4.0/jar) +* [QtSql](https://doc.qt.io/qt-6/qtsql-index.html) in module **qtjambi-sql**: + * [**qtjambi-sql-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql/6.4.0/jar) + * [**qtjambi-sql-native-windows-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql-native-windows-x64/6.4.0/jar) + * [**qtjambi-sql-native-linux-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql-native-linux-x64/6.4.0/jar) + * [**qtjambi-sql-native-macos-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql-native-macos/6.4.0/jar) + * [**qtjambi-sql-native-android-x86-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql-native-android-x86/6.4.0/jar) + * [**qtjambi-sql-native-android-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql-native-android-x64/6.4.0/jar) + * [**qtjambi-sql-native-android-arm-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql-native-android-arm/6.4.0/jar) + * [**qtjambi-sql-native-android-arm64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql-native-android-arm64/6.4.0/jar) +* [QtSvg](https://doc.qt.io/qt-6/qtsvg-index.html) in module **qtjambi-svg**: + * [**qtjambi-svg-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg/6.4.0/jar) + * [**qtjambi-svg-native-windows-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg-native-windows-x64/6.4.0/jar) + * [**qtjambi-svg-native-linux-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg-native-linux-x64/6.4.0/jar) + * [**qtjambi-svg-native-macos-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg-native-macos/6.4.0/jar) + * [**qtjambi-svg-native-android-x86-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg-native-android-x86/6.4.0/jar) + * [**qtjambi-svg-native-android-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg-native-android-x64/6.4.0/jar) + * [**qtjambi-svg-native-android-arm-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg-native-android-arm/6.4.0/jar) + * [**qtjambi-svg-native-android-arm64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg-native-android-arm64/6.4.0/jar) +* [QtSvgWidgets](https://doc.qt.io/qt-6/qtsvg-index.html) in module **qtjambi-svgwidgets**: + * [**qtjambi-svgwidgets-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svgwidgets/6.4.0/jar) + * [**qtjambi-svgwidgets-native-windows-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svgwidgets-native-windows-x64/6.4.0/jar) + * [**qtjambi-svgwidgets-native-linux-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svgwidgets-native-linux-x64/6.4.0/jar) + * [**qtjambi-svgwidgets-native-macos-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svgwidgets-native-macos/6.4.0/jar) + * [**qtjambi-svgwidgets-native-android-x86-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svgwidgets-native-android-x86/6.4.0/jar) + * [**qtjambi-svgwidgets-native-android-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svgwidgets-native-android-x64/6.4.0/jar) + * [**qtjambi-svgwidgets-native-android-arm-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svgwidgets-native-android-arm/6.4.0/jar) + * [**qtjambi-svgwidgets-native-android-arm64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svgwidgets-native-android-arm64/6.4.0/jar) +* [QtStateMachine](https://doc.qt.io/qt-6/qtstatemachine-index.html) in module **qtjambi-statemachine**: + * [**qtjambi-statemachine-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-statemachine/6.4.0/jar) + * [**qtjambi-statemachine-native-windows-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-statemachine-native-windows-x64/6.4.0/jar) + * [**qtjambi-statemachine-native-linux-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-statemachine-native-linux-x64/6.4.0/jar) + * [**qtjambi-statemachine-native-macos-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-statemachine-native-macos/6.4.0/jar) + * [**qtjambi-statemachine-native-android-x86-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-statemachine-native-android-x86/6.4.0/jar) + * [**qtjambi-statemachine-native-android-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-statemachine-native-android-x64/6.4.0/jar) + * [**qtjambi-statemachine-native-android-arm-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-statemachine-native-android-arm/6.4.0/jar) + * [**qtjambi-statemachine-native-android-arm64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-statemachine-native-android-arm64/6.4.0/jar) +* [QtUITools](https://doc.qt.io/qt-6/qtuitools-index.html) in module **qtjambi-uitools**: + * [**qtjambi-uitools-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools/6.4.0/jar) + * [**qtjambi-uitools-native-windows-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools-native-windows-x64/6.4.0/jar) + * [**qtjambi-uitools-native-linux-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools-native-linux-x64/6.4.0/jar) + * [**qtjambi-uitools-native-macos-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools-native-macos/6.4.0/jar) + * [**qtjambi-uitools-native-android-x86-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools-native-android-x86/6.4.0/jar) + * [**qtjambi-uitools-native-android-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools-native-android-x64/6.4.0/jar) + * [**qtjambi-uitools-native-android-arm-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools-native-android-arm/6.4.0/jar) + * [**qtjambi-uitools-native-android-arm64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools-native-android-arm64/6.4.0/jar) +* [QtWebChannel](https://doc.qt.io/qt-6/qtwebchannel-index.html) in module **qtjambi-webchannel**: + * [**qtjambi-webchannel-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel/6.4.0/jar) + * [**qtjambi-webchannel-native-windows-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel-native-windows-x64/6.4.0/jar) + * [**qtjambi-webchannel-native-linux-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel-native-linux-x64/6.4.0/jar) + * [**qtjambi-webchannel-native-macos-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel-native-macos/6.4.0/jar) + * [**qtjambi-webchannel-native-android-x86-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel-native-android-x86/6.4.0/jar) + * [**qtjambi-webchannel-native-android-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel-native-android-x64/6.4.0/jar) + * [**qtjambi-webchannel-native-android-arm-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel-native-android-arm/6.4.0/jar) + * [**qtjambi-webchannel-native-android-arm64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel-native-android-arm64/6.4.0/jar) +* [QtWebEngineCore](https://doc.qt.io/qt-6/qtwebengine-index.html) in module **qtjambi-webenginecore**: + * [**qtjambi-webenginecore-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginecore/6.4.0/jar) + * [**qtjambi-webenginecore-native-windows-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginecore-native-windows-x64/6.4.0/jar) + * [**qtjambi-webenginecore-native-linux-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginecore-native-linux-x64/6.4.0/jar) + * [**qtjambi-webenginecore-native-macos-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginecore-native-macos/6.4.0/jar) +* [QtWebEngineWidgets](https://doc.qt.io/qt-6/qtwebengine-index.html) in module **qtjambi-webenginewidgets**: + * [**qtjambi-webenginewidgets-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginewidgets/6.4.0/jar) + * [**qtjambi-webenginewidgets-native-windows-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginewidgets-native-windows-x64/6.4.0/jar) + * [**qtjambi-webenginewidgets-native-linux-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginewidgets-native-linux-x64/6.4.0/jar) + * [**qtjambi-webenginewidgets-native-macos-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginewidgets-native-macos/6.4.0/jar) +* [QtWebEngineQuick](https://doc.qt.io/qt-6/qtwebengine-index.html) in module **qtjambi-webenginequick**: + * [**qtjambi-webenginequick-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginequick/6.4.0/jar) + * [**qtjambi-webenginequick-native-windows-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginequick-native-windows-x64/6.4.0/jar) + * [**qtjambi-webenginequick-native-linux-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginequick-native-linux-x64/6.4.0/jar) + * [**qtjambi-webenginequick-native-macos-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginequick-native-macos/6.4.0/jar) +* [QtWebSockets](https://doc.qt.io/qt-6/qtwebsockets-index.html) in module **qtjambi-websockets**: + * [**qtjambi-websockets-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets/6.4.0/jar) + * [**qtjambi-websockets-native-windows-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets-native-windows-x64/6.4.0/jar) + * [**qtjambi-websockets-native-linux-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets-native-linux-x64/6.4.0/jar) + * [**qtjambi-websockets-native-macos-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets-native-macos/6.4.0/jar) + * [**qtjambi-websockets-native-android-x86-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets-native-android-x86/6.4.0/jar) + * [**qtjambi-websockets-native-android-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets-native-android-x64/6.4.0/jar) + * [**qtjambi-websockets-native-android-arm-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets-native-android-arm/6.4.0/jar) + * [**qtjambi-websockets-native-android-arm64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets-native-android-arm64/6.4.0/jar) +* [QtWebView](https://doc.qt.io/qt-6/qtwebview-index.html) in module **qtjambi-webview**: + * [**qtjambi-webview-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview/6.4.0/jar) + * [**qtjambi-webview-native-windows-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview-native-windows-x64/6.4.0/jar) + * [**qtjambi-webview-native-linux-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview-native-linux-x64/6.4.0/jar) + * [**qtjambi-webview-native-macos-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview-native-macos/6.4.0/jar) + * [**qtjambi-webview-native-android-x86-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview-native-android-x86/6.4.0/jar) + * [**qtjambi-webview-native-android-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview-native-android-x64/6.4.0/jar) + * [**qtjambi-webview-native-android-arm-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview-native-android-arm/6.4.0/jar) + * [**qtjambi-webview-native-android-arm64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview-native-android-arm64/6.4.0/jar) +* [QtVirtualKeyboard](https://doc.qt.io/qt-6/qtvirtualkeyboard-index.html) in module **qtjambi-virtualkeyboard**: + * [**qtjambi-virtualkeyboard-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard/6.4.0/jar) + * [**qtjambi-virtualkeyboard-native-windows-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard-native-windows-x64/6.4.0/jar) + * [**qtjambi-virtualkeyboard-native-linux-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard-native-linux-x64/6.4.0/jar) + * [**qtjambi-virtualkeyboard-native-macos-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard-native-macos/6.4.0/jar) + * [**qtjambi-virtualkeyboard-native-android-x86-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard-native-android-x86/6.4.0/jar) + * [**qtjambi-virtualkeyboard-native-android-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard-native-android-x64/6.4.0/jar) + * [**qtjambi-virtualkeyboard-native-android-arm-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard-native-android-arm/6.4.0/jar) + * [**qtjambi-virtualkeyboard-native-android-arm64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard-native-android-arm64/6.4.0/jar) +* [QtXml](https://doc.qt.io/qt-6/qtxml-index.html) in module **qtjambi-xml**: + * [**qtjambi-xml-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml/6.4.0/jar) + * [**qtjambi-xml-native-windows-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml-native-windows-x64/6.4.0/jar) + * [**qtjambi-xml-native-linux-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml-native-linux-x64/6.4.0/jar) + * [**qtjambi-xml-native-macos-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml-native-macos/6.4.0/jar) + * [**qtjambi-xml-native-android-x86-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml-native-android-x86/6.4.0/jar) + * [**qtjambi-xml-native-android-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml-native-android-x64/6.4.0/jar) + * [**qtjambi-xml-native-android-arm-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml-native-android-arm/6.4.0/jar) + * [**qtjambi-xml-native-android-arm64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml-native-android-arm64/6.4.0/jar) +* [QtDesigner](https://doc.qt.io/qt-6/qtdesigner-manual.html) in module **qtjambi-designer**: + * [**qtjambi-designer-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer/6.4.0/jar) + * [**qtjambi-designer-native-windows-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer-native-windows-x64/6.4.0/jar) + * [**qtjambi-designer-native-linux-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer-native-linux-x64/6.4.0/jar) + * [**qtjambi-designer-native-macos-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer-native-macos/6.4.0/jar) + * [**qtjambi-designer-native-android-x86-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer-native-android-x86/6.4.0/jar) + * [**qtjambi-designer-native-android-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer-native-android-x64/6.4.0/jar) + * [**qtjambi-designer-native-android-arm-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer-native-android-arm/6.4.0/jar) + * [**qtjambi-designer-native-android-arm64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer-native-android-arm64/6.4.0/jar) +* [QtPDF](https://doc.qt.io/qt-6/qtpdf-index.html) in modules **qtjambi-pdf** and **qtjambi-pdfwidgets**: + * [**qtjambi-pdf-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-pdf/6.4.0/jar) + * [**qtjambi-pdf-native-windows-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-pdf-native-windows-x64/6.4.0/jar) + * [**qtjambi-pdf-native-linux-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-pdf-native-linux-x64/6.4.0/jar) + * [**qtjambi-pdf-native-macos-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-pdf-native-macos/6.4.0/jar) + * [**qtjambi-pdfwidgets-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-pdfwidgets/6.4.0/jar) + * [**qtjambi-pdfwidgets-native-windows-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-pdfwidgets-native-windows-x64/6.4.0/jar) + * [**qtjambi-pdfwidgets-native-linux-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-pdfwidgets-native-linux-x64/6.4.0/jar) + * [**qtjambi-pdfwidgets-native-macos-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-pdfwidgets-native-macos/6.4.0/jar) +* [QtHttpServer](https://doc.qt.io/qt-6/qthttpserver-index.html) in module **qtjambi-httpserver** + * [**qtjambi-httpserver-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-httpserver/6.4.0/jar) + * [**qtjambi-httpserver-native-windows-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-httpserver-native-windows-x64/6.4.0/jar) + * [**qtjambi-httpserver-native-linux-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-httpserver-native-linux-x64/6.4.0/jar) + * [**qtjambi-httpserver-native-macos-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-httpserver-native-macos/6.4.0/jar) + * [**qtjambi-httpserver-native-android-x86-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-httpserver-native-android-x86/6.4.0/jar) + * [**qtjambi-httpserver-native-android-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-httpserver-native-android-x64/6.4.0/jar) + * [**qtjambi-httpserver-native-android-arm-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-httpserver-native-android-arm/6.4.0/jar) + * [**qtjambi-httpserver-native-android-arm64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-httpserver-native-android-arm64/6.4.0/jar) + +### Qt6 Platform-dependent Add-Ons + +* [Active Qt (Windows only)](https://doc.qt.io/qt-6/activeqt-manual.html) in module **qtjambi-activex**: + * [**qtjambi-activex-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-activex/6.4.0/jar) + * [**qtjambi-activex-native-windows-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-activex-native-windows-x64/6.4.0/jar) + +### Qt3D + +* [Qt3DCore](https://doc.qt.io/qt-6/qt3d-index.html) in module **qtjambi-qt3dcore**: + * [**qtjambi-qt3dcore-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore/6.4.0/jar) + * [**qtjambi-qt3dcore-native-windows-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore-native-windows-x64/6.4.0/jar) + * [**qtjambi-qt3dcore-native-linux-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore-native-linux-x64/6.4.0/jar) + * [**qtjambi-qt3dcore-native-macos-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore-native-macos/6.4.0/jar) + * [**qtjambi-qt3dcore-native-android-x86-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore-native-android-x86/6.4.0/jar) + * [**qtjambi-qt3dcore-native-android-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore-native-android-x64/6.4.0/jar) + * [**qtjambi-qt3dcore-native-android-arm-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore-native-android-arm/6.4.0/jar) + * [**qtjambi-qt3dcore-native-android-arm64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore-native-android-arm64/6.4.0/jar) +* [Qt3DRender](https://doc.qt.io/qt-6/qt3d-index.html) in module **qtjambi-qt3drender**: + * [**qtjambi-qt3drender-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender/6.4.0/jar) + * [**qtjambi-qt3drender-native-windows-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender-native-windows-x64/6.4.0/jar) + * [**qtjambi-qt3drender-native-linux-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender-native-linux-x64/6.4.0/jar) + * [**qtjambi-qt3drender-native-macos-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender-native-macos/6.4.0/jar) + * [**qtjambi-qt3drender-native-android-x86-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender-native-android-x86/6.4.0/jar) + * [**qtjambi-qt3drender-native-android-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender-native-android-x64/6.4.0/jar) + * [**qtjambi-qt3drender-native-android-arm-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender-native-android-arm/6.4.0/jar) + * [**qtjambi-qt3drender-native-android-arm64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender-native-android-arm64/6.4.0/jar) +* [Qt3DAnimation](https://doc.qt.io/qt-6/qt3d-index.html) in module **qtjambi-qt3danimation**: + * [**qtjambi-qt3danimation-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation/6.4.0/jar) + * [**qtjambi-qt3danimation-native-windows-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation-native-windows-x64/6.4.0/jar) + * [**qtjambi-qt3danimation-native-linux-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation-native-linux-x64/6.4.0/jar) + * [**qtjambi-qt3danimation-native-macos-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation-native-macos/6.4.0/jar) + * [**qtjambi-qt3danimation-native-android-x86-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation-native-android-x86/6.4.0/jar) + * [**qtjambi-qt3danimation-native-android-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation-native-android-x64/6.4.0/jar) + * [**qtjambi-qt3danimation-native-android-arm-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation-native-android-arm/6.4.0/jar) + * [**qtjambi-qt3danimation-native-android-arm64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation-native-android-arm64/6.4.0/jar) +* [Qt3DExtras](https://doc.qt.io/qt-6/qt3d-index.html) in module **qtjambi-qt3dextras**: + * [**qtjambi-qt3dextras-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras/6.4.0/jar) + * [**qtjambi-qt3dextras-native-windows-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras-native-windows-x64/6.4.0/jar) + * [**qtjambi-qt3dextras-native-linux-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras-native-linux-x64/6.4.0/jar) + * [**qtjambi-qt3dextras-native-macos-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras-native-macos/6.4.0/jar) + * [**qtjambi-qt3dextras-native-android-x86-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras-native-android-x86/6.4.0/jar) + * [**qtjambi-qt3dextras-native-android-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras-native-android-x64/6.4.0/jar) + * [**qtjambi-qt3dextras-native-android-arm-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras-native-android-arm/6.4.0/jar) + * [**qtjambi-qt3dextras-native-android-arm64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras-native-android-arm64/6.4.0/jar) +* [Qt3DInput](https://doc.qt.io/qt-6/qt3d-index.html) in module **qtjambi-qt3dinput**: + * [**qtjambi-qt3dinput-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput/6.4.0/jar) + * [**qtjambi-qt3dinput-native-windows-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput-native-windows-x64/6.4.0/jar) + * [**qtjambi-qt3dinput-native-linux-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput-native-linux-x64/6.4.0/jar) + * [**qtjambi-qt3dinput-native-macos-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput-native-macos/6.4.0/jar) + * [**qtjambi-qt3dinput-native-android-x86-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput-native-android-x86/6.4.0/jar) + * [**qtjambi-qt3dinput-native-android-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput-native-android-x64/6.4.0/jar) + * [**qtjambi-qt3dinput-native-android-arm-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput-native-android-arm/6.4.0/jar) + * [**qtjambi-qt3dinput-native-android-arm64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput-native-android-arm64/6.4.0/jar) +* [Qt3DLogic](https://doc.qt.io/qt-6/qt3d-index.html) in module **qtjambi-qt3dlogic**: + * [**qtjambi-qt3dlogic-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic/6.4.0/jar) + * [**qtjambi-qt3dlogic-native-windows-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic-native-windows-x64/6.4.0/jar) + * [**qtjambi-qt3dlogic-native-linux-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic-native-linux-x64/6.4.0/jar) + * [**qtjambi-qt3dlogic-native-macos-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic-native-macos/6.4.0/jar) + * [**qtjambi-qt3dlogic-native-android-x86-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic-native-android-x86/6.4.0/jar) + * [**qtjambi-qt3dlogic-native-android-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic-native-android-x64/6.4.0/jar) + * [**qtjambi-qt3dlogic-native-android-arm-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic-native-android-arm/6.4.0/jar) + * [**qtjambi-qt3dlogic-native-android-arm64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic-native-android-arm64/6.4.0/jar) +* [Qt3DQuick](https://doc.qt.io/qt-6/qt3d-index.html) in module **qtjambi-qt3dquick**: + * [**qtjambi-qt3dquick-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick/6.4.0/jar) + * [**qtjambi-qt3dquick-native-windows-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick-native-windows-x64/6.4.0/jar) + * [**qtjambi-qt3dquick-native-linux-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick-native-linux-x64/6.4.0/jar) + * [**qtjambi-qt3dquick-native-macos-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick-native-macos/6.4.0/jar) + * [**qtjambi-qt3dquick-native-android-x86-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick-native-android-x86/6.4.0/jar) + * [**qtjambi-qt3dquick-native-android-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick-native-android-x64/6.4.0/jar) + * [**qtjambi-qt3dquick-native-android-arm-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick-native-android-arm/6.4.0/jar) + * [**qtjambi-qt3dquick-native-android-arm64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick-native-android-arm64/6.4.0/jar) +* [Qt3DQuickExtras](https://doc.qt.io/qt-6/qt3d-index.html) in module **qtjambi-qt3dquickextras**: + * [**qtjambi-qt3dquickextras-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras/6.4.0/jar) + * [**qtjambi-qt3dquickextras-native-windows-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras-native-windows-x64/6.4.0/jar) + * [**qtjambi-qt3dquickextras-native-linux-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras-native-linux-x64/6.4.0/jar) + * [**qtjambi-qt3dquickextras-native-macos-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras-native-macos/6.4.0/jar) + * [**qtjambi-qt3dquickextras-native-android-x86-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras-native-android-x86/6.4.0/jar) + * [**qtjambi-qt3dquickextras-native-android-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras-native-android-x64/6.4.0/jar) + * [**qtjambi-qt3dquickextras-native-android-arm-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras-native-android-arm/6.4.0/jar) + * [**qtjambi-qt3dquickextras-native-android-arm64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras-native-android-arm64/6.4.0/jar) +* [Qt3DQuickScene3D](https://doc.qt.io/qt-6/qt3d-index.html) in module **qtjambi-qt3dquickscene2d**: + * [**qtjambi-qt3dquickscene2d-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d/6.4.0/jar) + * [**qtjambi-qt3dquickscene2d-native-windows-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d-native-windows-x64/6.4.0/jar) + * [**qtjambi-qt3dquickscene2d-native-linux-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d-native-linux-x64/6.4.0/jar) + * [**qtjambi-qt3dquickscene2d-native-macos-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d-native-macos/6.4.0/jar) + * [**qtjambi-qt3dquickscene2d-native-android-x86-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d-native-android-x86/6.4.0/jar) + * [**qtjambi-qt3dquickscene2d-native-android-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d-native-android-x64/6.4.0/jar) + * [**qtjambi-qt3dquickscene2d-native-android-arm-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d-native-android-arm/6.4.0/jar) + * [**qtjambi-qt3dquickscene2d-native-android-arm64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d-native-android-arm64/6.4.0/jar) + +### QtJambi Plugins + +* JDBC Sql Plugin: + * [**qtjambi-plugin-qsqljdbc-windows-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-windows-x64/6.4.0/jar) + * [**qtjambi-plugin-qsqljdbc-linux-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-linux-x64/6.4.0/jar) + * [**qtjambi-plugin-qsqljdbc-macos-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-macos/6.4.0/jar) + * [**qtjambi-plugin-qsqljdbc-native-android-common-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-native-android-common/6.4.0/jar) + * [**qtjambi-plugin-qsqljdbc-native-android-x86-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-native-android-x86/6.4.0/jar) + * [**qtjambi-plugin-qsqljdbc-native-android-x86-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-native-android-x86/6.4.0/jar) + * [**qtjambi-plugin-qsqljdbc-native-android-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-native-android-x64/6.4.0/jar) + * [**qtjambi-plugin-qsqljdbc-native-android-arm-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-native-android-arm/6.4.0/jar) + * [**qtjambi-plugin-qsqljdbc-native-android-arm64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-native-android-arm64/6.4.0/jar) + +### QtJambi Tools + +* [QtJambi User Interface Compiler (UIC)](https://doc.qt.io/qt-6/designer-using-a-ui-file.html#compile-time-form-processing): + * [**qtjambi-uic-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uic/6.4.0/jar) + * [**qtjambi-uic-native-windows-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uic-native-windows-x64/6.4.0/jar) + * [**qtjambi-uic-native-linux-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uic-native-linux-x64/6.4.0/jar) + * [**qtjambi-uic-native-macos-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uic-native-macos/6.4.0/jar) + * [**qtjambi-uic-native-android-x86-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uic-native-android-x86/6.4.0/jar) + * [**qtjambi-uic-native-android-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uic-native-android-x64/6.4.0/jar) + * [**qtjambi-uic-native-android-arm-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uic-native-android-arm/6.4.0/jar) + * [**qtjambi-uic-native-android-arm64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uic-native-android-arm64/6.4.0/jar) +* QtJambi Deployer: + * [**qtjambi-deployer-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer/6.4.0/jar) + * [**qtjambi-deployer-native-windows-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer-native-windows-x64/6.4.0/jar) + * [**qtjambi-deployer-native-linux-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer-native-linux-x64/6.4.0/jar) + * [**qtjambi-deployer-native-macos-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer-native-macos/6.4.0/jar) + * [**qtjambi-deployer-native-android-x86-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer-native-android-x86/6.4.0/jar) + * [**qtjambi-deployer-native-android-x64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer-native-android-x64/6.4.0/jar) + * [**qtjambi-deployer-native-android-arm-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer-native-android-arm/6.4.0/jar) + * [**qtjambi-deployer-native-android-arm64-6.4.0.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer-native-android-arm64/6.4.0/jar) + + ## QtJambi for Qt 6.3 -QtJambi 6.3.4 requires Qt 6.3.x whereas x can be any patch version. +QtJambi 6.3.5 requires Qt 6.3.x whereas x can be any patch version. Following Qt 6.3 modules are provided by QtJambi: ### Qt6 Essentials * [QtCore](https://doc.qt.io/qt-6/qtcore-index.html), [QtGui](https://doc.qt.io/qt-6/qtgui-index.html) and [QtWidgets](https://doc.qt.io/qt-6/qtwidgets-index.html) in module **qtjambi**: - * [**qtjambi-6.3.4a.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi/6.3.4a/jar) - * [**qtjambi-native-windows-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-native-windows-x64/6.3.4/jar) - * [**qtjambi-native-linux-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-native-linux-x64/6.3.4/jar) - * [**qtjambi-native-macos-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-native-macos/6.3.4/jar) - * [**qtjambi-native-android-x86-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-native-android-x86/6.3.4/jar) - * [**qtjambi-native-android-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-native-android-x64/6.3.4/jar) - * [**qtjambi-native-android-arm-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-native-android-arm/6.3.4/jar) - * [**qtjambi-native-android-arm64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-native-android-arm64/6.3.4/jar) + * [**qtjambi-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi/6.3.5/jar) + * [**qtjambi-native-windows-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-native-windows-x64/6.3.5/jar) + * [**qtjambi-native-linux-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-native-linux-x64/6.3.5/jar) + * [**qtjambi-native-macos-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-native-macos/6.3.5/jar) + * [**qtjambi-native-android-x86-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-native-android-x86/6.3.5/jar) + * [**qtjambi-native-android-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-native-android-x64/6.3.5/jar) + * [**qtjambi-native-android-arm-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-native-android-arm/6.3.5/jar) + * [**qtjambi-native-android-arm64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-native-android-arm64/6.3.5/jar) * [QtDBus](https://doc.qt.io/qt-6/qtdbus-index.html) in module **qtjambi-dbus**: - * [**qtjambi-dbus-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-dbus/6.3.4/jar) - * [**qtjambi-dbus-native-windows-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-dbus-native-windows-x64/6.3.4/jar) - * [**qtjambi-dbus-native-linux-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-dbus-native-linux-x64/6.3.4/jar) - * [**qtjambi-dbus-native-macos-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-dbus-native-macos/6.3.4/jar) - * [**qtjambi-dbus-native-android-x86-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-dbus-native-android-x86/6.3.4/jar) - * [**qtjambi-dbus-native-android-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-dbus-native-android-x64/6.3.4/jar) - * [**qtjambi-dbus-native-android-arm-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-dbus-native-android-arm/6.3.4/jar) - * [**qtjambi-dbus-native-android-arm64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-dbus-native-android-arm64/6.3.4/jar) + * [**qtjambi-dbus-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-dbus/6.3.5/jar) + * [**qtjambi-dbus-native-windows-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-dbus-native-windows-x64/6.3.5/jar) + * [**qtjambi-dbus-native-linux-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-dbus-native-linux-x64/6.3.5/jar) + * [**qtjambi-dbus-native-macos-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-dbus-native-macos/6.3.5/jar) + * [**qtjambi-dbus-native-android-x86-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-dbus-native-android-x86/6.3.5/jar) + * [**qtjambi-dbus-native-android-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-dbus-native-android-x64/6.3.5/jar) + * [**qtjambi-dbus-native-android-arm-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-dbus-native-android-arm/6.3.5/jar) + * [**qtjambi-dbus-native-android-arm64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-dbus-native-android-arm64/6.3.5/jar) * [QtNetwork](https://doc.qt.io/qt-6/qtnetwork-index.html) in module **qtjambi-network**: - * [**qtjambi-network-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network/6.3.4/jar) - * [**qtjambi-network-native-windows-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network-native-windows-x64/6.3.4/jar) - * [**qtjambi-network-native-linux-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network-native-linux-x64/6.3.4/jar) - * [**qtjambi-network-native-macos-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network-native-macos/6.3.4/jar) - * [**qtjambi-network-native-android-x86-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network-native-android-x86/6.3.4/jar) - * [**qtjambi-network-native-android-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network-native-android-x64/6.3.4/jar) - * [**qtjambi-network-native-android-arm-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network-native-android-arm/6.3.4/jar) - * [**qtjambi-network-native-android-arm64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network-native-android-arm64/6.3.4/jar) + * [**qtjambi-network-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network/6.3.5/jar) + * [**qtjambi-network-native-windows-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network-native-windows-x64/6.3.5/jar) + * [**qtjambi-network-native-linux-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network-native-linux-x64/6.3.5/jar) + * [**qtjambi-network-native-macos-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network-native-macos/6.3.5/jar) + * [**qtjambi-network-native-android-x86-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network-native-android-x86/6.3.5/jar) + * [**qtjambi-network-native-android-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network-native-android-x64/6.3.5/jar) + * [**qtjambi-network-native-android-arm-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network-native-android-arm/6.3.5/jar) + * [**qtjambi-network-native-android-arm64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network-native-android-arm64/6.3.5/jar) * [QtQml](https://doc.qt.io/qt-6/qtqml-index.html) in module **qtjambi-qml**: - * [**qtjambi-qml-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml/6.3.4/jar) - * [**qtjambi-qml-native-windows-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml-native-windows-x64/6.3.4/jar) - * [**qtjambi-qml-native-linux-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml-native-linux-x64/6.3.4/jar) - * [**qtjambi-qml-native-macos-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml-native-macos/6.3.4/jar) - * [**qtjambi-qml-native-android-x86-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml-native-android-x86/6.3.4/jar) - * [**qtjambi-qml-native-android-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml-native-android-x64/6.3.4/jar) - * [**qtjambi-qml-native-android-arm-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml-native-android-arm/6.3.4/jar) - * [**qtjambi-qml-native-android-arm64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml-native-android-arm64/6.3.4/jar) + * [**qtjambi-qml-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml/6.3.5/jar) + * [**qtjambi-qml-native-windows-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml-native-windows-x64/6.3.5/jar) + * [**qtjambi-qml-native-linux-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml-native-linux-x64/6.3.5/jar) + * [**qtjambi-qml-native-macos-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml-native-macos/6.3.5/jar) + * [**qtjambi-qml-native-android-x86-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml-native-android-x86/6.3.5/jar) + * [**qtjambi-qml-native-android-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml-native-android-x64/6.3.5/jar) + * [**qtjambi-qml-native-android-arm-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml-native-android-arm/6.3.5/jar) + * [**qtjambi-qml-native-android-arm64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml-native-android-arm64/6.3.5/jar) * [QtQuick](https://doc.qt.io/qt-6/qtquick-index.html) in module **qtjambi-quick**: - * [**qtjambi-quick-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick/6.3.4/jar) - * [**qtjambi-quick-native-windows-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick-native-windows-x64/6.3.4/jar) - * [**qtjambi-quick-native-linux-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick-native-linux-x64/6.3.4/jar) - * [**qtjambi-quick-native-macos-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick-native-macos/6.3.4/jar) - * [**qtjambi-quick-native-android-x86-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick-native-android-x86/6.3.4/jar) - * [**qtjambi-quick-native-android-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick-native-android-x64/6.3.4/jar) - * [**qtjambi-quick-native-android-arm-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick-native-android-arm/6.3.4/jar) - * [**qtjambi-quick-native-android-arm64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick-native-android-arm64/6.3.4/jar) + * [**qtjambi-quick-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick/6.3.5/jar) + * [**qtjambi-quick-native-windows-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick-native-windows-x64/6.3.5/jar) + * [**qtjambi-quick-native-linux-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick-native-linux-x64/6.3.5/jar) + * [**qtjambi-quick-native-macos-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick-native-macos/6.3.5/jar) + * [**qtjambi-quick-native-android-x86-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick-native-android-x86/6.3.5/jar) + * [**qtjambi-quick-native-android-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick-native-android-x64/6.3.5/jar) + * [**qtjambi-quick-native-android-arm-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick-native-android-arm/6.3.5/jar) + * [**qtjambi-quick-native-android-arm64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick-native-android-arm64/6.3.5/jar) * [QtQuickControls](https://doc.qt.io/qt-6/qtquickcontrols-index.html) in module **qtjambi-quickcontrols**: - * [**qtjambi-quickcontrols-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols/6.3.4/jar) - * [**qtjambi-quickcontrols-native-windows-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols-native-windows-x64/6.3.4/jar) - * [**qtjambi-quickcontrols-native-linux-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols-native-linux-x64/6.3.4/jar) - * [**qtjambi-quickcontrols-native-macos-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols-native-macos/6.3.4/jar) - * [**qtjambi-quickcontrols-native-android-x86-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols-native-android-x86/6.3.4/jar) - * [**qtjambi-quickcontrols-native-android-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols-native-android-x64/6.3.4/jar) - * [**qtjambi-quickcontrols-native-android-arm-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols-native-android-arm/6.3.4/jar) - * [**qtjambi-quickcontrols-native-android-arm64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols-native-android-arm64/6.3.4/jar) + * [**qtjambi-quickcontrols-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols/6.3.5/jar) + * [**qtjambi-quickcontrols-native-windows-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols-native-windows-x64/6.3.5/jar) + * [**qtjambi-quickcontrols-native-linux-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols-native-linux-x64/6.3.5/jar) + * [**qtjambi-quickcontrols-native-macos-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols-native-macos/6.3.5/jar) + * [**qtjambi-quickcontrols-native-android-x86-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols-native-android-x86/6.3.5/jar) + * [**qtjambi-quickcontrols-native-android-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols-native-android-x64/6.3.5/jar) + * [**qtjambi-quickcontrols-native-android-arm-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols-native-android-arm/6.3.5/jar) + * [**qtjambi-quickcontrols-native-android-arm64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols-native-android-arm64/6.3.5/jar) * [QtQuickTest](https://doc.qt.io/qt-6/qtquicktest-index.html) in module **qtjambi-quicktest**: - * [**qtjambi-quicktest-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest/6.3.4/jar) - * [**qtjambi-quicktest-native-windows-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest-native-windows-x64/6.3.4/jar) - * [**qtjambi-quicktest-native-linux-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest-native-linux-x64/6.3.4/jar) - * [**qtjambi-quicktest-native-macos-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest-native-macos/6.3.4/jar) - * [**qtjambi-quicktest-native-android-x86-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest-native-android-x86/6.3.4/jar) - * [**qtjambi-quicktest-native-android-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest-native-android-x64/6.3.4/jar) - * [**qtjambi-quicktest-native-android-arm-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest-native-android-arm/6.3.4/jar) - * [**qtjambi-quicktest-native-android-arm64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest-native-android-arm64/6.3.4/jar) + * [**qtjambi-quicktest-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest/6.3.5/jar) + * [**qtjambi-quicktest-native-windows-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest-native-windows-x64/6.3.5/jar) + * [**qtjambi-quicktest-native-linux-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest-native-linux-x64/6.3.5/jar) + * [**qtjambi-quicktest-native-macos-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest-native-macos/6.3.5/jar) + * [**qtjambi-quicktest-native-android-x86-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest-native-android-x86/6.3.5/jar) + * [**qtjambi-quicktest-native-android-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest-native-android-x64/6.3.5/jar) + * [**qtjambi-quicktest-native-android-arm-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest-native-android-arm/6.3.5/jar) + * [**qtjambi-quicktest-native-android-arm64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest-native-android-arm64/6.3.5/jar) * [QtTest](https://doc.qt.io/qt-6/qttest-index.html) in module **qtjambi-test**: - * [**qtjambi-test-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test/6.3.4/jar) - * [**qtjambi-test-native-windows-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test-native-windows-x64/6.3.4/jar) - * [**qtjambi-test-native-linux-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test-native-linux-x64/6.3.4/jar) - * [**qtjambi-test-native-macos-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test-native-macos/6.3.4/jar) - * [**qtjambi-test-native-android-x86-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test-native-android-x86/6.3.4/jar) - * [**qtjambi-test-native-android-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test-native-android-x64/6.3.4/jar) - * [**qtjambi-test-native-android-arm-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test-native-android-arm/6.3.4/jar) - * [**qtjambi-test-native-android-arm64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test-native-android-arm64/6.3.4/jar) + * [**qtjambi-test-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test/6.3.5/jar) + * [**qtjambi-test-native-windows-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test-native-windows-x64/6.3.5/jar) + * [**qtjambi-test-native-linux-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test-native-linux-x64/6.3.5/jar) + * [**qtjambi-test-native-macos-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test-native-macos/6.3.5/jar) + * [**qtjambi-test-native-android-x86-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test-native-android-x86/6.3.5/jar) + * [**qtjambi-test-native-android-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test-native-android-x64/6.3.5/jar) + * [**qtjambi-test-native-android-arm-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test-native-android-arm/6.3.5/jar) + * [**qtjambi-test-native-android-arm64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test-native-android-arm64/6.3.5/jar) ### Qt6 Add-Ons * [QtBluetooth](https://doc.qt.io/qt-6/qtbluetooth-index.html) in module **qtjambi-bluetooth**: - * [**qtjambi-bluetooth-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth/6.3.4/jar) - * [**qtjambi-bluetooth-native-windows-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth-native-windows-x64/6.3.4/jar) - * [**qtjambi-bluetooth-native-linux-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth-native-linux-x64/6.3.4/jar) - * [**qtjambi-bluetooth-native-macos-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth-native-macos/6.3.4/jar) - * [**qtjambi-bluetooth-native-android-x86-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth-native-android-x86/6.3.4/jar) - * [**qtjambi-bluetooth-native-android-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth-native-android-x64/6.3.4/jar) - * [**qtjambi-bluetooth-native-android-arm-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth-native-android-arm/6.3.4/jar) - * [**qtjambi-bluetooth-native-android-arm64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth-native-android-arm64/6.3.4/jar) + * [**qtjambi-bluetooth-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth/6.3.5/jar) + * [**qtjambi-bluetooth-native-windows-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth-native-windows-x64/6.3.5/jar) + * [**qtjambi-bluetooth-native-linux-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth-native-linux-x64/6.3.5/jar) + * [**qtjambi-bluetooth-native-macos-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth-native-macos/6.3.5/jar) + * [**qtjambi-bluetooth-native-android-x86-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth-native-android-x86/6.3.5/jar) + * [**qtjambi-bluetooth-native-android-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth-native-android-x64/6.3.5/jar) + * [**qtjambi-bluetooth-native-android-arm-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth-native-android-arm/6.3.5/jar) + * [**qtjambi-bluetooth-native-android-arm64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth-native-android-arm64/6.3.5/jar) * [QtCharts](https://doc.qt.io/qt-6/qtcharts-index.html) in module **qtjambi-charts**: - * [**qtjambi-charts-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts/6.3.4/jar) - * [**qtjambi-charts-native-windows-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts-native-windows-x64/6.3.4/jar) - * [**qtjambi-charts-native-linux-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts-native-linux-x64/6.3.4/jar) - * [**qtjambi-charts-native-macos-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts-native-macos/6.3.4/jar) - * [**qtjambi-charts-native-android-x86-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts-native-android-x86/6.3.4/jar) - * [**qtjambi-charts-native-android-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts-native-android-x64/6.3.4/jar) - * [**qtjambi-charts-native-android-arm-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts-native-android-arm/6.3.4/jar) - * [**qtjambi-charts-native-android-arm64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts-native-android-arm64/6.3.4/jar) + * [**qtjambi-charts-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts/6.3.5/jar) + * [**qtjambi-charts-native-windows-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts-native-windows-x64/6.3.5/jar) + * [**qtjambi-charts-native-linux-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts-native-linux-x64/6.3.5/jar) + * [**qtjambi-charts-native-macos-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts-native-macos/6.3.5/jar) + * [**qtjambi-charts-native-android-x86-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts-native-android-x86/6.3.5/jar) + * [**qtjambi-charts-native-android-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts-native-android-x64/6.3.5/jar) + * [**qtjambi-charts-native-android-arm-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts-native-android-arm/6.3.5/jar) + * [**qtjambi-charts-native-android-arm64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts-native-android-arm64/6.3.5/jar) * [QtDataVisualization](https://doc.qt.io/qt-6/qtdatavisualization-index.html) in module **qtjambi-datavisualization**: - * [**qtjambi-datavisualization-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization/6.3.4/jar) - * [**qtjambi-datavisualization-native-windows-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization-native-windows-x64/6.3.4/jar) - * [**qtjambi-datavisualization-native-linux-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization-native-linux-x64/6.3.4/jar) - * [**qtjambi-datavisualization-native-macos-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization-native-macos/6.3.4/jar) - * [**qtjambi-datavisualization-native-android-x86-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization-native-android-x86/6.3.4/jar) - * [**qtjambi-datavisualization-native-android-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization-native-android-x64/6.3.4/jar) - * [**qtjambi-datavisualization-native-android-arm-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization-native-android-arm/6.3.4/jar) - * [**qtjambi-datavisualization-native-android-arm64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization-native-android-arm64/6.3.4/jar) + * [**qtjambi-datavisualization-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization/6.3.5/jar) + * [**qtjambi-datavisualization-native-windows-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization-native-windows-x64/6.3.5/jar) + * [**qtjambi-datavisualization-native-linux-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization-native-linux-x64/6.3.5/jar) + * [**qtjambi-datavisualization-native-macos-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization-native-macos/6.3.5/jar) + * [**qtjambi-datavisualization-native-android-x86-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization-native-android-x86/6.3.5/jar) + * [**qtjambi-datavisualization-native-android-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization-native-android-x64/6.3.5/jar) + * [**qtjambi-datavisualization-native-android-arm-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization-native-android-arm/6.3.5/jar) + * [**qtjambi-datavisualization-native-android-arm64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization-native-android-arm64/6.3.5/jar) * [QtConcurrent](https://doc.qt.io/qt-6/qtconcurrent-index.html) in module **qtjambi-concurrent**: - * [**qtjambi-concurrent-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent/6.3.4/jar) - * [**qtjambi-concurrent-native-windows-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent-native-windows-x64/6.3.4/jar) - * [**qtjambi-concurrent-native-linux-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent-native-linux-x64/6.3.4/jar) - * [**qtjambi-concurrent-native-macos-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent-native-macos/6.3.4/jar) - * [**qtjambi-concurrent-native-android-x86-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent-native-android-x86/6.3.4/jar) - * [**qtjambi-concurrent-native-android-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent-native-android-x64/6.3.4/jar) - * [**qtjambi-concurrent-native-android-arm-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent-native-android-arm/6.3.4/jar) - * [**qtjambi-concurrent-native-android-arm64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent-native-android-arm64/6.3.4/jar) + * [**qtjambi-concurrent-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent/6.3.5/jar) + * [**qtjambi-concurrent-native-windows-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent-native-windows-x64/6.3.5/jar) + * [**qtjambi-concurrent-native-linux-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent-native-linux-x64/6.3.5/jar) + * [**qtjambi-concurrent-native-macos-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent-native-macos/6.3.5/jar) + * [**qtjambi-concurrent-native-android-x86-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent-native-android-x86/6.3.5/jar) + * [**qtjambi-concurrent-native-android-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent-native-android-x64/6.3.5/jar) + * [**qtjambi-concurrent-native-android-arm-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent-native-android-arm/6.3.5/jar) + * [**qtjambi-concurrent-native-android-arm64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent-native-android-arm64/6.3.5/jar) * [QtHelp](https://doc.qt.io/qt-6/qthelp-index.html) in module **qtjambi-help**: - * [**qtjambi-help-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help/6.3.4/jar) - * [**qtjambi-help-native-windows-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help-native-windows-x64/6.3.4/jar) - * [**qtjambi-help-native-linux-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help-native-linux-x64/6.3.4/jar) - * [**qtjambi-help-native-macos-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help-native-macos/6.3.4/jar) - * [**qtjambi-help-native-android-x86-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help-native-android-x86/6.3.4/jar) - * [**qtjambi-help-native-android-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help-native-android-x64/6.3.4/jar) - * [**qtjambi-help-native-android-arm-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help-native-android-arm/6.3.4/jar) - * [**qtjambi-help-native-android-arm64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help-native-android-arm64/6.3.4/jar) + * [**qtjambi-help-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help/6.3.5/jar) + * [**qtjambi-help-native-windows-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help-native-windows-x64/6.3.5/jar) + * [**qtjambi-help-native-linux-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help-native-linux-x64/6.3.5/jar) + * [**qtjambi-help-native-macos-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help-native-macos/6.3.5/jar) + * [**qtjambi-help-native-android-x86-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help-native-android-x86/6.3.5/jar) + * [**qtjambi-help-native-android-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help-native-android-x64/6.3.5/jar) + * [**qtjambi-help-native-android-arm-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help-native-android-arm/6.3.5/jar) + * [**qtjambi-help-native-android-arm64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help-native-android-arm64/6.3.5/jar) * [QtOpenGL](https://doc.qt.io/qt-6/qtopengl-index.html) in module **qtjambi-opengl**: - * [**qtjambi-opengl-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-opengl/6.3.4/jar) - * [**qtjambi-opengl-native-windows-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-opengl-native-windows-x64/6.3.4/jar) - * [**qtjambi-opengl-native-linux-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-opengl-native-linux-x64/6.3.4/jar) - * [**qtjambi-opengl-native-macos-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-opengl-native-macos/6.3.4/jar) - * [**qtjambi-opengl-native-android-x86-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-opengl-native-android-x86/6.3.4/jar) - * [**qtjambi-opengl-native-android-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-opengl-native-android-x64/6.3.4/jar) - * [**qtjambi-opengl-native-android-arm-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-opengl-native-android-arm/6.3.4/jar) - * [**qtjambi-opengl-native-android-arm64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-opengl-native-android-arm64/6.3.4/jar) + * [**qtjambi-opengl-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-opengl/6.3.5/jar) + * [**qtjambi-opengl-native-windows-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-opengl-native-windows-x64/6.3.5/jar) + * [**qtjambi-opengl-native-linux-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-opengl-native-linux-x64/6.3.5/jar) + * [**qtjambi-opengl-native-macos-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-opengl-native-macos/6.3.5/jar) + * [**qtjambi-opengl-native-android-x86-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-opengl-native-android-x86/6.3.5/jar) + * [**qtjambi-opengl-native-android-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-opengl-native-android-x64/6.3.5/jar) + * [**qtjambi-opengl-native-android-arm-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-opengl-native-android-arm/6.3.5/jar) + * [**qtjambi-opengl-native-android-arm64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-opengl-native-android-arm64/6.3.5/jar) * [QtOpenGLWidgets](https://doc.qt.io/qt-6/qtopenglwidgets-module.html) in module **qtjambi-openglwidgets**: - * [**qtjambi-openglwidgets-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-openglwidgets/6.3.4/jar) - * [**qtjambi-openglwidgets-native-windows-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-openglwidgets-native-windows-x64/6.3.4/jar) - * [**qtjambi-openglwidgets-native-linux-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-openglwidgets-native-linux-x64/6.3.4/jar) - * [**qtjambi-openglwidgets-native-macos-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-openglwidgets-native-macos/6.3.4/jar) - * [**qtjambi-openglwidgets-native-android-x86-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-openglwidgets-native-android-x86/6.3.4/jar) - * [**qtjambi-openglwidgets-native-android-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-openglwidgets-native-android-x64/6.3.4/jar) - * [**qtjambi-openglwidgets-native-android-arm-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-openglwidgets-native-android-arm/6.3.4/jar) - * [**qtjambi-openglwidgets-native-android-arm64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-openglwidgets-native-android-arm64/6.3.4/jar) + * [**qtjambi-openglwidgets-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-openglwidgets/6.3.5/jar) + * [**qtjambi-openglwidgets-native-windows-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-openglwidgets-native-windows-x64/6.3.5/jar) + * [**qtjambi-openglwidgets-native-linux-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-openglwidgets-native-linux-x64/6.3.5/jar) + * [**qtjambi-openglwidgets-native-macos-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-openglwidgets-native-macos/6.3.5/jar) + * [**qtjambi-openglwidgets-native-android-x86-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-openglwidgets-native-android-x86/6.3.5/jar) + * [**qtjambi-openglwidgets-native-android-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-openglwidgets-native-android-x64/6.3.5/jar) + * [**qtjambi-openglwidgets-native-android-arm-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-openglwidgets-native-android-arm/6.3.5/jar) + * [**qtjambi-openglwidgets-native-android-arm64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-openglwidgets-native-android-arm64/6.3.5/jar) * [QtMultimedia](https://doc.qt.io/qt-6/qtmultimedia-index.html) in module **qtjambi-multimedia**: - * [**qtjambi-multimedia-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia/6.3.4/jar) - * [**qtjambi-multimedia-native-windows-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia-native-windows-x64/6.3.4/jar) - * [**qtjambi-multimedia-native-linux-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia-native-linux-x64/6.3.4/jar) - * [**qtjambi-multimedia-native-macos-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia-native-macos/6.3.4/jar) - * [**qtjambi-multimedia-native-android-x86-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia-native-android-x86/6.3.4/jar) - * [**qtjambi-multimedia-native-android-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia-native-android-x64/6.3.4/jar) - * [**qtjambi-multimedia-native-android-arm-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia-native-android-arm/6.3.4/jar) - * [**qtjambi-multimedia-native-android-arm64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia-native-android-arm64/6.3.4/jar) + * [**qtjambi-multimedia-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia/6.3.5/jar) + * [**qtjambi-multimedia-native-windows-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia-native-windows-x64/6.3.5/jar) + * [**qtjambi-multimedia-native-linux-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia-native-linux-x64/6.3.5/jar) + * [**qtjambi-multimedia-native-macos-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia-native-macos/6.3.5/jar) + * [**qtjambi-multimedia-native-android-x86-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia-native-android-x86/6.3.5/jar) + * [**qtjambi-multimedia-native-android-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia-native-android-x64/6.3.5/jar) + * [**qtjambi-multimedia-native-android-arm-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia-native-android-arm/6.3.5/jar) + * [**qtjambi-multimedia-native-android-arm64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia-native-android-arm64/6.3.5/jar) * [QtMultimediaWidgets](https://doc.qt.io/qt-6/qtmultimedia-index.html) in module **qtjambi-multimediawidgets**: - * [**qtjambi-multimediawidgets-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets/6.3.4/jar) - * [**qtjambi-multimediawidgets-native-windows-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets-native-windows-x64/6.3.4/jar) - * [**qtjambi-multimediawidgets-native-linux-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets-native-linux-x64/6.3.4/jar) - * [**qtjambi-multimediawidgets-native-macos-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets-native-macos/6.3.4/jar) - * [**qtjambi-multimediawidgets-native-android-x86-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets-native-android-x86/6.3.4/jar) - * [**qtjambi-multimediawidgets-native-android-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets-native-android-x64/6.3.4/jar) - * [**qtjambi-multimediawidgets-native-android-arm-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets-native-android-arm/6.3.4/jar) - * [**qtjambi-multimediawidgets-native-android-arm64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets-native-android-arm64/6.3.4/jar) + * [**qtjambi-multimediawidgets-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets/6.3.5/jar) + * [**qtjambi-multimediawidgets-native-windows-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets-native-windows-x64/6.3.5/jar) + * [**qtjambi-multimediawidgets-native-linux-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets-native-linux-x64/6.3.5/jar) + * [**qtjambi-multimediawidgets-native-macos-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets-native-macos/6.3.5/jar) + * [**qtjambi-multimediawidgets-native-android-x86-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets-native-android-x86/6.3.5/jar) + * [**qtjambi-multimediawidgets-native-android-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets-native-android-x64/6.3.5/jar) + * [**qtjambi-multimediawidgets-native-android-arm-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets-native-android-arm/6.3.5/jar) + * [**qtjambi-multimediawidgets-native-android-arm64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets-native-android-arm64/6.3.5/jar) * [QtNfc](https://doc.qt.io/qt-6/qtnfc-index.html) in module **qtjambi-nfc**: - * [**qtjambi-nfc-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc/6.3.4/jar) - * [**qtjambi-nfc-native-windows-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc-native-windows-x64/6.3.4/jar) - * [**qtjambi-nfc-native-linux-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc-native-linux-x64/6.3.4/jar) - * [**qtjambi-nfc-native-macos-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc-native-macos/6.3.4/jar) - * [**qtjambi-nfc-native-android-x86-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc-native-android-x86/6.3.4/jar) - * [**qtjambi-nfc-native-android-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc-native-android-x64/6.3.4/jar) - * [**qtjambi-nfc-native-android-arm-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc-native-android-arm/6.3.4/jar) - * [**qtjambi-nfc-native-android-arm64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc-native-android-arm64/6.3.4/jar) + * [**qtjambi-nfc-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc/6.3.5/jar) + * [**qtjambi-nfc-native-windows-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc-native-windows-x64/6.3.5/jar) + * [**qtjambi-nfc-native-linux-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc-native-linux-x64/6.3.5/jar) + * [**qtjambi-nfc-native-macos-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc-native-macos/6.3.5/jar) + * [**qtjambi-nfc-native-android-x86-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc-native-android-x86/6.3.5/jar) + * [**qtjambi-nfc-native-android-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc-native-android-x64/6.3.5/jar) + * [**qtjambi-nfc-native-android-arm-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc-native-android-arm/6.3.5/jar) + * [**qtjambi-nfc-native-android-arm64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc-native-android-arm64/6.3.5/jar) * [QtNetworkAuth](https://doc.qt.io/qt-6/qtnetworkauth-index.html) in module **qtjambi-networkauth**: - * [**qtjambi-networkauth-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth/6.3.4/jar) - * [**qtjambi-networkauth-native-windows-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth-native-windows-x64/6.3.4/jar) - * [**qtjambi-networkauth-native-linux-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth-native-linux-x64/6.3.4/jar) - * [**qtjambi-networkauth-native-macos-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth-native-macos/6.3.4/jar) - * [**qtjambi-networkauth-native-android-x86-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth-native-android-x86/6.3.4/jar) - * [**qtjambi-networkauth-native-android-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth-native-android-x64/6.3.4/jar) - * [**qtjambi-networkauth-native-android-arm-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth-native-android-arm/6.3.4/jar) - * [**qtjambi-networkauth-native-android-arm64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth-native-android-arm64/6.3.4/jar) + * [**qtjambi-networkauth-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth/6.3.5/jar) + * [**qtjambi-networkauth-native-windows-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth-native-windows-x64/6.3.5/jar) + * [**qtjambi-networkauth-native-linux-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth-native-linux-x64/6.3.5/jar) + * [**qtjambi-networkauth-native-macos-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth-native-macos/6.3.5/jar) + * [**qtjambi-networkauth-native-android-x86-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth-native-android-x86/6.3.5/jar) + * [**qtjambi-networkauth-native-android-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth-native-android-x64/6.3.5/jar) + * [**qtjambi-networkauth-native-android-arm-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth-native-android-arm/6.3.5/jar) + * [**qtjambi-networkauth-native-android-arm64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth-native-android-arm64/6.3.5/jar) * [QtPositioning](https://doc.qt.io/qt-6/qtpositioning-index.html) in module **qtjambi-positioning**: - * [**qtjambi-positioning-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning/6.3.4/jar) - * [**qtjambi-positioning-native-windows-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning-native-windows-x64/6.3.4/jar) - * [**qtjambi-positioning-native-linux-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning-native-linux-x64/6.3.4/jar) - * [**qtjambi-positioning-native-macos-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning-native-macos/6.3.4/jar) - * [**qtjambi-positioning-native-android-x86-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning-native-android-x86/6.3.4/jar) - * [**qtjambi-positioning-native-android-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning-native-android-x64/6.3.4/jar) - * [**qtjambi-positioning-native-android-arm-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning-native-android-arm/6.3.4/jar) - * [**qtjambi-positioning-native-android-arm64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning-native-android-arm64/6.3.4/jar) + * [**qtjambi-positioning-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning/6.3.5/jar) + * [**qtjambi-positioning-native-windows-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning-native-windows-x64/6.3.5/jar) + * [**qtjambi-positioning-native-linux-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning-native-linux-x64/6.3.5/jar) + * [**qtjambi-positioning-native-macos-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning-native-macos/6.3.5/jar) + * [**qtjambi-positioning-native-android-x86-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning-native-android-x86/6.3.5/jar) + * [**qtjambi-positioning-native-android-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning-native-android-x64/6.3.5/jar) + * [**qtjambi-positioning-native-android-arm-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning-native-android-arm/6.3.5/jar) + * [**qtjambi-positioning-native-android-arm64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning-native-android-arm64/6.3.5/jar) * [QtPrintSupport](https://doc.qt.io/qt-6/qtprintsupport-index.html) in module **qtjambi-printsupport**: - * [**qtjambi-printsupport-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport/6.3.4/jar) - * [**qtjambi-printsupport-native-windows-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport-native-windows-x64/6.3.4/jar) - * [**qtjambi-printsupport-native-linux-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport-native-linux-x64/6.3.4/jar) - * [**qtjambi-printsupport-native-macos-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport-native-macos/6.3.4/jar) - * [**qtjambi-printsupport-native-android-x86-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport-native-android-x86/6.3.4/jar) - * [**qtjambi-printsupport-native-android-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport-native-android-x64/6.3.4/jar) - * [**qtjambi-printsupport-native-android-arm-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport-native-android-arm/6.3.4/jar) - * [**qtjambi-printsupport-native-android-arm64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport-native-android-arm64/6.3.4/jar) + * [**qtjambi-printsupport-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport/6.3.5/jar) + * [**qtjambi-printsupport-native-windows-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport-native-windows-x64/6.3.5/jar) + * [**qtjambi-printsupport-native-linux-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport-native-linux-x64/6.3.5/jar) + * [**qtjambi-printsupport-native-macos-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport-native-macos/6.3.5/jar) + * [**qtjambi-printsupport-native-android-x86-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport-native-android-x86/6.3.5/jar) + * [**qtjambi-printsupport-native-android-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport-native-android-x64/6.3.5/jar) + * [**qtjambi-printsupport-native-android-arm-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport-native-android-arm/6.3.5/jar) + * [**qtjambi-printsupport-native-android-arm64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport-native-android-arm64/6.3.5/jar) * [QtQuick3D](https://doc.qt.io/qt-6/qtquick3d-index.html) in module **qtjambi-quick3d**: - * [**qtjambi-quick3d-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d/6.3.4/jar) - * [**qtjambi-quick3d-native-windows-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d-native-windows-x64/6.3.4/jar) - * [**qtjambi-quick3d-native-linux-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d-native-linux-x64/6.3.4/jar) - * [**qtjambi-quick3d-native-macos-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d-native-macos/6.3.4/jar) - * [**qtjambi-quick3d-native-android-x86-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d-native-android-x86/6.3.4/jar) - * [**qtjambi-quick3d-native-android-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d-native-android-x64/6.3.4/jar) - * [**qtjambi-quick3d-native-android-arm-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d-native-android-arm/6.3.4/jar) - * [**qtjambi-quick3d-native-android-arm64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d-native-android-arm64/6.3.4/jar) + * [**qtjambi-quick3d-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d/6.3.5/jar) + * [**qtjambi-quick3d-native-windows-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d-native-windows-x64/6.3.5/jar) + * [**qtjambi-quick3d-native-linux-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d-native-linux-x64/6.3.5/jar) + * [**qtjambi-quick3d-native-macos-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d-native-macos/6.3.5/jar) + * [**qtjambi-quick3d-native-android-x86-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d-native-android-x86/6.3.5/jar) + * [**qtjambi-quick3d-native-android-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d-native-android-x64/6.3.5/jar) + * [**qtjambi-quick3d-native-android-arm-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d-native-android-arm/6.3.5/jar) + * [**qtjambi-quick3d-native-android-arm64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d-native-android-arm64/6.3.5/jar) * [QtQuickWidgets](https://doc.qt.io/qt-6/qtquickwidgets-module.html) in module **qtjambi-quickwidgets**: - * [**qtjambi-quickwidgets-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets/6.3.4/jar) - * [**qtjambi-quickwidgets-native-windows-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets-native-windows-x64/6.3.4/jar) - * [**qtjambi-quickwidgets-native-linux-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets-native-linux-x64/6.3.4/jar) - * [**qtjambi-quickwidgets-native-macos-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets-native-macos/6.3.4/jar) - * [**qtjambi-quickwidgets-native-android-x86-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets-native-android-x86/6.3.4/jar) - * [**qtjambi-quickwidgets-native-android-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets-native-android-x64/6.3.4/jar) - * [**qtjambi-quickwidgets-native-android-arm-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets-native-android-arm/6.3.4/jar) - * [**qtjambi-quickwidgets-native-android-arm64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets-native-android-arm64/6.3.4/jar) + * [**qtjambi-quickwidgets-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets/6.3.5/jar) + * [**qtjambi-quickwidgets-native-windows-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets-native-windows-x64/6.3.5/jar) + * [**qtjambi-quickwidgets-native-linux-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets-native-linux-x64/6.3.5/jar) + * [**qtjambi-quickwidgets-native-macos-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets-native-macos/6.3.5/jar) + * [**qtjambi-quickwidgets-native-android-x86-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets-native-android-x86/6.3.5/jar) + * [**qtjambi-quickwidgets-native-android-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets-native-android-x64/6.3.5/jar) + * [**qtjambi-quickwidgets-native-android-arm-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets-native-android-arm/6.3.5/jar) + * [**qtjambi-quickwidgets-native-android-arm64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets-native-android-arm64/6.3.5/jar) * [QtRemoteObjects](https://doc.qt.io/qt-6/qtremoteobjects-module.html) in module **qtjambi-remoteobjects**: - * [**qtjambi-remoteobjects-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects/6.3.4/jar) - * [**qtjambi-remoteobjects-native-windows-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects-native-windows-x64/6.3.4/jar) - * [**qtjambi-remoteobjects-native-linux-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects-native-linux-x64/6.3.4/jar) - * [**qtjambi-remoteobjects-native-macos-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects-native-macos/6.3.4/jar) - * [**qtjambi-remoteobjects-native-android-x86-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects-native-android-x86/6.3.4/jar) - * [**qtjambi-remoteobjects-native-android-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects-native-android-x64/6.3.4/jar) - * [**qtjambi-remoteobjects-native-android-arm-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects-native-android-arm/6.3.4/jar) - * [**qtjambi-remoteobjects-native-android-arm64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects-native-android-arm64/6.3.4/jar) + * [**qtjambi-remoteobjects-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects/6.3.5/jar) + * [**qtjambi-remoteobjects-native-windows-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects-native-windows-x64/6.3.5/jar) + * [**qtjambi-remoteobjects-native-linux-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects-native-linux-x64/6.3.5/jar) + * [**qtjambi-remoteobjects-native-macos-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects-native-macos/6.3.5/jar) + * [**qtjambi-remoteobjects-native-android-x86-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects-native-android-x86/6.3.5/jar) + * [**qtjambi-remoteobjects-native-android-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects-native-android-x64/6.3.5/jar) + * [**qtjambi-remoteobjects-native-android-arm-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects-native-android-arm/6.3.5/jar) + * [**qtjambi-remoteobjects-native-android-arm64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects-native-android-arm64/6.3.5/jar) * [QtSCXML](https://doc.qt.io/qt-6/qtscxml-index.html) in module **qtjambi-scxml**: - * [**qtjambi-scxml-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml/6.3.4/jar) - * [**qtjambi-scxml-native-windows-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml-native-windows-x64/6.3.4/jar) - * [**qtjambi-scxml-native-linux-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml-native-linux-x64/6.3.4/jar) - * [**qtjambi-scxml-native-macos-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml-native-macos/6.3.4/jar) - * [**qtjambi-scxml-native-android-x86-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml-native-android-x86/6.3.4/jar) - * [**qtjambi-scxml-native-android-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml-native-android-x64/6.3.4/jar) - * [**qtjambi-scxml-native-android-arm-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml-native-android-arm/6.3.4/jar) - * [**qtjambi-scxml-native-android-arm64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml-native-android-arm64/6.3.4/jar) + * [**qtjambi-scxml-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml/6.3.5/jar) + * [**qtjambi-scxml-native-windows-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml-native-windows-x64/6.3.5/jar) + * [**qtjambi-scxml-native-linux-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml-native-linux-x64/6.3.5/jar) + * [**qtjambi-scxml-native-macos-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml-native-macos/6.3.5/jar) + * [**qtjambi-scxml-native-android-x86-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml-native-android-x86/6.3.5/jar) + * [**qtjambi-scxml-native-android-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml-native-android-x64/6.3.5/jar) + * [**qtjambi-scxml-native-android-arm-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml-native-android-arm/6.3.5/jar) + * [**qtjambi-scxml-native-android-arm64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml-native-android-arm64/6.3.5/jar) * [QtSensors](https://doc.qt.io/qt-6/qtsensors-index.html) in module **qtjambi-sensors**: - * [**qtjambi-sensors-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors/6.3.4/jar) - * [**qtjambi-sensors-native-windows-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors-native-windows-x64/6.3.4/jar) - * [**qtjambi-sensors-native-linux-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors-native-linux-x64/6.3.4/jar) - * [**qtjambi-sensors-native-macos-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors-native-macos/6.3.4/jar) - * [**qtjambi-sensors-native-android-x86-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors-native-android-x86/6.3.4/jar) - * [**qtjambi-sensors-native-android-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors-native-android-x64/6.3.4/jar) - * [**qtjambi-sensors-native-android-arm-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors-native-android-arm/6.3.4/jar) - * [**qtjambi-sensors-native-android-arm64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors-native-android-arm64/6.3.4/jar) + * [**qtjambi-sensors-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors/6.3.5/jar) + * [**qtjambi-sensors-native-windows-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors-native-windows-x64/6.3.5/jar) + * [**qtjambi-sensors-native-linux-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors-native-linux-x64/6.3.5/jar) + * [**qtjambi-sensors-native-macos-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors-native-macos/6.3.5/jar) + * [**qtjambi-sensors-native-android-x86-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors-native-android-x86/6.3.5/jar) + * [**qtjambi-sensors-native-android-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors-native-android-x64/6.3.5/jar) + * [**qtjambi-sensors-native-android-arm-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors-native-android-arm/6.3.5/jar) + * [**qtjambi-sensors-native-android-arm64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors-native-android-arm64/6.3.5/jar) * [QtSerialBus](https://doc.qt.io/qt-6/qtserialbus-index.html) in module **qtjambi-serialbus**: - * [**qtjambi-serialbus-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus/6.3.4/jar) - * [**qtjambi-serialbus-native-windows-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus-native-windows-x64/6.3.4/jar) - * [**qtjambi-serialbus-native-linux-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus-native-linux-x64/6.3.4/jar) - * [**qtjambi-serialbus-native-macos-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus-native-macos/6.3.4/jar) - * [**qtjambi-serialbus-native-android-x86-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus-native-android-x86/6.3.4/jar) - * [**qtjambi-serialbus-native-android-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus-native-android-x64/6.3.4/jar) - * [**qtjambi-serialbus-native-android-arm-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus-native-android-arm/6.3.4/jar) - * [**qtjambi-serialbus-native-android-arm64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus-native-android-arm64/6.3.4/jar) + * [**qtjambi-serialbus-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus/6.3.5/jar) + * [**qtjambi-serialbus-native-windows-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus-native-windows-x64/6.3.5/jar) + * [**qtjambi-serialbus-native-linux-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus-native-linux-x64/6.3.5/jar) + * [**qtjambi-serialbus-native-macos-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus-native-macos/6.3.5/jar) + * [**qtjambi-serialbus-native-android-x86-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus-native-android-x86/6.3.5/jar) + * [**qtjambi-serialbus-native-android-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus-native-android-x64/6.3.5/jar) + * [**qtjambi-serialbus-native-android-arm-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus-native-android-arm/6.3.5/jar) + * [**qtjambi-serialbus-native-android-arm64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus-native-android-arm64/6.3.5/jar) * [QtSerialPort](https://doc.qt.io/qt-6/qtserialport-index.html) in module **qtjambi-serialport**: - * [**qtjambi-serialport-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport/6.3.4/jar) - * [**qtjambi-serialport-native-windows-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport-native-windows-x64/6.3.4/jar) - * [**qtjambi-serialport-native-linux-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport-native-linux-x64/6.3.4/jar) - * [**qtjambi-serialport-native-macos-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport-native-macos/6.3.4/jar) - * [**qtjambi-serialport-native-android-x86-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport-native-android-x86/6.3.4/jar) - * [**qtjambi-serialport-native-android-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport-native-android-x64/6.3.4/jar) - * [**qtjambi-serialport-native-android-arm-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport-native-android-arm/6.3.4/jar) - * [**qtjambi-serialport-native-android-arm64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport-native-android-arm64/6.3.4/jar) + * [**qtjambi-serialport-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport/6.3.5/jar) + * [**qtjambi-serialport-native-windows-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport-native-windows-x64/6.3.5/jar) + * [**qtjambi-serialport-native-linux-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport-native-linux-x64/6.3.5/jar) + * [**qtjambi-serialport-native-macos-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport-native-macos/6.3.5/jar) + * [**qtjambi-serialport-native-android-x86-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport-native-android-x86/6.3.5/jar) + * [**qtjambi-serialport-native-android-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport-native-android-x64/6.3.5/jar) + * [**qtjambi-serialport-native-android-arm-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport-native-android-arm/6.3.5/jar) + * [**qtjambi-serialport-native-android-arm64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport-native-android-arm64/6.3.5/jar) * [QtSql](https://doc.qt.io/qt-6/qtsql-index.html) in module **qtjambi-sql**: - * [**qtjambi-sql-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql/6.3.4/jar) - * [**qtjambi-sql-native-windows-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql-native-windows-x64/6.3.4/jar) - * [**qtjambi-sql-native-linux-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql-native-linux-x64/6.3.4/jar) - * [**qtjambi-sql-native-macos-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql-native-macos/6.3.4/jar) - * [**qtjambi-sql-native-android-x86-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql-native-android-x86/6.3.4/jar) - * [**qtjambi-sql-native-android-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql-native-android-x64/6.3.4/jar) - * [**qtjambi-sql-native-android-arm-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql-native-android-arm/6.3.4/jar) - * [**qtjambi-sql-native-android-arm64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql-native-android-arm64/6.3.4/jar) + * [**qtjambi-sql-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql/6.3.5/jar) + * [**qtjambi-sql-native-windows-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql-native-windows-x64/6.3.5/jar) + * [**qtjambi-sql-native-linux-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql-native-linux-x64/6.3.5/jar) + * [**qtjambi-sql-native-macos-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql-native-macos/6.3.5/jar) + * [**qtjambi-sql-native-android-x86-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql-native-android-x86/6.3.5/jar) + * [**qtjambi-sql-native-android-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql-native-android-x64/6.3.5/jar) + * [**qtjambi-sql-native-android-arm-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql-native-android-arm/6.3.5/jar) + * [**qtjambi-sql-native-android-arm64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql-native-android-arm64/6.3.5/jar) * [QtSvg](https://doc.qt.io/qt-6/qtsvg-index.html) in module **qtjambi-svg**: - * [**qtjambi-svg-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg/6.3.4/jar) - * [**qtjambi-svg-native-windows-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg-native-windows-x64/6.3.4/jar) - * [**qtjambi-svg-native-linux-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg-native-linux-x64/6.3.4/jar) - * [**qtjambi-svg-native-macos-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg-native-macos/6.3.4/jar) - * [**qtjambi-svg-native-android-x86-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg-native-android-x86/6.3.4/jar) - * [**qtjambi-svg-native-android-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg-native-android-x64/6.3.4/jar) - * [**qtjambi-svg-native-android-arm-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg-native-android-arm/6.3.4/jar) - * [**qtjambi-svg-native-android-arm64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg-native-android-arm64/6.3.4/jar) + * [**qtjambi-svg-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg/6.3.5/jar) + * [**qtjambi-svg-native-windows-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg-native-windows-x64/6.3.5/jar) + * [**qtjambi-svg-native-linux-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg-native-linux-x64/6.3.5/jar) + * [**qtjambi-svg-native-macos-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg-native-macos/6.3.5/jar) + * [**qtjambi-svg-native-android-x86-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg-native-android-x86/6.3.5/jar) + * [**qtjambi-svg-native-android-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg-native-android-x64/6.3.5/jar) + * [**qtjambi-svg-native-android-arm-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg-native-android-arm/6.3.5/jar) + * [**qtjambi-svg-native-android-arm64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg-native-android-arm64/6.3.5/jar) * [QtSvgWidgets](https://doc.qt.io/qt-6/qtsvg-index.html) in module **qtjambi-svgwidgets**: - * [**qtjambi-svgwidgets-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svgwidgets/6.3.4/jar) - * [**qtjambi-svgwidgets-native-windows-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svgwidgets-native-windows-x64/6.3.4/jar) - * [**qtjambi-svgwidgets-native-linux-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svgwidgets-native-linux-x64/6.3.4/jar) - * [**qtjambi-svgwidgets-native-macos-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svgwidgets-native-macos/6.3.4/jar) - * [**qtjambi-svgwidgets-native-android-x86-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svgwidgets-native-android-x86/6.3.4/jar) - * [**qtjambi-svgwidgets-native-android-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svgwidgets-native-android-x64/6.3.4/jar) - * [**qtjambi-svgwidgets-native-android-arm-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svgwidgets-native-android-arm/6.3.4/jar) - * [**qtjambi-svgwidgets-native-android-arm64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svgwidgets-native-android-arm64/6.3.4/jar) + * [**qtjambi-svgwidgets-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svgwidgets/6.3.5/jar) + * [**qtjambi-svgwidgets-native-windows-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svgwidgets-native-windows-x64/6.3.5/jar) + * [**qtjambi-svgwidgets-native-linux-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svgwidgets-native-linux-x64/6.3.5/jar) + * [**qtjambi-svgwidgets-native-macos-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svgwidgets-native-macos/6.3.5/jar) + * [**qtjambi-svgwidgets-native-android-x86-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svgwidgets-native-android-x86/6.3.5/jar) + * [**qtjambi-svgwidgets-native-android-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svgwidgets-native-android-x64/6.3.5/jar) + * [**qtjambi-svgwidgets-native-android-arm-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svgwidgets-native-android-arm/6.3.5/jar) + * [**qtjambi-svgwidgets-native-android-arm64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svgwidgets-native-android-arm64/6.3.5/jar) * [QtStateMachine](https://doc.qt.io/qt-6/qtstatemachine-index.html) in module **qtjambi-statemachine**: - * [**qtjambi-statemachine-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-statemachine/6.3.4/jar) - * [**qtjambi-statemachine-native-windows-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-statemachine-native-windows-x64/6.3.4/jar) - * [**qtjambi-statemachine-native-linux-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-statemachine-native-linux-x64/6.3.4/jar) - * [**qtjambi-statemachine-native-macos-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-statemachine-native-macos/6.3.4/jar) - * [**qtjambi-statemachine-native-android-x86-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-statemachine-native-android-x86/6.3.4/jar) - * [**qtjambi-statemachine-native-android-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-statemachine-native-android-x64/6.3.4/jar) - * [**qtjambi-statemachine-native-android-arm-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-statemachine-native-android-arm/6.3.4/jar) - * [**qtjambi-statemachine-native-android-arm64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-statemachine-native-android-arm64/6.3.4/jar) + * [**qtjambi-statemachine-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-statemachine/6.3.5/jar) + * [**qtjambi-statemachine-native-windows-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-statemachine-native-windows-x64/6.3.5/jar) + * [**qtjambi-statemachine-native-linux-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-statemachine-native-linux-x64/6.3.5/jar) + * [**qtjambi-statemachine-native-macos-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-statemachine-native-macos/6.3.5/jar) + * [**qtjambi-statemachine-native-android-x86-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-statemachine-native-android-x86/6.3.5/jar) + * [**qtjambi-statemachine-native-android-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-statemachine-native-android-x64/6.3.5/jar) + * [**qtjambi-statemachine-native-android-arm-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-statemachine-native-android-arm/6.3.5/jar) + * [**qtjambi-statemachine-native-android-arm64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-statemachine-native-android-arm64/6.3.5/jar) * [QtUITools](https://doc.qt.io/qt-6/qtuitools-index.html) in module **qtjambi-uitools**: - * [**qtjambi-uitools-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools/6.3.4/jar) - * [**qtjambi-uitools-native-windows-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools-native-windows-x64/6.3.4/jar) - * [**qtjambi-uitools-native-linux-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools-native-linux-x64/6.3.4/jar) - * [**qtjambi-uitools-native-macos-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools-native-macos/6.3.4/jar) - * [**qtjambi-uitools-native-android-x86-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools-native-android-x86/6.3.4/jar) - * [**qtjambi-uitools-native-android-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools-native-android-x64/6.3.4/jar) - * [**qtjambi-uitools-native-android-arm-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools-native-android-arm/6.3.4/jar) - * [**qtjambi-uitools-native-android-arm64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools-native-android-arm64/6.3.4/jar) + * [**qtjambi-uitools-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools/6.3.5/jar) + * [**qtjambi-uitools-native-windows-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools-native-windows-x64/6.3.5/jar) + * [**qtjambi-uitools-native-linux-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools-native-linux-x64/6.3.5/jar) + * [**qtjambi-uitools-native-macos-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools-native-macos/6.3.5/jar) + * [**qtjambi-uitools-native-android-x86-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools-native-android-x86/6.3.5/jar) + * [**qtjambi-uitools-native-android-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools-native-android-x64/6.3.5/jar) + * [**qtjambi-uitools-native-android-arm-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools-native-android-arm/6.3.5/jar) + * [**qtjambi-uitools-native-android-arm64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools-native-android-arm64/6.3.5/jar) * [QtWebChannel](https://doc.qt.io/qt-6/qtwebchannel-index.html) in module **qtjambi-webchannel**: - * [**qtjambi-webchannel-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel/6.3.4/jar) - * [**qtjambi-webchannel-native-windows-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel-native-windows-x64/6.3.4/jar) - * [**qtjambi-webchannel-native-linux-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel-native-linux-x64/6.3.4/jar) - * [**qtjambi-webchannel-native-macos-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel-native-macos/6.3.4/jar) - * [**qtjambi-webchannel-native-android-x86-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel-native-android-x86/6.3.4/jar) - * [**qtjambi-webchannel-native-android-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel-native-android-x64/6.3.4/jar) - * [**qtjambi-webchannel-native-android-arm-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel-native-android-arm/6.3.4/jar) - * [**qtjambi-webchannel-native-android-arm64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel-native-android-arm64/6.3.4/jar) + * [**qtjambi-webchannel-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel/6.3.5/jar) + * [**qtjambi-webchannel-native-windows-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel-native-windows-x64/6.3.5/jar) + * [**qtjambi-webchannel-native-linux-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel-native-linux-x64/6.3.5/jar) + * [**qtjambi-webchannel-native-macos-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel-native-macos/6.3.5/jar) + * [**qtjambi-webchannel-native-android-x86-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel-native-android-x86/6.3.5/jar) + * [**qtjambi-webchannel-native-android-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel-native-android-x64/6.3.5/jar) + * [**qtjambi-webchannel-native-android-arm-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel-native-android-arm/6.3.5/jar) + * [**qtjambi-webchannel-native-android-arm64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel-native-android-arm64/6.3.5/jar) * [QtWebEngineCore](https://doc.qt.io/qt-6/qtwebengine-index.html) in module **qtjambi-webenginecore**: - * [**qtjambi-webenginecore-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginecore/6.3.4/jar) - * [**qtjambi-webenginecore-native-windows-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginecore-native-windows-x64/6.3.4/jar) - * [**qtjambi-webenginecore-native-linux-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginecore-native-linux-x64/6.3.4/jar) - * [**qtjambi-webenginecore-native-macos-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginecore-native-macos/6.3.4/jar) + * [**qtjambi-webenginecore-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginecore/6.3.5/jar) + * [**qtjambi-webenginecore-native-windows-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginecore-native-windows-x64/6.3.5/jar) + * [**qtjambi-webenginecore-native-linux-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginecore-native-linux-x64/6.3.5/jar) + * [**qtjambi-webenginecore-native-macos-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginecore-native-macos/6.3.5/jar) * [QtWebEngineWidgets](https://doc.qt.io/qt-6/qtwebengine-index.html) in module **qtjambi-webenginewidgets**: - * [**qtjambi-webenginewidgets-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginewidgets/6.3.4/jar) - * [**qtjambi-webenginewidgets-native-windows-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginewidgets-native-windows-x64/6.3.4/jar) - * [**qtjambi-webenginewidgets-native-linux-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginewidgets-native-linux-x64/6.3.4/jar) - * [**qtjambi-webenginewidgets-native-macos-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginewidgets-native-macos/6.3.4/jar) + * [**qtjambi-webenginewidgets-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginewidgets/6.3.5/jar) + * [**qtjambi-webenginewidgets-native-windows-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginewidgets-native-windows-x64/6.3.5/jar) + * [**qtjambi-webenginewidgets-native-linux-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginewidgets-native-linux-x64/6.3.5/jar) + * [**qtjambi-webenginewidgets-native-macos-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginewidgets-native-macos/6.3.5/jar) * [QtWebEngineQuick](https://doc.qt.io/qt-6/qtwebengine-index.html) in module **qtjambi-webenginequick**: - * [**qtjambi-webenginequick-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginequick/6.3.4/jar) - * [**qtjambi-webenginequick-native-windows-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginequick-native-windows-x64/6.3.4/jar) - * [**qtjambi-webenginequick-native-linux-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginequick-native-linux-x64/6.3.4/jar) - * [**qtjambi-webenginequick-native-macos-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginequick-native-macos/6.3.4/jar) + * [**qtjambi-webenginequick-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginequick/6.3.5/jar) + * [**qtjambi-webenginequick-native-windows-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginequick-native-windows-x64/6.3.5/jar) + * [**qtjambi-webenginequick-native-linux-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginequick-native-linux-x64/6.3.5/jar) + * [**qtjambi-webenginequick-native-macos-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginequick-native-macos/6.3.5/jar) * [QtWebSockets](https://doc.qt.io/qt-6/qtwebsockets-index.html) in module **qtjambi-websockets**: - * [**qtjambi-websockets-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets/6.3.4/jar) - * [**qtjambi-websockets-native-windows-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets-native-windows-x64/6.3.4/jar) - * [**qtjambi-websockets-native-linux-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets-native-linux-x64/6.3.4/jar) - * [**qtjambi-websockets-native-macos-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets-native-macos/6.3.4/jar) - * [**qtjambi-websockets-native-android-x86-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets-native-android-x86/6.3.4/jar) - * [**qtjambi-websockets-native-android-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets-native-android-x64/6.3.4/jar) - * [**qtjambi-websockets-native-android-arm-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets-native-android-arm/6.3.4/jar) - * [**qtjambi-websockets-native-android-arm64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets-native-android-arm64/6.3.4/jar) + * [**qtjambi-websockets-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets/6.3.5/jar) + * [**qtjambi-websockets-native-windows-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets-native-windows-x64/6.3.5/jar) + * [**qtjambi-websockets-native-linux-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets-native-linux-x64/6.3.5/jar) + * [**qtjambi-websockets-native-macos-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets-native-macos/6.3.5/jar) + * [**qtjambi-websockets-native-android-x86-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets-native-android-x86/6.3.5/jar) + * [**qtjambi-websockets-native-android-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets-native-android-x64/6.3.5/jar) + * [**qtjambi-websockets-native-android-arm-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets-native-android-arm/6.3.5/jar) + * [**qtjambi-websockets-native-android-arm64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets-native-android-arm64/6.3.5/jar) * [QtWebView](https://doc.qt.io/qt-6/qtwebview-index.html) in module **qtjambi-webview**: - * [**qtjambi-webview-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview/6.3.4/jar) - * [**qtjambi-webview-native-windows-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview-native-windows-x64/6.3.4/jar) - * [**qtjambi-webview-native-linux-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview-native-linux-x64/6.3.4/jar) - * [**qtjambi-webview-native-macos-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview-native-macos/6.3.4/jar) - * [**qtjambi-webview-native-android-x86-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview-native-android-x86/6.3.4/jar) - * [**qtjambi-webview-native-android-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview-native-android-x64/6.3.4/jar) - * [**qtjambi-webview-native-android-arm-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview-native-android-arm/6.3.4/jar) - * [**qtjambi-webview-native-android-arm64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview-native-android-arm64/6.3.4/jar) + * [**qtjambi-webview-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview/6.3.5/jar) + * [**qtjambi-webview-native-windows-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview-native-windows-x64/6.3.5/jar) + * [**qtjambi-webview-native-linux-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview-native-linux-x64/6.3.5/jar) + * [**qtjambi-webview-native-macos-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview-native-macos/6.3.5/jar) + * [**qtjambi-webview-native-android-x86-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview-native-android-x86/6.3.5/jar) + * [**qtjambi-webview-native-android-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview-native-android-x64/6.3.5/jar) + * [**qtjambi-webview-native-android-arm-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview-native-android-arm/6.3.5/jar) + * [**qtjambi-webview-native-android-arm64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview-native-android-arm64/6.3.5/jar) * [QtVirtualKeyboard](https://doc.qt.io/qt-6/qtvirtualkeyboard-index.html) in module **qtjambi-virtualkeyboard**: - * [**qtjambi-virtualkeyboard-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard/6.3.4/jar) - * [**qtjambi-virtualkeyboard-native-windows-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard-native-windows-x64/6.3.4/jar) - * [**qtjambi-virtualkeyboard-native-linux-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard-native-linux-x64/6.3.4/jar) - * [**qtjambi-virtualkeyboard-native-macos-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard-native-macos/6.3.4/jar) - * [**qtjambi-virtualkeyboard-native-android-x86-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard-native-android-x86/6.3.4/jar) - * [**qtjambi-virtualkeyboard-native-android-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard-native-android-x64/6.3.4/jar) - * [**qtjambi-virtualkeyboard-native-android-arm-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard-native-android-arm/6.3.4/jar) - * [**qtjambi-virtualkeyboard-native-android-arm64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard-native-android-arm64/6.3.4/jar) + * [**qtjambi-virtualkeyboard-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard/6.3.5/jar) + * [**qtjambi-virtualkeyboard-native-windows-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard-native-windows-x64/6.3.5/jar) + * [**qtjambi-virtualkeyboard-native-linux-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard-native-linux-x64/6.3.5/jar) + * [**qtjambi-virtualkeyboard-native-macos-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard-native-macos/6.3.5/jar) + * [**qtjambi-virtualkeyboard-native-android-x86-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard-native-android-x86/6.3.5/jar) + * [**qtjambi-virtualkeyboard-native-android-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard-native-android-x64/6.3.5/jar) + * [**qtjambi-virtualkeyboard-native-android-arm-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard-native-android-arm/6.3.5/jar) + * [**qtjambi-virtualkeyboard-native-android-arm64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard-native-android-arm64/6.3.5/jar) * [QtXml](https://doc.qt.io/qt-6/qtxml-index.html) in module **qtjambi-xml**: - * [**qtjambi-xml-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml/6.3.4/jar) - * [**qtjambi-xml-native-windows-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml-native-windows-x64/6.3.4/jar) - * [**qtjambi-xml-native-linux-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml-native-linux-x64/6.3.4/jar) - * [**qtjambi-xml-native-macos-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml-native-macos/6.3.4/jar) - * [**qtjambi-xml-native-android-x86-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml-native-android-x86/6.3.4/jar) - * [**qtjambi-xml-native-android-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml-native-android-x64/6.3.4/jar) - * [**qtjambi-xml-native-android-arm-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml-native-android-arm/6.3.4/jar) - * [**qtjambi-xml-native-android-arm64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml-native-android-arm64/6.3.4/jar) + * [**qtjambi-xml-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml/6.3.5/jar) + * [**qtjambi-xml-native-windows-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml-native-windows-x64/6.3.5/jar) + * [**qtjambi-xml-native-linux-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml-native-linux-x64/6.3.5/jar) + * [**qtjambi-xml-native-macos-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml-native-macos/6.3.5/jar) + * [**qtjambi-xml-native-android-x86-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml-native-android-x86/6.3.5/jar) + * [**qtjambi-xml-native-android-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml-native-android-x64/6.3.5/jar) + * [**qtjambi-xml-native-android-arm-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml-native-android-arm/6.3.5/jar) + * [**qtjambi-xml-native-android-arm64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml-native-android-arm64/6.3.5/jar) * [QtDesigner](https://doc.qt.io/qt-6/qtdesigner-manual.html) in module **qtjambi-designer**: - * [**qtjambi-designer-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer/6.3.4/jar) - * [**qtjambi-designer-native-windows-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer-native-windows-x64/6.3.4/jar) - * [**qtjambi-designer-native-linux-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer-native-linux-x64/6.3.4/jar) - * [**qtjambi-designer-native-macos-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer-native-macos/6.3.4/jar) - * [**qtjambi-designer-native-android-x86-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer-native-android-x86/6.3.4/jar) - * [**qtjambi-designer-native-android-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer-native-android-x64/6.3.4/jar) - * [**qtjambi-designer-native-android-arm-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer-native-android-arm/6.3.4/jar) - * [**qtjambi-designer-native-android-arm64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer-native-android-arm64/6.3.4/jar) + * [**qtjambi-designer-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer/6.3.5/jar) + * [**qtjambi-designer-native-windows-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer-native-windows-x64/6.3.5/jar) + * [**qtjambi-designer-native-linux-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer-native-linux-x64/6.3.5/jar) + * [**qtjambi-designer-native-macos-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer-native-macos/6.3.5/jar) + * [**qtjambi-designer-native-android-x86-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer-native-android-x86/6.3.5/jar) + * [**qtjambi-designer-native-android-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer-native-android-x64/6.3.5/jar) + * [**qtjambi-designer-native-android-arm-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer-native-android-arm/6.3.5/jar) + * [**qtjambi-designer-native-android-arm64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer-native-android-arm64/6.3.5/jar) * [QtPDF](https://doc.qt.io/qt-6/qtpdf-index.html) in modules **qtjambi-pdf** and **qtjambi-pdfwidgets**: - * [**qtjambi-pdf-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-pdf/6.3.4/jar) - * [**qtjambi-pdf-native-windows-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-pdf-native-windows-x64/6.3.4/jar) - * [**qtjambi-pdf-native-linux-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-pdf-native-linux-x64/6.3.4/jar) - * [**qtjambi-pdf-native-macos-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-pdf-native-macos/6.3.4/jar) - * [**qtjambi-pdfwidgets-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-pdfwidgets/6.3.4/jar) - * [**qtjambi-pdfwidgets-native-windows-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-pdfwidgets-native-windows-x64/6.3.4/jar) - * [**qtjambi-pdfwidgets-native-linux-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-pdfwidgets-native-linux-x64/6.3.4/jar) - * [**qtjambi-pdfwidgets-native-macos-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-pdfwidgets-native-macos/6.3.4/jar) + * [**qtjambi-pdf-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-pdf/6.3.5/jar) + * [**qtjambi-pdf-native-windows-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-pdf-native-windows-x64/6.3.5/jar) + * [**qtjambi-pdf-native-linux-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-pdf-native-linux-x64/6.3.5/jar) + * [**qtjambi-pdf-native-macos-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-pdf-native-macos/6.3.5/jar) + * [**qtjambi-pdfwidgets-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-pdfwidgets/6.3.5/jar) + * [**qtjambi-pdfwidgets-native-windows-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-pdfwidgets-native-windows-x64/6.3.5/jar) + * [**qtjambi-pdfwidgets-native-linux-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-pdfwidgets-native-linux-x64/6.3.5/jar) + * [**qtjambi-pdfwidgets-native-macos-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-pdfwidgets-native-macos/6.3.5/jar) ### Qt6 Platform-dependent Add-Ons * [Active Qt (Windows only)](https://doc.qt.io/qt-6/activeqt-manual.html) in module **qtjambi-activex**: - * [**qtjambi-activex-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-activex/6.3.4/jar) - * [**qtjambi-activex-native-windows-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-activex-native-windows-x64/6.3.4/jar) + * [**qtjambi-activex-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-activex/6.3.5/jar) + * [**qtjambi-activex-native-windows-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-activex-native-windows-x64/6.3.5/jar) ### Qt3D * [Qt3DCore](https://doc.qt.io/qt-6/qt3d-index.html) in module **qtjambi-qt3dcore**: - * [**qtjambi-qt3dcore-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore/6.3.4/jar) - * [**qtjambi-qt3dcore-native-windows-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore-native-windows-x64/6.3.4/jar) - * [**qtjambi-qt3dcore-native-linux-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore-native-linux-x64/6.3.4/jar) - * [**qtjambi-qt3dcore-native-macos-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore-native-macos/6.3.4/jar) - * [**qtjambi-qt3dcore-native-android-x86-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore-native-android-x86/6.3.4/jar) - * [**qtjambi-qt3dcore-native-android-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore-native-android-x64/6.3.4/jar) - * [**qtjambi-qt3dcore-native-android-arm-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore-native-android-arm/6.3.4/jar) - * [**qtjambi-qt3dcore-native-android-arm64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore-native-android-arm64/6.3.4/jar) + * [**qtjambi-qt3dcore-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore/6.3.5/jar) + * [**qtjambi-qt3dcore-native-windows-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore-native-windows-x64/6.3.5/jar) + * [**qtjambi-qt3dcore-native-linux-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore-native-linux-x64/6.3.5/jar) + * [**qtjambi-qt3dcore-native-macos-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore-native-macos/6.3.5/jar) + * [**qtjambi-qt3dcore-native-android-x86-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore-native-android-x86/6.3.5/jar) + * [**qtjambi-qt3dcore-native-android-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore-native-android-x64/6.3.5/jar) + * [**qtjambi-qt3dcore-native-android-arm-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore-native-android-arm/6.3.5/jar) + * [**qtjambi-qt3dcore-native-android-arm64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore-native-android-arm64/6.3.5/jar) * [Qt3DRender](https://doc.qt.io/qt-6/qt3d-index.html) in module **qtjambi-qt3drender**: - * [**qtjambi-qt3drender-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender/6.3.4/jar) - * [**qtjambi-qt3drender-native-windows-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender-native-windows-x64/6.3.4/jar) - * [**qtjambi-qt3drender-native-linux-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender-native-linux-x64/6.3.4/jar) - * [**qtjambi-qt3drender-native-macos-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender-native-macos/6.3.4/jar) - * [**qtjambi-qt3drender-native-android-x86-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender-native-android-x86/6.3.4/jar) - * [**qtjambi-qt3drender-native-android-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender-native-android-x64/6.3.4/jar) - * [**qtjambi-qt3drender-native-android-arm-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender-native-android-arm/6.3.4/jar) - * [**qtjambi-qt3drender-native-android-arm64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender-native-android-arm64/6.3.4/jar) + * [**qtjambi-qt3drender-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender/6.3.5/jar) + * [**qtjambi-qt3drender-native-windows-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender-native-windows-x64/6.3.5/jar) + * [**qtjambi-qt3drender-native-linux-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender-native-linux-x64/6.3.5/jar) + * [**qtjambi-qt3drender-native-macos-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender-native-macos/6.3.5/jar) + * [**qtjambi-qt3drender-native-android-x86-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender-native-android-x86/6.3.5/jar) + * [**qtjambi-qt3drender-native-android-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender-native-android-x64/6.3.5/jar) + * [**qtjambi-qt3drender-native-android-arm-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender-native-android-arm/6.3.5/jar) + * [**qtjambi-qt3drender-native-android-arm64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender-native-android-arm64/6.3.5/jar) * [Qt3DAnimation](https://doc.qt.io/qt-6/qt3d-index.html) in module **qtjambi-qt3danimation**: - * [**qtjambi-qt3danimation-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation/6.3.4/jar) - * [**qtjambi-qt3danimation-native-windows-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation-native-windows-x64/6.3.4/jar) - * [**qtjambi-qt3danimation-native-linux-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation-native-linux-x64/6.3.4/jar) - * [**qtjambi-qt3danimation-native-macos-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation-native-macos/6.3.4/jar) - * [**qtjambi-qt3danimation-native-android-x86-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation-native-android-x86/6.3.4/jar) - * [**qtjambi-qt3danimation-native-android-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation-native-android-x64/6.3.4/jar) - * [**qtjambi-qt3danimation-native-android-arm-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation-native-android-arm/6.3.4/jar) - * [**qtjambi-qt3danimation-native-android-arm64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation-native-android-arm64/6.3.4/jar) + * [**qtjambi-qt3danimation-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation/6.3.5/jar) + * [**qtjambi-qt3danimation-native-windows-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation-native-windows-x64/6.3.5/jar) + * [**qtjambi-qt3danimation-native-linux-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation-native-linux-x64/6.3.5/jar) + * [**qtjambi-qt3danimation-native-macos-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation-native-macos/6.3.5/jar) + * [**qtjambi-qt3danimation-native-android-x86-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation-native-android-x86/6.3.5/jar) + * [**qtjambi-qt3danimation-native-android-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation-native-android-x64/6.3.5/jar) + * [**qtjambi-qt3danimation-native-android-arm-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation-native-android-arm/6.3.5/jar) + * [**qtjambi-qt3danimation-native-android-arm64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation-native-android-arm64/6.3.5/jar) * [Qt3DExtras](https://doc.qt.io/qt-6/qt3d-index.html) in module **qtjambi-qt3dextras**: - * [**qtjambi-qt3dextras-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras/6.3.4/jar) - * [**qtjambi-qt3dextras-native-windows-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras-native-windows-x64/6.3.4/jar) - * [**qtjambi-qt3dextras-native-linux-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras-native-linux-x64/6.3.4/jar) - * [**qtjambi-qt3dextras-native-macos-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras-native-macos/6.3.4/jar) - * [**qtjambi-qt3dextras-native-android-x86-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras-native-android-x86/6.3.4/jar) - * [**qtjambi-qt3dextras-native-android-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras-native-android-x64/6.3.4/jar) - * [**qtjambi-qt3dextras-native-android-arm-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras-native-android-arm/6.3.4/jar) - * [**qtjambi-qt3dextras-native-android-arm64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras-native-android-arm64/6.3.4/jar) + * [**qtjambi-qt3dextras-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras/6.3.5/jar) + * [**qtjambi-qt3dextras-native-windows-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras-native-windows-x64/6.3.5/jar) + * [**qtjambi-qt3dextras-native-linux-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras-native-linux-x64/6.3.5/jar) + * [**qtjambi-qt3dextras-native-macos-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras-native-macos/6.3.5/jar) + * [**qtjambi-qt3dextras-native-android-x86-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras-native-android-x86/6.3.5/jar) + * [**qtjambi-qt3dextras-native-android-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras-native-android-x64/6.3.5/jar) + * [**qtjambi-qt3dextras-native-android-arm-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras-native-android-arm/6.3.5/jar) + * [**qtjambi-qt3dextras-native-android-arm64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras-native-android-arm64/6.3.5/jar) * [Qt3DInput](https://doc.qt.io/qt-6/qt3d-index.html) in module **qtjambi-qt3dinput**: - * [**qtjambi-qt3dinput-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput/6.3.4/jar) - * [**qtjambi-qt3dinput-native-windows-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput-native-windows-x64/6.3.4/jar) - * [**qtjambi-qt3dinput-native-linux-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput-native-linux-x64/6.3.4/jar) - * [**qtjambi-qt3dinput-native-macos-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput-native-macos/6.3.4/jar) - * [**qtjambi-qt3dinput-native-android-x86-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput-native-android-x86/6.3.4/jar) - * [**qtjambi-qt3dinput-native-android-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput-native-android-x64/6.3.4/jar) - * [**qtjambi-qt3dinput-native-android-arm-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput-native-android-arm/6.3.4/jar) - * [**qtjambi-qt3dinput-native-android-arm64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput-native-android-arm64/6.3.4/jar) + * [**qtjambi-qt3dinput-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput/6.3.5/jar) + * [**qtjambi-qt3dinput-native-windows-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput-native-windows-x64/6.3.5/jar) + * [**qtjambi-qt3dinput-native-linux-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput-native-linux-x64/6.3.5/jar) + * [**qtjambi-qt3dinput-native-macos-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput-native-macos/6.3.5/jar) + * [**qtjambi-qt3dinput-native-android-x86-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput-native-android-x86/6.3.5/jar) + * [**qtjambi-qt3dinput-native-android-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput-native-android-x64/6.3.5/jar) + * [**qtjambi-qt3dinput-native-android-arm-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput-native-android-arm/6.3.5/jar) + * [**qtjambi-qt3dinput-native-android-arm64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput-native-android-arm64/6.3.5/jar) * [Qt3DLogic](https://doc.qt.io/qt-6/qt3d-index.html) in module **qtjambi-qt3dlogic**: - * [**qtjambi-qt3dlogic-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic/6.3.4/jar) - * [**qtjambi-qt3dlogic-native-windows-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic-native-windows-x64/6.3.4/jar) - * [**qtjambi-qt3dlogic-native-linux-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic-native-linux-x64/6.3.4/jar) - * [**qtjambi-qt3dlogic-native-macos-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic-native-macos/6.3.4/jar) - * [**qtjambi-qt3dlogic-native-android-x86-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic-native-android-x86/6.3.4/jar) - * [**qtjambi-qt3dlogic-native-android-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic-native-android-x64/6.3.4/jar) - * [**qtjambi-qt3dlogic-native-android-arm-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic-native-android-arm/6.3.4/jar) - * [**qtjambi-qt3dlogic-native-android-arm64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic-native-android-arm64/6.3.4/jar) + * [**qtjambi-qt3dlogic-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic/6.3.5/jar) + * [**qtjambi-qt3dlogic-native-windows-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic-native-windows-x64/6.3.5/jar) + * [**qtjambi-qt3dlogic-native-linux-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic-native-linux-x64/6.3.5/jar) + * [**qtjambi-qt3dlogic-native-macos-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic-native-macos/6.3.5/jar) + * [**qtjambi-qt3dlogic-native-android-x86-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic-native-android-x86/6.3.5/jar) + * [**qtjambi-qt3dlogic-native-android-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic-native-android-x64/6.3.5/jar) + * [**qtjambi-qt3dlogic-native-android-arm-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic-native-android-arm/6.3.5/jar) + * [**qtjambi-qt3dlogic-native-android-arm64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic-native-android-arm64/6.3.5/jar) * [Qt3DQuick](https://doc.qt.io/qt-6/qt3d-index.html) in module **qtjambi-qt3dquick**: - * [**qtjambi-qt3dquick-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick/6.3.4/jar) - * [**qtjambi-qt3dquick-native-windows-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick-native-windows-x64/6.3.4/jar) - * [**qtjambi-qt3dquick-native-linux-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick-native-linux-x64/6.3.4/jar) - * [**qtjambi-qt3dquick-native-macos-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick-native-macos/6.3.4/jar) - * [**qtjambi-qt3dquick-native-android-x86-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick-native-android-x86/6.3.4/jar) - * [**qtjambi-qt3dquick-native-android-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick-native-android-x64/6.3.4/jar) - * [**qtjambi-qt3dquick-native-android-arm-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick-native-android-arm/6.3.4/jar) - * [**qtjambi-qt3dquick-native-android-arm64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick-native-android-arm64/6.3.4/jar) + * [**qtjambi-qt3dquick-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick/6.3.5/jar) + * [**qtjambi-qt3dquick-native-windows-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick-native-windows-x64/6.3.5/jar) + * [**qtjambi-qt3dquick-native-linux-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick-native-linux-x64/6.3.5/jar) + * [**qtjambi-qt3dquick-native-macos-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick-native-macos/6.3.5/jar) + * [**qtjambi-qt3dquick-native-android-x86-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick-native-android-x86/6.3.5/jar) + * [**qtjambi-qt3dquick-native-android-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick-native-android-x64/6.3.5/jar) + * [**qtjambi-qt3dquick-native-android-arm-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick-native-android-arm/6.3.5/jar) + * [**qtjambi-qt3dquick-native-android-arm64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick-native-android-arm64/6.3.5/jar) * [Qt3DQuickExtras](https://doc.qt.io/qt-6/qt3d-index.html) in module **qtjambi-qt3dquickextras**: - * [**qtjambi-qt3dquickextras-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras/6.3.4/jar) - * [**qtjambi-qt3dquickextras-native-windows-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras-native-windows-x64/6.3.4/jar) - * [**qtjambi-qt3dquickextras-native-linux-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras-native-linux-x64/6.3.4/jar) - * [**qtjambi-qt3dquickextras-native-macos-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras-native-macos/6.3.4/jar) - * [**qtjambi-qt3dquickextras-native-android-x86-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras-native-android-x86/6.3.4/jar) - * [**qtjambi-qt3dquickextras-native-android-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras-native-android-x64/6.3.4/jar) - * [**qtjambi-qt3dquickextras-native-android-arm-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras-native-android-arm/6.3.4/jar) - * [**qtjambi-qt3dquickextras-native-android-arm64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras-native-android-arm64/6.3.4/jar) + * [**qtjambi-qt3dquickextras-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras/6.3.5/jar) + * [**qtjambi-qt3dquickextras-native-windows-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras-native-windows-x64/6.3.5/jar) + * [**qtjambi-qt3dquickextras-native-linux-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras-native-linux-x64/6.3.5/jar) + * [**qtjambi-qt3dquickextras-native-macos-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras-native-macos/6.3.5/jar) + * [**qtjambi-qt3dquickextras-native-android-x86-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras-native-android-x86/6.3.5/jar) + * [**qtjambi-qt3dquickextras-native-android-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras-native-android-x64/6.3.5/jar) + * [**qtjambi-qt3dquickextras-native-android-arm-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras-native-android-arm/6.3.5/jar) + * [**qtjambi-qt3dquickextras-native-android-arm64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras-native-android-arm64/6.3.5/jar) * [Qt3DQuickScene3D](https://doc.qt.io/qt-6/qt3d-index.html) in module **qtjambi-qt3dquickscene2d**: - * [**qtjambi-qt3dquickscene2d-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d/6.3.4/jar) - * [**qtjambi-qt3dquickscene2d-native-windows-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d-native-windows-x64/6.3.4/jar) - * [**qtjambi-qt3dquickscene2d-native-linux-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d-native-linux-x64/6.3.4/jar) - * [**qtjambi-qt3dquickscene2d-native-macos-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d-native-macos/6.3.4/jar) - * [**qtjambi-qt3dquickscene2d-native-android-x86-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d-native-android-x86/6.3.4/jar) - * [**qtjambi-qt3dquickscene2d-native-android-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d-native-android-x64/6.3.4/jar) - * [**qtjambi-qt3dquickscene2d-native-android-arm-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d-native-android-arm/6.3.4/jar) - * [**qtjambi-qt3dquickscene2d-native-android-arm64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d-native-android-arm64/6.3.4/jar) + * [**qtjambi-qt3dquickscene2d-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d/6.3.5/jar) + * [**qtjambi-qt3dquickscene2d-native-windows-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d-native-windows-x64/6.3.5/jar) + * [**qtjambi-qt3dquickscene2d-native-linux-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d-native-linux-x64/6.3.5/jar) + * [**qtjambi-qt3dquickscene2d-native-macos-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d-native-macos/6.3.5/jar) + * [**qtjambi-qt3dquickscene2d-native-android-x86-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d-native-android-x86/6.3.5/jar) + * [**qtjambi-qt3dquickscene2d-native-android-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d-native-android-x64/6.3.5/jar) + * [**qtjambi-qt3dquickscene2d-native-android-arm-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d-native-android-arm/6.3.5/jar) + * [**qtjambi-qt3dquickscene2d-native-android-arm64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d-native-android-arm64/6.3.5/jar) ### QtJambi Plugins * JDBC Sql Plugin: - * [**qtjambi-plugin-qsqljdbc-windows-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-windows-x64/6.3.4/jar) - * [**qtjambi-plugin-qsqljdbc-linux-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-linux-x64/6.3.4/jar) - * [**qtjambi-plugin-qsqljdbc-macos-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-macos/6.3.4/jar) - * [**qtjambi-plugin-qsqljdbc-native-android-common-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-native-android-common/6.3.4/jar) - * [**qtjambi-plugin-qsqljdbc-native-android-x86-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-native-android-x86/6.3.4/jar) - * [**qtjambi-plugin-qsqljdbc-native-android-x86-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-native-android-x86/6.3.4/jar) - * [**qtjambi-plugin-qsqljdbc-native-android-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-native-android-x64/6.3.4/jar) - * [**qtjambi-plugin-qsqljdbc-native-android-arm-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-native-android-arm/6.3.4/jar) - * [**qtjambi-plugin-qsqljdbc-native-android-arm64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-native-android-arm64/6.3.4/jar) + * [**qtjambi-plugin-qsqljdbc-windows-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-windows-x64/6.3.5/jar) + * [**qtjambi-plugin-qsqljdbc-linux-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-linux-x64/6.3.5/jar) + * [**qtjambi-plugin-qsqljdbc-macos-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-macos/6.3.5/jar) + * [**qtjambi-plugin-qsqljdbc-native-android-common-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-native-android-common/6.3.5/jar) + * [**qtjambi-plugin-qsqljdbc-native-android-x86-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-native-android-x86/6.3.5/jar) + * [**qtjambi-plugin-qsqljdbc-native-android-x86-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-native-android-x86/6.3.5/jar) + * [**qtjambi-plugin-qsqljdbc-native-android-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-native-android-x64/6.3.5/jar) + * [**qtjambi-plugin-qsqljdbc-native-android-arm-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-native-android-arm/6.3.5/jar) + * [**qtjambi-plugin-qsqljdbc-native-android-arm64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-native-android-arm64/6.3.5/jar) ### QtJambi Tools * [QtJambi User Interface Compiler (UIC)](https://doc.qt.io/qt-6/designer-using-a-ui-file.html#compile-time-form-processing): - * [**qtjambi-uic-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uic/6.3.4/jar) - * [**qtjambi-uic-native-windows-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uic-native-windows-x64/6.3.4/jar) - * [**qtjambi-uic-native-linux-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uic-native-linux-x64/6.3.4/jar) - * [**qtjambi-uic-native-macos-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uic-native-macos/6.3.4/jar) - * [**qtjambi-uic-native-android-x86-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uic-native-android-x86/6.3.4/jar) - * [**qtjambi-uic-native-android-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uic-native-android-x64/6.3.4/jar) - * [**qtjambi-uic-native-android-arm-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uic-native-android-arm/6.3.4/jar) - * [**qtjambi-uic-native-android-arm64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uic-native-android-arm64/6.3.4/jar) + * [**qtjambi-uic-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uic/6.3.5/jar) + * [**qtjambi-uic-native-windows-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uic-native-windows-x64/6.3.5/jar) + * [**qtjambi-uic-native-linux-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uic-native-linux-x64/6.3.5/jar) + * [**qtjambi-uic-native-macos-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uic-native-macos/6.3.5/jar) + * [**qtjambi-uic-native-android-x86-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uic-native-android-x86/6.3.5/jar) + * [**qtjambi-uic-native-android-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uic-native-android-x64/6.3.5/jar) + * [**qtjambi-uic-native-android-arm-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uic-native-android-arm/6.3.5/jar) + * [**qtjambi-uic-native-android-arm64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uic-native-android-arm64/6.3.5/jar) * QtJambi Deployer: - * [**qtjambi-deployer-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer/6.3.4/jar) - * [**qtjambi-deployer-native-windows-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer-native-windows-x64/6.3.4/jar) - * [**qtjambi-deployer-native-linux-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer-native-linux-x64/6.3.4/jar) - * [**qtjambi-deployer-native-macos-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer-native-macos/6.3.4/jar) - * [**qtjambi-deployer-native-android-x86-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer-native-android-x86/6.3.4/jar) - * [**qtjambi-deployer-native-android-x64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer-native-android-x64/6.3.4/jar) - * [**qtjambi-deployer-native-android-arm-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer-native-android-arm/6.3.4/jar) - * [**qtjambi-deployer-native-android-arm64-6.3.4.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer-native-android-arm64/6.3.4/jar) + * [**qtjambi-deployer-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer/6.3.5/jar) + * [**qtjambi-deployer-native-windows-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer-native-windows-x64/6.3.5/jar) + * [**qtjambi-deployer-native-linux-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer-native-linux-x64/6.3.5/jar) + * [**qtjambi-deployer-native-macos-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer-native-macos/6.3.5/jar) + * [**qtjambi-deployer-native-android-x86-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer-native-android-x86/6.3.5/jar) + * [**qtjambi-deployer-native-android-x64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer-native-android-x64/6.3.5/jar) + * [**qtjambi-deployer-native-android-arm-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer-native-android-arm/6.3.5/jar) + * [**qtjambi-deployer-native-android-arm64-6.3.5.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer-native-android-arm64/6.3.5/jar) ## QtJambi for Qt 6.2 -QtJambi 6.2.7 requires Qt 6.2.x whereas x can be any patch version. +QtJambi 6.2.8 requires Qt 6.2.x whereas x can be any patch version. Following Qt 6.2 modules are provided by QtJambi: ### Qt6 Essentials * [QtCore](https://doc.qt.io/qt-6/qtcore-index.html), [QtGui](https://doc.qt.io/qt-6/qtgui-index.html) and [QtWidgets](https://doc.qt.io/qt-6/qtwidgets-index.html) in module **qtjambi**: - * [**qtjambi-6.2.7a.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi/6.2.7a/jar) - * [**qtjambi-native-windows-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-native-windows-x64/6.2.7/jar) - * [**qtjambi-native-linux-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-native-linux-x64/6.2.7/jar) - * [**qtjambi-native-macos-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-native-macos/6.2.7/jar) - * [**qtjambi-native-android-x86-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-native-android-x86/6.2.7/jar) - * [**qtjambi-native-android-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-native-android-x64/6.2.7/jar) - * [**qtjambi-native-android-arm-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-native-android-arm/6.2.7/jar) - * [**qtjambi-native-android-arm64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-native-android-arm64/6.2.7/jar) + * [**qtjambi-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi/6.2.8/jar) + * [**qtjambi-native-windows-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-native-windows-x64/6.2.8/jar) + * [**qtjambi-native-linux-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-native-linux-x64/6.2.8/jar) + * [**qtjambi-native-macos-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-native-macos/6.2.8/jar) + * [**qtjambi-native-android-x86-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-native-android-x86/6.2.8/jar) + * [**qtjambi-native-android-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-native-android-x64/6.2.8/jar) + * [**qtjambi-native-android-arm-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-native-android-arm/6.2.8/jar) + * [**qtjambi-native-android-arm64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-native-android-arm64/6.2.8/jar) * [QtDBus](https://doc.qt.io/qt-6/qtdbus-index.html) in module **qtjambi-dbus**: - * [**qtjambi-dbus-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-dbus/6.2.7/jar) - * [**qtjambi-dbus-native-windows-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-dbus-native-windows-x64/6.2.7/jar) - * [**qtjambi-dbus-native-linux-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-dbus-native-linux-x64/6.2.7/jar) - * [**qtjambi-dbus-native-macos-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-dbus-native-macos/6.2.7/jar) - * [**qtjambi-dbus-native-android-x86-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-dbus-native-android-x86/6.2.7/jar) - * [**qtjambi-dbus-native-android-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-dbus-native-android-x64/6.2.7/jar) - * [**qtjambi-dbus-native-android-arm-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-dbus-native-android-arm/6.2.7/jar) - * [**qtjambi-dbus-native-android-arm64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-dbus-native-android-arm64/6.2.7/jar) + * [**qtjambi-dbus-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-dbus/6.2.8/jar) + * [**qtjambi-dbus-native-windows-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-dbus-native-windows-x64/6.2.8/jar) + * [**qtjambi-dbus-native-linux-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-dbus-native-linux-x64/6.2.8/jar) + * [**qtjambi-dbus-native-macos-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-dbus-native-macos/6.2.8/jar) + * [**qtjambi-dbus-native-android-x86-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-dbus-native-android-x86/6.2.8/jar) + * [**qtjambi-dbus-native-android-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-dbus-native-android-x64/6.2.8/jar) + * [**qtjambi-dbus-native-android-arm-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-dbus-native-android-arm/6.2.8/jar) + * [**qtjambi-dbus-native-android-arm64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-dbus-native-android-arm64/6.2.8/jar) * [QtNetwork](https://doc.qt.io/qt-6/qtnetwork-index.html) in module **qtjambi-network**: - * [**qtjambi-network-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network/6.2.7/jar) - * [**qtjambi-network-native-windows-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network-native-windows-x64/6.2.7/jar) - * [**qtjambi-network-native-linux-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network-native-linux-x64/6.2.7/jar) - * [**qtjambi-network-native-macos-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network-native-macos/6.2.7/jar) - * [**qtjambi-network-native-android-x86-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network-native-android-x86/6.2.7/jar) - * [**qtjambi-network-native-android-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network-native-android-x64/6.2.7/jar) - * [**qtjambi-network-native-android-arm-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network-native-android-arm/6.2.7/jar) - * [**qtjambi-network-native-android-arm64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network-native-android-arm64/6.2.7/jar) + * [**qtjambi-network-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network/6.2.8/jar) + * [**qtjambi-network-native-windows-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network-native-windows-x64/6.2.8/jar) + * [**qtjambi-network-native-linux-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network-native-linux-x64/6.2.8/jar) + * [**qtjambi-network-native-macos-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network-native-macos/6.2.8/jar) + * [**qtjambi-network-native-android-x86-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network-native-android-x86/6.2.8/jar) + * [**qtjambi-network-native-android-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network-native-android-x64/6.2.8/jar) + * [**qtjambi-network-native-android-arm-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network-native-android-arm/6.2.8/jar) + * [**qtjambi-network-native-android-arm64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network-native-android-arm64/6.2.8/jar) * [QtQml](https://doc.qt.io/qt-6/qtqml-index.html) in module **qtjambi-qml**: - * [**qtjambi-qml-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml/6.2.7/jar) - * [**qtjambi-qml-native-windows-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml-native-windows-x64/6.2.7/jar) - * [**qtjambi-qml-native-linux-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml-native-linux-x64/6.2.7/jar) - * [**qtjambi-qml-native-macos-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml-native-macos/6.2.7/jar) - * [**qtjambi-qml-native-android-x86-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml-native-android-x86/6.2.7/jar) - * [**qtjambi-qml-native-android-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml-native-android-x64/6.2.7/jar) - * [**qtjambi-qml-native-android-arm-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml-native-android-arm/6.2.7/jar) - * [**qtjambi-qml-native-android-arm64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml-native-android-arm64/6.2.7/jar) + * [**qtjambi-qml-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml/6.2.8/jar) + * [**qtjambi-qml-native-windows-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml-native-windows-x64/6.2.8/jar) + * [**qtjambi-qml-native-linux-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml-native-linux-x64/6.2.8/jar) + * [**qtjambi-qml-native-macos-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml-native-macos/6.2.8/jar) + * [**qtjambi-qml-native-android-x86-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml-native-android-x86/6.2.8/jar) + * [**qtjambi-qml-native-android-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml-native-android-x64/6.2.8/jar) + * [**qtjambi-qml-native-android-arm-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml-native-android-arm/6.2.8/jar) + * [**qtjambi-qml-native-android-arm64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml-native-android-arm64/6.2.8/jar) * [QtQuick](https://doc.qt.io/qt-6/qtquick-index.html) in module **qtjambi-quick**: - * [**qtjambi-quick-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick/6.2.7/jar) - * [**qtjambi-quick-native-windows-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick-native-windows-x64/6.2.7/jar) - * [**qtjambi-quick-native-linux-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick-native-linux-x64/6.2.7/jar) - * [**qtjambi-quick-native-macos-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick-native-macos/6.2.7/jar) - * [**qtjambi-quick-native-android-x86-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick-native-android-x86/6.2.7/jar) - * [**qtjambi-quick-native-android-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick-native-android-x64/6.2.7/jar) - * [**qtjambi-quick-native-android-arm-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick-native-android-arm/6.2.7/jar) - * [**qtjambi-quick-native-android-arm64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick-native-android-arm64/6.2.7/jar) + * [**qtjambi-quick-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick/6.2.8/jar) + * [**qtjambi-quick-native-windows-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick-native-windows-x64/6.2.8/jar) + * [**qtjambi-quick-native-linux-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick-native-linux-x64/6.2.8/jar) + * [**qtjambi-quick-native-macos-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick-native-macos/6.2.8/jar) + * [**qtjambi-quick-native-android-x86-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick-native-android-x86/6.2.8/jar) + * [**qtjambi-quick-native-android-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick-native-android-x64/6.2.8/jar) + * [**qtjambi-quick-native-android-arm-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick-native-android-arm/6.2.8/jar) + * [**qtjambi-quick-native-android-arm64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick-native-android-arm64/6.2.8/jar) * [QtQuickControls](https://doc.qt.io/qt-6/qtquickcontrols-index.html) in module **qtjambi-quickcontrols**: - * [**qtjambi-quickcontrols-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols/6.2.7/jar) - * [**qtjambi-quickcontrols-native-windows-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols-native-windows-x64/6.2.7/jar) - * [**qtjambi-quickcontrols-native-linux-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols-native-linux-x64/6.2.7/jar) - * [**qtjambi-quickcontrols-native-macos-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols-native-macos/6.2.7/jar) - * [**qtjambi-quickcontrols-native-android-x86-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols-native-android-x86/6.2.7/jar) - * [**qtjambi-quickcontrols-native-android-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols-native-android-x64/6.2.7/jar) - * [**qtjambi-quickcontrols-native-android-arm-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols-native-android-arm/6.2.7/jar) - * [**qtjambi-quickcontrols-native-android-arm64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols-native-android-arm64/6.2.7/jar) + * [**qtjambi-quickcontrols-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols/6.2.8/jar) + * [**qtjambi-quickcontrols-native-windows-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols-native-windows-x64/6.2.8/jar) + * [**qtjambi-quickcontrols-native-linux-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols-native-linux-x64/6.2.8/jar) + * [**qtjambi-quickcontrols-native-macos-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols-native-macos/6.2.8/jar) + * [**qtjambi-quickcontrols-native-android-x86-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols-native-android-x86/6.2.8/jar) + * [**qtjambi-quickcontrols-native-android-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols-native-android-x64/6.2.8/jar) + * [**qtjambi-quickcontrols-native-android-arm-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols-native-android-arm/6.2.8/jar) + * [**qtjambi-quickcontrols-native-android-arm64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols-native-android-arm64/6.2.8/jar) * [QtQuickTest](https://doc.qt.io/qt-6/qtquicktest-index.html) in module **qtjambi-quicktest**: - * [**qtjambi-quicktest-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest/6.2.7/jar) - * [**qtjambi-quicktest-native-windows-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest-native-windows-x64/6.2.7/jar) - * [**qtjambi-quicktest-native-linux-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest-native-linux-x64/6.2.7/jar) - * [**qtjambi-quicktest-native-macos-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest-native-macos/6.2.7/jar) - * [**qtjambi-quicktest-native-android-x86-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest-native-android-x86/6.2.7/jar) - * [**qtjambi-quicktest-native-android-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest-native-android-x64/6.2.7/jar) - * [**qtjambi-quicktest-native-android-arm-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest-native-android-arm/6.2.7/jar) - * [**qtjambi-quicktest-native-android-arm64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest-native-android-arm64/6.2.7/jar) + * [**qtjambi-quicktest-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest/6.2.8/jar) + * [**qtjambi-quicktest-native-windows-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest-native-windows-x64/6.2.8/jar) + * [**qtjambi-quicktest-native-linux-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest-native-linux-x64/6.2.8/jar) + * [**qtjambi-quicktest-native-macos-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest-native-macos/6.2.8/jar) + * [**qtjambi-quicktest-native-android-x86-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest-native-android-x86/6.2.8/jar) + * [**qtjambi-quicktest-native-android-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest-native-android-x64/6.2.8/jar) + * [**qtjambi-quicktest-native-android-arm-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest-native-android-arm/6.2.8/jar) + * [**qtjambi-quicktest-native-android-arm64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest-native-android-arm64/6.2.8/jar) * [QtTest](https://doc.qt.io/qt-6/qttest-index.html) in module **qtjambi-test**: - * [**qtjambi-test-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test/6.2.7/jar) - * [**qtjambi-test-native-windows-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test-native-windows-x64/6.2.7/jar) - * [**qtjambi-test-native-linux-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test-native-linux-x64/6.2.7/jar) - * [**qtjambi-test-native-macos-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test-native-macos/6.2.7/jar) - * [**qtjambi-test-native-android-x86-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test-native-android-x86/6.2.7/jar) - * [**qtjambi-test-native-android-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test-native-android-x64/6.2.7/jar) - * [**qtjambi-test-native-android-arm-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test-native-android-arm/6.2.7/jar) - * [**qtjambi-test-native-android-arm64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test-native-android-arm64/6.2.7/jar) + * [**qtjambi-test-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test/6.2.8/jar) + * [**qtjambi-test-native-windows-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test-native-windows-x64/6.2.8/jar) + * [**qtjambi-test-native-linux-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test-native-linux-x64/6.2.8/jar) + * [**qtjambi-test-native-macos-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test-native-macos/6.2.8/jar) + * [**qtjambi-test-native-android-x86-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test-native-android-x86/6.2.8/jar) + * [**qtjambi-test-native-android-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test-native-android-x64/6.2.8/jar) + * [**qtjambi-test-native-android-arm-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test-native-android-arm/6.2.8/jar) + * [**qtjambi-test-native-android-arm64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test-native-android-arm64/6.2.8/jar) ### Qt6 Add-Ons * [QtBluetooth](https://doc.qt.io/qt-6/qtbluetooth-index.html) in module **qtjambi-bluetooth**: - * [**qtjambi-bluetooth-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth/6.2.7/jar) - * [**qtjambi-bluetooth-native-windows-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth-native-windows-x64/6.2.7/jar) - * [**qtjambi-bluetooth-native-linux-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth-native-linux-x64/6.2.7/jar) - * [**qtjambi-bluetooth-native-macos-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth-native-macos/6.2.7/jar) - * [**qtjambi-bluetooth-native-android-x86-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth-native-android-x86/6.2.7/jar) - * [**qtjambi-bluetooth-native-android-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth-native-android-x64/6.2.7/jar) - * [**qtjambi-bluetooth-native-android-arm-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth-native-android-arm/6.2.7/jar) - * [**qtjambi-bluetooth-native-android-arm64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth-native-android-arm64/6.2.7/jar) + * [**qtjambi-bluetooth-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth/6.2.8/jar) + * [**qtjambi-bluetooth-native-windows-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth-native-windows-x64/6.2.8/jar) + * [**qtjambi-bluetooth-native-linux-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth-native-linux-x64/6.2.8/jar) + * [**qtjambi-bluetooth-native-macos-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth-native-macos/6.2.8/jar) + * [**qtjambi-bluetooth-native-android-x86-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth-native-android-x86/6.2.8/jar) + * [**qtjambi-bluetooth-native-android-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth-native-android-x64/6.2.8/jar) + * [**qtjambi-bluetooth-native-android-arm-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth-native-android-arm/6.2.8/jar) + * [**qtjambi-bluetooth-native-android-arm64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth-native-android-arm64/6.2.8/jar) * [QtCharts](https://doc.qt.io/qt-6/qtcharts-index.html) in module **qtjambi-charts**: - * [**qtjambi-charts-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts/6.2.7/jar) - * [**qtjambi-charts-native-windows-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts-native-windows-x64/6.2.7/jar) - * [**qtjambi-charts-native-linux-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts-native-linux-x64/6.2.7/jar) - * [**qtjambi-charts-native-macos-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts-native-macos/6.2.7/jar) - * [**qtjambi-charts-native-android-x86-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts-native-android-x86/6.2.7/jar) - * [**qtjambi-charts-native-android-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts-native-android-x64/6.2.7/jar) - * [**qtjambi-charts-native-android-arm-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts-native-android-arm/6.2.7/jar) - * [**qtjambi-charts-native-android-arm64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts-native-android-arm64/6.2.7/jar) + * [**qtjambi-charts-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts/6.2.8/jar) + * [**qtjambi-charts-native-windows-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts-native-windows-x64/6.2.8/jar) + * [**qtjambi-charts-native-linux-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts-native-linux-x64/6.2.8/jar) + * [**qtjambi-charts-native-macos-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts-native-macos/6.2.8/jar) + * [**qtjambi-charts-native-android-x86-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts-native-android-x86/6.2.8/jar) + * [**qtjambi-charts-native-android-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts-native-android-x64/6.2.8/jar) + * [**qtjambi-charts-native-android-arm-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts-native-android-arm/6.2.8/jar) + * [**qtjambi-charts-native-android-arm64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts-native-android-arm64/6.2.8/jar) * [QtDataVisualization](https://doc.qt.io/qt-6/qtdatavisualization-index.html) in module **qtjambi-datavisualization**: - * [**qtjambi-datavisualization-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization/6.2.7/jar) - * [**qtjambi-datavisualization-native-windows-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization-native-windows-x64/6.2.7/jar) - * [**qtjambi-datavisualization-native-linux-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization-native-linux-x64/6.2.7/jar) - * [**qtjambi-datavisualization-native-macos-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization-native-macos/6.2.7/jar) - * [**qtjambi-datavisualization-native-android-x86-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization-native-android-x86/6.2.7/jar) - * [**qtjambi-datavisualization-native-android-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization-native-android-x64/6.2.7/jar) - * [**qtjambi-datavisualization-native-android-arm-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization-native-android-arm/6.2.7/jar) - * [**qtjambi-datavisualization-native-android-arm64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization-native-android-arm64/6.2.7/jar) + * [**qtjambi-datavisualization-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization/6.2.8/jar) + * [**qtjambi-datavisualization-native-windows-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization-native-windows-x64/6.2.8/jar) + * [**qtjambi-datavisualization-native-linux-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization-native-linux-x64/6.2.8/jar) + * [**qtjambi-datavisualization-native-macos-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization-native-macos/6.2.8/jar) + * [**qtjambi-datavisualization-native-android-x86-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization-native-android-x86/6.2.8/jar) + * [**qtjambi-datavisualization-native-android-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization-native-android-x64/6.2.8/jar) + * [**qtjambi-datavisualization-native-android-arm-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization-native-android-arm/6.2.8/jar) + * [**qtjambi-datavisualization-native-android-arm64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization-native-android-arm64/6.2.8/jar) * [QtConcurrent](https://doc.qt.io/qt-6/qtconcurrent-index.html) in module **qtjambi-concurrent**: - * [**qtjambi-concurrent-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent/6.2.7/jar) - * [**qtjambi-concurrent-native-windows-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent-native-windows-x64/6.2.7/jar) - * [**qtjambi-concurrent-native-linux-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent-native-linux-x64/6.2.7/jar) - * [**qtjambi-concurrent-native-macos-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent-native-macos/6.2.7/jar) - * [**qtjambi-concurrent-native-android-x86-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent-native-android-x86/6.2.7/jar) - * [**qtjambi-concurrent-native-android-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent-native-android-x64/6.2.7/jar) - * [**qtjambi-concurrent-native-android-arm-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent-native-android-arm/6.2.7/jar) - * [**qtjambi-concurrent-native-android-arm64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent-native-android-arm64/6.2.7/jar) + * [**qtjambi-concurrent-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent/6.2.8/jar) + * [**qtjambi-concurrent-native-windows-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent-native-windows-x64/6.2.8/jar) + * [**qtjambi-concurrent-native-linux-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent-native-linux-x64/6.2.8/jar) + * [**qtjambi-concurrent-native-macos-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent-native-macos/6.2.8/jar) + * [**qtjambi-concurrent-native-android-x86-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent-native-android-x86/6.2.8/jar) + * [**qtjambi-concurrent-native-android-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent-native-android-x64/6.2.8/jar) + * [**qtjambi-concurrent-native-android-arm-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent-native-android-arm/6.2.8/jar) + * [**qtjambi-concurrent-native-android-arm64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent-native-android-arm64/6.2.8/jar) * [QtHelp](https://doc.qt.io/qt-6/qthelp-index.html) in module **qtjambi-help**: - * [**qtjambi-help-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help/6.2.7/jar) - * [**qtjambi-help-native-windows-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help-native-windows-x64/6.2.7/jar) - * [**qtjambi-help-native-linux-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help-native-linux-x64/6.2.7/jar) - * [**qtjambi-help-native-macos-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help-native-macos/6.2.7/jar) - * [**qtjambi-help-native-android-x86-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help-native-android-x86/6.2.7/jar) - * [**qtjambi-help-native-android-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help-native-android-x64/6.2.7/jar) - * [**qtjambi-help-native-android-arm-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help-native-android-arm/6.2.7/jar) - * [**qtjambi-help-native-android-arm64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help-native-android-arm64/6.2.7/jar) + * [**qtjambi-help-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help/6.2.8/jar) + * [**qtjambi-help-native-windows-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help-native-windows-x64/6.2.8/jar) + * [**qtjambi-help-native-linux-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help-native-linux-x64/6.2.8/jar) + * [**qtjambi-help-native-macos-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help-native-macos/6.2.8/jar) + * [**qtjambi-help-native-android-x86-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help-native-android-x86/6.2.8/jar) + * [**qtjambi-help-native-android-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help-native-android-x64/6.2.8/jar) + * [**qtjambi-help-native-android-arm-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help-native-android-arm/6.2.8/jar) + * [**qtjambi-help-native-android-arm64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help-native-android-arm64/6.2.8/jar) * [QtOpenGL](https://doc.qt.io/qt-6/qtopengl-index.html) in module **qtjambi-opengl**: - * [**qtjambi-opengl-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-opengl/6.2.7/jar) - * [**qtjambi-opengl-native-windows-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-opengl-native-windows-x64/6.2.7/jar) - * [**qtjambi-opengl-native-linux-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-opengl-native-linux-x64/6.2.7/jar) - * [**qtjambi-opengl-native-macos-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-opengl-native-macos/6.2.7/jar) - * [**qtjambi-opengl-native-android-x86-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-opengl-native-android-x86/6.2.7/jar) - * [**qtjambi-opengl-native-android-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-opengl-native-android-x64/6.2.7/jar) - * [**qtjambi-opengl-native-android-arm-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-opengl-native-android-arm/6.2.7/jar) - * [**qtjambi-opengl-native-android-arm64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-opengl-native-android-arm64/6.2.7/jar) + * [**qtjambi-opengl-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-opengl/6.2.8/jar) + * [**qtjambi-opengl-native-windows-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-opengl-native-windows-x64/6.2.8/jar) + * [**qtjambi-opengl-native-linux-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-opengl-native-linux-x64/6.2.8/jar) + * [**qtjambi-opengl-native-macos-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-opengl-native-macos/6.2.8/jar) + * [**qtjambi-opengl-native-android-x86-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-opengl-native-android-x86/6.2.8/jar) + * [**qtjambi-opengl-native-android-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-opengl-native-android-x64/6.2.8/jar) + * [**qtjambi-opengl-native-android-arm-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-opengl-native-android-arm/6.2.8/jar) + * [**qtjambi-opengl-native-android-arm64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-opengl-native-android-arm64/6.2.8/jar) * [QtOpenGLWidgets](https://doc.qt.io/qt-6/qtopenglwidgets-module.html) in module **qtjambi-openglwidgets**: - * [**qtjambi-openglwidgets-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-openglwidgets/6.2.7/jar) - * [**qtjambi-openglwidgets-native-windows-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-openglwidgets-native-windows-x64/6.2.7/jar) - * [**qtjambi-openglwidgets-native-linux-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-openglwidgets-native-linux-x64/6.2.7/jar) - * [**qtjambi-openglwidgets-native-macos-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-openglwidgets-native-macos/6.2.7/jar) - * [**qtjambi-openglwidgets-native-android-x86-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-openglwidgets-native-android-x86/6.2.7/jar) - * [**qtjambi-openglwidgets-native-android-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-openglwidgets-native-android-x64/6.2.7/jar) - * [**qtjambi-openglwidgets-native-android-arm-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-openglwidgets-native-android-arm/6.2.7/jar) - * [**qtjambi-openglwidgets-native-android-arm64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-openglwidgets-native-android-arm64/6.2.7/jar) + * [**qtjambi-openglwidgets-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-openglwidgets/6.2.8/jar) + * [**qtjambi-openglwidgets-native-windows-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-openglwidgets-native-windows-x64/6.2.8/jar) + * [**qtjambi-openglwidgets-native-linux-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-openglwidgets-native-linux-x64/6.2.8/jar) + * [**qtjambi-openglwidgets-native-macos-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-openglwidgets-native-macos/6.2.8/jar) + * [**qtjambi-openglwidgets-native-android-x86-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-openglwidgets-native-android-x86/6.2.8/jar) + * [**qtjambi-openglwidgets-native-android-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-openglwidgets-native-android-x64/6.2.8/jar) + * [**qtjambi-openglwidgets-native-android-arm-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-openglwidgets-native-android-arm/6.2.8/jar) + * [**qtjambi-openglwidgets-native-android-arm64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-openglwidgets-native-android-arm64/6.2.8/jar) * [QtMultimedia](https://doc.qt.io/qt-6/qtmultimedia-index.html) in module **qtjambi-multimedia**: - * [**qtjambi-multimedia-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia/6.2.7/jar) - * [**qtjambi-multimedia-native-windows-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia-native-windows-x64/6.2.7/jar) - * [**qtjambi-multimedia-native-linux-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia-native-linux-x64/6.2.7/jar) - * [**qtjambi-multimedia-native-macos-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia-native-macos/6.2.7/jar) - * [**qtjambi-multimedia-native-android-x86-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia-native-android-x86/6.2.7/jar) - * [**qtjambi-multimedia-native-android-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia-native-android-x64/6.2.7/jar) - * [**qtjambi-multimedia-native-android-arm-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia-native-android-arm/6.2.7/jar) - * [**qtjambi-multimedia-native-android-arm64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia-native-android-arm64/6.2.7/jar) + * [**qtjambi-multimedia-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia/6.2.8/jar) + * [**qtjambi-multimedia-native-windows-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia-native-windows-x64/6.2.8/jar) + * [**qtjambi-multimedia-native-linux-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia-native-linux-x64/6.2.8/jar) + * [**qtjambi-multimedia-native-macos-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia-native-macos/6.2.8/jar) + * [**qtjambi-multimedia-native-android-x86-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia-native-android-x86/6.2.8/jar) + * [**qtjambi-multimedia-native-android-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia-native-android-x64/6.2.8/jar) + * [**qtjambi-multimedia-native-android-arm-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia-native-android-arm/6.2.8/jar) + * [**qtjambi-multimedia-native-android-arm64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia-native-android-arm64/6.2.8/jar) * [QtMultimediaWidgets](https://doc.qt.io/qt-6/qtmultimedia-index.html) in module **qtjambi-multimediawidgets**: - * [**qtjambi-multimediawidgets-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets/6.2.7/jar) - * [**qtjambi-multimediawidgets-native-windows-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets-native-windows-x64/6.2.7/jar) - * [**qtjambi-multimediawidgets-native-linux-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets-native-linux-x64/6.2.7/jar) - * [**qtjambi-multimediawidgets-native-macos-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets-native-macos/6.2.7/jar) - * [**qtjambi-multimediawidgets-native-android-x86-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets-native-android-x86/6.2.7/jar) - * [**qtjambi-multimediawidgets-native-android-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets-native-android-x64/6.2.7/jar) - * [**qtjambi-multimediawidgets-native-android-arm-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets-native-android-arm/6.2.7/jar) - * [**qtjambi-multimediawidgets-native-android-arm64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets-native-android-arm64/6.2.7/jar) + * [**qtjambi-multimediawidgets-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets/6.2.8/jar) + * [**qtjambi-multimediawidgets-native-windows-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets-native-windows-x64/6.2.8/jar) + * [**qtjambi-multimediawidgets-native-linux-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets-native-linux-x64/6.2.8/jar) + * [**qtjambi-multimediawidgets-native-macos-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets-native-macos/6.2.8/jar) + * [**qtjambi-multimediawidgets-native-android-x86-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets-native-android-x86/6.2.8/jar) + * [**qtjambi-multimediawidgets-native-android-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets-native-android-x64/6.2.8/jar) + * [**qtjambi-multimediawidgets-native-android-arm-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets-native-android-arm/6.2.8/jar) + * [**qtjambi-multimediawidgets-native-android-arm64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets-native-android-arm64/6.2.8/jar) * [QtNfc](https://doc.qt.io/qt-6/qtnfc-index.html) in module **qtjambi-nfc**: - * [**qtjambi-nfc-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc/6.2.7/jar) - * [**qtjambi-nfc-native-windows-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc-native-windows-x64/6.2.7/jar) - * [**qtjambi-nfc-native-linux-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc-native-linux-x64/6.2.7/jar) - * [**qtjambi-nfc-native-macos-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc-native-macos/6.2.7/jar) - * [**qtjambi-nfc-native-android-x86-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc-native-android-x86/6.2.7/jar) - * [**qtjambi-nfc-native-android-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc-native-android-x64/6.2.7/jar) - * [**qtjambi-nfc-native-android-arm-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc-native-android-arm/6.2.7/jar) - * [**qtjambi-nfc-native-android-arm64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc-native-android-arm64/6.2.7/jar) + * [**qtjambi-nfc-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc/6.2.8/jar) + * [**qtjambi-nfc-native-windows-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc-native-windows-x64/6.2.8/jar) + * [**qtjambi-nfc-native-linux-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc-native-linux-x64/6.2.8/jar) + * [**qtjambi-nfc-native-macos-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc-native-macos/6.2.8/jar) + * [**qtjambi-nfc-native-android-x86-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc-native-android-x86/6.2.8/jar) + * [**qtjambi-nfc-native-android-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc-native-android-x64/6.2.8/jar) + * [**qtjambi-nfc-native-android-arm-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc-native-android-arm/6.2.8/jar) + * [**qtjambi-nfc-native-android-arm64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc-native-android-arm64/6.2.8/jar) * [QtNetworkAuth](https://doc.qt.io/qt-6/qtnetworkauth-index.html) in module **qtjambi-networkauth**: - * [**qtjambi-networkauth-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth/6.2.7/jar) - * [**qtjambi-networkauth-native-windows-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth-native-windows-x64/6.2.7/jar) - * [**qtjambi-networkauth-native-linux-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth-native-linux-x64/6.2.7/jar) - * [**qtjambi-networkauth-native-macos-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth-native-macos/6.2.7/jar) - * [**qtjambi-networkauth-native-android-x86-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth-native-android-x86/6.2.7/jar) - * [**qtjambi-networkauth-native-android-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth-native-android-x64/6.2.7/jar) - * [**qtjambi-networkauth-native-android-arm-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth-native-android-arm/6.2.7/jar) - * [**qtjambi-networkauth-native-android-arm64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth-native-android-arm64/6.2.7/jar) + * [**qtjambi-networkauth-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth/6.2.8/jar) + * [**qtjambi-networkauth-native-windows-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth-native-windows-x64/6.2.8/jar) + * [**qtjambi-networkauth-native-linux-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth-native-linux-x64/6.2.8/jar) + * [**qtjambi-networkauth-native-macos-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth-native-macos/6.2.8/jar) + * [**qtjambi-networkauth-native-android-x86-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth-native-android-x86/6.2.8/jar) + * [**qtjambi-networkauth-native-android-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth-native-android-x64/6.2.8/jar) + * [**qtjambi-networkauth-native-android-arm-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth-native-android-arm/6.2.8/jar) + * [**qtjambi-networkauth-native-android-arm64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth-native-android-arm64/6.2.8/jar) * [QtPositioning](https://doc.qt.io/qt-6/qtpositioning-index.html) in module **qtjambi-positioning**: - * [**qtjambi-positioning-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning/6.2.7/jar) - * [**qtjambi-positioning-native-windows-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning-native-windows-x64/6.2.7/jar) - * [**qtjambi-positioning-native-linux-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning-native-linux-x64/6.2.7/jar) - * [**qtjambi-positioning-native-macos-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning-native-macos/6.2.7/jar) - * [**qtjambi-positioning-native-android-x86-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning-native-android-x86/6.2.7/jar) - * [**qtjambi-positioning-native-android-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning-native-android-x64/6.2.7/jar) - * [**qtjambi-positioning-native-android-arm-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning-native-android-arm/6.2.7/jar) - * [**qtjambi-positioning-native-android-arm64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning-native-android-arm64/6.2.7/jar) + * [**qtjambi-positioning-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning/6.2.8/jar) + * [**qtjambi-positioning-native-windows-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning-native-windows-x64/6.2.8/jar) + * [**qtjambi-positioning-native-linux-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning-native-linux-x64/6.2.8/jar) + * [**qtjambi-positioning-native-macos-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning-native-macos/6.2.8/jar) + * [**qtjambi-positioning-native-android-x86-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning-native-android-x86/6.2.8/jar) + * [**qtjambi-positioning-native-android-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning-native-android-x64/6.2.8/jar) + * [**qtjambi-positioning-native-android-arm-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning-native-android-arm/6.2.8/jar) + * [**qtjambi-positioning-native-android-arm64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning-native-android-arm64/6.2.8/jar) * [QtPrintSupport](https://doc.qt.io/qt-6/qtprintsupport-index.html) in module **qtjambi-printsupport**: - * [**qtjambi-printsupport-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport/6.2.7/jar) - * [**qtjambi-printsupport-native-windows-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport-native-windows-x64/6.2.7/jar) - * [**qtjambi-printsupport-native-linux-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport-native-linux-x64/6.2.7/jar) - * [**qtjambi-printsupport-native-macos-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport-native-macos/6.2.7/jar) - * [**qtjambi-printsupport-native-android-x86-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport-native-android-x86/6.2.7/jar) - * [**qtjambi-printsupport-native-android-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport-native-android-x64/6.2.7/jar) - * [**qtjambi-printsupport-native-android-arm-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport-native-android-arm/6.2.7/jar) - * [**qtjambi-printsupport-native-android-arm64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport-native-android-arm64/6.2.7/jar) + * [**qtjambi-printsupport-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport/6.2.8/jar) + * [**qtjambi-printsupport-native-windows-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport-native-windows-x64/6.2.8/jar) + * [**qtjambi-printsupport-native-linux-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport-native-linux-x64/6.2.8/jar) + * [**qtjambi-printsupport-native-macos-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport-native-macos/6.2.8/jar) + * [**qtjambi-printsupport-native-android-x86-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport-native-android-x86/6.2.8/jar) + * [**qtjambi-printsupport-native-android-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport-native-android-x64/6.2.8/jar) + * [**qtjambi-printsupport-native-android-arm-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport-native-android-arm/6.2.8/jar) + * [**qtjambi-printsupport-native-android-arm64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport-native-android-arm64/6.2.8/jar) * [QtQuick3D](https://doc.qt.io/qt-6/qtquick3d-index.html) in module **qtjambi-quick3d**: - * [**qtjambi-quick3d-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d/6.2.7/jar) - * [**qtjambi-quick3d-native-windows-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d-native-windows-x64/6.2.7/jar) - * [**qtjambi-quick3d-native-linux-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d-native-linux-x64/6.2.7/jar) - * [**qtjambi-quick3d-native-macos-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d-native-macos/6.2.7/jar) - * [**qtjambi-quick3d-native-android-x86-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d-native-android-x86/6.2.7/jar) - * [**qtjambi-quick3d-native-android-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d-native-android-x64/6.2.7/jar) - * [**qtjambi-quick3d-native-android-arm-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d-native-android-arm/6.2.7/jar) - * [**qtjambi-quick3d-native-android-arm64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d-native-android-arm64/6.2.7/jar) + * [**qtjambi-quick3d-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d/6.2.8/jar) + * [**qtjambi-quick3d-native-windows-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d-native-windows-x64/6.2.8/jar) + * [**qtjambi-quick3d-native-linux-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d-native-linux-x64/6.2.8/jar) + * [**qtjambi-quick3d-native-macos-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d-native-macos/6.2.8/jar) + * [**qtjambi-quick3d-native-android-x86-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d-native-android-x86/6.2.8/jar) + * [**qtjambi-quick3d-native-android-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d-native-android-x64/6.2.8/jar) + * [**qtjambi-quick3d-native-android-arm-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d-native-android-arm/6.2.8/jar) + * [**qtjambi-quick3d-native-android-arm64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d-native-android-arm64/6.2.8/jar) * [QtQuickWidgets](https://doc.qt.io/qt-6/qtquickwidgets-module.html) in module **qtjambi-quickwidgets**: - * [**qtjambi-quickwidgets-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets/6.2.7/jar) - * [**qtjambi-quickwidgets-native-windows-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets-native-windows-x64/6.2.7/jar) - * [**qtjambi-quickwidgets-native-linux-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets-native-linux-x64/6.2.7/jar) - * [**qtjambi-quickwidgets-native-macos-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets-native-macos/6.2.7/jar) - * [**qtjambi-quickwidgets-native-android-x86-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets-native-android-x86/6.2.7/jar) - * [**qtjambi-quickwidgets-native-android-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets-native-android-x64/6.2.7/jar) - * [**qtjambi-quickwidgets-native-android-arm-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets-native-android-arm/6.2.7/jar) - * [**qtjambi-quickwidgets-native-android-arm64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets-native-android-arm64/6.2.7/jar) + * [**qtjambi-quickwidgets-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets/6.2.8/jar) + * [**qtjambi-quickwidgets-native-windows-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets-native-windows-x64/6.2.8/jar) + * [**qtjambi-quickwidgets-native-linux-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets-native-linux-x64/6.2.8/jar) + * [**qtjambi-quickwidgets-native-macos-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets-native-macos/6.2.8/jar) + * [**qtjambi-quickwidgets-native-android-x86-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets-native-android-x86/6.2.8/jar) + * [**qtjambi-quickwidgets-native-android-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets-native-android-x64/6.2.8/jar) + * [**qtjambi-quickwidgets-native-android-arm-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets-native-android-arm/6.2.8/jar) + * [**qtjambi-quickwidgets-native-android-arm64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets-native-android-arm64/6.2.8/jar) * [QtRemoteObjects](https://doc.qt.io/qt-6/qtremoteobjects-module.html) in module **qtjambi-remoteobjects**: - * [**qtjambi-remoteobjects-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects/6.2.7/jar) - * [**qtjambi-remoteobjects-native-windows-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects-native-windows-x64/6.2.7/jar) - * [**qtjambi-remoteobjects-native-linux-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects-native-linux-x64/6.2.7/jar) - * [**qtjambi-remoteobjects-native-macos-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects-native-macos/6.2.7/jar) - * [**qtjambi-remoteobjects-native-android-x86-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects-native-android-x86/6.2.7/jar) - * [**qtjambi-remoteobjects-native-android-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects-native-android-x64/6.2.7/jar) - * [**qtjambi-remoteobjects-native-android-arm-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects-native-android-arm/6.2.7/jar) - * [**qtjambi-remoteobjects-native-android-arm64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects-native-android-arm64/6.2.7/jar) + * [**qtjambi-remoteobjects-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects/6.2.8/jar) + * [**qtjambi-remoteobjects-native-windows-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects-native-windows-x64/6.2.8/jar) + * [**qtjambi-remoteobjects-native-linux-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects-native-linux-x64/6.2.8/jar) + * [**qtjambi-remoteobjects-native-macos-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects-native-macos/6.2.8/jar) + * [**qtjambi-remoteobjects-native-android-x86-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects-native-android-x86/6.2.8/jar) + * [**qtjambi-remoteobjects-native-android-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects-native-android-x64/6.2.8/jar) + * [**qtjambi-remoteobjects-native-android-arm-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects-native-android-arm/6.2.8/jar) + * [**qtjambi-remoteobjects-native-android-arm64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects-native-android-arm64/6.2.8/jar) * [QtSCXML](https://doc.qt.io/qt-6/qtscxml-index.html) in module **qtjambi-scxml**: - * [**qtjambi-scxml-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml/6.2.7/jar) - * [**qtjambi-scxml-native-windows-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml-native-windows-x64/6.2.7/jar) - * [**qtjambi-scxml-native-linux-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml-native-linux-x64/6.2.7/jar) - * [**qtjambi-scxml-native-macos-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml-native-macos/6.2.7/jar) - * [**qtjambi-scxml-native-android-x86-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml-native-android-x86/6.2.7/jar) - * [**qtjambi-scxml-native-android-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml-native-android-x64/6.2.7/jar) - * [**qtjambi-scxml-native-android-arm-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml-native-android-arm/6.2.7/jar) - * [**qtjambi-scxml-native-android-arm64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml-native-android-arm64/6.2.7/jar) + * [**qtjambi-scxml-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml/6.2.8/jar) + * [**qtjambi-scxml-native-windows-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml-native-windows-x64/6.2.8/jar) + * [**qtjambi-scxml-native-linux-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml-native-linux-x64/6.2.8/jar) + * [**qtjambi-scxml-native-macos-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml-native-macos/6.2.8/jar) + * [**qtjambi-scxml-native-android-x86-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml-native-android-x86/6.2.8/jar) + * [**qtjambi-scxml-native-android-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml-native-android-x64/6.2.8/jar) + * [**qtjambi-scxml-native-android-arm-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml-native-android-arm/6.2.8/jar) + * [**qtjambi-scxml-native-android-arm64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml-native-android-arm64/6.2.8/jar) * [QtSensors](https://doc.qt.io/qt-6/qtsensors-index.html) in module **qtjambi-sensors**: - * [**qtjambi-sensors-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors/6.2.7/jar) - * [**qtjambi-sensors-native-windows-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors-native-windows-x64/6.2.7/jar) - * [**qtjambi-sensors-native-linux-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors-native-linux-x64/6.2.7/jar) - * [**qtjambi-sensors-native-macos-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors-native-macos/6.2.7/jar) - * [**qtjambi-sensors-native-android-x86-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors-native-android-x86/6.2.7/jar) - * [**qtjambi-sensors-native-android-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors-native-android-x64/6.2.7/jar) - * [**qtjambi-sensors-native-android-arm-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors-native-android-arm/6.2.7/jar) - * [**qtjambi-sensors-native-android-arm64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors-native-android-arm64/6.2.7/jar) + * [**qtjambi-sensors-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors/6.2.8/jar) + * [**qtjambi-sensors-native-windows-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors-native-windows-x64/6.2.8/jar) + * [**qtjambi-sensors-native-linux-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors-native-linux-x64/6.2.8/jar) + * [**qtjambi-sensors-native-macos-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors-native-macos/6.2.8/jar) + * [**qtjambi-sensors-native-android-x86-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors-native-android-x86/6.2.8/jar) + * [**qtjambi-sensors-native-android-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors-native-android-x64/6.2.8/jar) + * [**qtjambi-sensors-native-android-arm-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors-native-android-arm/6.2.8/jar) + * [**qtjambi-sensors-native-android-arm64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors-native-android-arm64/6.2.8/jar) * [QtSerialBus](https://doc.qt.io/qt-6/qtserialbus-index.html) in module **qtjambi-serialbus**: - * [**qtjambi-serialbus-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus/6.2.7/jar) - * [**qtjambi-serialbus-native-windows-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus-native-windows-x64/6.2.7/jar) - * [**qtjambi-serialbus-native-linux-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus-native-linux-x64/6.2.7/jar) - * [**qtjambi-serialbus-native-macos-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus-native-macos/6.2.7/jar) - * [**qtjambi-serialbus-native-android-x86-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus-native-android-x86/6.2.7/jar) - * [**qtjambi-serialbus-native-android-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus-native-android-x64/6.2.7/jar) - * [**qtjambi-serialbus-native-android-arm-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus-native-android-arm/6.2.7/jar) - * [**qtjambi-serialbus-native-android-arm64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus-native-android-arm64/6.2.7/jar) + * [**qtjambi-serialbus-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus/6.2.8/jar) + * [**qtjambi-serialbus-native-windows-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus-native-windows-x64/6.2.8/jar) + * [**qtjambi-serialbus-native-linux-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus-native-linux-x64/6.2.8/jar) + * [**qtjambi-serialbus-native-macos-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus-native-macos/6.2.8/jar) + * [**qtjambi-serialbus-native-android-x86-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus-native-android-x86/6.2.8/jar) + * [**qtjambi-serialbus-native-android-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus-native-android-x64/6.2.8/jar) + * [**qtjambi-serialbus-native-android-arm-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus-native-android-arm/6.2.8/jar) + * [**qtjambi-serialbus-native-android-arm64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus-native-android-arm64/6.2.8/jar) * [QtSerialPort](https://doc.qt.io/qt-6/qtserialport-index.html) in module **qtjambi-serialport**: - * [**qtjambi-serialport-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport/6.2.7/jar) - * [**qtjambi-serialport-native-windows-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport-native-windows-x64/6.2.7/jar) - * [**qtjambi-serialport-native-linux-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport-native-linux-x64/6.2.7/jar) - * [**qtjambi-serialport-native-macos-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport-native-macos/6.2.7/jar) - * [**qtjambi-serialport-native-android-x86-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport-native-android-x86/6.2.7/jar) - * [**qtjambi-serialport-native-android-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport-native-android-x64/6.2.7/jar) - * [**qtjambi-serialport-native-android-arm-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport-native-android-arm/6.2.7/jar) - * [**qtjambi-serialport-native-android-arm64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport-native-android-arm64/6.2.7/jar) + * [**qtjambi-serialport-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport/6.2.8/jar) + * [**qtjambi-serialport-native-windows-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport-native-windows-x64/6.2.8/jar) + * [**qtjambi-serialport-native-linux-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport-native-linux-x64/6.2.8/jar) + * [**qtjambi-serialport-native-macos-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport-native-macos/6.2.8/jar) + * [**qtjambi-serialport-native-android-x86-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport-native-android-x86/6.2.8/jar) + * [**qtjambi-serialport-native-android-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport-native-android-x64/6.2.8/jar) + * [**qtjambi-serialport-native-android-arm-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport-native-android-arm/6.2.8/jar) + * [**qtjambi-serialport-native-android-arm64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport-native-android-arm64/6.2.8/jar) * [QtSql](https://doc.qt.io/qt-6/qtsql-index.html) in module **qtjambi-sql**: - * [**qtjambi-sql-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql/6.2.7/jar) - * [**qtjambi-sql-native-windows-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql-native-windows-x64/6.2.7/jar) - * [**qtjambi-sql-native-linux-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql-native-linux-x64/6.2.7/jar) - * [**qtjambi-sql-native-macos-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql-native-macos/6.2.7/jar) - * [**qtjambi-sql-native-android-x86-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql-native-android-x86/6.2.7/jar) - * [**qtjambi-sql-native-android-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql-native-android-x64/6.2.7/jar) - * [**qtjambi-sql-native-android-arm-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql-native-android-arm/6.2.7/jar) - * [**qtjambi-sql-native-android-arm64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql-native-android-arm64/6.2.7/jar) + * [**qtjambi-sql-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql/6.2.8/jar) + * [**qtjambi-sql-native-windows-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql-native-windows-x64/6.2.8/jar) + * [**qtjambi-sql-native-linux-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql-native-linux-x64/6.2.8/jar) + * [**qtjambi-sql-native-macos-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql-native-macos/6.2.8/jar) + * [**qtjambi-sql-native-android-x86-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql-native-android-x86/6.2.8/jar) + * [**qtjambi-sql-native-android-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql-native-android-x64/6.2.8/jar) + * [**qtjambi-sql-native-android-arm-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql-native-android-arm/6.2.8/jar) + * [**qtjambi-sql-native-android-arm64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql-native-android-arm64/6.2.8/jar) * [QtSvg](https://doc.qt.io/qt-6/qtsvg-index.html) in module **qtjambi-svg**: - * [**qtjambi-svg-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg/6.2.7/jar) - * [**qtjambi-svg-native-windows-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg-native-windows-x64/6.2.7/jar) - * [**qtjambi-svg-native-linux-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg-native-linux-x64/6.2.7/jar) - * [**qtjambi-svg-native-macos-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg-native-macos/6.2.7/jar) - * [**qtjambi-svg-native-android-x86-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg-native-android-x86/6.2.7/jar) - * [**qtjambi-svg-native-android-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg-native-android-x64/6.2.7/jar) - * [**qtjambi-svg-native-android-arm-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg-native-android-arm/6.2.7/jar) - * [**qtjambi-svg-native-android-arm64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg-native-android-arm64/6.2.7/jar) + * [**qtjambi-svg-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg/6.2.8/jar) + * [**qtjambi-svg-native-windows-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg-native-windows-x64/6.2.8/jar) + * [**qtjambi-svg-native-linux-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg-native-linux-x64/6.2.8/jar) + * [**qtjambi-svg-native-macos-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg-native-macos/6.2.8/jar) + * [**qtjambi-svg-native-android-x86-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg-native-android-x86/6.2.8/jar) + * [**qtjambi-svg-native-android-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg-native-android-x64/6.2.8/jar) + * [**qtjambi-svg-native-android-arm-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg-native-android-arm/6.2.8/jar) + * [**qtjambi-svg-native-android-arm64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg-native-android-arm64/6.2.8/jar) * [QtSvgWidgets](https://doc.qt.io/qt-6/qtsvg-index.html) in module **qtjambi-svgwidgets**: - * [**qtjambi-svgwidgets-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svgwidgets/6.2.7/jar) - * [**qtjambi-svgwidgets-native-windows-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svgwidgets-native-windows-x64/6.2.7/jar) - * [**qtjambi-svgwidgets-native-linux-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svgwidgets-native-linux-x64/6.2.7/jar) - * [**qtjambi-svgwidgets-native-macos-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svgwidgets-native-macos/6.2.7/jar) - * [**qtjambi-svgwidgets-native-android-x86-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svgwidgets-native-android-x86/6.2.7/jar) - * [**qtjambi-svgwidgets-native-android-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svgwidgets-native-android-x64/6.2.7/jar) - * [**qtjambi-svgwidgets-native-android-arm-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svgwidgets-native-android-arm/6.2.7/jar) - * [**qtjambi-svgwidgets-native-android-arm64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svgwidgets-native-android-arm64/6.2.7/jar) + * [**qtjambi-svgwidgets-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svgwidgets/6.2.8/jar) + * [**qtjambi-svgwidgets-native-windows-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svgwidgets-native-windows-x64/6.2.8/jar) + * [**qtjambi-svgwidgets-native-linux-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svgwidgets-native-linux-x64/6.2.8/jar) + * [**qtjambi-svgwidgets-native-macos-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svgwidgets-native-macos/6.2.8/jar) + * [**qtjambi-svgwidgets-native-android-x86-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svgwidgets-native-android-x86/6.2.8/jar) + * [**qtjambi-svgwidgets-native-android-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svgwidgets-native-android-x64/6.2.8/jar) + * [**qtjambi-svgwidgets-native-android-arm-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svgwidgets-native-android-arm/6.2.8/jar) + * [**qtjambi-svgwidgets-native-android-arm64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svgwidgets-native-android-arm64/6.2.8/jar) * [QtStateMachine](https://doc.qt.io/qt-6/qtstatemachine-index.html) in module **qtjambi-statemachine**: - * [**qtjambi-statemachine-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-statemachine/6.2.7/jar) - * [**qtjambi-statemachine-native-windows-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-statemachine-native-windows-x64/6.2.7/jar) - * [**qtjambi-statemachine-native-linux-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-statemachine-native-linux-x64/6.2.7/jar) - * [**qtjambi-statemachine-native-macos-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-statemachine-native-macos/6.2.7/jar) - * [**qtjambi-statemachine-native-android-x86-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-statemachine-native-android-x86/6.2.7/jar) - * [**qtjambi-statemachine-native-android-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-statemachine-native-android-x64/6.2.7/jar) - * [**qtjambi-statemachine-native-android-arm-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-statemachine-native-android-arm/6.2.7/jar) - * [**qtjambi-statemachine-native-android-arm64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-statemachine-native-android-arm64/6.2.7/jar) + * [**qtjambi-statemachine-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-statemachine/6.2.8/jar) + * [**qtjambi-statemachine-native-windows-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-statemachine-native-windows-x64/6.2.8/jar) + * [**qtjambi-statemachine-native-linux-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-statemachine-native-linux-x64/6.2.8/jar) + * [**qtjambi-statemachine-native-macos-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-statemachine-native-macos/6.2.8/jar) + * [**qtjambi-statemachine-native-android-x86-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-statemachine-native-android-x86/6.2.8/jar) + * [**qtjambi-statemachine-native-android-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-statemachine-native-android-x64/6.2.8/jar) + * [**qtjambi-statemachine-native-android-arm-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-statemachine-native-android-arm/6.2.8/jar) + * [**qtjambi-statemachine-native-android-arm64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-statemachine-native-android-arm64/6.2.8/jar) * [QtUITools](https://doc.qt.io/qt-6/qtuitools-index.html) in module **qtjambi-uitools**: - * [**qtjambi-uitools-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools/6.2.7/jar) - * [**qtjambi-uitools-native-windows-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools-native-windows-x64/6.2.7/jar) - * [**qtjambi-uitools-native-linux-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools-native-linux-x64/6.2.7/jar) - * [**qtjambi-uitools-native-macos-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools-native-macos/6.2.7/jar) - * [**qtjambi-uitools-native-android-x86-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools-native-android-x86/6.2.7/jar) - * [**qtjambi-uitools-native-android-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools-native-android-x64/6.2.7/jar) - * [**qtjambi-uitools-native-android-arm-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools-native-android-arm/6.2.7/jar) - * [**qtjambi-uitools-native-android-arm64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools-native-android-arm64/6.2.7/jar) + * [**qtjambi-uitools-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools/6.2.8/jar) + * [**qtjambi-uitools-native-windows-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools-native-windows-x64/6.2.8/jar) + * [**qtjambi-uitools-native-linux-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools-native-linux-x64/6.2.8/jar) + * [**qtjambi-uitools-native-macos-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools-native-macos/6.2.8/jar) + * [**qtjambi-uitools-native-android-x86-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools-native-android-x86/6.2.8/jar) + * [**qtjambi-uitools-native-android-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools-native-android-x64/6.2.8/jar) + * [**qtjambi-uitools-native-android-arm-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools-native-android-arm/6.2.8/jar) + * [**qtjambi-uitools-native-android-arm64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools-native-android-arm64/6.2.8/jar) * [QtWebChannel](https://doc.qt.io/qt-6/qtwebchannel-index.html) in module **qtjambi-webchannel**: - * [**qtjambi-webchannel-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel/6.2.7/jar) - * [**qtjambi-webchannel-native-windows-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel-native-windows-x64/6.2.7/jar) - * [**qtjambi-webchannel-native-linux-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel-native-linux-x64/6.2.7/jar) - * [**qtjambi-webchannel-native-macos-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel-native-macos/6.2.7/jar) - * [**qtjambi-webchannel-native-android-x86-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel-native-android-x86/6.2.7/jar) - * [**qtjambi-webchannel-native-android-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel-native-android-x64/6.2.7/jar) - * [**qtjambi-webchannel-native-android-arm-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel-native-android-arm/6.2.7/jar) - * [**qtjambi-webchannel-native-android-arm64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel-native-android-arm64/6.2.7/jar) + * [**qtjambi-webchannel-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel/6.2.8/jar) + * [**qtjambi-webchannel-native-windows-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel-native-windows-x64/6.2.8/jar) + * [**qtjambi-webchannel-native-linux-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel-native-linux-x64/6.2.8/jar) + * [**qtjambi-webchannel-native-macos-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel-native-macos/6.2.8/jar) + * [**qtjambi-webchannel-native-android-x86-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel-native-android-x86/6.2.8/jar) + * [**qtjambi-webchannel-native-android-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel-native-android-x64/6.2.8/jar) + * [**qtjambi-webchannel-native-android-arm-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel-native-android-arm/6.2.8/jar) + * [**qtjambi-webchannel-native-android-arm64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel-native-android-arm64/6.2.8/jar) * [QtWebEngineCore](https://doc.qt.io/qt-6/qtwebengine-index.html) in module **qtjambi-webenginecore**: - * [**qtjambi-webenginecore-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginecore/6.2.7/jar) - * [**qtjambi-webenginecore-native-windows-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginecore-native-windows-x64/6.2.7/jar) - * [**qtjambi-webenginecore-native-linux-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginecore-native-linux-x64/6.2.7/jar) - * [**qtjambi-webenginecore-native-macos-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginecore-native-macos/6.2.7/jar) + * [**qtjambi-webenginecore-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginecore/6.2.8/jar) + * [**qtjambi-webenginecore-native-windows-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginecore-native-windows-x64/6.2.8/jar) + * [**qtjambi-webenginecore-native-linux-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginecore-native-linux-x64/6.2.8/jar) + * [**qtjambi-webenginecore-native-macos-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginecore-native-macos/6.2.8/jar) * [QtWebEngineWidgets](https://doc.qt.io/qt-6/qtwebengine-index.html) in module **qtjambi-webenginewidgets**: - * [**qtjambi-webenginewidgets-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginewidgets/6.2.7/jar) - * [**qtjambi-webenginewidgets-native-windows-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginewidgets-native-windows-x64/6.2.7/jar) - * [**qtjambi-webenginewidgets-native-linux-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginewidgets-native-linux-x64/6.2.7/jar) - * [**qtjambi-webenginewidgets-native-macos-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginewidgets-native-macos/6.2.7/jar) + * [**qtjambi-webenginewidgets-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginewidgets/6.2.8/jar) + * [**qtjambi-webenginewidgets-native-windows-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginewidgets-native-windows-x64/6.2.8/jar) + * [**qtjambi-webenginewidgets-native-linux-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginewidgets-native-linux-x64/6.2.8/jar) + * [**qtjambi-webenginewidgets-native-macos-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginewidgets-native-macos/6.2.8/jar) * [QtWebEngineQuick](https://doc.qt.io/qt-6/qtwebengine-index.html) in module **qtjambi-webenginequick**: - * [**qtjambi-webenginequick-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginequick/6.2.7/jar) - * [**qtjambi-webenginequick-native-windows-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginequick-native-windows-x64/6.2.7/jar) - * [**qtjambi-webenginequick-native-linux-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginequick-native-linux-x64/6.2.7/jar) - * [**qtjambi-webenginequick-native-macos-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginequick-native-macos/6.2.7/jar) + * [**qtjambi-webenginequick-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginequick/6.2.8/jar) + * [**qtjambi-webenginequick-native-windows-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginequick-native-windows-x64/6.2.8/jar) + * [**qtjambi-webenginequick-native-linux-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginequick-native-linux-x64/6.2.8/jar) + * [**qtjambi-webenginequick-native-macos-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginequick-native-macos/6.2.8/jar) * [QtWebSockets](https://doc.qt.io/qt-6/qtwebsockets-index.html) in module **qtjambi-websockets**: - * [**qtjambi-websockets-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets/6.2.7/jar) - * [**qtjambi-websockets-native-windows-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets-native-windows-x64/6.2.7/jar) - * [**qtjambi-websockets-native-linux-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets-native-linux-x64/6.2.7/jar) - * [**qtjambi-websockets-native-macos-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets-native-macos/6.2.7/jar) - * [**qtjambi-websockets-native-android-x86-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets-native-android-x86/6.2.7/jar) - * [**qtjambi-websockets-native-android-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets-native-android-x64/6.2.7/jar) - * [**qtjambi-websockets-native-android-arm-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets-native-android-arm/6.2.7/jar) - * [**qtjambi-websockets-native-android-arm64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets-native-android-arm64/6.2.7/jar) + * [**qtjambi-websockets-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets/6.2.8/jar) + * [**qtjambi-websockets-native-windows-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets-native-windows-x64/6.2.8/jar) + * [**qtjambi-websockets-native-linux-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets-native-linux-x64/6.2.8/jar) + * [**qtjambi-websockets-native-macos-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets-native-macos/6.2.8/jar) + * [**qtjambi-websockets-native-android-x86-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets-native-android-x86/6.2.8/jar) + * [**qtjambi-websockets-native-android-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets-native-android-x64/6.2.8/jar) + * [**qtjambi-websockets-native-android-arm-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets-native-android-arm/6.2.8/jar) + * [**qtjambi-websockets-native-android-arm64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets-native-android-arm64/6.2.8/jar) * [QtWebView](https://doc.qt.io/qt-6/qtwebview-index.html) in module **qtjambi-webview**: - * [**qtjambi-webview-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview/6.2.7/jar) - * [**qtjambi-webview-native-windows-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview-native-windows-x64/6.2.7/jar) - * [**qtjambi-webview-native-linux-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview-native-linux-x64/6.2.7/jar) - * [**qtjambi-webview-native-macos-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview-native-macos/6.2.7/jar) - * [**qtjambi-webview-native-android-x86-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview-native-android-x86/6.2.7/jar) - * [**qtjambi-webview-native-android-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview-native-android-x64/6.2.7/jar) - * [**qtjambi-webview-native-android-arm-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview-native-android-arm/6.2.7/jar) - * [**qtjambi-webview-native-android-arm64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview-native-android-arm64/6.2.7/jar) + * [**qtjambi-webview-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview/6.2.8/jar) + * [**qtjambi-webview-native-windows-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview-native-windows-x64/6.2.8/jar) + * [**qtjambi-webview-native-linux-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview-native-linux-x64/6.2.8/jar) + * [**qtjambi-webview-native-macos-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview-native-macos/6.2.8/jar) + * [**qtjambi-webview-native-android-x86-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview-native-android-x86/6.2.8/jar) + * [**qtjambi-webview-native-android-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview-native-android-x64/6.2.8/jar) + * [**qtjambi-webview-native-android-arm-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview-native-android-arm/6.2.8/jar) + * [**qtjambi-webview-native-android-arm64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview-native-android-arm64/6.2.8/jar) * [QtVirtualKeyboard](https://doc.qt.io/qt-6/qtvirtualkeyboard-index.html) in module **qtjambi-virtualkeyboard**: - * [**qtjambi-virtualkeyboard-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard/6.2.7/jar) - * [**qtjambi-virtualkeyboard-native-windows-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard-native-windows-x64/6.2.7/jar) - * [**qtjambi-virtualkeyboard-native-linux-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard-native-linux-x64/6.2.7/jar) - * [**qtjambi-virtualkeyboard-native-macos-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard-native-macos/6.2.7/jar) - * [**qtjambi-virtualkeyboard-native-android-x86-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard-native-android-x86/6.2.7/jar) - * [**qtjambi-virtualkeyboard-native-android-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard-native-android-x64/6.2.7/jar) - * [**qtjambi-virtualkeyboard-native-android-arm-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard-native-android-arm/6.2.7/jar) - * [**qtjambi-virtualkeyboard-native-android-arm64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard-native-android-arm64/6.2.7/jar) + * [**qtjambi-virtualkeyboard-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard/6.2.8/jar) + * [**qtjambi-virtualkeyboard-native-windows-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard-native-windows-x64/6.2.8/jar) + * [**qtjambi-virtualkeyboard-native-linux-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard-native-linux-x64/6.2.8/jar) + * [**qtjambi-virtualkeyboard-native-macos-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard-native-macos/6.2.8/jar) + * [**qtjambi-virtualkeyboard-native-android-x86-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard-native-android-x86/6.2.8/jar) + * [**qtjambi-virtualkeyboard-native-android-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard-native-android-x64/6.2.8/jar) + * [**qtjambi-virtualkeyboard-native-android-arm-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard-native-android-arm/6.2.8/jar) + * [**qtjambi-virtualkeyboard-native-android-arm64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard-native-android-arm64/6.2.8/jar) * [QtXml](https://doc.qt.io/qt-6/qtxml-index.html) in module **qtjambi-xml**: - * [**qtjambi-xml-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml/6.2.7/jar) - * [**qtjambi-xml-native-windows-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml-native-windows-x64/6.2.7/jar) - * [**qtjambi-xml-native-linux-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml-native-linux-x64/6.2.7/jar) - * [**qtjambi-xml-native-macos-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml-native-macos/6.2.7/jar) - * [**qtjambi-xml-native-android-x86-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml-native-android-x86/6.2.7/jar) - * [**qtjambi-xml-native-android-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml-native-android-x64/6.2.7/jar) - * [**qtjambi-xml-native-android-arm-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml-native-android-arm/6.2.7/jar) - * [**qtjambi-xml-native-android-arm64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml-native-android-arm64/6.2.7/jar) + * [**qtjambi-xml-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml/6.2.8/jar) + * [**qtjambi-xml-native-windows-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml-native-windows-x64/6.2.8/jar) + * [**qtjambi-xml-native-linux-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml-native-linux-x64/6.2.8/jar) + * [**qtjambi-xml-native-macos-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml-native-macos/6.2.8/jar) + * [**qtjambi-xml-native-android-x86-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml-native-android-x86/6.2.8/jar) + * [**qtjambi-xml-native-android-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml-native-android-x64/6.2.8/jar) + * [**qtjambi-xml-native-android-arm-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml-native-android-arm/6.2.8/jar) + * [**qtjambi-xml-native-android-arm64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml-native-android-arm64/6.2.8/jar) * [QtDesigner](https://doc.qt.io/qt-6/qtdesigner-manual.html) in module **qtjambi-designer**: - * [**qtjambi-designer-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer/6.2.7/jar) - * [**qtjambi-designer-native-windows-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer-native-windows-x64/6.2.7/jar) - * [**qtjambi-designer-native-linux-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer-native-linux-x64/6.2.7/jar) - * [**qtjambi-designer-native-macos-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer-native-macos/6.2.7/jar) - * [**qtjambi-designer-native-android-x86-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer-native-android-x86/6.2.7/jar) - * [**qtjambi-designer-native-android-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer-native-android-x64/6.2.7/jar) - * [**qtjambi-designer-native-android-arm-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer-native-android-arm/6.2.7/jar) - * [**qtjambi-designer-native-android-arm64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer-native-android-arm64/6.2.7/jar) + * [**qtjambi-designer-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer/6.2.8/jar) + * [**qtjambi-designer-native-windows-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer-native-windows-x64/6.2.8/jar) + * [**qtjambi-designer-native-linux-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer-native-linux-x64/6.2.8/jar) + * [**qtjambi-designer-native-macos-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer-native-macos/6.2.8/jar) + * [**qtjambi-designer-native-android-x86-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer-native-android-x86/6.2.8/jar) + * [**qtjambi-designer-native-android-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer-native-android-x64/6.2.8/jar) + * [**qtjambi-designer-native-android-arm-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer-native-android-arm/6.2.8/jar) + * [**qtjambi-designer-native-android-arm64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer-native-android-arm64/6.2.8/jar) ### Qt6 Platform-dependent Add-Ons * [Active Qt (Windows only)](https://doc.qt.io/qt-6/activeqt-manual.html) in module **qtjambi-activex**: - * [**qtjambi-activex-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-activex/6.2.7/jar) - * [**qtjambi-activex-native-windows-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-activex-native-windows-x64/6.2.7/jar) + * [**qtjambi-activex-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-activex/6.2.8/jar) + * [**qtjambi-activex-native-windows-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-activex-native-windows-x64/6.2.8/jar) ### Qt3D * [Qt3DCore](https://doc.qt.io/qt-6/qt3d-index.html) in module **qtjambi-qt3dcore**: - * [**qtjambi-qt3dcore-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore/6.2.7/jar) - * [**qtjambi-qt3dcore-native-windows-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore-native-windows-x64/6.2.7/jar) - * [**qtjambi-qt3dcore-native-linux-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore-native-linux-x64/6.2.7/jar) - * [**qtjambi-qt3dcore-native-macos-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore-native-macos/6.2.7/jar) - * [**qtjambi-qt3dcore-native-android-x86-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore-native-android-x86/6.2.7/jar) - * [**qtjambi-qt3dcore-native-android-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore-native-android-x64/6.2.7/jar) - * [**qtjambi-qt3dcore-native-android-arm-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore-native-android-arm/6.2.7/jar) - * [**qtjambi-qt3dcore-native-android-arm64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore-native-android-arm64/6.2.7/jar) + * [**qtjambi-qt3dcore-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore/6.2.8/jar) + * [**qtjambi-qt3dcore-native-windows-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore-native-windows-x64/6.2.8/jar) + * [**qtjambi-qt3dcore-native-linux-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore-native-linux-x64/6.2.8/jar) + * [**qtjambi-qt3dcore-native-macos-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore-native-macos/6.2.8/jar) + * [**qtjambi-qt3dcore-native-android-x86-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore-native-android-x86/6.2.8/jar) + * [**qtjambi-qt3dcore-native-android-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore-native-android-x64/6.2.8/jar) + * [**qtjambi-qt3dcore-native-android-arm-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore-native-android-arm/6.2.8/jar) + * [**qtjambi-qt3dcore-native-android-arm64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore-native-android-arm64/6.2.8/jar) * [Qt3DRender](https://doc.qt.io/qt-6/qt3d-index.html) in module **qtjambi-qt3drender**: - * [**qtjambi-qt3drender-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender/6.2.7/jar) - * [**qtjambi-qt3drender-native-windows-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender-native-windows-x64/6.2.7/jar) - * [**qtjambi-qt3drender-native-linux-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender-native-linux-x64/6.2.7/jar) - * [**qtjambi-qt3drender-native-macos-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender-native-macos/6.2.7/jar) - * [**qtjambi-qt3drender-native-android-x86-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender-native-android-x86/6.2.7/jar) - * [**qtjambi-qt3drender-native-android-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender-native-android-x64/6.2.7/jar) - * [**qtjambi-qt3drender-native-android-arm-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender-native-android-arm/6.2.7/jar) - * [**qtjambi-qt3drender-native-android-arm64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender-native-android-arm64/6.2.7/jar) + * [**qtjambi-qt3drender-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender/6.2.8/jar) + * [**qtjambi-qt3drender-native-windows-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender-native-windows-x64/6.2.8/jar) + * [**qtjambi-qt3drender-native-linux-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender-native-linux-x64/6.2.8/jar) + * [**qtjambi-qt3drender-native-macos-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender-native-macos/6.2.8/jar) + * [**qtjambi-qt3drender-native-android-x86-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender-native-android-x86/6.2.8/jar) + * [**qtjambi-qt3drender-native-android-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender-native-android-x64/6.2.8/jar) + * [**qtjambi-qt3drender-native-android-arm-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender-native-android-arm/6.2.8/jar) + * [**qtjambi-qt3drender-native-android-arm64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender-native-android-arm64/6.2.8/jar) * [Qt3DAnimation](https://doc.qt.io/qt-6/qt3d-index.html) in module **qtjambi-qt3danimation**: - * [**qtjambi-qt3danimation-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation/6.2.7/jar) - * [**qtjambi-qt3danimation-native-windows-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation-native-windows-x64/6.2.7/jar) - * [**qtjambi-qt3danimation-native-linux-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation-native-linux-x64/6.2.7/jar) - * [**qtjambi-qt3danimation-native-macos-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation-native-macos/6.2.7/jar) - * [**qtjambi-qt3danimation-native-android-x86-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation-native-android-x86/6.2.7/jar) - * [**qtjambi-qt3danimation-native-android-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation-native-android-x64/6.2.7/jar) - * [**qtjambi-qt3danimation-native-android-arm-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation-native-android-arm/6.2.7/jar) - * [**qtjambi-qt3danimation-native-android-arm64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation-native-android-arm64/6.2.7/jar) + * [**qtjambi-qt3danimation-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation/6.2.8/jar) + * [**qtjambi-qt3danimation-native-windows-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation-native-windows-x64/6.2.8/jar) + * [**qtjambi-qt3danimation-native-linux-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation-native-linux-x64/6.2.8/jar) + * [**qtjambi-qt3danimation-native-macos-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation-native-macos/6.2.8/jar) + * [**qtjambi-qt3danimation-native-android-x86-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation-native-android-x86/6.2.8/jar) + * [**qtjambi-qt3danimation-native-android-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation-native-android-x64/6.2.8/jar) + * [**qtjambi-qt3danimation-native-android-arm-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation-native-android-arm/6.2.8/jar) + * [**qtjambi-qt3danimation-native-android-arm64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation-native-android-arm64/6.2.8/jar) * [Qt3DExtras](https://doc.qt.io/qt-6/qt3d-index.html) in module **qtjambi-qt3dextras**: - * [**qtjambi-qt3dextras-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras/6.2.7/jar) - * [**qtjambi-qt3dextras-native-windows-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras-native-windows-x64/6.2.7/jar) - * [**qtjambi-qt3dextras-native-linux-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras-native-linux-x64/6.2.7/jar) - * [**qtjambi-qt3dextras-native-macos-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras-native-macos/6.2.7/jar) - * [**qtjambi-qt3dextras-native-android-x86-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras-native-android-x86/6.2.7/jar) - * [**qtjambi-qt3dextras-native-android-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras-native-android-x64/6.2.7/jar) - * [**qtjambi-qt3dextras-native-android-arm-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras-native-android-arm/6.2.7/jar) - * [**qtjambi-qt3dextras-native-android-arm64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras-native-android-arm64/6.2.7/jar) + * [**qtjambi-qt3dextras-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras/6.2.8/jar) + * [**qtjambi-qt3dextras-native-windows-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras-native-windows-x64/6.2.8/jar) + * [**qtjambi-qt3dextras-native-linux-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras-native-linux-x64/6.2.8/jar) + * [**qtjambi-qt3dextras-native-macos-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras-native-macos/6.2.8/jar) + * [**qtjambi-qt3dextras-native-android-x86-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras-native-android-x86/6.2.8/jar) + * [**qtjambi-qt3dextras-native-android-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras-native-android-x64/6.2.8/jar) + * [**qtjambi-qt3dextras-native-android-arm-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras-native-android-arm/6.2.8/jar) + * [**qtjambi-qt3dextras-native-android-arm64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras-native-android-arm64/6.2.8/jar) * [Qt3DInput](https://doc.qt.io/qt-6/qt3d-index.html) in module **qtjambi-qt3dinput**: - * [**qtjambi-qt3dinput-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput/6.2.7/jar) - * [**qtjambi-qt3dinput-native-windows-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput-native-windows-x64/6.2.7/jar) - * [**qtjambi-qt3dinput-native-linux-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput-native-linux-x64/6.2.7/jar) - * [**qtjambi-qt3dinput-native-macos-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput-native-macos/6.2.7/jar) - * [**qtjambi-qt3dinput-native-android-x86-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput-native-android-x86/6.2.7/jar) - * [**qtjambi-qt3dinput-native-android-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput-native-android-x64/6.2.7/jar) - * [**qtjambi-qt3dinput-native-android-arm-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput-native-android-arm/6.2.7/jar) - * [**qtjambi-qt3dinput-native-android-arm64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput-native-android-arm64/6.2.7/jar) + * [**qtjambi-qt3dinput-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput/6.2.8/jar) + * [**qtjambi-qt3dinput-native-windows-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput-native-windows-x64/6.2.8/jar) + * [**qtjambi-qt3dinput-native-linux-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput-native-linux-x64/6.2.8/jar) + * [**qtjambi-qt3dinput-native-macos-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput-native-macos/6.2.8/jar) + * [**qtjambi-qt3dinput-native-android-x86-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput-native-android-x86/6.2.8/jar) + * [**qtjambi-qt3dinput-native-android-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput-native-android-x64/6.2.8/jar) + * [**qtjambi-qt3dinput-native-android-arm-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput-native-android-arm/6.2.8/jar) + * [**qtjambi-qt3dinput-native-android-arm64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput-native-android-arm64/6.2.8/jar) * [Qt3DLogic](https://doc.qt.io/qt-6/qt3d-index.html) in module **qtjambi-qt3dlogic**: - * [**qtjambi-qt3dlogic-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic/6.2.7/jar) - * [**qtjambi-qt3dlogic-native-windows-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic-native-windows-x64/6.2.7/jar) - * [**qtjambi-qt3dlogic-native-linux-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic-native-linux-x64/6.2.7/jar) - * [**qtjambi-qt3dlogic-native-macos-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic-native-macos/6.2.7/jar) - * [**qtjambi-qt3dlogic-native-android-x86-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic-native-android-x86/6.2.7/jar) - * [**qtjambi-qt3dlogic-native-android-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic-native-android-x64/6.2.7/jar) - * [**qtjambi-qt3dlogic-native-android-arm-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic-native-android-arm/6.2.7/jar) - * [**qtjambi-qt3dlogic-native-android-arm64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic-native-android-arm64/6.2.7/jar) + * [**qtjambi-qt3dlogic-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic/6.2.8/jar) + * [**qtjambi-qt3dlogic-native-windows-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic-native-windows-x64/6.2.8/jar) + * [**qtjambi-qt3dlogic-native-linux-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic-native-linux-x64/6.2.8/jar) + * [**qtjambi-qt3dlogic-native-macos-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic-native-macos/6.2.8/jar) + * [**qtjambi-qt3dlogic-native-android-x86-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic-native-android-x86/6.2.8/jar) + * [**qtjambi-qt3dlogic-native-android-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic-native-android-x64/6.2.8/jar) + * [**qtjambi-qt3dlogic-native-android-arm-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic-native-android-arm/6.2.8/jar) + * [**qtjambi-qt3dlogic-native-android-arm64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic-native-android-arm64/6.2.8/jar) * [Qt3DQuick](https://doc.qt.io/qt-6/qt3d-index.html) in module **qtjambi-qt3dquick**: - * [**qtjambi-qt3dquick-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick/6.2.7/jar) - * [**qtjambi-qt3dquick-native-windows-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick-native-windows-x64/6.2.7/jar) - * [**qtjambi-qt3dquick-native-linux-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick-native-linux-x64/6.2.7/jar) - * [**qtjambi-qt3dquick-native-macos-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick-native-macos/6.2.7/jar) - * [**qtjambi-qt3dquick-native-android-x86-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick-native-android-x86/6.2.7/jar) - * [**qtjambi-qt3dquick-native-android-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick-native-android-x64/6.2.7/jar) - * [**qtjambi-qt3dquick-native-android-arm-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick-native-android-arm/6.2.7/jar) - * [**qtjambi-qt3dquick-native-android-arm64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick-native-android-arm64/6.2.7/jar) + * [**qtjambi-qt3dquick-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick/6.2.8/jar) + * [**qtjambi-qt3dquick-native-windows-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick-native-windows-x64/6.2.8/jar) + * [**qtjambi-qt3dquick-native-linux-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick-native-linux-x64/6.2.8/jar) + * [**qtjambi-qt3dquick-native-macos-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick-native-macos/6.2.8/jar) + * [**qtjambi-qt3dquick-native-android-x86-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick-native-android-x86/6.2.8/jar) + * [**qtjambi-qt3dquick-native-android-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick-native-android-x64/6.2.8/jar) + * [**qtjambi-qt3dquick-native-android-arm-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick-native-android-arm/6.2.8/jar) + * [**qtjambi-qt3dquick-native-android-arm64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick-native-android-arm64/6.2.8/jar) * [Qt3DQuickExtras](https://doc.qt.io/qt-6/qt3d-index.html) in module **qtjambi-qt3dquickextras**: - * [**qtjambi-qt3dquickextras-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras/6.2.7/jar) - * [**qtjambi-qt3dquickextras-native-windows-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras-native-windows-x64/6.2.7/jar) - * [**qtjambi-qt3dquickextras-native-linux-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras-native-linux-x64/6.2.7/jar) - * [**qtjambi-qt3dquickextras-native-macos-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras-native-macos/6.2.7/jar) - * [**qtjambi-qt3dquickextras-native-android-x86-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras-native-android-x86/6.2.7/jar) - * [**qtjambi-qt3dquickextras-native-android-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras-native-android-x64/6.2.7/jar) - * [**qtjambi-qt3dquickextras-native-android-arm-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras-native-android-arm/6.2.7/jar) - * [**qtjambi-qt3dquickextras-native-android-arm64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras-native-android-arm64/6.2.7/jar) + * [**qtjambi-qt3dquickextras-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras/6.2.8/jar) + * [**qtjambi-qt3dquickextras-native-windows-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras-native-windows-x64/6.2.8/jar) + * [**qtjambi-qt3dquickextras-native-linux-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras-native-linux-x64/6.2.8/jar) + * [**qtjambi-qt3dquickextras-native-macos-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras-native-macos/6.2.8/jar) + * [**qtjambi-qt3dquickextras-native-android-x86-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras-native-android-x86/6.2.8/jar) + * [**qtjambi-qt3dquickextras-native-android-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras-native-android-x64/6.2.8/jar) + * [**qtjambi-qt3dquickextras-native-android-arm-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras-native-android-arm/6.2.8/jar) + * [**qtjambi-qt3dquickextras-native-android-arm64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras-native-android-arm64/6.2.8/jar) * [Qt3DQuickScene3D](https://doc.qt.io/qt-6/qt3d-index.html) in module **qtjambi-qt3dquickscene2d**: - * [**qtjambi-qt3dquickscene2d-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d/6.2.7/jar) - * [**qtjambi-qt3dquickscene2d-native-windows-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d-native-windows-x64/6.2.7/jar) - * [**qtjambi-qt3dquickscene2d-native-linux-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d-native-linux-x64/6.2.7/jar) - * [**qtjambi-qt3dquickscene2d-native-macos-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d-native-macos/6.2.7/jar) - * [**qtjambi-qt3dquickscene2d-native-android-x86-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d-native-android-x86/6.2.7/jar) - * [**qtjambi-qt3dquickscene2d-native-android-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d-native-android-x64/6.2.7/jar) - * [**qtjambi-qt3dquickscene2d-native-android-arm-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d-native-android-arm/6.2.7/jar) - * [**qtjambi-qt3dquickscene2d-native-android-arm64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d-native-android-arm64/6.2.7/jar) + * [**qtjambi-qt3dquickscene2d-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d/6.2.8/jar) + * [**qtjambi-qt3dquickscene2d-native-windows-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d-native-windows-x64/6.2.8/jar) + * [**qtjambi-qt3dquickscene2d-native-linux-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d-native-linux-x64/6.2.8/jar) + * [**qtjambi-qt3dquickscene2d-native-macos-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d-native-macos/6.2.8/jar) + * [**qtjambi-qt3dquickscene2d-native-android-x86-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d-native-android-x86/6.2.8/jar) + * [**qtjambi-qt3dquickscene2d-native-android-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d-native-android-x64/6.2.8/jar) + * [**qtjambi-qt3dquickscene2d-native-android-arm-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d-native-android-arm/6.2.8/jar) + * [**qtjambi-qt3dquickscene2d-native-android-arm64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d-native-android-arm64/6.2.8/jar) ### QtJambi Plugins * JDBC Sql Plugin: - * [**qtjambi-plugin-qsqljdbc-windows-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-windows-x64/6.2.7/jar) - * [**qtjambi-plugin-qsqljdbc-linux-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-linux-x64/6.2.7/jar) - * [**qtjambi-plugin-qsqljdbc-macos-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-macos/6.2.7/jar) - * [**qtjambi-plugin-qsqljdbc-native-android-x86-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-native-android-x86/6.2.7/jar) - * [**qtjambi-plugin-qsqljdbc-native-android-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-native-android-x64/6.2.7/jar) - * [**qtjambi-plugin-qsqljdbc-native-android-arm-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-native-android-arm/6.2.7/jar) - * [**qtjambi-plugin-qsqljdbc-native-android-arm64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-native-android-arm64/6.2.7/jar) - * [**qtjambi-plugin-qsqljdbc-native-android-common-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-native-android-common/6.2.7/jar) + * [**qtjambi-plugin-qsqljdbc-windows-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-windows-x64/6.2.8/jar) + * [**qtjambi-plugin-qsqljdbc-linux-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-linux-x64/6.2.8/jar) + * [**qtjambi-plugin-qsqljdbc-macos-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-macos/6.2.8/jar) + * [**qtjambi-plugin-qsqljdbc-native-android-x86-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-native-android-x86/6.2.8/jar) + * [**qtjambi-plugin-qsqljdbc-native-android-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-native-android-x64/6.2.8/jar) + * [**qtjambi-plugin-qsqljdbc-native-android-arm-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-native-android-arm/6.2.8/jar) + * [**qtjambi-plugin-qsqljdbc-native-android-arm64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-native-android-arm64/6.2.8/jar) + * [**qtjambi-plugin-qsqljdbc-native-android-common-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-native-android-common/6.2.8/jar) ### QtJambi Tools * [QtJambi User Interface Compiler (UIC)](https://doc.qt.io/qt-6/designer-using-a-ui-file.html#compile-time-form-processing): - * [**qtjambi-uic-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uic/6.2.7/jar) - * [**qtjambi-uic-native-windows-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uic-native-windows-x64/6.2.7/jar) - * [**qtjambi-uic-native-linux-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uic-native-linux-x64/6.2.7/jar) - * [**qtjambi-uic-native-macos-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uic-native-macos/6.2.7/jar) - * [**qtjambi-uic-native-android-x86-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uic-native-android-x86/6.2.7/jar) - * [**qtjambi-uic-native-android-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uic-native-android-x64/6.2.7/jar) - * [**qtjambi-uic-native-android-arm-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uic-native-android-arm/6.2.7/jar) - * [**qtjambi-uic-native-android-arm64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uic-native-android-arm64/6.2.7/jar) + * [**qtjambi-uic-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uic/6.2.8/jar) + * [**qtjambi-uic-native-windows-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uic-native-windows-x64/6.2.8/jar) + * [**qtjambi-uic-native-linux-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uic-native-linux-x64/6.2.8/jar) + * [**qtjambi-uic-native-macos-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uic-native-macos/6.2.8/jar) + * [**qtjambi-uic-native-android-x86-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uic-native-android-x86/6.2.8/jar) + * [**qtjambi-uic-native-android-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uic-native-android-x64/6.2.8/jar) + * [**qtjambi-uic-native-android-arm-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uic-native-android-arm/6.2.8/jar) + * [**qtjambi-uic-native-android-arm64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uic-native-android-arm64/6.2.8/jar) * QtJambi Deployer: - * [**qtjambi-deployer-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer/6.2.7/jar) - * [**qtjambi-deployer-native-windows-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer-native-windows-x64/6.2.7/jar) - * [**qtjambi-deployer-native-linux-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer-native-linux-x64/6.2.7/jar) - * [**qtjambi-deployer-native-macos-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer-native-macos/6.2.7/jar) - * [**qtjambi-deployer-native-android-x86-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer-native-android-x86/6.2.7/jar) - * [**qtjambi-deployer-native-android-x64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer-native-android-x64/6.2.7/jar) - * [**qtjambi-deployer-native-android-arm-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer-native-android-arm/6.2.7/jar) - * [**qtjambi-deployer-native-android-arm64-6.2.7.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer-native-android-arm64/6.2.7/jar) + * [**qtjambi-deployer-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer/6.2.8/jar) + * [**qtjambi-deployer-native-windows-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer-native-windows-x64/6.2.8/jar) + * [**qtjambi-deployer-native-linux-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer-native-linux-x64/6.2.8/jar) + * [**qtjambi-deployer-native-macos-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer-native-macos/6.2.8/jar) + * [**qtjambi-deployer-native-android-x86-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer-native-android-x86/6.2.8/jar) + * [**qtjambi-deployer-native-android-x64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer-native-android-x64/6.2.8/jar) + * [**qtjambi-deployer-native-android-arm-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer-native-android-arm/6.2.8/jar) + * [**qtjambi-deployer-native-android-arm64-6.2.8.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer-native-android-arm64/6.2.8/jar) ## QtJambi for Qt 5.15 -QtJambi 5.15.9 requires Qt 5.15.x whereas x can be any patch version. +QtJambi 5.15.10 requires Qt 5.15.x whereas x can be any patch version. Following Qt 5.15 modules are provided by QtJambi: ### Qt5 Essentials * [QtCore](https://doc.qt.io/qt-5/qtcore-index.html), [QtGui](https://doc.qt.io/qt-5/qtgui-index.html) and [QtWidgets](https://doc.qt.io/qt-5/qtwidgets-index.html) in module **qtjambi**: - * [**qtjambi-5.15.9a.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi/5.15.9a/jar) - * [**qtjambi-native-windows-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-native-windows-x64/5.15.9/jar) - * [**qtjambi-native-linux-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-native-linux-x64/5.15.9/jar) - * [**qtjambi-native-macos-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-native-macos/5.15.9/jar) - * [**qtjambi-native-android-x86-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-native-android-x86/5.15.9/jar) - * [**qtjambi-native-android-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-native-android-x64/5.15.9/jar) - * [**qtjambi-native-android-arm-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-native-android-arm/5.15.9/jar) - * [**qtjambi-native-android-arm64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-native-android-arm64/5.15.9/jar) + * [**qtjambi-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi/5.15.10/jar) + * [**qtjambi-native-windows-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-native-windows-x64/5.15.10/jar) + * [**qtjambi-native-linux-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-native-linux-x64/5.15.10/jar) + * [**qtjambi-native-macos-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-native-macos/5.15.10/jar) + * [**qtjambi-native-android-x86-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-native-android-x86/5.15.10/jar) + * [**qtjambi-native-android-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-native-android-x64/5.15.10/jar) + * [**qtjambi-native-android-arm-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-native-android-arm/5.15.10/jar) + * [**qtjambi-native-android-arm64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-native-android-arm64/5.15.10/jar) * [QtMultimedia](https://doc.qt.io/qt-5/qtmultimedia-index.html) in module **qtjambi-multimedia**: - * [**qtjambi-multimedia-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia/5.15.9/jar) - * [**qtjambi-multimedia-native-windows-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia-native-windows-x64/5.15.9/jar) - * [**qtjambi-multimedia-native-linux-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia-native-linux-x64/5.15.9/jar) - * [**qtjambi-multimedia-native-macos-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia-native-macos/5.15.9/jar) - * [**qtjambi-multimedia-native-android-x86-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia-native-android-x86/5.15.9/jar) - * [**qtjambi-multimedia-native-android-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia-native-android-x64/5.15.9/jar) - * [**qtjambi-multimedia-native-android-arm-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia-native-android-arm/5.15.9/jar) - * [**qtjambi-multimedia-native-android-arm64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia-native-android-arm64/5.15.9/jar) + * [**qtjambi-multimedia-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia/5.15.10/jar) + * [**qtjambi-multimedia-native-windows-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia-native-windows-x64/5.15.10/jar) + * [**qtjambi-multimedia-native-linux-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia-native-linux-x64/5.15.10/jar) + * [**qtjambi-multimedia-native-macos-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia-native-macos/5.15.10/jar) + * [**qtjambi-multimedia-native-android-x86-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia-native-android-x86/5.15.10/jar) + * [**qtjambi-multimedia-native-android-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia-native-android-x64/5.15.10/jar) + * [**qtjambi-multimedia-native-android-arm-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia-native-android-arm/5.15.10/jar) + * [**qtjambi-multimedia-native-android-arm64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimedia-native-android-arm64/5.15.10/jar) * [QtMultimediaWidgets](https://doc.qt.io/qt-5/qtmultimedia-index.html) in module **qtjambi-multimediawidgets**: - * [**qtjambi-multimediawidgets-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets/5.15.9/jar) - * [**qtjambi-multimediawidgets-native-windows-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets-native-windows-x64/5.15.9/jar) - * [**qtjambi-multimediawidgets-native-linux-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets-native-linux-x64/5.15.9/jar) - * [**qtjambi-multimediawidgets-native-macos-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets-native-macos/5.15.9/jar) - * [**qtjambi-multimediawidgets-native-android-x86-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets-native-android-x86/5.15.9/jar) - * [**qtjambi-multimediawidgets-native-android-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets-native-android-x64/5.15.9/jar) - * [**qtjambi-multimediawidgets-native-android-arm-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets-native-android-arm/5.15.9/jar) - * [**qtjambi-multimediawidgets-native-android-arm64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets-native-android-arm64/5.15.9/jar) + * [**qtjambi-multimediawidgets-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets/5.15.10/jar) + * [**qtjambi-multimediawidgets-native-windows-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets-native-windows-x64/5.15.10/jar) + * [**qtjambi-multimediawidgets-native-linux-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets-native-linux-x64/5.15.10/jar) + * [**qtjambi-multimediawidgets-native-macos-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets-native-macos/5.15.10/jar) + * [**qtjambi-multimediawidgets-native-android-x86-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets-native-android-x86/5.15.10/jar) + * [**qtjambi-multimediawidgets-native-android-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets-native-android-x64/5.15.10/jar) + * [**qtjambi-multimediawidgets-native-android-arm-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets-native-android-arm/5.15.10/jar) + * [**qtjambi-multimediawidgets-native-android-arm64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-multimediawidgets-native-android-arm64/5.15.10/jar) * [QtNetwork](https://doc.qt.io/qt-5/qtnetwork-index.html) in module **qtjambi-network**: - * [**qtjambi-network-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network/5.15.9/jar) - * [**qtjambi-network-native-windows-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network-native-windows-x64/5.15.9/jar) - * [**qtjambi-network-native-linux-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network-native-linux-x64/5.15.9/jar) - * [**qtjambi-network-native-macos-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network-native-macos/5.15.9/jar) - * [**qtjambi-network-native-android-x86-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network-native-android-x86/5.15.9/jar) - * [**qtjambi-network-native-android-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network-native-android-x64/5.15.9/jar) - * [**qtjambi-network-native-android-arm-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network-native-android-arm/5.15.9/jar) - * [**qtjambi-network-native-android-arm64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network-native-android-arm64/5.15.9/jar) + * [**qtjambi-network-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network/5.15.10/jar) + * [**qtjambi-network-native-windows-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network-native-windows-x64/5.15.10/jar) + * [**qtjambi-network-native-linux-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network-native-linux-x64/5.15.10/jar) + * [**qtjambi-network-native-macos-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network-native-macos/5.15.10/jar) + * [**qtjambi-network-native-android-x86-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network-native-android-x86/5.15.10/jar) + * [**qtjambi-network-native-android-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network-native-android-x64/5.15.10/jar) + * [**qtjambi-network-native-android-arm-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network-native-android-arm/5.15.10/jar) + * [**qtjambi-network-native-android-arm64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-network-native-android-arm64/5.15.10/jar) * [QtQml](https://doc.qt.io/qt-5/qtqml-index.html) in module **qtjambi-qml**: - * [**qtjambi-qml-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml/5.15.9/jar) - * [**qtjambi-qml-native-windows-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml-native-windows-x64/5.15.9/jar) - * [**qtjambi-qml-native-linux-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml-native-linux-x64/5.15.9/jar) - * [**qtjambi-qml-native-macos-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml-native-macos/5.15.9/jar) - * [**qtjambi-qml-native-android-x86-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml-native-android-x86/5.15.9/jar) - * [**qtjambi-qml-native-android-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml-native-android-x64/5.15.9/jar) - * [**qtjambi-qml-native-android-arm-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml-native-android-arm/5.15.9/jar) - * [**qtjambi-qml-native-android-arm64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml-native-android-arm64/5.15.9/jar) + * [**qtjambi-qml-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml/5.15.10/jar) + * [**qtjambi-qml-native-windows-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml-native-windows-x64/5.15.10/jar) + * [**qtjambi-qml-native-linux-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml-native-linux-x64/5.15.10/jar) + * [**qtjambi-qml-native-macos-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml-native-macos/5.15.10/jar) + * [**qtjambi-qml-native-android-x86-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml-native-android-x86/5.15.10/jar) + * [**qtjambi-qml-native-android-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml-native-android-x64/5.15.10/jar) + * [**qtjambi-qml-native-android-arm-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml-native-android-arm/5.15.10/jar) + * [**qtjambi-qml-native-android-arm64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qml-native-android-arm64/5.15.10/jar) * [QtQuick](https://doc.qt.io/qt-5/qtquick-index.html) in module **qtjambi-quick**: - * [**qtjambi-quick-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick/5.15.9/jar) - * [**qtjambi-quick-native-windows-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick-native-windows-x64/5.15.9/jar) - * [**qtjambi-quick-native-linux-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick-native-linux-x64/5.15.9/jar) - * [**qtjambi-quick-native-macos-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick-native-macos/5.15.9/jar) - * [**qtjambi-quick-native-android-x86-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick-native-android-x86/5.15.9/jar) - * [**qtjambi-quick-native-android-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick-native-android-x64/5.15.9/jar) - * [**qtjambi-quick-native-android-arm-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick-native-android-arm/5.15.9/jar) - * [**qtjambi-quick-native-android-arm64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick-native-android-arm64/5.15.9/jar) + * [**qtjambi-quick-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick/5.15.10/jar) + * [**qtjambi-quick-native-windows-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick-native-windows-x64/5.15.10/jar) + * [**qtjambi-quick-native-linux-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick-native-linux-x64/5.15.10/jar) + * [**qtjambi-quick-native-macos-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick-native-macos/5.15.10/jar) + * [**qtjambi-quick-native-android-x86-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick-native-android-x86/5.15.10/jar) + * [**qtjambi-quick-native-android-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick-native-android-x64/5.15.10/jar) + * [**qtjambi-quick-native-android-arm-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick-native-android-arm/5.15.10/jar) + * [**qtjambi-quick-native-android-arm64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick-native-android-arm64/5.15.10/jar) * [QtQuickControls](https://doc.qt.io/qt-5/qtquickcontrols-index.html) in module **qtjambi-quickcontrols**: - * [**qtjambi-quickcontrols-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols/5.15.9/jar) - * [**qtjambi-quickcontrols-native-windows-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols-native-windows-x64/5.15.9/jar) - * [**qtjambi-quickcontrols-native-linux-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols-native-linux-x64/5.15.9/jar) - * [**qtjambi-quickcontrols-native-macos-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols-native-macos/5.15.9/jar) - * [**qtjambi-quickcontrols-native-android-x86-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols-native-android-x86/5.15.9/jar) - * [**qtjambi-quickcontrols-native-android-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols-native-android-x64/5.15.9/jar) - * [**qtjambi-quickcontrols-native-android-arm-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols-native-android-arm/5.15.9/jar) - * [**qtjambi-quickcontrols-native-android-arm64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols-native-android-arm64/5.15.9/jar) + * [**qtjambi-quickcontrols-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols/5.15.10/jar) + * [**qtjambi-quickcontrols-native-windows-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols-native-windows-x64/5.15.10/jar) + * [**qtjambi-quickcontrols-native-linux-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols-native-linux-x64/5.15.10/jar) + * [**qtjambi-quickcontrols-native-macos-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols-native-macos/5.15.10/jar) + * [**qtjambi-quickcontrols-native-android-x86-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols-native-android-x86/5.15.10/jar) + * [**qtjambi-quickcontrols-native-android-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols-native-android-x64/5.15.10/jar) + * [**qtjambi-quickcontrols-native-android-arm-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols-native-android-arm/5.15.10/jar) + * [**qtjambi-quickcontrols-native-android-arm64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickcontrols-native-android-arm64/5.15.10/jar) * [QtQuickTest](https://doc.qt.io/qt-5/qtquicktest-index.html) in module **qtjambi-quicktest**: - * [**qtjambi-quicktest-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest/5.15.9/jar) - * [**qtjambi-quicktest-native-windows-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest-native-windows-x64/5.15.9/jar) - * [**qtjambi-quicktest-native-linux-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest-native-linux-x64/5.15.9/jar) - * [**qtjambi-quicktest-native-macos-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest-native-macos/5.15.9/jar) - * [**qtjambi-quicktest-native-android-x86-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest-native-android-x86/5.15.9/jar) - * [**qtjambi-quicktest-native-android-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest-native-android-x64/5.15.9/jar) - * [**qtjambi-quicktest-native-android-arm-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest-native-android-arm/5.15.9/jar) - * [**qtjambi-quicktest-native-android-arm64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest-native-android-arm64/5.15.9/jar) + * [**qtjambi-quicktest-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest/5.15.10/jar) + * [**qtjambi-quicktest-native-windows-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest-native-windows-x64/5.15.10/jar) + * [**qtjambi-quicktest-native-linux-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest-native-linux-x64/5.15.10/jar) + * [**qtjambi-quicktest-native-macos-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest-native-macos/5.15.10/jar) + * [**qtjambi-quicktest-native-android-x86-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest-native-android-x86/5.15.10/jar) + * [**qtjambi-quicktest-native-android-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest-native-android-x64/5.15.10/jar) + * [**qtjambi-quicktest-native-android-arm-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest-native-android-arm/5.15.10/jar) + * [**qtjambi-quicktest-native-android-arm64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quicktest-native-android-arm64/5.15.10/jar) * [QtSql](https://doc.qt.io/qt-5/qtsql-index.html) in module **qtjambi-sql**: - * [**qtjambi-sql-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql/5.15.9/jar) - * [**qtjambi-sql-native-windows-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql-native-windows-x64/5.15.9/jar) - * [**qtjambi-sql-native-linux-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql-native-linux-x64/5.15.9/jar) - * [**qtjambi-sql-native-macos-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql-native-macos/5.15.9/jar) - * [**qtjambi-sql-native-android-x86-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql-native-android-x86/5.15.9/jar) - * [**qtjambi-sql-native-android-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql-native-android-x64/5.15.9/jar) - * [**qtjambi-sql-native-android-arm-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql-native-android-arm/5.15.9/jar) - * [**qtjambi-sql-native-android-arm64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql-native-android-arm64/5.15.9/jar) + * [**qtjambi-sql-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql/5.15.10/jar) + * [**qtjambi-sql-native-windows-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql-native-windows-x64/5.15.10/jar) + * [**qtjambi-sql-native-linux-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql-native-linux-x64/5.15.10/jar) + * [**qtjambi-sql-native-macos-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql-native-macos/5.15.10/jar) + * [**qtjambi-sql-native-android-x86-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql-native-android-x86/5.15.10/jar) + * [**qtjambi-sql-native-android-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql-native-android-x64/5.15.10/jar) + * [**qtjambi-sql-native-android-arm-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql-native-android-arm/5.15.10/jar) + * [**qtjambi-sql-native-android-arm64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sql-native-android-arm64/5.15.10/jar) * [QtTest](https://doc.qt.io/qt-5/qttest-index.html) in module **qtjambi-test**: - * [**qtjambi-test-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test/5.15.9/jar) - * [**qtjambi-test-native-windows-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test-native-windows-x64/5.15.9/jar) - * [**qtjambi-test-native-linux-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test-native-linux-x64/5.15.9/jar) - * [**qtjambi-test-native-macos-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test-native-macos/5.15.9/jar) - * [**qtjambi-test-native-android-x86-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test-native-android-x86/5.15.9/jar) - * [**qtjambi-test-native-android-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test-native-android-x64/5.15.9/jar) - * [**qtjambi-test-native-android-arm-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test-native-android-arm/5.15.9/jar) - * [**qtjambi-test-native-android-arm64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test-native-android-arm64/5.15.9/jar) + * [**qtjambi-test-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test/5.15.10/jar) + * [**qtjambi-test-native-windows-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test-native-windows-x64/5.15.10/jar) + * [**qtjambi-test-native-linux-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test-native-linux-x64/5.15.10/jar) + * [**qtjambi-test-native-macos-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test-native-macos/5.15.10/jar) + * [**qtjambi-test-native-android-x86-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test-native-android-x86/5.15.10/jar) + * [**qtjambi-test-native-android-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test-native-android-x64/5.15.10/jar) + * [**qtjambi-test-native-android-arm-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test-native-android-arm/5.15.10/jar) + * [**qtjambi-test-native-android-arm64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-test-native-android-arm64/5.15.10/jar) ### Qt5 Add-Ons * [QtBluetooth](https://doc.qt.io/qt-5/qtbluetooth-index.html) in module **qtjambi-bluetooth**: - * [**qtjambi-bluetooth-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth/5.15.9/jar) - * [**qtjambi-bluetooth-native-windows-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth-native-windows-x64/5.15.9/jar) - * [**qtjambi-bluetooth-native-linux-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth-native-linux-x64/5.15.9/jar) - * [**qtjambi-bluetooth-native-macos-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth-native-macos/5.15.9/jar) - * [**qtjambi-bluetooth-native-android-x86-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth-native-android-x86/5.15.9/jar) - * [**qtjambi-bluetooth-native-android-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth-native-android-x64/5.15.9/jar) - * [**qtjambi-bluetooth-native-android-arm-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth-native-android-arm/5.15.9/jar) - * [**qtjambi-bluetooth-native-android-arm64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth-native-android-arm64/5.15.9/jar) + * [**qtjambi-bluetooth-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth/5.15.10/jar) + * [**qtjambi-bluetooth-native-windows-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth-native-windows-x64/5.15.10/jar) + * [**qtjambi-bluetooth-native-linux-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth-native-linux-x64/5.15.10/jar) + * [**qtjambi-bluetooth-native-macos-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth-native-macos/5.15.10/jar) + * [**qtjambi-bluetooth-native-android-x86-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth-native-android-x86/5.15.10/jar) + * [**qtjambi-bluetooth-native-android-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth-native-android-x64/5.15.10/jar) + * [**qtjambi-bluetooth-native-android-arm-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth-native-android-arm/5.15.10/jar) + * [**qtjambi-bluetooth-native-android-arm64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-bluetooth-native-android-arm64/5.15.10/jar) * [QtConcurrent](https://doc.qt.io/qt-5/qtconcurrent-index.html) in module **qtjambi-concurrent**: - * [**qtjambi-concurrent-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent/5.15.9/jar) - * [**qtjambi-concurrent-native-windows-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent-native-windows-x64/5.15.9/jar) - * [**qtjambi-concurrent-native-linux-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent-native-linux-x64/5.15.9/jar) - * [**qtjambi-concurrent-native-macos-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent-native-macos/5.15.9/jar) - * [**qtjambi-concurrent-native-android-x86-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent-native-android-x86/5.15.9/jar) - * [**qtjambi-concurrent-native-android-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent-native-android-x64/5.15.9/jar) - * [**qtjambi-concurrent-native-android-arm-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent-native-android-arm/5.15.9/jar) - * [**qtjambi-concurrent-native-android-arm64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent-native-android-arm64/5.15.9/jar) + * [**qtjambi-concurrent-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent/5.15.10/jar) + * [**qtjambi-concurrent-native-windows-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent-native-windows-x64/5.15.10/jar) + * [**qtjambi-concurrent-native-linux-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent-native-linux-x64/5.15.10/jar) + * [**qtjambi-concurrent-native-macos-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent-native-macos/5.15.10/jar) + * [**qtjambi-concurrent-native-android-x86-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent-native-android-x86/5.15.10/jar) + * [**qtjambi-concurrent-native-android-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent-native-android-x64/5.15.10/jar) + * [**qtjambi-concurrent-native-android-arm-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent-native-android-arm/5.15.10/jar) + * [**qtjambi-concurrent-native-android-arm64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-concurrent-native-android-arm64/5.15.10/jar) * [QtDBus](https://doc.qt.io/qt-5/qtdbus-index.html) in module **qtjambi-dbus**: - * [**qtjambi-dbus-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-dbus/5.15.9/jar) - * [**qtjambi-dbus-native-windows-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-dbus-native-windows-x64/5.15.9/jar) - * [**qtjambi-dbus-native-linux-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-dbus-native-linux-x64/5.15.9/jar) - * [**qtjambi-dbus-native-macos-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-dbus-native-macos/5.15.9/jar) - * [**qtjambi-dbus-native-android-x86-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-dbus-native-android-x86/5.15.9/jar) - * [**qtjambi-dbus-native-android-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-dbus-native-android-x64/5.15.9/jar) - * [**qtjambi-dbus-native-android-arm-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-dbus-native-android-arm/5.15.9/jar) - * [**qtjambi-dbus-native-android-arm64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-dbus-native-android-arm64/5.15.9/jar) + * [**qtjambi-dbus-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-dbus/5.15.10/jar) + * [**qtjambi-dbus-native-windows-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-dbus-native-windows-x64/5.15.10/jar) + * [**qtjambi-dbus-native-linux-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-dbus-native-linux-x64/5.15.10/jar) + * [**qtjambi-dbus-native-macos-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-dbus-native-macos/5.15.10/jar) + * [**qtjambi-dbus-native-android-x86-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-dbus-native-android-x86/5.15.10/jar) + * [**qtjambi-dbus-native-android-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-dbus-native-android-x64/5.15.10/jar) + * [**qtjambi-dbus-native-android-arm-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-dbus-native-android-arm/5.15.10/jar) + * [**qtjambi-dbus-native-android-arm64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-dbus-native-android-arm64/5.15.10/jar) * [QtGamepad](https://doc.qt.io/qt-5/qtgamepad-index.html) in module **qtjambi-gamepad**: - * [**qtjambi-gamepad-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-gamepad/5.15.9/jar) - * [**qtjambi-gamepad-native-windows-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-gamepad-native-windows-x64/5.15.9/jar) - * [**qtjambi-gamepad-native-linux-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-gamepad-native-linux-x64/5.15.9/jar) - * [**qtjambi-gamepad-native-macos-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-gamepad-native-macos/5.15.9/jar) - * [**qtjambi-gamepad-native-android-x86-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-gamepad-native-android-x86/5.15.9/jar) - * [**qtjambi-gamepad-native-android-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-gamepad-native-android-x64/5.15.9/jar) - * [**qtjambi-gamepad-native-android-arm-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-gamepad-native-android-arm/5.15.9/jar) - * [**qtjambi-gamepad-native-android-arm64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-gamepad-native-android-arm64/5.15.9/jar) + * [**qtjambi-gamepad-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-gamepad/5.15.10/jar) + * [**qtjambi-gamepad-native-windows-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-gamepad-native-windows-x64/5.15.10/jar) + * [**qtjambi-gamepad-native-linux-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-gamepad-native-linux-x64/5.15.10/jar) + * [**qtjambi-gamepad-native-macos-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-gamepad-native-macos/5.15.10/jar) + * [**qtjambi-gamepad-native-android-x86-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-gamepad-native-android-x86/5.15.10/jar) + * [**qtjambi-gamepad-native-android-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-gamepad-native-android-x64/5.15.10/jar) + * [**qtjambi-gamepad-native-android-arm-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-gamepad-native-android-arm/5.15.10/jar) + * [**qtjambi-gamepad-native-android-arm64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-gamepad-native-android-arm64/5.15.10/jar) * [QtHelp](https://doc.qt.io/qt-5/qthelp-index.html) in module **qtjambi-help**: - * [**qtjambi-help-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help/5.15.9/jar) - * [**qtjambi-help-native-windows-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help-native-windows-x64/5.15.9/jar) - * [**qtjambi-help-native-linux-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help-native-linux-x64/5.15.9/jar) - * [**qtjambi-help-native-macos-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help-native-macos/5.15.9/jar) - * [**qtjambi-help-native-android-x86-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help-native-android-x86/5.15.9/jar) - * [**qtjambi-help-native-android-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help-native-android-x64/5.15.9/jar) - * [**qtjambi-help-native-android-arm-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help-native-android-arm/5.15.9/jar) - * [**qtjambi-help-native-android-arm64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help-native-android-arm64/5.15.9/jar) + * [**qtjambi-help-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help/5.15.10/jar) + * [**qtjambi-help-native-windows-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help-native-windows-x64/5.15.10/jar) + * [**qtjambi-help-native-linux-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help-native-linux-x64/5.15.10/jar) + * [**qtjambi-help-native-macos-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help-native-macos/5.15.10/jar) + * [**qtjambi-help-native-android-x86-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help-native-android-x86/5.15.10/jar) + * [**qtjambi-help-native-android-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help-native-android-x64/5.15.10/jar) + * [**qtjambi-help-native-android-arm-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help-native-android-arm/5.15.10/jar) + * [**qtjambi-help-native-android-arm64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-help-native-android-arm64/5.15.10/jar) * [QtLocation](https://doc.qt.io/qt-5/qtlocation-index.html) in module **qtjambi-location**: - * [**qtjambi-location-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-location/5.15.9/jar) - * [**qtjambi-location-native-windows-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-location-native-windows-x64/5.15.9/jar) - * [**qtjambi-location-native-linux-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-location-native-linux-x64/5.15.9/jar) - * [**qtjambi-location-native-macos-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-location-native-macos/5.15.9/jar) - * [**qtjambi-location-native-android-x86-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-location-native-android-x86/5.15.9/jar) - * [**qtjambi-location-native-android-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-location-native-android-x64/5.15.9/jar) - * [**qtjambi-location-native-android-arm-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-location-native-android-arm/5.15.9/jar) - * [**qtjambi-location-native-android-arm64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-location-native-android-arm64/5.15.9/jar) + * [**qtjambi-location-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-location/5.15.10/jar) + * [**qtjambi-location-native-windows-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-location-native-windows-x64/5.15.10/jar) + * [**qtjambi-location-native-linux-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-location-native-linux-x64/5.15.10/jar) + * [**qtjambi-location-native-macos-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-location-native-macos/5.15.10/jar) + * [**qtjambi-location-native-android-x86-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-location-native-android-x86/5.15.10/jar) + * [**qtjambi-location-native-android-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-location-native-android-x64/5.15.10/jar) + * [**qtjambi-location-native-android-arm-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-location-native-android-arm/5.15.10/jar) + * [**qtjambi-location-native-android-arm64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-location-native-android-arm64/5.15.10/jar) * [QtNfc](https://doc.qt.io/qt-5/qtnfc-index.html) in module **qtjambi-nfc**: - * [**qtjambi-nfc-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc/5.15.9/jar) - * [**qtjambi-nfc-native-windows-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc-native-windows-x64/5.15.9/jar) - * [**qtjambi-nfc-native-linux-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc-native-linux-x64/5.15.9/jar) - * [**qtjambi-nfc-native-macos-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc-native-macos/5.15.9/jar) - * [**qtjambi-nfc-native-android-x86-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc-native-android-x86/5.15.9/jar) - * [**qtjambi-nfc-native-android-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc-native-android-x64/5.15.9/jar) - * [**qtjambi-nfc-native-android-arm-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc-native-android-arm/5.15.9/jar) - * [**qtjambi-nfc-native-android-arm64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc-native-android-arm64/5.15.9/jar) + * [**qtjambi-nfc-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc/5.15.10/jar) + * [**qtjambi-nfc-native-windows-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc-native-windows-x64/5.15.10/jar) + * [**qtjambi-nfc-native-linux-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc-native-linux-x64/5.15.10/jar) + * [**qtjambi-nfc-native-macos-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc-native-macos/5.15.10/jar) + * [**qtjambi-nfc-native-android-x86-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc-native-android-x86/5.15.10/jar) + * [**qtjambi-nfc-native-android-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc-native-android-x64/5.15.10/jar) + * [**qtjambi-nfc-native-android-arm-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc-native-android-arm/5.15.10/jar) + * [**qtjambi-nfc-native-android-arm64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-nfc-native-android-arm64/5.15.10/jar) * [QtPositioning](https://doc.qt.io/qt-5/qtpositioning-index.html) in module **qtjambi-positioning**: - * [**qtjambi-positioning-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning/5.15.9/jar) - * [**qtjambi-positioning-native-windows-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning-native-windows-x64/5.15.9/jar) - * [**qtjambi-positioning-native-linux-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning-native-linux-x64/5.15.9/jar) - * [**qtjambi-positioning-native-macos-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning-native-macos/5.15.9/jar) - * [**qtjambi-positioning-native-android-x86-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning-native-android-x86/5.15.9/jar) - * [**qtjambi-positioning-native-android-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning-native-android-x64/5.15.9/jar) - * [**qtjambi-positioning-native-android-arm-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning-native-android-arm/5.15.9/jar) - * [**qtjambi-positioning-native-android-arm64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning-native-android-arm64/5.15.9/jar) + * [**qtjambi-positioning-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning/5.15.10/jar) + * [**qtjambi-positioning-native-windows-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning-native-windows-x64/5.15.10/jar) + * [**qtjambi-positioning-native-linux-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning-native-linux-x64/5.15.10/jar) + * [**qtjambi-positioning-native-macos-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning-native-macos/5.15.10/jar) + * [**qtjambi-positioning-native-android-x86-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning-native-android-x86/5.15.10/jar) + * [**qtjambi-positioning-native-android-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning-native-android-x64/5.15.10/jar) + * [**qtjambi-positioning-native-android-arm-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning-native-android-arm/5.15.10/jar) + * [**qtjambi-positioning-native-android-arm64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-positioning-native-android-arm64/5.15.10/jar) * [QtPrintSupport](https://doc.qt.io/qt-5/qtprintsupport-index.html) in module **qtjambi-printsupport**: - * [**qtjambi-printsupport-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport/5.15.9/jar) - * [**qtjambi-printsupport-native-windows-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport-native-windows-x64/5.15.9/jar) - * [**qtjambi-printsupport-native-linux-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport-native-linux-x64/5.15.9/jar) - * [**qtjambi-printsupport-native-macos-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport-native-macos/5.15.9/jar) - * [**qtjambi-printsupport-native-android-x86-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport-native-android-x86/5.15.9/jar) - * [**qtjambi-printsupport-native-android-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport-native-android-x64/5.15.9/jar) - * [**qtjambi-printsupport-native-android-arm-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport-native-android-arm/5.15.9/jar) - * [**qtjambi-printsupport-native-android-arm64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport-native-android-arm64/5.15.9/jar) + * [**qtjambi-printsupport-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport/5.15.10/jar) + * [**qtjambi-printsupport-native-windows-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport-native-windows-x64/5.15.10/jar) + * [**qtjambi-printsupport-native-linux-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport-native-linux-x64/5.15.10/jar) + * [**qtjambi-printsupport-native-macos-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport-native-macos/5.15.10/jar) + * [**qtjambi-printsupport-native-android-x86-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport-native-android-x86/5.15.10/jar) + * [**qtjambi-printsupport-native-android-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport-native-android-x64/5.15.10/jar) + * [**qtjambi-printsupport-native-android-arm-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport-native-android-arm/5.15.10/jar) + * [**qtjambi-printsupport-native-android-arm64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-printsupport-native-android-arm64/5.15.10/jar) * [QtPurchasing](https://doc.qt.io/qt-5/qtpurchasing-index.html) in module **qtjambi-purchasing**: - * [**qtjambi-purchasing-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-purchasing/5.15.9/jar) - * [**qtjambi-purchasing-native-windows-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-purchasing-native-windows-x64/5.15.9/jar) - * [**qtjambi-purchasing-native-linux-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-purchasing-native-linux-x64/5.15.9/jar) - * [**qtjambi-purchasing-native-macos-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-purchasing-native-macos/5.15.9/jar) - * [**qtjambi-purchasing-native-android-x86-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-purchasing-native-android-x86/5.15.9/jar) - * [**qtjambi-purchasing-native-android-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-purchasing-native-android-x64/5.15.9/jar) - * [**qtjambi-purchasing-native-android-arm-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-purchasing-native-android-arm/5.15.9/jar) - * [**qtjambi-purchasing-native-android-arm64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-purchasing-native-android-arm64/5.15.9/jar) + * [**qtjambi-purchasing-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-purchasing/5.15.10/jar) + * [**qtjambi-purchasing-native-windows-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-purchasing-native-windows-x64/5.15.10/jar) + * [**qtjambi-purchasing-native-linux-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-purchasing-native-linux-x64/5.15.10/jar) + * [**qtjambi-purchasing-native-macos-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-purchasing-native-macos/5.15.10/jar) + * [**qtjambi-purchasing-native-android-x86-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-purchasing-native-android-x86/5.15.10/jar) + * [**qtjambi-purchasing-native-android-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-purchasing-native-android-x64/5.15.10/jar) + * [**qtjambi-purchasing-native-android-arm-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-purchasing-native-android-arm/5.15.10/jar) + * [**qtjambi-purchasing-native-android-arm64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-purchasing-native-android-arm64/5.15.10/jar) * [QtQuickWidgets](https://doc.qt.io/qt-5/qtquickwidgets-module.html) in module **qtjambi-quickwidgets**: - * [**qtjambi-quickwidgets-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets/5.15.9/jar) - * [**qtjambi-quickwidgets-native-windows-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets-native-windows-x64/5.15.9/jar) - * [**qtjambi-quickwidgets-native-linux-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets-native-linux-x64/5.15.9/jar) - * [**qtjambi-quickwidgets-native-macos-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets-native-macos/5.15.9/jar) - * [**qtjambi-quickwidgets-native-android-x86-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets-native-android-x86/5.15.9/jar) - * [**qtjambi-quickwidgets-native-android-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets-native-android-x64/5.15.9/jar) - * [**qtjambi-quickwidgets-native-android-arm-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets-native-android-arm/5.15.9/jar) - * [**qtjambi-quickwidgets-native-android-arm64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets-native-android-arm64/5.15.9/jar) + * [**qtjambi-quickwidgets-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets/5.15.10/jar) + * [**qtjambi-quickwidgets-native-windows-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets-native-windows-x64/5.15.10/jar) + * [**qtjambi-quickwidgets-native-linux-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets-native-linux-x64/5.15.10/jar) + * [**qtjambi-quickwidgets-native-macos-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets-native-macos/5.15.10/jar) + * [**qtjambi-quickwidgets-native-android-x86-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets-native-android-x86/5.15.10/jar) + * [**qtjambi-quickwidgets-native-android-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets-native-android-x64/5.15.10/jar) + * [**qtjambi-quickwidgets-native-android-arm-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets-native-android-arm/5.15.10/jar) + * [**qtjambi-quickwidgets-native-android-arm64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quickwidgets-native-android-arm64/5.15.10/jar) * [QtRemoteObjects](https://doc.qt.io/qt-5/qtremoteobjects-module.html) in module **qtjambi-remoteobjects**: - * [**qtjambi-remoteobjects-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects/5.15.9/jar) - * [**qtjambi-remoteobjects-native-windows-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects-native-windows-x64/5.15.9/jar) - * [**qtjambi-remoteobjects-native-linux-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects-native-linux-x64/5.15.9/jar) - * [**qtjambi-remoteobjects-native-macos-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects-native-macos/5.15.9/jar) - * [**qtjambi-remoteobjects-native-android-x86-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects-native-android-x86/5.15.9/jar) - * [**qtjambi-remoteobjects-native-android-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects-native-android-x64/5.15.9/jar) - * [**qtjambi-remoteobjects-native-android-arm-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects-native-android-arm/5.15.9/jar) - * [**qtjambi-remoteobjects-native-android-arm64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects-native-android-arm64/5.15.9/jar) + * [**qtjambi-remoteobjects-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects/5.15.10/jar) + * [**qtjambi-remoteobjects-native-windows-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects-native-windows-x64/5.15.10/jar) + * [**qtjambi-remoteobjects-native-linux-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects-native-linux-x64/5.15.10/jar) + * [**qtjambi-remoteobjects-native-macos-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects-native-macos/5.15.10/jar) + * [**qtjambi-remoteobjects-native-android-x86-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects-native-android-x86/5.15.10/jar) + * [**qtjambi-remoteobjects-native-android-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects-native-android-x64/5.15.10/jar) + * [**qtjambi-remoteobjects-native-android-arm-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects-native-android-arm/5.15.10/jar) + * [**qtjambi-remoteobjects-native-android-arm64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-remoteobjects-native-android-arm64/5.15.10/jar) * [QtScript](https://doc.qt.io/qt-5/qtscript-module.html) in module **qtjambi-script**: - * [**qtjambi-script-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-script/5.15.9/jar) - * [**qtjambi-script-native-windows-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-script-native-windows-x64/5.15.9/jar) - * [**qtjambi-script-native-linux-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-script-native-linux-x64/5.15.9/jar) - * [**qtjambi-script-native-macos-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-script-native-macos/5.15.9/jar) - * [**qtjambi-script-native-android-x86-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-script-native-android-x86/5.15.9/jar) - * [**qtjambi-script-native-android-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-script-native-android-x64/5.15.9/jar) - * [**qtjambi-script-native-android-arm-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-script-native-android-arm/5.15.9/jar) - * [**qtjambi-script-native-android-arm64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-script-native-android-arm64/5.15.9/jar) + * [**qtjambi-script-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-script/5.15.10/jar) + * [**qtjambi-script-native-windows-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-script-native-windows-x64/5.15.10/jar) + * [**qtjambi-script-native-linux-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-script-native-linux-x64/5.15.10/jar) + * [**qtjambi-script-native-macos-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-script-native-macos/5.15.10/jar) + * [**qtjambi-script-native-android-x86-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-script-native-android-x86/5.15.10/jar) + * [**qtjambi-script-native-android-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-script-native-android-x64/5.15.10/jar) + * [**qtjambi-script-native-android-arm-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-script-native-android-arm/5.15.10/jar) + * [**qtjambi-script-native-android-arm64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-script-native-android-arm64/5.15.10/jar) * [QtScriptTools](https://doc.qt.io/qt-5/qtscripttools-module.html) in module **qtjambi-scripttools**: - * [**qtjambi-scripttools-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scripttools/5.15.9/jar) - * [**qtjambi-scripttools-native-windows-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scripttools-native-windows-x64/5.15.9/jar) - * [**qtjambi-scripttools-native-linux-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scripttools-native-linux-x64/5.15.9/jar) - * [**qtjambi-scripttools-native-macos-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scripttools-native-macos/5.15.9/jar) - * [**qtjambi-scripttools-native-android-x86-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scripttools-native-android-x86/5.15.9/jar) - * [**qtjambi-scripttools-native-android-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scripttools-native-android-x64/5.15.9/jar) - * [**qtjambi-scripttools-native-android-arm-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scripttools-native-android-arm/5.15.9/jar) - * [**qtjambi-scripttools-native-android-arm64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scripttools-native-android-arm64/5.15.9/jar) + * [**qtjambi-scripttools-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scripttools/5.15.10/jar) + * [**qtjambi-scripttools-native-windows-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scripttools-native-windows-x64/5.15.10/jar) + * [**qtjambi-scripttools-native-linux-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scripttools-native-linux-x64/5.15.10/jar) + * [**qtjambi-scripttools-native-macos-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scripttools-native-macos/5.15.10/jar) + * [**qtjambi-scripttools-native-android-x86-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scripttools-native-android-x86/5.15.10/jar) + * [**qtjambi-scripttools-native-android-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scripttools-native-android-x64/5.15.10/jar) + * [**qtjambi-scripttools-native-android-arm-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scripttools-native-android-arm/5.15.10/jar) + * [**qtjambi-scripttools-native-android-arm64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scripttools-native-android-arm64/5.15.10/jar) * [QtSCXML](https://doc.qt.io/qt-5/qtscxml-index.html) in module **qtjambi-scxml**: - * [**qtjambi-scxml-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml/5.15.9/jar) - * [**qtjambi-scxml-native-windows-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml-native-windows-x64/5.15.9/jar) - * [**qtjambi-scxml-native-linux-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml-native-linux-x64/5.15.9/jar) - * [**qtjambi-scxml-native-macos-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml-native-macos/5.15.9/jar) - * [**qtjambi-scxml-native-android-x86-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml-native-android-x86/5.15.9/jar) - * [**qtjambi-scxml-native-android-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml-native-android-x64/5.15.9/jar) - * [**qtjambi-scxml-native-android-arm-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml-native-android-arm/5.15.9/jar) - * [**qtjambi-scxml-native-android-arm64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml-native-android-arm64/5.15.9/jar) + * [**qtjambi-scxml-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml/5.15.10/jar) + * [**qtjambi-scxml-native-windows-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml-native-windows-x64/5.15.10/jar) + * [**qtjambi-scxml-native-linux-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml-native-linux-x64/5.15.10/jar) + * [**qtjambi-scxml-native-macos-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml-native-macos/5.15.10/jar) + * [**qtjambi-scxml-native-android-x86-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml-native-android-x86/5.15.10/jar) + * [**qtjambi-scxml-native-android-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml-native-android-x64/5.15.10/jar) + * [**qtjambi-scxml-native-android-arm-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml-native-android-arm/5.15.10/jar) + * [**qtjambi-scxml-native-android-arm64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-scxml-native-android-arm64/5.15.10/jar) * [QtSensors](https://doc.qt.io/qt-5/qtsensors-index.html) in module **qtjambi-sensors**: - * [**qtjambi-sensors-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors/5.15.9/jar) - * [**qtjambi-sensors-native-windows-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors-native-windows-x64/5.15.9/jar) - * [**qtjambi-sensors-native-linux-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors-native-linux-x64/5.15.9/jar) - * [**qtjambi-sensors-native-macos-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors-native-macos/5.15.9/jar) - * [**qtjambi-sensors-native-android-x86-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors-native-android-x86/5.15.9/jar) - * [**qtjambi-sensors-native-android-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors-native-android-x64/5.15.9/jar) - * [**qtjambi-sensors-native-android-arm-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors-native-android-arm/5.15.9/jar) - * [**qtjambi-sensors-native-android-arm64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors-native-android-arm64/5.15.9/jar) + * [**qtjambi-sensors-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors/5.15.10/jar) + * [**qtjambi-sensors-native-windows-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors-native-windows-x64/5.15.10/jar) + * [**qtjambi-sensors-native-linux-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors-native-linux-x64/5.15.10/jar) + * [**qtjambi-sensors-native-macos-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors-native-macos/5.15.10/jar) + * [**qtjambi-sensors-native-android-x86-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors-native-android-x86/5.15.10/jar) + * [**qtjambi-sensors-native-android-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors-native-android-x64/5.15.10/jar) + * [**qtjambi-sensors-native-android-arm-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors-native-android-arm/5.15.10/jar) + * [**qtjambi-sensors-native-android-arm64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-sensors-native-android-arm64/5.15.10/jar) * [QtSerialBus](https://doc.qt.io/qt-5/qtserialbus-index.html) in module **qtjambi-serialbus**: - * [**qtjambi-serialbus-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus/5.15.9/jar) - * [**qtjambi-serialbus-native-windows-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus-native-windows-x64/5.15.9/jar) - * [**qtjambi-serialbus-native-linux-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus-native-linux-x64/5.15.9/jar) - * [**qtjambi-serialbus-native-macos-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus-native-macos/5.15.9/jar) - * [**qtjambi-serialbus-native-android-x86-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus-native-android-x86/5.15.9/jar) - * [**qtjambi-serialbus-native-android-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus-native-android-x64/5.15.9/jar) - * [**qtjambi-serialbus-native-android-arm-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus-native-android-arm/5.15.9/jar) - * [**qtjambi-serialbus-native-android-arm64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus-native-android-arm64/5.15.9/jar) + * [**qtjambi-serialbus-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus/5.15.10/jar) + * [**qtjambi-serialbus-native-windows-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus-native-windows-x64/5.15.10/jar) + * [**qtjambi-serialbus-native-linux-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus-native-linux-x64/5.15.10/jar) + * [**qtjambi-serialbus-native-macos-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus-native-macos/5.15.10/jar) + * [**qtjambi-serialbus-native-android-x86-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus-native-android-x86/5.15.10/jar) + * [**qtjambi-serialbus-native-android-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus-native-android-x64/5.15.10/jar) + * [**qtjambi-serialbus-native-android-arm-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus-native-android-arm/5.15.10/jar) + * [**qtjambi-serialbus-native-android-arm64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialbus-native-android-arm64/5.15.10/jar) * [QtSerialPort](https://doc.qt.io/qt-5/qtserialport-index.html) in module **qtjambi-serialport**: - * [**qtjambi-serialport-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport/5.15.9/jar) - * [**qtjambi-serialport-native-windows-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport-native-windows-x64/5.15.9/jar) - * [**qtjambi-serialport-native-linux-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport-native-linux-x64/5.15.9/jar) - * [**qtjambi-serialport-native-macos-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport-native-macos/5.15.9/jar) - * [**qtjambi-serialport-native-android-x86-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport-native-android-x86/5.15.9/jar) - * [**qtjambi-serialport-native-android-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport-native-android-x64/5.15.9/jar) - * [**qtjambi-serialport-native-android-arm-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport-native-android-arm/5.15.9/jar) - * [**qtjambi-serialport-native-android-arm64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport-native-android-arm64/5.15.9/jar) + * [**qtjambi-serialport-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport/5.15.10/jar) + * [**qtjambi-serialport-native-windows-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport-native-windows-x64/5.15.10/jar) + * [**qtjambi-serialport-native-linux-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport-native-linux-x64/5.15.10/jar) + * [**qtjambi-serialport-native-macos-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport-native-macos/5.15.10/jar) + * [**qtjambi-serialport-native-android-x86-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport-native-android-x86/5.15.10/jar) + * [**qtjambi-serialport-native-android-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport-native-android-x64/5.15.10/jar) + * [**qtjambi-serialport-native-android-arm-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport-native-android-arm/5.15.10/jar) + * [**qtjambi-serialport-native-android-arm64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-serialport-native-android-arm64/5.15.10/jar) * [QtSvg](https://doc.qt.io/qt-5/qtsvg-index.html) in module **qtjambi-svg**: - * [**qtjambi-svg-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg/5.15.9/jar) - * [**qtjambi-svg-native-windows-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg-native-windows-x64/5.15.9/jar) - * [**qtjambi-svg-native-linux-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg-native-linux-x64/5.15.9/jar) - * [**qtjambi-svg-native-macos-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg-native-macos/5.15.9/jar) - * [**qtjambi-svg-native-android-x86-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg-native-android-x86/5.15.9/jar) - * [**qtjambi-svg-native-android-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg-native-android-x64/5.15.9/jar) - * [**qtjambi-svg-native-android-arm-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg-native-android-arm/5.15.9/jar) - * [**qtjambi-svg-native-android-arm64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg-native-android-arm64/5.15.9/jar) + * [**qtjambi-svg-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg/5.15.10/jar) + * [**qtjambi-svg-native-windows-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg-native-windows-x64/5.15.10/jar) + * [**qtjambi-svg-native-linux-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg-native-linux-x64/5.15.10/jar) + * [**qtjambi-svg-native-macos-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg-native-macos/5.15.10/jar) + * [**qtjambi-svg-native-android-x86-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg-native-android-x86/5.15.10/jar) + * [**qtjambi-svg-native-android-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg-native-android-x64/5.15.10/jar) + * [**qtjambi-svg-native-android-arm-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg-native-android-arm/5.15.10/jar) + * [**qtjambi-svg-native-android-arm64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-svg-native-android-arm64/5.15.10/jar) * [QtTextToSpeech](https://doc.qt.io/qt-5/qtspeech-index.html) in module **qtjambi-texttospeech**: - * [**qtjambi-texttospeech-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-texttospeech/5.15.9/jar) - * [**qtjambi-texttospeech-native-windows-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-texttospeech-native-windows-x64/5.15.9/jar) - * [**qtjambi-texttospeech-native-linux-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-texttospeech-native-linux-x64/5.15.9/jar) - * [**qtjambi-texttospeech-native-macos-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-texttospeech-native-macos/5.15.9/jar) - * [**qtjambi-texttospeech-native-android-x86-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-texttospeech-native-android-x86/5.15.9/jar) - * [**qtjambi-texttospeech-native-android-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-texttospeech-native-android-x64/5.15.9/jar) - * [**qtjambi-texttospeech-native-android-arm-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-texttospeech-native-android-arm/5.15.9/jar) - * [**qtjambi-texttospeech-native-android-arm64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-texttospeech-native-android-arm64/5.15.9/jar) + * [**qtjambi-texttospeech-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-texttospeech/5.15.10/jar) + * [**qtjambi-texttospeech-native-windows-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-texttospeech-native-windows-x64/5.15.10/jar) + * [**qtjambi-texttospeech-native-linux-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-texttospeech-native-linux-x64/5.15.10/jar) + * [**qtjambi-texttospeech-native-macos-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-texttospeech-native-macos/5.15.10/jar) + * [**qtjambi-texttospeech-native-android-x86-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-texttospeech-native-android-x86/5.15.10/jar) + * [**qtjambi-texttospeech-native-android-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-texttospeech-native-android-x64/5.15.10/jar) + * [**qtjambi-texttospeech-native-android-arm-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-texttospeech-native-android-arm/5.15.10/jar) + * [**qtjambi-texttospeech-native-android-arm64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-texttospeech-native-android-arm64/5.15.10/jar) * [QtUITools](https://doc.qt.io/qt-5/qtuitools-index.html) in module **qtjambi-uitools**: - * [**qtjambi-uitools-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools/5.15.9/jar) - * [**qtjambi-uitools-native-windows-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools-native-windows-x64/5.15.9/jar) - * [**qtjambi-uitools-native-linux-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools-native-linux-x64/5.15.9/jar) - * [**qtjambi-uitools-native-macos-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools-native-macos/5.15.9/jar) - * [**qtjambi-uitools-native-android-x86-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools-native-android-x86/5.15.9/jar) - * [**qtjambi-uitools-native-android-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools-native-android-x64/5.15.9/jar) - * [**qtjambi-uitools-native-android-arm-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools-native-android-arm/5.15.9/jar) - * [**qtjambi-uitools-native-android-arm64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools-native-android-arm64/5.15.9/jar) + * [**qtjambi-uitools-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools/5.15.10/jar) + * [**qtjambi-uitools-native-windows-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools-native-windows-x64/5.15.10/jar) + * [**qtjambi-uitools-native-linux-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools-native-linux-x64/5.15.10/jar) + * [**qtjambi-uitools-native-macos-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools-native-macos/5.15.10/jar) + * [**qtjambi-uitools-native-android-x86-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools-native-android-x86/5.15.10/jar) + * [**qtjambi-uitools-native-android-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools-native-android-x64/5.15.10/jar) + * [**qtjambi-uitools-native-android-arm-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools-native-android-arm/5.15.10/jar) + * [**qtjambi-uitools-native-android-arm64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uitools-native-android-arm64/5.15.10/jar) * [QtWebChannel](https://doc.qt.io/qt-5/qtwebchannel-index.html) in module **qtjambi-webchannel**: - * [**qtjambi-webchannel-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel/5.15.9/jar) - * [**qtjambi-webchannel-native-windows-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel-native-windows-x64/5.15.9/jar) - * [**qtjambi-webchannel-native-linux-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel-native-linux-x64/5.15.9/jar) - * [**qtjambi-webchannel-native-macos-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel-native-macos/5.15.9/jar) - * [**qtjambi-webchannel-native-android-x86-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel-native-android-x86/5.15.9/jar) - * [**qtjambi-webchannel-native-android-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel-native-android-x64/5.15.9/jar) - * [**qtjambi-webchannel-native-android-arm-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel-native-android-arm/5.15.9/jar) - * [**qtjambi-webchannel-native-android-arm64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel-native-android-arm64/5.15.9/jar) + * [**qtjambi-webchannel-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel/5.15.10/jar) + * [**qtjambi-webchannel-native-windows-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel-native-windows-x64/5.15.10/jar) + * [**qtjambi-webchannel-native-linux-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel-native-linux-x64/5.15.10/jar) + * [**qtjambi-webchannel-native-macos-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel-native-macos/5.15.10/jar) + * [**qtjambi-webchannel-native-android-x86-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel-native-android-x86/5.15.10/jar) + * [**qtjambi-webchannel-native-android-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel-native-android-x64/5.15.10/jar) + * [**qtjambi-webchannel-native-android-arm-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel-native-android-arm/5.15.10/jar) + * [**qtjambi-webchannel-native-android-arm64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webchannel-native-android-arm64/5.15.10/jar) * [QtWebEngineCore](https://doc.qt.io/qt-5/qtwebengine-index.html) in module **qtjambi-webenginecore**: - * [**qtjambi-webenginecore-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginecore/5.15.9/jar) - * [**qtjambi-webenginecore-native-windows-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginecore-native-windows-x64/5.15.9/jar) - * [**qtjambi-webenginecore-native-linux-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginecore-native-linux-x64/5.15.9/jar) - * [**qtjambi-webenginecore-native-macos-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginecore-native-macos/5.15.9/jar) + * [**qtjambi-webenginecore-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginecore/5.15.10/jar) + * [**qtjambi-webenginecore-native-windows-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginecore-native-windows-x64/5.15.10/jar) + * [**qtjambi-webenginecore-native-linux-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginecore-native-linux-x64/5.15.10/jar) + * [**qtjambi-webenginecore-native-macos-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginecore-native-macos/5.15.10/jar) * [QtWebEngineWidgets](https://doc.qt.io/qt-5/qtwebengine-index.html) in module **qtjambi-webenginewidgets**: - * [**qtjambi-webenginewidgets-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginewidgets/5.15.9/jar) - * [**qtjambi-webenginewidgets-native-windows-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginewidgets-native-windows-x64/5.15.9/jar) - * [**qtjambi-webenginewidgets-native-linux-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginewidgets-native-linux-x64/5.15.9/jar) - * [**qtjambi-webenginewidgets-native-macos-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginewidgets-native-macos/5.15.9/jar) + * [**qtjambi-webenginewidgets-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginewidgets/5.15.10/jar) + * [**qtjambi-webenginewidgets-native-windows-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginewidgets-native-windows-x64/5.15.10/jar) + * [**qtjambi-webenginewidgets-native-linux-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginewidgets-native-linux-x64/5.15.10/jar) + * [**qtjambi-webenginewidgets-native-macos-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webenginewidgets-native-macos/5.15.10/jar) * [QtWebEngine](https://doc.qt.io/qt-5/qtwebengine-index.html) in module **qtjambi-webengine**: - * [**qtjambi-webengine-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webengine/5.15.9/jar) - * [**qtjambi-webengine-native-windows-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webengine-native-windows-x64/5.15.9/jar) - * [**qtjambi-webengine-native-linux-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webengine-native-linux-x64/5.15.9/jar) - * [**qtjambi-webengine-native-macos-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webengine-native-macos/5.15.9/jar) + * [**qtjambi-webengine-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webengine/5.15.10/jar) + * [**qtjambi-webengine-native-windows-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webengine-native-windows-x64/5.15.10/jar) + * [**qtjambi-webengine-native-linux-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webengine-native-linux-x64/5.15.10/jar) + * [**qtjambi-webengine-native-macos-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webengine-native-macos/5.15.10/jar) * [QtWebSockets](https://doc.qt.io/qt-5/qtwebsockets-index.html) in module **qtjambi-websockets**: - * [**qtjambi-websockets-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets/5.15.9/jar) - * [**qtjambi-websockets-native-windows-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets-native-windows-x64/5.15.9/jar) - * [**qtjambi-websockets-native-linux-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets-native-linux-x64/5.15.9/jar) - * [**qtjambi-websockets-native-macos-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets-native-macos/5.15.9/jar) - * [**qtjambi-websockets-native-android-x86-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets-native-android-x86/5.15.9/jar) - * [**qtjambi-websockets-native-android-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets-native-android-x64/5.15.9/jar) - * [**qtjambi-websockets-native-android-arm-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets-native-android-arm/5.15.9/jar) - * [**qtjambi-websockets-native-android-arm64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets-native-android-arm64/5.15.9/jar) + * [**qtjambi-websockets-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets/5.15.10/jar) + * [**qtjambi-websockets-native-windows-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets-native-windows-x64/5.15.10/jar) + * [**qtjambi-websockets-native-linux-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets-native-linux-x64/5.15.10/jar) + * [**qtjambi-websockets-native-macos-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets-native-macos/5.15.10/jar) + * [**qtjambi-websockets-native-android-x86-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets-native-android-x86/5.15.10/jar) + * [**qtjambi-websockets-native-android-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets-native-android-x64/5.15.10/jar) + * [**qtjambi-websockets-native-android-arm-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets-native-android-arm/5.15.10/jar) + * [**qtjambi-websockets-native-android-arm64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-websockets-native-android-arm64/5.15.10/jar) * [QtWebView](https://doc.qt.io/qt-5/qtwebview-index.html) in module **qtjambi-webview**: - * [**qtjambi-webview-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview/5.15.9/jar) - * [**qtjambi-webview-native-windows-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview-native-windows-x64/5.15.9/jar) - * [**qtjambi-webview-native-linux-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview-native-linux-x64/5.15.9/jar) - * [**qtjambi-webview-native-macos-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview-native-macos/5.15.9/jar) - * [**qtjambi-webview-native-android-x86-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview-native-android-x86/5.15.9/jar) - * [**qtjambi-webview-native-android-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview-native-android-x64/5.15.9/jar) - * [**qtjambi-webview-native-android-arm-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview-native-android-arm/5.15.9/jar) - * [**qtjambi-webview-native-android-arm64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview-native-android-arm64/5.15.9/jar) + * [**qtjambi-webview-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview/5.15.10/jar) + * [**qtjambi-webview-native-windows-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview-native-windows-x64/5.15.10/jar) + * [**qtjambi-webview-native-linux-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview-native-linux-x64/5.15.10/jar) + * [**qtjambi-webview-native-macos-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview-native-macos/5.15.10/jar) + * [**qtjambi-webview-native-android-x86-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview-native-android-x86/5.15.10/jar) + * [**qtjambi-webview-native-android-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview-native-android-x64/5.15.10/jar) + * [**qtjambi-webview-native-android-arm-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview-native-android-arm/5.15.10/jar) + * [**qtjambi-webview-native-android-arm64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-webview-native-android-arm64/5.15.10/jar) * [QtXml](https://doc.qt.io/qt-5/qtxml-index.html) in module **qtjambi-xml**: - * [**qtjambi-xml-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml/5.15.9/jar) - * [**qtjambi-xml-native-windows-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml-native-windows-x64/5.15.9/jar) - * [**qtjambi-xml-native-linux-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml-native-linux-x64/5.15.9/jar) - * [**qtjambi-xml-native-macos-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml-native-macos/5.15.9/jar) - * [**qtjambi-xml-native-android-x86-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml-native-android-x86/5.15.9/jar) - * [**qtjambi-xml-native-android-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml-native-android-x64/5.15.9/jar) - * [**qtjambi-xml-native-android-arm-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml-native-android-arm/5.15.9/jar) - * [**qtjambi-xml-native-android-arm64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml-native-android-arm64/5.15.9/jar) + * [**qtjambi-xml-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml/5.15.10/jar) + * [**qtjambi-xml-native-windows-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml-native-windows-x64/5.15.10/jar) + * [**qtjambi-xml-native-linux-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml-native-linux-x64/5.15.10/jar) + * [**qtjambi-xml-native-macos-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml-native-macos/5.15.10/jar) + * [**qtjambi-xml-native-android-x86-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml-native-android-x86/5.15.10/jar) + * [**qtjambi-xml-native-android-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml-native-android-x64/5.15.10/jar) + * [**qtjambi-xml-native-android-arm-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml-native-android-arm/5.15.10/jar) + * [**qtjambi-xml-native-android-arm64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xml-native-android-arm64/5.15.10/jar) * [QtXmlPatterns](https://doc.qt.io/qt-5/qtxmlpatterns-index.html) in module **qtjambi-xmlpatterns**: - * [**qtjambi-xmlpatterns-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xmlpatterns/5.15.9/jar) - * [**qtjambi-xmlpatterns-native-windows-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xmlpatterns-native-windows-x64/5.15.9/jar) - * [**qtjambi-xmlpatterns-native-linux-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xmlpatterns-native-linux-x64/5.15.9/jar) - * [**qtjambi-xmlpatterns-native-macos-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xmlpatterns-native-macos/5.15.9/jar) - * [**qtjambi-xmlpatterns-native-android-x86-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xmlpatterns-native-android-x86/5.15.9/jar) - * [**qtjambi-xmlpatterns-native-android-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xmlpatterns-native-android-x64/5.15.9/jar) - * [**qtjambi-xmlpatterns-native-android-arm-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xmlpatterns-native-android-arm/5.15.9/jar) - * [**qtjambi-xmlpatterns-native-android-arm64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xmlpatterns-native-android-arm64/5.15.9/jar) + * [**qtjambi-xmlpatterns-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xmlpatterns/5.15.10/jar) + * [**qtjambi-xmlpatterns-native-windows-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xmlpatterns-native-windows-x64/5.15.10/jar) + * [**qtjambi-xmlpatterns-native-linux-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xmlpatterns-native-linux-x64/5.15.10/jar) + * [**qtjambi-xmlpatterns-native-macos-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xmlpatterns-native-macos/5.15.10/jar) + * [**qtjambi-xmlpatterns-native-android-x86-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xmlpatterns-native-android-x86/5.15.10/jar) + * [**qtjambi-xmlpatterns-native-android-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xmlpatterns-native-android-x64/5.15.10/jar) + * [**qtjambi-xmlpatterns-native-android-arm-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xmlpatterns-native-android-arm/5.15.10/jar) + * [**qtjambi-xmlpatterns-native-android-arm64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-xmlpatterns-native-android-arm64/5.15.10/jar) * [QtCharts](https://doc.qt.io/qt-5/qtcharts-index.html) in module **qtjambi-charts**: - * [**qtjambi-charts-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts/5.15.9/jar) - * [**qtjambi-charts-native-windows-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts-native-windows-x64/5.15.9/jar) - * [**qtjambi-charts-native-linux-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts-native-linux-x64/5.15.9/jar) - * [**qtjambi-charts-native-macos-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts-native-macos/5.15.9/jar) - * [**qtjambi-charts-native-android-x86-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts-native-android-x86/5.15.9/jar) - * [**qtjambi-charts-native-android-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts-native-android-x64/5.15.9/jar) - * [**qtjambi-charts-native-android-arm-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts-native-android-arm/5.15.9/jar) - * [**qtjambi-charts-native-android-arm64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts-native-android-arm64/5.15.9/jar) + * [**qtjambi-charts-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts/5.15.10/jar) + * [**qtjambi-charts-native-windows-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts-native-windows-x64/5.15.10/jar) + * [**qtjambi-charts-native-linux-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts-native-linux-x64/5.15.10/jar) + * [**qtjambi-charts-native-macos-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts-native-macos/5.15.10/jar) + * [**qtjambi-charts-native-android-x86-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts-native-android-x86/5.15.10/jar) + * [**qtjambi-charts-native-android-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts-native-android-x64/5.15.10/jar) + * [**qtjambi-charts-native-android-arm-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts-native-android-arm/5.15.10/jar) + * [**qtjambi-charts-native-android-arm64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-charts-native-android-arm64/5.15.10/jar) * [QtDataVisualization](https://doc.qt.io/qt-5/qtdatavisualization-index.html) in module **qtjambi-datavisualization**: - * [**qtjambi-datavisualization-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization/5.15.9/jar) - * [**qtjambi-datavisualization-native-windows-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization-native-windows-x64/5.15.9/jar) - * [**qtjambi-datavisualization-native-linux-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization-native-linux-x64/5.15.9/jar) - * [**qtjambi-datavisualization-native-macos-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization-native-macos/5.15.9/jar) - * [**qtjambi-datavisualization-native-android-x86-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization-native-android-x86/5.15.9/jar) - * [**qtjambi-datavisualization-native-android-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization-native-android-x64/5.15.9/jar) - * [**qtjambi-datavisualization-native-android-arm-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization-native-android-arm/5.15.9/jar) - * [**qtjambi-datavisualization-native-android-arm64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization-native-android-arm64/5.15.9/jar) + * [**qtjambi-datavisualization-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization/5.15.10/jar) + * [**qtjambi-datavisualization-native-windows-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization-native-windows-x64/5.15.10/jar) + * [**qtjambi-datavisualization-native-linux-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization-native-linux-x64/5.15.10/jar) + * [**qtjambi-datavisualization-native-macos-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization-native-macos/5.15.10/jar) + * [**qtjambi-datavisualization-native-android-x86-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization-native-android-x86/5.15.10/jar) + * [**qtjambi-datavisualization-native-android-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization-native-android-x64/5.15.10/jar) + * [**qtjambi-datavisualization-native-android-arm-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization-native-android-arm/5.15.10/jar) + * [**qtjambi-datavisualization-native-android-arm64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-datavisualization-native-android-arm64/5.15.10/jar) * [QtNetworkAuth](https://doc.qt.io/qt-5/qtnetworkauth-index.html) in module **qtjambi-networkauth**: - * [**qtjambi-networkauth-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth/5.15.9/jar) - * [**qtjambi-networkauth-native-windows-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth-native-windows-x64/5.15.9/jar) - * [**qtjambi-networkauth-native-linux-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth-native-linux-x64/5.15.9/jar) - * [**qtjambi-networkauth-native-macos-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth-native-macos/5.15.9/jar) - * [**qtjambi-networkauth-native-android-x86-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth-native-android-x86/5.15.9/jar) - * [**qtjambi-networkauth-native-android-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth-native-android-x64/5.15.9/jar) - * [**qtjambi-networkauth-native-android-arm-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth-native-android-arm/5.15.9/jar) - * [**qtjambi-networkauth-native-android-arm64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth-native-android-arm64/5.15.9/jar) + * [**qtjambi-networkauth-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth/5.15.10/jar) + * [**qtjambi-networkauth-native-windows-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth-native-windows-x64/5.15.10/jar) + * [**qtjambi-networkauth-native-linux-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth-native-linux-x64/5.15.10/jar) + * [**qtjambi-networkauth-native-macos-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth-native-macos/5.15.10/jar) + * [**qtjambi-networkauth-native-android-x86-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth-native-android-x86/5.15.10/jar) + * [**qtjambi-networkauth-native-android-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth-native-android-x64/5.15.10/jar) + * [**qtjambi-networkauth-native-android-arm-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth-native-android-arm/5.15.10/jar) + * [**qtjambi-networkauth-native-android-arm64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-networkauth-native-android-arm64/5.15.10/jar) * [QtVirtualKeyboard](https://doc.qt.io/qt-5/qtvirtualkeyboard-index.html) in module **qtjambi-virtualkeyboard**: - * [**qtjambi-virtualkeyboard-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard/5.15.9/jar) - * [**qtjambi-virtualkeyboard-native-windows-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard-native-windows-x64/5.15.9/jar) - * [**qtjambi-virtualkeyboard-native-linux-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard-native-linux-x64/5.15.9/jar) - * [**qtjambi-virtualkeyboard-native-macos-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard-native-macos/5.15.9/jar) - * [**qtjambi-virtualkeyboard-native-android-x86-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard-native-android-x86/5.15.9/jar) - * [**qtjambi-virtualkeyboard-native-android-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard-native-android-x64/5.15.9/jar) - * [**qtjambi-virtualkeyboard-native-android-arm-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard-native-android-arm/5.15.9/jar) - * [**qtjambi-virtualkeyboard-native-android-arm64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard-native-android-arm64/5.15.9/jar) + * [**qtjambi-virtualkeyboard-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard/5.15.10/jar) + * [**qtjambi-virtualkeyboard-native-windows-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard-native-windows-x64/5.15.10/jar) + * [**qtjambi-virtualkeyboard-native-linux-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard-native-linux-x64/5.15.10/jar) + * [**qtjambi-virtualkeyboard-native-macos-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard-native-macos/5.15.10/jar) + * [**qtjambi-virtualkeyboard-native-android-x86-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard-native-android-x86/5.15.10/jar) + * [**qtjambi-virtualkeyboard-native-android-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard-native-android-x64/5.15.10/jar) + * [**qtjambi-virtualkeyboard-native-android-arm-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard-native-android-arm/5.15.10/jar) + * [**qtjambi-virtualkeyboard-native-android-arm64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-virtualkeyboard-native-android-arm64/5.15.10/jar) * [QtQuick3D](https://doc.qt.io/qt-5/qtquick3d-index.html) in module **qtjambi-quick3d**: - * [**qtjambi-quick3d-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d/5.15.9/jar) - * [**qtjambi-quick3d-native-windows-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d-native-windows-x64/5.15.9/jar) - * [**qtjambi-quick3d-native-linux-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d-native-linux-x64/5.15.9/jar) - * [**qtjambi-quick3d-native-macos-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d-native-macos/5.15.9/jar) - * [**qtjambi-quick3d-native-android-x86-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d-native-android-x86/5.15.9/jar) - * [**qtjambi-quick3d-native-android-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d-native-android-x64/5.15.9/jar) - * [**qtjambi-quick3d-native-android-arm-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d-native-android-arm/5.15.9/jar) - * [**qtjambi-quick3d-native-android-arm64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d-native-android-arm64/5.15.9/jar) + * [**qtjambi-quick3d-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d/5.15.10/jar) + * [**qtjambi-quick3d-native-windows-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d-native-windows-x64/5.15.10/jar) + * [**qtjambi-quick3d-native-linux-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d-native-linux-x64/5.15.10/jar) + * [**qtjambi-quick3d-native-macos-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d-native-macos/5.15.10/jar) + * [**qtjambi-quick3d-native-android-x86-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d-native-android-x86/5.15.10/jar) + * [**qtjambi-quick3d-native-android-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d-native-android-x64/5.15.10/jar) + * [**qtjambi-quick3d-native-android-arm-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d-native-android-arm/5.15.10/jar) + * [**qtjambi-quick3d-native-android-arm64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-quick3d-native-android-arm64/5.15.10/jar) * [QtDesigner](https://doc.qt.io/qt-5/qtdesigner-manual.html) in module **qtjambi-designer**: - * [**qtjambi-designer-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer/5.15.9/jar) - * [**qtjambi-designer-native-windows-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer-native-windows-x64/5.15.9/jar) - * [**qtjambi-designer-native-linux-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer-native-linux-x64/5.15.9/jar) - * [**qtjambi-designer-native-macos-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer-native-macos/5.15.9/jar) - * [**qtjambi-designer-native-android-x86-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer-native-android-x86/5.15.9/jar) - * [**qtjambi-designer-native-android-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer-native-android-x64/5.15.9/jar) - * [**qtjambi-designer-native-android-arm-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer-native-android-arm/5.15.9/jar) - * [**qtjambi-designer-native-android-arm64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer-native-android-arm64/5.15.9/jar) + * [**qtjambi-designer-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer/5.15.10/jar) + * [**qtjambi-designer-native-windows-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer-native-windows-x64/5.15.10/jar) + * [**qtjambi-designer-native-linux-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer-native-linux-x64/5.15.10/jar) + * [**qtjambi-designer-native-macos-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer-native-macos/5.15.10/jar) + * [**qtjambi-designer-native-android-x86-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer-native-android-x86/5.15.10/jar) + * [**qtjambi-designer-native-android-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer-native-android-x64/5.15.10/jar) + * [**qtjambi-designer-native-android-arm-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer-native-android-arm/5.15.10/jar) + * [**qtjambi-designer-native-android-arm64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-designer-native-android-arm64/5.15.10/jar) ### Qt5 Platform-dependent Add-Ons * [Active Qt (Windows only)](https://doc.qt.io/qt-5/activeqt-manual.html) in module **qtjambi-activex**: - * [**qtjambi-activex-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-activex/5.15.9/jar) - * [**qtjambi-activex-native-windows-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-activex-native-windows-x64/5.15.9/jar) + * [**qtjambi-activex-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-activex/5.15.10/jar) + * [**qtjambi-activex-native-windows-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-activex-native-windows-x64/5.15.10/jar) * [QtWinExtras (Windows only)](https://doc.qt.io/qt-5/qtwinextras-index.html) in module **qtjambi-winextras**: - * [**qtjambi-winextras-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-winextras/5.15.9/jar) - * [**qtjambi-winextras-native-windows-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-winextras-native-windows-x64/5.15.9/jar) + * [**qtjambi-winextras-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-winextras/5.15.10/jar) + * [**qtjambi-winextras-native-windows-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-winextras-native-windows-x64/5.15.10/jar) * [QtMacExtras (macOS only)](https://doc.qt.io/qt-5/qtmacextras-index.html) in module **qtjambi-macextras**: - * [**qtjambi-macextras-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-macextras/5.15.9/jar) - * [**qtjambi-macextras-native-macos-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-macextras-native-macos/5.15.9/jar) + * [**qtjambi-macextras-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-macextras/5.15.10/jar) + * [**qtjambi-macextras-native-macos-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-macextras-native-macos/5.15.10/jar) * [QtX11Extras (Linux only)](https://doc.qt.io/qt-5/qtx11extras-index.html) in module **qtjambi-x11extras**: - * [**qtjambi-x11extras-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-x11extras/5.15.9/jar) - * [**qtjambi-x11extras-native-linux-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-x11extras-native-linux-x64/5.15.9/jar) + * [**qtjambi-x11extras-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-x11extras/5.15.10/jar) + * [**qtjambi-x11extras-native-linux-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-x11extras-native-linux-x64/5.15.10/jar) ### Qt3D * [Qt3DCore](https://doc.qt.io/qt-5/qt3d-index.html) in module **qtjambi-qt3dcore**: - * [**qtjambi-qt3dcore-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore/5.15.9/jar) - * [**qtjambi-qt3dcore-native-windows-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore-native-windows-x64/5.15.9/jar) - * [**qtjambi-qt3dcore-native-linux-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore-native-linux-x64/5.15.9/jar) - * [**qtjambi-qt3dcore-native-macos-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore-native-macos/5.15.9/jar) - * [**qtjambi-qt3dcore-native-android-x86-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore-native-android-x86/5.15.9/jar) - * [**qtjambi-qt3dcore-native-android-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore-native-android-x64/5.15.9/jar) - * [**qtjambi-qt3dcore-native-android-arm-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore-native-android-arm/5.15.9/jar) - * [**qtjambi-qt3dcore-native-android-arm64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore-native-android-arm64/5.15.9/jar) + * [**qtjambi-qt3dcore-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore/5.15.10/jar) + * [**qtjambi-qt3dcore-native-windows-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore-native-windows-x64/5.15.10/jar) + * [**qtjambi-qt3dcore-native-linux-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore-native-linux-x64/5.15.10/jar) + * [**qtjambi-qt3dcore-native-macos-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore-native-macos/5.15.10/jar) + * [**qtjambi-qt3dcore-native-android-x86-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore-native-android-x86/5.15.10/jar) + * [**qtjambi-qt3dcore-native-android-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore-native-android-x64/5.15.10/jar) + * [**qtjambi-qt3dcore-native-android-arm-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore-native-android-arm/5.15.10/jar) + * [**qtjambi-qt3dcore-native-android-arm64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dcore-native-android-arm64/5.15.10/jar) * [Qt3DRender](https://doc.qt.io/qt-5/qt3d-index.html) in module **qtjambi-qt3drender**: - * [**qtjambi-qt3drender-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender/5.15.9/jar) - * [**qtjambi-qt3drender-native-windows-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender-native-windows-x64/5.15.9/jar) - * [**qtjambi-qt3drender-native-linux-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender-native-linux-x64/5.15.9/jar) - * [**qtjambi-qt3drender-native-macos-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender-native-macos/5.15.9/jar) - * [**qtjambi-qt3drender-native-android-x86-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender-native-android-x86/5.15.9/jar) - * [**qtjambi-qt3drender-native-android-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender-native-android-x64/5.15.9/jar) - * [**qtjambi-qt3drender-native-android-arm-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender-native-android-arm/5.15.9/jar) - * [**qtjambi-qt3drender-native-android-arm64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender-native-android-arm64/5.15.9/jar) + * [**qtjambi-qt3drender-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender/5.15.10/jar) + * [**qtjambi-qt3drender-native-windows-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender-native-windows-x64/5.15.10/jar) + * [**qtjambi-qt3drender-native-linux-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender-native-linux-x64/5.15.10/jar) + * [**qtjambi-qt3drender-native-macos-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender-native-macos/5.15.10/jar) + * [**qtjambi-qt3drender-native-android-x86-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender-native-android-x86/5.15.10/jar) + * [**qtjambi-qt3drender-native-android-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender-native-android-x64/5.15.10/jar) + * [**qtjambi-qt3drender-native-android-arm-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender-native-android-arm/5.15.10/jar) + * [**qtjambi-qt3drender-native-android-arm64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3drender-native-android-arm64/5.15.10/jar) * [Qt3DAnimation](https://doc.qt.io/qt-5/qt3d-index.html) in module **qtjambi-qt3danimation**: - * [**qtjambi-qt3danimation-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation/5.15.9/jar) - * [**qtjambi-qt3danimation-native-windows-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation-native-windows-x64/5.15.9/jar) - * [**qtjambi-qt3danimation-native-linux-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation-native-linux-x64/5.15.9/jar) - * [**qtjambi-qt3danimation-native-macos-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation-native-macos/5.15.9/jar) - * [**qtjambi-qt3danimation-native-android-x86-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation-native-android-x86/5.15.9/jar) - * [**qtjambi-qt3danimation-native-android-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation-native-android-x64/5.15.9/jar) - * [**qtjambi-qt3danimation-native-android-arm-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation-native-android-arm/5.15.9/jar) - * [**qtjambi-qt3danimation-native-android-arm64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation-native-android-arm64/5.15.9/jar) + * [**qtjambi-qt3danimation-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation/5.15.10/jar) + * [**qtjambi-qt3danimation-native-windows-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation-native-windows-x64/5.15.10/jar) + * [**qtjambi-qt3danimation-native-linux-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation-native-linux-x64/5.15.10/jar) + * [**qtjambi-qt3danimation-native-macos-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation-native-macos/5.15.10/jar) + * [**qtjambi-qt3danimation-native-android-x86-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation-native-android-x86/5.15.10/jar) + * [**qtjambi-qt3danimation-native-android-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation-native-android-x64/5.15.10/jar) + * [**qtjambi-qt3danimation-native-android-arm-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation-native-android-arm/5.15.10/jar) + * [**qtjambi-qt3danimation-native-android-arm64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3danimation-native-android-arm64/5.15.10/jar) * [Qt3DExtras](https://doc.qt.io/qt-5/qt3d-index.html) in module **qtjambi-qt3dextras**: - * [**qtjambi-qt3dextras-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras/5.15.9/jar) - * [**qtjambi-qt3dextras-native-windows-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras-native-windows-x64/5.15.9/jar) - * [**qtjambi-qt3dextras-native-linux-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras-native-linux-x64/5.15.9/jar) - * [**qtjambi-qt3dextras-native-macos-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras-native-macos/5.15.9/jar) - * [**qtjambi-qt3dextras-native-android-x86-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras-native-android-x86/5.15.9/jar) - * [**qtjambi-qt3dextras-native-android-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras-native-android-x64/5.15.9/jar) - * [**qtjambi-qt3dextras-native-android-arm-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras-native-android-arm/5.15.9/jar) - * [**qtjambi-qt3dextras-native-android-arm64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras-native-android-arm64/5.15.9/jar) + * [**qtjambi-qt3dextras-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras/5.15.10/jar) + * [**qtjambi-qt3dextras-native-windows-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras-native-windows-x64/5.15.10/jar) + * [**qtjambi-qt3dextras-native-linux-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras-native-linux-x64/5.15.10/jar) + * [**qtjambi-qt3dextras-native-macos-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras-native-macos/5.15.10/jar) + * [**qtjambi-qt3dextras-native-android-x86-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras-native-android-x86/5.15.10/jar) + * [**qtjambi-qt3dextras-native-android-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras-native-android-x64/5.15.10/jar) + * [**qtjambi-qt3dextras-native-android-arm-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras-native-android-arm/5.15.10/jar) + * [**qtjambi-qt3dextras-native-android-arm64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dextras-native-android-arm64/5.15.10/jar) * [Qt3DInput](https://doc.qt.io/qt-5/qt3d-index.html) in module **qtjambi-qt3dinput**: - * [**qtjambi-qt3dinput-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput/5.15.9/jar) - * [**qtjambi-qt3dinput-native-windows-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput-native-windows-x64/5.15.9/jar) - * [**qtjambi-qt3dinput-native-linux-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput-native-linux-x64/5.15.9/jar) - * [**qtjambi-qt3dinput-native-macos-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput-native-macos/5.15.9/jar) - * [**qtjambi-qt3dinput-native-android-x86-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput-native-android-x86/5.15.9/jar) - * [**qtjambi-qt3dinput-native-android-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput-native-android-x64/5.15.9/jar) - * [**qtjambi-qt3dinput-native-android-arm-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput-native-android-arm/5.15.9/jar) - * [**qtjambi-qt3dinput-native-android-arm64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput-native-android-arm64/5.15.9/jar) + * [**qtjambi-qt3dinput-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput/5.15.10/jar) + * [**qtjambi-qt3dinput-native-windows-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput-native-windows-x64/5.15.10/jar) + * [**qtjambi-qt3dinput-native-linux-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput-native-linux-x64/5.15.10/jar) + * [**qtjambi-qt3dinput-native-macos-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput-native-macos/5.15.10/jar) + * [**qtjambi-qt3dinput-native-android-x86-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput-native-android-x86/5.15.10/jar) + * [**qtjambi-qt3dinput-native-android-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput-native-android-x64/5.15.10/jar) + * [**qtjambi-qt3dinput-native-android-arm-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput-native-android-arm/5.15.10/jar) + * [**qtjambi-qt3dinput-native-android-arm64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dinput-native-android-arm64/5.15.10/jar) * [Qt3DLogic](https://doc.qt.io/qt-5/qt3d-index.html) in module **qtjambi-qt3dlogic**: - * [**qtjambi-qt3dlogic-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic/5.15.9/jar) - * [**qtjambi-qt3dlogic-native-windows-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic-native-windows-x64/5.15.9/jar) - * [**qtjambi-qt3dlogic-native-linux-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic-native-linux-x64/5.15.9/jar) - * [**qtjambi-qt3dlogic-native-macos-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic-native-macos/5.15.9/jar) - * [**qtjambi-qt3dlogic-native-android-x86-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic-native-android-x86/5.15.9/jar) - * [**qtjambi-qt3dlogic-native-android-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic-native-android-x64/5.15.9/jar) - * [**qtjambi-qt3dlogic-native-android-arm-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic-native-android-arm/5.15.9/jar) - * [**qtjambi-qt3dlogic-native-android-arm64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic-native-android-arm64/5.15.9/jar) + * [**qtjambi-qt3dlogic-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic/5.15.10/jar) + * [**qtjambi-qt3dlogic-native-windows-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic-native-windows-x64/5.15.10/jar) + * [**qtjambi-qt3dlogic-native-linux-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic-native-linux-x64/5.15.10/jar) + * [**qtjambi-qt3dlogic-native-macos-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic-native-macos/5.15.10/jar) + * [**qtjambi-qt3dlogic-native-android-x86-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic-native-android-x86/5.15.10/jar) + * [**qtjambi-qt3dlogic-native-android-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic-native-android-x64/5.15.10/jar) + * [**qtjambi-qt3dlogic-native-android-arm-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic-native-android-arm/5.15.10/jar) + * [**qtjambi-qt3dlogic-native-android-arm64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dlogic-native-android-arm64/5.15.10/jar) * [Qt3DQuick](https://doc.qt.io/qt-5/qt3d-index.html) in module **qtjambi-qt3dquick**: - * [**qtjambi-qt3dquick-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick/5.15.9/jar) - * [**qtjambi-qt3dquick-native-windows-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick-native-windows-x64/5.15.9/jar) - * [**qtjambi-qt3dquick-native-linux-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick-native-linux-x64/5.15.9/jar) - * [**qtjambi-qt3dquick-native-macos-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick-native-macos/5.15.9/jar) - * [**qtjambi-qt3dquick-native-android-x86-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick-native-android-x86/5.15.9/jar) - * [**qtjambi-qt3dquick-native-android-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick-native-android-x64/5.15.9/jar) - * [**qtjambi-qt3dquick-native-android-arm-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick-native-android-arm/5.15.9/jar) - * [**qtjambi-qt3dquick-native-android-arm64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick-native-android-arm64/5.15.9/jar) + * [**qtjambi-qt3dquick-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick/5.15.10/jar) + * [**qtjambi-qt3dquick-native-windows-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick-native-windows-x64/5.15.10/jar) + * [**qtjambi-qt3dquick-native-linux-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick-native-linux-x64/5.15.10/jar) + * [**qtjambi-qt3dquick-native-macos-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick-native-macos/5.15.10/jar) + * [**qtjambi-qt3dquick-native-android-x86-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick-native-android-x86/5.15.10/jar) + * [**qtjambi-qt3dquick-native-android-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick-native-android-x64/5.15.10/jar) + * [**qtjambi-qt3dquick-native-android-arm-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick-native-android-arm/5.15.10/jar) + * [**qtjambi-qt3dquick-native-android-arm64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquick-native-android-arm64/5.15.10/jar) * [Qt3DQuickExtras](https://doc.qt.io/qt-5/qt3d-index.html) in module **qtjambi-qt3dquickextras**: - * [**qtjambi-qt3dquickextras-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras/5.15.9/jar) - * [**qtjambi-qt3dquickextras-native-windows-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras-native-windows-x64/5.15.9/jar) - * [**qtjambi-qt3dquickextras-native-linux-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras-native-linux-x64/5.15.9/jar) - * [**qtjambi-qt3dquickextras-native-macos-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras-native-macos/5.15.9/jar) - * [**qtjambi-qt3dquickextras-native-android-x86-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras-native-android-x86/5.15.9/jar) - * [**qtjambi-qt3dquickextras-native-android-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras-native-android-x64/5.15.9/jar) - * [**qtjambi-qt3dquickextras-native-android-arm-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras-native-android-arm/5.15.9/jar) - * [**qtjambi-qt3dquickextras-native-android-arm64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras-native-android-arm64/5.15.9/jar) + * [**qtjambi-qt3dquickextras-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras/5.15.10/jar) + * [**qtjambi-qt3dquickextras-native-windows-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras-native-windows-x64/5.15.10/jar) + * [**qtjambi-qt3dquickextras-native-linux-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras-native-linux-x64/5.15.10/jar) + * [**qtjambi-qt3dquickextras-native-macos-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras-native-macos/5.15.10/jar) + * [**qtjambi-qt3dquickextras-native-android-x86-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras-native-android-x86/5.15.10/jar) + * [**qtjambi-qt3dquickextras-native-android-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras-native-android-x64/5.15.10/jar) + * [**qtjambi-qt3dquickextras-native-android-arm-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras-native-android-arm/5.15.10/jar) + * [**qtjambi-qt3dquickextras-native-android-arm64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickextras-native-android-arm64/5.15.10/jar) * [Qt3DQuickScene3D](https://doc.qt.io/qt-5/qt3d-index.html) in module **qtjambi-qt3dquickscene2d**: - * [**qtjambi-qt3dquickscene2d-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d/5.15.9/jar) - * [**qtjambi-qt3dquickscene2d-native-windows-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d-native-windows-x64/5.15.9/jar) - * [**qtjambi-qt3dquickscene2d-native-linux-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d-native-linux-x64/5.15.9/jar) - * [**qtjambi-qt3dquickscene2d-native-macos-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d-native-macos/5.15.9/jar) - * [**qtjambi-qt3dquickscene2d-native-android-x86-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d-native-android-x86/5.15.9/jar) - * [**qtjambi-qt3dquickscene2d-native-android-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d-native-android-x64/5.15.9/jar) - * [**qtjambi-qt3dquickscene2d-native-android-arm-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d-native-android-arm/5.15.9/jar) - * [**qtjambi-qt3dquickscene2d-native-android-arm64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d-native-android-arm64/5.15.9/jar) + * [**qtjambi-qt3dquickscene2d-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d/5.15.10/jar) + * [**qtjambi-qt3dquickscene2d-native-windows-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d-native-windows-x64/5.15.10/jar) + * [**qtjambi-qt3dquickscene2d-native-linux-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d-native-linux-x64/5.15.10/jar) + * [**qtjambi-qt3dquickscene2d-native-macos-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d-native-macos/5.15.10/jar) + * [**qtjambi-qt3dquickscene2d-native-android-x86-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d-native-android-x86/5.15.10/jar) + * [**qtjambi-qt3dquickscene2d-native-android-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d-native-android-x64/5.15.10/jar) + * [**qtjambi-qt3dquickscene2d-native-android-arm-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d-native-android-arm/5.15.10/jar) + * [**qtjambi-qt3dquickscene2d-native-android-arm64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-qt3dquickscene2d-native-android-arm64/5.15.10/jar) ### QtJambi Plugins * JDBC Sql Plugin: - * [**qtjambi-plugin-qsqljdbc-windows-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-windows-x64/5.15.9/jar) - * [**qtjambi-plugin-qsqljdbc-linux-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-linux-x64/5.15.9/jar) - * [**qtjambi-plugin-qsqljdbc-macos-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-macos/5.15.9/jar) - * [**qtjambi-plugin-qsqljdbc-native-android-x86-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-native-android-x86/5.15.9/jar) - * [**qtjambi-plugin-qsqljdbc-native-android-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-native-android-x64/5.15.9/jar) - * [**qtjambi-plugin-qsqljdbc-native-android-arm-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-native-android-arm/5.15.9/jar) - * [**qtjambi-plugin-qsqljdbc-native-android-arm64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-native-android-arm64/5.15.9/jar) - * [**qtjambi-plugin-qsqljdbc-native-android-common-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-native-android-common/5.15.9/jar) + * [**qtjambi-plugin-qsqljdbc-windows-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-windows-x64/5.15.10/jar) + * [**qtjambi-plugin-qsqljdbc-linux-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-linux-x64/5.15.10/jar) + * [**qtjambi-plugin-qsqljdbc-macos-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-macos/5.15.10/jar) + * [**qtjambi-plugin-qsqljdbc-native-android-x86-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-native-android-x86/5.15.10/jar) + * [**qtjambi-plugin-qsqljdbc-native-android-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-native-android-x64/5.15.10/jar) + * [**qtjambi-plugin-qsqljdbc-native-android-arm-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-native-android-arm/5.15.10/jar) + * [**qtjambi-plugin-qsqljdbc-native-android-arm64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-native-android-arm64/5.15.10/jar) + * [**qtjambi-plugin-qsqljdbc-native-android-common-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-plugin-qsqljdbc-native-android-common/5.15.10/jar) ### QtJambi Tools * [QtJambi User Interface Compiler (UIC)](https://doc.qt.io/qt-5/designer-using-a-ui-file.html#compile-time-form-processing): - * [**qtjambi-uic-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uic/5.15.9/jar) - * [**qtjambi-uic-native-windows-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uic-native-windows-x64/5.15.9/jar) - * [**qtjambi-uic-native-linux-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uic-native-linux-x64/5.15.9/jar) - * [**qtjambi-uic-native-macos-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uic-native-macos/5.15.9/jar) - * [**qtjambi-uic-native-android-x86-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uic-native-android-x86/5.15.9/jar) - * [**qtjambi-uic-native-android-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uic-native-android-x64/5.15.9/jar) - * [**qtjambi-uic-native-android-arm-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uic-native-android-arm/5.15.9/jar) - * [**qtjambi-uic-native-android-arm64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uic-native-android-arm64/5.15.9/jar) + * [**qtjambi-uic-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uic/5.15.10/jar) + * [**qtjambi-uic-native-windows-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uic-native-windows-x64/5.15.10/jar) + * [**qtjambi-uic-native-linux-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uic-native-linux-x64/5.15.10/jar) + * [**qtjambi-uic-native-macos-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uic-native-macos/5.15.10/jar) + * [**qtjambi-uic-native-android-x86-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uic-native-android-x86/5.15.10/jar) + * [**qtjambi-uic-native-android-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uic-native-android-x64/5.15.10/jar) + * [**qtjambi-uic-native-android-arm-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uic-native-android-arm/5.15.10/jar) + * [**qtjambi-uic-native-android-arm64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-uic-native-android-arm64/5.15.10/jar) * QtJambi Deployer: - * [**qtjambi-deployer-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer/5.15.9/jar) - * [**qtjambi-deployer-native-windows-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer-native-windows-x64/5.15.9/jar) - * [**qtjambi-deployer-native-linux-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer-native-linux-x64/5.15.9/jar) - * [**qtjambi-deployer-native-macos-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer-native-macos/5.15.9/jar) - * [**qtjambi-deployer-native-android-x86-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer-native-android-x86/5.15.9/jar) - * [**qtjambi-deployer-native-android-x64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer-native-android-x64/5.15.9/jar) - * [**qtjambi-deployer-native-android-arm-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer-native-android-arm/5.15.9/jar) - * [**qtjambi-deployer-native-android-arm64-5.15.9.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer-native-android-arm64/5.15.9/jar) + * [**qtjambi-deployer-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer/5.15.10/jar) + * [**qtjambi-deployer-native-windows-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer-native-windows-x64/5.15.10/jar) + * [**qtjambi-deployer-native-linux-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer-native-linux-x64/5.15.10/jar) + * [**qtjambi-deployer-native-macos-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer-native-macos/5.15.10/jar) + * [**qtjambi-deployer-native-android-x86-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer-native-android-x86/5.15.10/jar) + * [**qtjambi-deployer-native-android-x64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer-native-android-x64/5.15.10/jar) + * [**qtjambi-deployer-native-android-arm-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer-native-android-arm/5.15.10/jar) + * [**qtjambi-deployer-native-android-arm64-5.15.10.jar**](https://search.maven.org/artifact/io.qtjambi/qtjambi-deployer-native-android-arm64/5.15.10/jar) diff --git a/www/Whats-New.md b/www/Whats-New.md index de6dbb71..0f02acce 100644 --- a/www/Whats-New.md +++ b/www/Whats-New.md @@ -1,21 +1,29 @@ -# What's new in QtJambi 6.3.4 / 6.2.7 / 5.15.9 +# What's new in QtJambi 6.4.0 / 6.3.5 / 6.2.8 / 5.15.10 ## Bugfixes Solved issues: -* [Issue 73](../../../issues/73): Add support for QQuickWebEngineView -* [Issue 72](../../../issues/72): Web page runJavascript always crashes jvm when you try to use the returned object -* [Issue 71](../../../issues/71): Java DeferredDelete throws thread affinity exception, one of threads is undefined -* Solved bug in converting QVariantMap +* `qrc:` paths not working for directory classpaths +* [Issue 89](../../../issues/89): Functions missing from QQuickRenderTarget +* [Issue 86](../../../issues/86): Add all java object constants as readonly properties when used in qml +* [Issue 85](../../../issues/85): Fix ‘numeric_limits’ is not a member of ‘std’ error +* [Issue 84](../../../issues/84): Could not load the Qt platform plugin "wayland" in "" even though it was found. +* [Issue 83](../../../issues/83): QUrl with "qrc:" not working for resources in directory-based class paths. +* [Issue 79](../../../issues/79): Wrong minial version for QWebEngineFileSystemAccessRequest? +* [Issue 78](../../../issues/78): better description of macos startup in readme +* [Issue 77](../../../issues/77): Using "Object" in a slot +* [Issue 75](../../../issues/75): QProperty and notification signals ## New Features -* Added QQmlEngine template method: `singletonInstance` -* Added QJSEngine template methods: `fromScriptValue`, `toScriptValue`, `fromManagedValue`, `toManagedValue` -* Added functions to QtQml: `qmlTypeId`, `qjsEngine` -* Added functions to QtWebEngineQuick: `toWebEngineSettings`, `toWebEngineScriptCollection` -* Qt 6.4 ready. +* New modules QtHttpServer and QtSpatialAudio +* New classes QtMath, QtAlgorithms and QtGlobal making available many Qt functions in global scope +* Providing QVariant as value class. +* Removing `$` character from class names translated to native. +* All Java classes lead to distinct values in `QMetaType.fromType()`. +* All Java classes can be gadgets ready for meta-programming and qml. +* Improved "reduce" features in QtConcurrent ## Compatibility -QtJambi 6.3.4, 6.2.7 and 5.15.9 are source- and binary-compatible to its predecessor releases. +QtJambi 6.3.5, 6.2.8 and 5.15.10 are source-compatible and in most cases binary-compatible to its predecessor releases.