external: Update android-jni-wrap

This commit is contained in:
Ryan Pavlik 2021-04-30 11:41:48 -05:00
parent d31bab9398
commit f35ce4ea9b
42 changed files with 499 additions and 276 deletions

View file

@ -1,4 +1,4 @@
// Copyright 2020, Collabora, Ltd.
// Copyright 2020-2021, Collabora, Ltd.
// SPDX-License-Identifier: BSL-1.0
// Author: Ryan Pavlik <ryan.pavlik@collabora.com>

View file

@ -1,4 +1,4 @@
// Copyright 2020, Collabora, Ltd.
// Copyright 2020-2021, Collabora, Ltd.
// SPDX-License-Identifier: BSL-1.0
// Author: Ryan Pavlik <ryan.pavlik@collabora.com>
@ -34,7 +34,7 @@ class Service : public content::Context {
* Singleton accessor
*/
static Meta &data() {
static Meta instance;
static Meta instance{};
return instance;
}
@ -42,6 +42,7 @@ class Service : public content::Context {
Meta();
};
};
/*!
* Wrapper for android.app.Activity objects.
*/
@ -87,7 +88,7 @@ class Activity : public content::Context {
* Singleton accessor
*/
static Meta &data() {
static Meta instance;
static Meta instance{};
return instance;
}
@ -95,6 +96,7 @@ class Activity : public content::Context {
Meta();
};
};
} // namespace android::app
} // namespace wrap
#include "android.app.impl.h"

View file

@ -1,6 +1,7 @@
// Copyright 2020, Collabora, Ltd.
// Copyright 2020-2021, Collabora, Ltd.
// SPDX-License-Identifier: BSL-1.0
// Author: Ryan Pavlik <ryan.pavlik@collabora.com>
// Inline implementations: do not include on its own!
#pragma once
@ -22,5 +23,6 @@ Activity::setVrModeEnabled(bool enabled,
return object().call<void>(Meta::data().setVrModeEnabled, enabled,
requestedComponent.object());
}
} // namespace android::app
} // namespace wrap

View file

@ -1,4 +1,4 @@
// Copyright 2020, Collabora, Ltd.
// Copyright 2020-2021, Collabora, Ltd.
// SPDX-License-Identifier: BSL-1.0
// Author: Ryan Pavlik <ryan.pavlik@collabora.com>
@ -12,6 +12,8 @@ Context::Meta::Meta(bool deferDrop)
WINDOW_SERVICE(classRef(), "WINDOW_SERVICE"),
getPackageManager(classRef().getMethod(
"getPackageManager", "()Landroid/content/pm/PackageManager;")),
getContentResolver(classRef().getMethod(
"getContentResolver", "()Landroid/content/ContentResolver;")),
getApplicationContext(classRef().getMethod(
"getApplicationContext", "()Landroid/content/Context;")),
getClassLoader(
@ -39,7 +41,6 @@ ComponentName::Meta::Meta()
Intent::Meta::Meta()
: MetaBase(Intent::getTypeName()),
FLAG_ACTIVITY_NEW_TASK(classRef(), "FLAG_ACTIVITY_NEW_TASK"),
init(classRef().getMethod("<init>", "()V")),
init1(classRef().getMethod("<init>", "(Landroid/content/Intent;)V")),
init2(classRef().getMethod("<init>", "(Ljava/lang/String;)V")),
init3(classRef().getMethod("<init>",
@ -51,5 +52,21 @@ Intent::Meta::Meta()
"content/Context;Ljava/lang/Class;)V")),
setFlags(
classRef().getMethod("setFlags", "(I)Landroid/content/Intent;")) {}
ContentResolver::Meta::Meta()
: MetaBaseDroppable(ContentResolver::getTypeName()),
query(classRef().getMethod(
"query",
"(Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/"
"String;Ljava/lang/String;)Landroid/database/Cursor;")),
query1(classRef().getMethod(
"query", "(Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/"
"String;[Ljava/lang/String;Ljava/lang/String;Landroid/os/"
"CancellationSignal;)Landroid/database/Cursor;")),
query2(classRef().getMethod(
"query",
"(Landroid/net/Uri;[Ljava/lang/String;Landroid/os/Bundle;Landroid/os/"
"CancellationSignal;)Landroid/database/Cursor;")) {
MetaBaseDroppable::dropClassRef();
}
} // namespace android::content
} // namespace wrap

View file

@ -1,4 +1,4 @@
// Copyright 2020, Collabora, Ltd.
// Copyright 2020-2021, Collabora, Ltd.
// SPDX-License-Identifier: BSL-1.0
// Author: Ryan Pavlik <ryan.pavlik@collabora.com>
@ -10,6 +10,7 @@
namespace wrap {
namespace android::content {
class ComponentName;
class ContentResolver;
class Context;
class Intent;
} // namespace android::content
@ -18,6 +19,10 @@ namespace android::content::pm {
class PackageManager;
} // namespace android::content::pm
namespace android::database {
class Cursor;
} // namespace android::database
namespace android::os {
class Bundle;
} // namespace android::os
@ -74,6 +79,17 @@ class Context : public ObjectWrapperBase {
*/
pm::PackageManager getPackageManager();
/*!
* Wrapper for the getContentResolver method
*
* Java prototype:
* `public abstract android.content.ContentResolver getContentResolver();`
*
* JNI signature: ()Landroid/content/ContentResolver;
*
*/
ContentResolver getContentResolver() const;
/*!
* Wrapper for the getApplicationContext method
*
@ -144,6 +160,7 @@ class Context : public ObjectWrapperBase {
impl::StaticFieldId<std::string> DISPLAY_SERVICE;
impl::StaticFieldId<std::string> WINDOW_SERVICE;
jni::method_t getPackageManager;
jni::method_t getContentResolver;
jni::method_t getApplicationContext;
jni::method_t getClassLoader;
jni::method_t startActivity;
@ -162,6 +179,7 @@ class Context : public ObjectWrapperBase {
explicit Meta(bool deferDrop);
};
};
/*!
* Wrapper for android.content.ComponentName objects.
*/
@ -183,7 +201,7 @@ class ComponentName : public ObjectWrapperBase {
*
*/
static ComponentName construct(std::string const &pkg,
std::string const &cls);
std::string const &className);
/*!
* Wrapper for a constructor
@ -195,7 +213,8 @@ class ComponentName : public ObjectWrapperBase {
* JNI signature: (Landroid/content/Context;Ljava/lang/String;)V
*
*/
static ComponentName construct(Context const &pkg, std::string const &cls);
static ComponentName construct(Context const &context,
std::string const &className);
/*!
* Wrapper for a constructor
@ -207,7 +226,7 @@ class ComponentName : public ObjectWrapperBase {
* JNI signature: (Landroid/content/Context;Ljava/lang/Class;)V
*
*/
static ComponentName construct(Context const &pkg,
static ComponentName construct(Context const &context,
java::lang::Class const &cls);
/*!
@ -234,7 +253,7 @@ class ComponentName : public ObjectWrapperBase {
* Singleton accessor
*/
static Meta &data() {
static Meta instance;
static Meta instance{};
return instance;
}
@ -242,6 +261,7 @@ class ComponentName : public ObjectWrapperBase {
Meta();
};
};
/*!
* Wrapper for android.content.Intent objects.
*/
@ -263,20 +283,6 @@ class Intent : public ObjectWrapperBase {
*/
static int32_t FLAG_ACTIVITY_NEW_TASK();
#if 0
// disabled because of zero-length array warning in jnipp
/*!
* Wrapper for a constructor
*
* Java prototype:
* `public android.content.Intent();`
*
* JNI signature: ()V
*
*/
static Intent construct();
#endif
/*!
* Wrapper for a constructor
*
@ -286,7 +292,7 @@ class Intent : public ObjectWrapperBase {
* JNI signature: (Landroid/content/Intent;)V
*
*/
static Intent construct(Intent &intent);
static Intent construct(Intent const &intent);
/*!
* Wrapper for a constructor
@ -354,7 +360,6 @@ class Intent : public ObjectWrapperBase {
*/
struct Meta : public MetaBase {
impl::StaticFieldId<int32_t> FLAG_ACTIVITY_NEW_TASK;
jni::method_t init;
jni::method_t init1;
jni::method_t init2;
jni::method_t init3;
@ -366,7 +371,7 @@ class Intent : public ObjectWrapperBase {
* Singleton accessor
*/
static Meta &data() {
static Meta instance;
static Meta instance{};
return instance;
}
@ -374,6 +379,91 @@ class Intent : public ObjectWrapperBase {
Meta();
};
};
/*!
* Wrapper for android.content.ContentResolver objects.
*/
class ContentResolver : public ObjectWrapperBase {
public:
using ObjectWrapperBase::ObjectWrapperBase;
static constexpr const char *getTypeName() noexcept {
return "android/content/ContentResolver";
}
/*!
* Wrapper for the query method - overload added in API level 1
*
* Java prototype:
* `public final android.database.Cursor query(android.net.Uri,
* java.lang.String[], java.lang.String, java.lang.String[],
* java.lang.String);`
*
* JNI signature:
* (Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor;
*
*/
database::Cursor query(jni::Object const &uri,
jni::Array<std::string> const &projection,
std::string const &selection,
jni::Array<std::string> const &selectionArgs,
std::string const &sortOrder);
/*!
* Wrapper for the query method - overload added in API level 16
*
* Java prototype:
* `public final android.database.Cursor query(android.net.Uri,
* java.lang.String[], java.lang.String, java.lang.String[],
* java.lang.String, android.os.CancellationSignal);`
*
* JNI signature:
* (Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/database/Cursor;
*
*/
database::Cursor query(jni::Object const &uri,
jni::Array<std::string> const &projection,
std::string const &selection,
jni::Array<std::string> const &selectionArgs,
std::string const &sortOrder,
jni::Object const &cancellationSignal);
/*!
* Wrapper for the query method - overload added in API level 26
*
* Java prototype:
* `public final android.database.Cursor query(android.net.Uri,
* java.lang.String[], android.os.Bundle, android.os.CancellationSignal);`
*
* JNI signature:
* (Landroid/net/Uri;[Ljava/lang/String;Landroid/os/Bundle;Landroid/os/CancellationSignal;)Landroid/database/Cursor;
*
*/
database::Cursor query(jni::Object const &uri,
jni::Array<std::string> const &projection,
os::Bundle const &queryArgs,
jni::Object const &cancellationSignal);
/*!
* Class metadata
*/
struct Meta : public MetaBaseDroppable {
jni::method_t query;
jni::method_t query1;
jni::method_t query2;
/*!
* Singleton accessor
*/
static Meta &data() {
static Meta instance{};
return instance;
}
private:
Meta();
};
};
} // namespace android::content
} // namespace wrap
#include "android.content.impl.h"

View file

@ -1,10 +1,12 @@
// Copyright 2020, Collabora, Ltd.
// Copyright 2020-2021, Collabora, Ltd.
// SPDX-License-Identifier: BSL-1.0
// Author: Ryan Pavlik <ryan.pavlik@collabora.com>
// Inline implementations: do not include on its own!
#pragma once
#include "android.content.pm.h"
#include "android.database.h"
#include "android.os.h"
#include "java.lang.h"
#include <string>
@ -12,8 +14,6 @@
namespace wrap {
namespace android::content {
inline std::string Context::DISPLAY_SERVICE() {
// Defer dropping the class ref to avoid having to do two class lookups
// by name for this static field. Instead, drop it before we return.
auto &data = Meta::data(true);
auto ret = get(data.DISPLAY_SERVICE, data.clazz());
data.dropClassRef();
@ -21,8 +21,6 @@ inline std::string Context::DISPLAY_SERVICE() {
}
inline std::string Context::WINDOW_SERVICE() {
// Defer dropping the class ref to avoid having to do two class lookups
// by name for this static field. Instead, drop it before we return.
auto &data = Meta::data(true);
auto ret = get(data.WINDOW_SERVICE, data.clazz());
data.dropClassRef();
@ -35,6 +33,12 @@ inline pm::PackageManager Context::getPackageManager() {
object().call<jni::Object>(Meta::data().getPackageManager));
}
inline ContentResolver Context::getContentResolver() const {
assert(!isNull());
return ContentResolver(
object().call<jni::Object>(Meta::data().getContentResolver));
}
inline Context Context::getApplicationContext() {
assert(!isNull());
return Context(
@ -65,40 +69,35 @@ inline Context Context::createPackageContext(std::string const &packageName,
return Context(object().call<jni::Object>(Meta::data().createPackageContext,
packageName, flags));
}
inline ComponentName ComponentName::construct(std::string const &pkg,
std::string const &cls) {
std::string const &className) {
return ComponentName(
Meta::data().clazz().newInstance(Meta::data().init, pkg, cls));
Meta::data().clazz().newInstance(Meta::data().init, pkg, className));
}
inline ComponentName ComponentName::construct(Context const &pkg,
std::string const &cls) {
return ComponentName(Meta::data().clazz().newInstance(Meta::data().init1,
pkg.object(), cls));
inline ComponentName ComponentName::construct(Context const &context,
std::string const &className) {
return ComponentName(Meta::data().clazz().newInstance(
Meta::data().init1, context.object(), className));
}
inline ComponentName ComponentName::construct(Context const &pkg,
inline ComponentName ComponentName::construct(Context const &context,
java::lang::Class const &cls) {
return ComponentName(Meta::data().clazz().newInstance(
Meta::data().init2, pkg.object(), cls.object()));
Meta::data().init2, context.object(), cls.object()));
}
inline ComponentName ComponentName::construct(jni::Object const &parcel) {
return ComponentName(
Meta::data().clazz().newInstance(Meta::data().init3, parcel));
}
inline int32_t Intent::FLAG_ACTIVITY_NEW_TASK() {
return get(Meta::data().FLAG_ACTIVITY_NEW_TASK, Meta::data().clazz());
}
#if 0
// disabled because of zero-length array warning in jnipp
inline Intent Intent::construct() {
return Intent(Meta::data().clazz().newInstance(Meta::data().init));
}
#endif
inline Intent Intent::construct(Intent &intent) {
inline Intent Intent::construct(Intent const &intent) {
return Intent(
Meta::data().clazz().newInstance(Meta::data().init1, intent.object()));
}
@ -131,5 +130,35 @@ inline Intent Intent::setFlags(int32_t flags) {
assert(!isNull());
return Intent(object().call<jni::Object>(Meta::data().setFlags, flags));
}
inline database::Cursor ContentResolver::query(
jni::Object const &uri, jni::Array<std::string> const &projection,
std::string const &selection, jni::Array<std::string> const &selectionArgs,
std::string const &sortOrder) {
assert(!isNull());
return database::Cursor(
object().call<jni::Object>(Meta::data().query, uri, projection,
selection, selectionArgs, sortOrder));
}
inline database::Cursor ContentResolver::query(
jni::Object const &uri, jni::Array<std::string> const &projection,
std::string const &selection, jni::Array<std::string> const &selectionArgs,
std::string const &sortOrder, jni::Object const &cancellationSignal) {
assert(!isNull());
return database::Cursor(object().call<jni::Object>(
Meta::data().query1, uri, projection, selection, selectionArgs,
sortOrder, cancellationSignal));
}
inline database::Cursor ContentResolver::query(
jni::Object const &uri, jni::Array<std::string> const &projection,
os::Bundle const &queryArgs, jni::Object const &cancellationSignal) {
assert(!isNull());
return database::Cursor(
object().call<jni::Object>(Meta::data().query2, uri, projection,
queryArgs.object(), cancellationSignal));
}
} // namespace android::content
} // namespace wrap

View file

@ -1,4 +1,4 @@
// Copyright 2020, Collabora, Ltd.
// Copyright 2020-2021, Collabora, Ltd.
// SPDX-License-Identifier: BSL-1.0
// Author: Ryan Pavlik <ryan.pavlik@collabora.com>
@ -40,9 +40,6 @@ PackageManager::Meta::Meta()
getPackageInfo(classRef().getMethod(
"getPackageInfo",
"(Ljava/lang/String;I)Landroid/content/pm/PackageInfo;")),
getPackageInfo1(classRef().getMethod(
"getPackageInfo", "(Landroid/content/pm/VersionedPackage;I)Landroid/"
"content/pm/PackageInfo;")),
getApplicationInfo(classRef().getMethod(
"getApplicationInfo",
"(Ljava/lang/String;I)Landroid/content/pm/ApplicationInfo;")),

View file

@ -1,4 +1,4 @@
// Copyright 2020, Collabora, Ltd.
// Copyright 2020-2021, Collabora, Ltd.
// SPDX-License-Identifier: BSL-1.0
// Author: Ryan Pavlik <ryan.pavlik@collabora.com>
@ -86,7 +86,7 @@ class PackageItemInfo : public ObjectWrapperBase {
* Singleton accessor
*/
static Meta &data() {
static Meta instance;
static Meta instance{};
return instance;
}
@ -94,6 +94,7 @@ class PackageItemInfo : public ObjectWrapperBase {
Meta();
};
};
/*!
* Wrapper for android.content.pm.ComponentInfo objects.
*/
@ -113,7 +114,7 @@ class ComponentInfo : public PackageItemInfo {
* Singleton accessor
*/
static Meta &data() {
static Meta instance;
static Meta instance{};
return instance;
}
@ -121,6 +122,7 @@ class ComponentInfo : public PackageItemInfo {
Meta();
};
};
/*!
* Wrapper for android.content.pm.ServiceInfo objects.
*/
@ -140,7 +142,7 @@ class ServiceInfo : public PackageItemInfo {
* Singleton accessor
*/
static Meta &data() {
static Meta instance;
static Meta instance{};
return instance;
}
@ -148,6 +150,7 @@ class ServiceInfo : public PackageItemInfo {
Meta();
};
};
/*!
* Wrapper for android.content.pm.ApplicationInfo objects.
*/
@ -191,7 +194,7 @@ class ApplicationInfo : public PackageItemInfo {
* Singleton accessor
*/
static Meta &data() {
static Meta instance;
static Meta instance{};
return instance;
}
@ -199,6 +202,7 @@ class ApplicationInfo : public PackageItemInfo {
Meta();
};
};
/*!
* Wrapper for android.content.pm.PackageInfo objects.
*/
@ -242,7 +246,7 @@ class PackageInfo : public ObjectWrapperBase {
* Singleton accessor
*/
static Meta &data() {
static Meta instance;
static Meta instance{};
return instance;
}
@ -250,6 +254,7 @@ class PackageInfo : public ObjectWrapperBase {
Meta();
};
};
/*!
* Wrapper for android.content.pm.ResolveInfo objects.
*/
@ -281,7 +286,7 @@ class ResolveInfo : public ObjectWrapperBase {
* Singleton accessor
*/
static Meta &data() {
static Meta instance;
static Meta instance{};
return instance;
}
@ -289,6 +294,7 @@ class ResolveInfo : public ObjectWrapperBase {
Meta();
};
};
/*!
* Wrapper for android.content.pm.PackageManager objects.
*/
@ -312,24 +318,6 @@ class PackageManager : public ObjectWrapperBase {
*/
PackageInfo getPackageInfo(std::string const &name, int32_t flags);
#if 0
// Ambiguous overload until we wrap VersionedPackage
/*!
* Wrapper for the getPackageInfo method
*
* Java prototype:
* `public abstract android.content.pm.PackageInfo
* getPackageInfo(android.content.pm.VersionedPackage, int) throws
* android.content.pm.PackageManager$NameNotFoundException;`
*
* JNI signature:
* (Landroid/content/pm/VersionedPackage;I)Landroid/content/pm/PackageInfo;
*
*/
PackageInfo getPackageInfo(jni::Object &versionedPackage, int32_t flags);
#endif
/*!
* Wrapper for the getApplicationInfo method
*
@ -354,7 +342,7 @@ class PackageManager : public ObjectWrapperBase {
* JNI signature: (Landroid/content/Intent;I)Ljava/util/List;
*
*/
java::util::List queryIntentServices(Intent &intent, int32_t intParam);
java::util::List queryIntentServices(Intent const &intent, int32_t flags);
enum {
GET_META_DATA = 128,
@ -366,7 +354,6 @@ class PackageManager : public ObjectWrapperBase {
*/
struct Meta : public MetaBaseDroppable {
jni::method_t getPackageInfo;
jni::method_t getPackageInfo1;
jni::method_t getApplicationInfo;
jni::method_t queryIntentServices;
@ -374,7 +361,7 @@ class PackageManager : public ObjectWrapperBase {
* Singleton accessor
*/
static Meta &data() {
static Meta instance;
static Meta instance{};
return instance;
}
@ -382,6 +369,7 @@ class PackageManager : public ObjectWrapperBase {
Meta();
};
};
} // namespace android::content::pm
} // namespace wrap
#include "android.content.pm.impl.h"

View file

@ -1,6 +1,7 @@
// Copyright 2020, Collabora, Ltd.
// Copyright 2020-2021, Collabora, Ltd.
// SPDX-License-Identifier: BSL-1.0
// Author: Ryan Pavlik <ryan.pavlik@collabora.com>
// Inline implementations: do not include on its own!
#pragma once
@ -34,6 +35,7 @@ inline std::string ApplicationInfo::getPublicSourceDir() const {
assert(!isNull());
return get(Meta::data().publicSourceDir, object());
}
inline ApplicationInfo PackageInfo::getApplicationInfo() const {
assert(!isNull());
return get(Meta::data().applicationInfo, object());
@ -43,10 +45,12 @@ inline std::string PackageInfo::getPackageName() const {
assert(!isNull());
return get(Meta::data().packageName, object());
}
inline ServiceInfo ResolveInfo::getServiceInfo() const {
assert(!isNull());
return get(Meta::data().serviceInfo, object());
}
inline PackageInfo PackageManager::getPackageInfo(std::string const &name,
int32_t flags) {
assert(!isNull());
@ -54,17 +58,6 @@ inline PackageInfo PackageManager::getPackageInfo(std::string const &name,
object().call<jni::Object>(Meta::data().getPackageInfo, name, flags));
}
#if 0
// Ambiguous overload until we wrap VersionedPackage
inline PackageInfo
PackageManager::getPackageInfo(jni::Object const &versionedPackage,
int32_t flags) {
assert(!isNull());
return PackageInfo(object().call<jni::Object>(Meta::data().getPackageInfo1,
versionedPackage, flags));
}
#endif
inline ApplicationInfo
PackageManager::getApplicationInfo(std::string const &packageName,
int32_t flags) {
@ -73,11 +66,12 @@ PackageManager::getApplicationInfo(std::string const &packageName,
Meta::data().getApplicationInfo, packageName, flags));
}
inline java::util::List PackageManager::queryIntentServices(Intent &intent,
int32_t intParam) {
inline java::util::List
PackageManager::queryIntentServices(Intent const &intent, int32_t flags) {
assert(!isNull());
return java::util::List(object().call<jni::Object>(
Meta::data().queryIntentServices, intent.object(), intParam));
Meta::data().queryIntentServices, intent.object(), flags));
}
} // namespace android::content::pm
} // namespace wrap

View file

@ -0,0 +1,22 @@
// Copyright 2020-2021, Collabora, Ltd.
// SPDX-License-Identifier: BSL-1.0
// Author: Ryan Pavlik <ryan.pavlik@collabora.com>
#include "android.database.h"
namespace wrap {
namespace android::database {
Cursor::Meta::Meta()
: MetaBaseDroppable(Cursor::getTypeName()),
getCount(classRef().getMethod("getCount", "()I")),
moveToFirst(classRef().getMethod("moveToFirst", "()Z")),
moveToNext(classRef().getMethod("moveToNext", "()Z")),
getColumnIndex(
classRef().getMethod("getColumnIndex", "(Ljava/lang/String;)I")),
getString(classRef().getMethod("getString", "(I)Ljava/lang/String;")),
getInt(classRef().getMethod("getInt", "(I)I")),
close(classRef().getMethod("close", "()V")) {
MetaBaseDroppable::dropClassRef();
}
} // namespace android::database
} // namespace wrap

View file

@ -0,0 +1,125 @@
// Copyright 2020-2021, Collabora, Ltd.
// SPDX-License-Identifier: BSL-1.0
// Author: Ryan Pavlik <ryan.pavlik@collabora.com>
#pragma once
#include "ObjectWrapperBase.h"
namespace wrap {
namespace android::database {
/*!
* Wrapper for android.database.Cursor objects.
*/
class Cursor : public ObjectWrapperBase {
public:
using ObjectWrapperBase::ObjectWrapperBase;
static constexpr const char *getTypeName() noexcept {
return "android/database/Cursor";
}
/*!
* Wrapper for the getCount method
*
* Java prototype:
* `public abstract int getCount();`
*
* JNI signature: ()I
*
*/
int32_t getCount();
/*!
* Wrapper for the moveToFirst method
*
* Java prototype:
* `public abstract boolean moveToFirst();`
*
* JNI signature: ()Z
*
*/
bool moveToFirst();
/*!
* Wrapper for the moveToNext method
*
* Java prototype:
* `public abstract boolean moveToNext();`
*
* JNI signature: ()Z
*
*/
bool moveToNext();
/*!
* Wrapper for the getColumnIndex method
*
* Java prototype:
* `public abstract int getColumnIndex(java.lang.String);`
*
* JNI signature: (Ljava/lang/String;)I
*
*/
int32_t getColumnIndex(std::string const &columnName);
/*!
* Wrapper for the getString method
*
* Java prototype:
* `public abstract java.lang.String getString(int);`
*
* JNI signature: (I)Ljava/lang/String;
*
*/
std::string getString(int32_t column);
/*!
* Wrapper for the getInt method
*
* Java prototype:
* `public abstract int getInt(int);`
*
* JNI signature: (I)I
*
*/
int32_t getInt(int32_t column);
/*!
* Wrapper for the close method
*
* Java prototype:
* `public abstract void close();`
*
* JNI signature: ()V
*
*/
void close();
/*!
* Class metadata
*/
struct Meta : public MetaBaseDroppable {
jni::method_t getCount;
jni::method_t moveToFirst;
jni::method_t moveToNext;
jni::method_t getColumnIndex;
jni::method_t getString;
jni::method_t getInt;
jni::method_t close;
/*!
* Singleton accessor
*/
static Meta &data() {
static Meta instance{};
return instance;
}
private:
Meta();
};
};
} // namespace android::database
} // namespace wrap
#include "android.database.impl.h"

View file

@ -0,0 +1,48 @@
// Copyright 2020-2021, Collabora, Ltd.
// SPDX-License-Identifier: BSL-1.0
// Author: Ryan Pavlik <ryan.pavlik@collabora.com>
// Inline implementations: do not include on its own!
#pragma once
#include <string>
namespace wrap {
namespace android::database {
inline int32_t Cursor::getCount() {
assert(!isNull());
return object().call<int32_t>(Meta::data().getCount);
}
inline bool Cursor::moveToFirst() {
assert(!isNull());
return object().call<bool>(Meta::data().moveToFirst);
}
inline bool Cursor::moveToNext() {
assert(!isNull());
return object().call<bool>(Meta::data().moveToNext);
}
inline int32_t Cursor::getColumnIndex(std::string const &columnName) {
assert(!isNull());
return object().call<int32_t>(Meta::data().getColumnIndex, columnName);
}
inline std::string Cursor::getString(int32_t column) {
assert(!isNull());
return object().call<std::string>(Meta::data().getString, column);
}
inline int32_t Cursor::getInt(int32_t column) {
assert(!isNull());
return object().call<int32_t>(Meta::data().getInt, column);
}
inline void Cursor::close() {
assert(!isNull());
return object().call<void>(Meta::data().close);
}
} // namespace android::database
} // namespace wrap

View file

@ -1,4 +1,4 @@
// Copyright 2020, Collabora, Ltd.
// Copyright 2020-2021, Collabora, Ltd.
// SPDX-License-Identifier: BSL-1.0
// Author: Ryan Pavlik <ryan.pavlik@collabora.com>

View file

@ -1,4 +1,4 @@
// Copyright 2020, Collabora, Ltd.
// Copyright 2020-2021, Collabora, Ltd.
// SPDX-License-Identifier: BSL-1.0
// Author: Ryan Pavlik <ryan.pavlik@collabora.com>
@ -51,7 +51,7 @@ class Point : public ObjectWrapperBase {
* Singleton accessor
*/
static Meta &data() {
static Meta instance;
static Meta instance{};
return instance;
}
@ -59,6 +59,7 @@ class Point : public ObjectWrapperBase {
Meta();
};
};
} // namespace android::graphics
} // namespace wrap
#include "android.graphics.impl.h"

View file

@ -1,6 +1,7 @@
// Copyright 2020, Collabora, Ltd.
// Copyright 2020-2021, Collabora, Ltd.
// SPDX-License-Identifier: BSL-1.0
// Author: Ryan Pavlik <ryan.pavlik@collabora.com>
// Inline implementations: do not include on its own!
#pragma once
@ -15,5 +16,6 @@ inline int32_t Point::getY() const {
assert(!isNull());
return get(Meta::data().y, object());
}
} // namespace android::graphics
} // namespace wrap

View file

@ -1,4 +1,4 @@
// Copyright 2020, Collabora, Ltd.
// Copyright 2020-2021, Collabora, Ltd.
// SPDX-License-Identifier: BSL-1.0
// Author: Ryan Pavlik <ryan.pavlik@collabora.com>

View file

@ -1,4 +1,4 @@
// Copyright 2020, Collabora, Ltd.
// Copyright 2020-2021, Collabora, Ltd.
// SPDX-License-Identifier: BSL-1.0
// Author: Ryan Pavlik <ryan.pavlik@collabora.com>
@ -71,7 +71,7 @@ class BaseBundle : public ObjectWrapperBase {
* Singleton accessor
*/
static Meta &data() {
static Meta instance;
static Meta instance{};
return instance;
}
@ -79,6 +79,7 @@ class BaseBundle : public ObjectWrapperBase {
Meta();
};
};
/*!
* Wrapper for android.os.Bundle objects.
*/
@ -98,7 +99,7 @@ class Bundle : public BaseBundle {
* Singleton accessor
*/
static Meta &data() {
static Meta instance;
static Meta instance{};
return instance;
}
@ -186,7 +187,7 @@ class ParcelFileDescriptor : public ObjectWrapperBase {
* Singleton accessor
*/
static Meta &data() {
static Meta instance;
static Meta instance{};
return instance;
}
@ -194,6 +195,7 @@ class ParcelFileDescriptor : public ObjectWrapperBase {
Meta();
};
};
} // namespace android::os
} // namespace wrap
#include "android.os.impl.h"

View file

@ -1,6 +1,7 @@
// Copyright 2020, Collabora, Ltd.
// Copyright 2020-2021, Collabora, Ltd.
// SPDX-License-Identifier: BSL-1.0
// Author: Ryan Pavlik <ryan.pavlik@collabora.com>
// Inline implementations: do not include on its own!
#pragma once
@ -49,5 +50,6 @@ inline void ParcelFileDescriptor::checkError() const {
assert(!isNull());
return object().call<void>(Meta::data().checkError);
}
} // namespace android::os
} // namespace wrap

View file

@ -1,4 +1,4 @@
// Copyright 2020, Collabora, Ltd.
// Copyright 2020-2021, Collabora, Ltd.
// SPDX-License-Identifier: BSL-1.0
// Author: Ryan Pavlik <ryan.pavlik@collabora.com>

View file

@ -1,4 +1,4 @@
// Copyright 2020, Collabora, Ltd.
// Copyright 2020-2021, Collabora, Ltd.
// SPDX-License-Identifier: BSL-1.0
// Author: Ryan Pavlik <ryan.pavlik@collabora.com>
@ -40,7 +40,7 @@ class Settings : public ObjectWrapperBase {
* Singleton accessor
*/
static Meta &data() {
static Meta instance;
static Meta instance{};
return instance;
}
@ -48,6 +48,7 @@ class Settings : public ObjectWrapperBase {
Meta();
};
};
} // namespace android::provider
} // namespace wrap
#include "android.provider.impl.h"

View file

@ -1,6 +1,7 @@
// Copyright 2020, Collabora, Ltd.
// Copyright 2020-2021, Collabora, Ltd.
// SPDX-License-Identifier: BSL-1.0
// Author: Ryan Pavlik <ryan.pavlik@collabora.com>
// Inline implementations: do not include on its own!
#pragma once
@ -9,5 +10,6 @@ namespace android::provider {
inline std::string Settings::ACTION_VR_LISTENER_SETTINGS() {
return get(Meta::data().ACTION_VR_LISTENER_SETTINGS, Meta::data().clazz());
}
} // namespace android::provider
} // namespace wrap

View file

@ -1,4 +1,4 @@
// Copyright 2020, Collabora, Ltd.
// Copyright 2020-2021, Collabora, Ltd.
// SPDX-License-Identifier: BSL-1.0
// Author: Ryan Pavlik <ryan.pavlik@collabora.com>

View file

@ -1,4 +1,4 @@
// Copyright 2020, Collabora, Ltd.
// Copyright 2020-2021, Collabora, Ltd.
// SPDX-License-Identifier: BSL-1.0
// Author: Ryan Pavlik <ryan.pavlik@collabora.com>
@ -52,7 +52,7 @@ class VrListenerService : public app::Service {
* Singleton accessor
*/
static Meta &data() {
static Meta instance;
static Meta instance{};
return instance;
}
@ -60,6 +60,7 @@ class VrListenerService : public app::Service {
Meta();
};
};
} // namespace android::service::vr
} // namespace wrap
#include "android.service.vr.impl.h"

View file

@ -1,6 +1,7 @@
// Copyright 2020, Collabora, Ltd.
// Copyright 2020-2021, Collabora, Ltd.
// SPDX-License-Identifier: BSL-1.0
// Author: Ryan Pavlik <ryan.pavlik@collabora.com>
// Inline implementations: do not include on its own!
#pragma once
@ -15,5 +16,6 @@ inline bool VrListenerService::isVrModePackageEnabled(
context.object(),
componentName.object());
}
} // namespace android::service::vr
} // namespace wrap

View file

@ -1,4 +1,4 @@
// Copyright 2020, Collabora, Ltd.
// Copyright 2020-2021, Collabora, Ltd.
// SPDX-License-Identifier: BSL-1.0
// Author: Ryan Pavlik <ryan.pavlik@collabora.com>

View file

@ -1,4 +1,4 @@
// Copyright 2020, Collabora, Ltd.
// Copyright 2020-2021, Collabora, Ltd.
// SPDX-License-Identifier: BSL-1.0
// Author: Ryan Pavlik <ryan.pavlik@collabora.com>
@ -51,7 +51,7 @@ class DisplayMetrics : public ObjectWrapperBase {
* Singleton accessor
*/
static Meta &data() {
static Meta instance;
static Meta instance{};
return instance;
}
@ -59,6 +59,7 @@ class DisplayMetrics : public ObjectWrapperBase {
Meta();
};
};
} // namespace android::util
} // namespace wrap
#include "android.util.impl.h"

View file

@ -1,6 +1,7 @@
// Copyright 2020, Collabora, Ltd.
// Copyright 2020-2021, Collabora, Ltd.
// SPDX-License-Identifier: BSL-1.0
// Author: Ryan Pavlik <ryan.pavlik@collabora.com>
// Inline implementations: do not include on its own!
#pragma once
@ -15,5 +16,6 @@ inline int32_t DisplayMetrics::getWidthPixels() const {
assert(!isNull());
return get(Meta::data().widthPixels, object());
}
} // namespace android::util
} // namespace wrap

View file

@ -1,4 +1,4 @@
// Copyright 2020, Collabora, Ltd.
// Copyright 2020-2021, Collabora, Ltd.
// SPDX-License-Identifier: BSL-1.0
// Author: Ryan Pavlik <ryan.pavlik@collabora.com>

View file

@ -1,4 +1,4 @@
// Copyright 2020, Collabora, Ltd.
// Copyright 2020-2021, Collabora, Ltd.
// SPDX-License-Identifier: BSL-1.0
// Author: Ryan Pavlik <ryan.pavlik@collabora.com>
@ -66,7 +66,7 @@ class Display : public ObjectWrapperBase {
* Singleton accessor
*/
static Meta &data() {
static Meta instance;
static Meta instance{};
return instance;
}
@ -74,6 +74,7 @@ class Display : public ObjectWrapperBase {
Meta();
};
};
/*!
* Wrapper for android.view.Surface objects.
*/
@ -105,7 +106,7 @@ class Surface : public ObjectWrapperBase {
* Singleton accessor
*/
static Meta &data() {
static Meta instance;
static Meta instance{};
return instance;
}
@ -113,6 +114,7 @@ class Surface : public ObjectWrapperBase {
Meta();
};
};
/*!
* Wrapper for android.view.SurfaceHolder objects.
*/
@ -144,7 +146,7 @@ class SurfaceHolder : public ObjectWrapperBase {
* Singleton accessor
*/
static Meta &data() {
static Meta instance;
static Meta instance{};
return instance;
}
@ -152,6 +154,7 @@ class SurfaceHolder : public ObjectWrapperBase {
Meta();
};
};
} // namespace android::view
} // namespace wrap
#include "android.view.impl.h"

View file

@ -1,6 +1,7 @@
// Copyright 2020, Collabora, Ltd.
// Copyright 2020-2021, Collabora, Ltd.
// SPDX-License-Identifier: BSL-1.0
// Author: Ryan Pavlik <ryan.pavlik@collabora.com>
// Inline implementations: do not include on its own!
#pragma once
@ -19,13 +20,16 @@ inline void Display::getRealMetrics(util::DisplayMetrics &out_displayMetrics) {
return object().call<void>(Meta::data().getRealMetrics,
out_displayMetrics.object());
}
inline bool Surface::isValid() const {
assert(!isNull());
return object().call<bool>(Meta::data().isValid);
}
inline Surface SurfaceHolder::getSurface() {
assert(!isNull());
return Surface(object().call<jni::Object>(Meta::data().getSurface));
}
} // namespace android::view
} // namespace wrap

View file

@ -1,4 +1,4 @@
// Copyright 2020, Collabora, Ltd.
// Copyright 2020-2021, Collabora, Ltd.
// SPDX-License-Identifier: BSL-1.0
// Author: Ryan Pavlik <ryan.pavlik@collabora.com>

View file

@ -1,4 +1,4 @@
// Copyright 2020, Collabora, Ltd.
// Copyright 2020-2021, Collabora, Ltd.
// SPDX-License-Identifier: BSL-1.0
// Author: Ryan Pavlik <ryan.pavlik@collabora.com>
@ -74,7 +74,7 @@ class Toast : public ObjectWrapperBase {
*
*/
static Toast makeText(content::Context const &context,
std::string const &stringParam, int32_t duration);
jni::Object const &text, int32_t duration);
/*!
* Wrapper for the makeText static method
@ -86,7 +86,7 @@ class Toast : public ObjectWrapperBase {
* JNI signature: (Landroid/content/Context;II)Landroid/widget/Toast;
*
*/
static Toast makeText(content::Context &context, int32_t resId,
static Toast makeText(content::Context const &context, int32_t resId,
int32_t duration);
/*!
@ -103,7 +103,7 @@ class Toast : public ObjectWrapperBase {
* Singleton accessor
*/
static Meta &data() {
static Meta instance;
static Meta instance{};
return instance;
}
@ -111,6 +111,7 @@ class Toast : public ObjectWrapperBase {
Meta();
};
};
} // namespace android::widget
} // namespace wrap
#include "android.widget.impl.h"

View file

@ -1,6 +1,7 @@
// Copyright 2020, Collabora, Ltd.
// Copyright 2020-2021, Collabora, Ltd.
// SPDX-License-Identifier: BSL-1.0
// Author: Ryan Pavlik <ryan.pavlik@collabora.com>
// Inline implementations: do not include on its own!
#pragma once
@ -22,15 +23,16 @@ inline void Toast::show() const {
}
inline Toast Toast::makeText(content::Context const &context,
std::string const &stringParam, int32_t duration) {
jni::Object const &text, int32_t duration) {
return Toast(Meta::data().clazz().call<jni::Object>(
Meta::data().makeText, context.object(), stringParam, duration));
Meta::data().makeText, context.object(), text, duration));
}
inline Toast Toast::makeText(content::Context &context, int32_t resId,
inline Toast Toast::makeText(content::Context const &context, int32_t resId,
int32_t duration) {
return Toast(Meta::data().clazz().call<jni::Object>(
Meta::data().makeText1, context.object(), resId, duration));
}
} // namespace android::widget
} // namespace wrap

View file

@ -1,15 +0,0 @@
// Copyright 2020, Collabora, Ltd.
// SPDX-License-Identifier: BSL-1.0
// Author: Ryan Pavlik <ryan.pavlik@collabora.com>
#include "dalvik.system.h"
namespace wrap {
namespace dalvik::system {
DexClassLoader::Meta::Meta()
: MetaBase(DexClassLoader::getTypeName()),
init(classRef().getMethod("<init>",
"(Ljava/lang/String;Ljava/lang/String;Ljava/"
"lang/String;Ljava/lang/ClassLoader;)V")) {}
} // namespace dalvik::system
} // namespace wrap

View file

@ -1,67 +0,0 @@
// Copyright 2020, Collabora, Ltd.
// SPDX-License-Identifier: BSL-1.0
// Author: Ryan Pavlik <ryan.pavlik@collabora.com>
#pragma once
#include "ObjectWrapperBase.h"
namespace wrap {
namespace dalvik::system {
class DexClassLoader;
} // namespace dalvik::system
namespace java::lang {
class ClassLoader;
} // namespace java::lang
} // namespace wrap
namespace wrap {
namespace dalvik::system {
/*!
* Wrapper for dalvik.system.DexClassLoader objects.
*/
class DexClassLoader : public ObjectWrapperBase {
public:
using ObjectWrapperBase::ObjectWrapperBase;
static constexpr const char *getTypeName() noexcept {
return "dalvik/system/DexClassLoader";
}
/*!
* Wrapper for a constructor
*
* Java prototype:
* `public dalvik.system.DexClassLoader(java.lang.String, java.lang.String,
* java.lang.String, java.lang.ClassLoader);`
*
* JNI signature:
* (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;)V
*
*/
static DexClassLoader construct(std::string const &searchPath,
std::string const &nativeSearchPath,
jni::Object parentClassLoader);
/*!
* Class metadata
*/
struct Meta : public MetaBase {
jni::method_t init;
/*!
* Singleton accessor
*/
static Meta &data() {
static Meta instance;
return instance;
}
private:
Meta();
};
};
} // namespace dalvik::system
} // namespace wrap
#include "dalvik.system.impl.h"

View file

@ -1,21 +0,0 @@
// Copyright 2020, Collabora, Ltd.
// SPDX-License-Identifier: BSL-1.0
// Author: Ryan Pavlik <ryan.pavlik@collabora.com>
#pragma once
#include "java.lang.h"
#include <string>
namespace wrap {
namespace dalvik::system {
inline DexClassLoader
DexClassLoader::construct(std::string const &searchPath,
std::string const &nativeSearchPath,
jni::Object parentClassLoader) {
return DexClassLoader{
Meta::data().clazz().newInstance(Meta::data().init, searchPath, "",
nativeSearchPath, parentClassLoader)};
}
} // namespace dalvik::system
} // namespace wrap

View file

@ -1,4 +1,4 @@
// Copyright 2020, Collabora, Ltd.
// Copyright 2020-2021, Collabora, Ltd.
// SPDX-License-Identifier: BSL-1.0
// Author: Ryan Pavlik <ryan.pavlik@collabora.com>
@ -13,9 +13,6 @@ Class::Meta::Meta()
forName1(classRef().getStaticMethod(
"forName",
"(Ljava/lang/String;ZLjava/lang/ClassLoader;)Ljava/lang/Class;")),
forName2(classRef().getStaticMethod(
"forName",
"(Ljava/lang/Module;Ljava/lang/String;)Ljava/lang/Class;")),
getCanonicalName(
classRef().getMethod("getCanonicalName", "()Ljava/lang/String;")) {}
ClassLoader::Meta::Meta()

View file

@ -1,4 +1,4 @@
// Copyright 2020, Collabora, Ltd.
// Copyright 2020-2021, Collabora, Ltd.
// SPDX-License-Identifier: BSL-1.0
// Author: Ryan Pavlik <ryan.pavlik@collabora.com>
@ -36,7 +36,7 @@ class Class : public ObjectWrapperBase {
* JNI signature: (Ljava/lang/String;)Ljava/lang/Class;
*
*/
static Class forName(std::string &stringParam);
static Class forName(std::string const &name);
/*!
* Wrapper for the forName static method
@ -50,23 +50,11 @@ class Class : public ObjectWrapperBase {
*
*/
static Class forName(std::string const &name, bool initialize,
jni::Object classLoader);
ClassLoader const &classLoader);
//! @overload
static Class forName(jstring name, bool initialize,
jni::Object classLoader);
/*!
* Wrapper for the forName static method
*
* Java prototype:
* `public static java.lang.Class<?> forName(java.lang.Module,
* java.lang.String);`
*
* JNI signature: (Ljava/lang/Module;Ljava/lang/String;)Ljava/lang/Class;
*
*/
static Class forName(jni::Object const &module, std::string const &name);
/*!
* Wrapper for the getCanonicalName method
*
@ -84,14 +72,13 @@ class Class : public ObjectWrapperBase {
struct Meta : public MetaBase {
jni::method_t forName;
jni::method_t forName1;
jni::method_t forName2;
jni::method_t getCanonicalName;
/*!
* Singleton accessor
*/
static Meta &data() {
static Meta instance;
static Meta instance{};
return instance;
}
@ -99,6 +86,7 @@ class Class : public ObjectWrapperBase {
Meta();
};
};
/*!
* Wrapper for java.lang.ClassLoader objects.
*/
@ -143,7 +131,7 @@ class ClassLoader : public ObjectWrapperBase {
* Singleton accessor
*/
static Meta &data() {
static Meta instance;
static Meta instance{};
return instance;
}
@ -151,6 +139,7 @@ class ClassLoader : public ObjectWrapperBase {
Meta();
};
};
/*!
* Wrapper for java.lang.System objects.
*/
@ -182,7 +171,7 @@ class System : public ObjectWrapperBase {
* Singleton accessor
*/
static Meta &data() {
static Meta instance;
static Meta instance{};
return instance;
}
@ -190,6 +179,7 @@ class System : public ObjectWrapperBase {
Meta();
};
};
} // namespace java::lang
} // namespace wrap
#include "java.lang.impl.h"

View file

@ -1,6 +1,7 @@
// Copyright 2020, Collabora, Ltd.
// Copyright 2020-2021, Collabora, Ltd.
// SPDX-License-Identifier: BSL-1.0
// Author: Ryan Pavlik <ryan.pavlik@collabora.com>
// Inline implementations: do not include on its own!
#pragma once
@ -8,15 +9,15 @@
namespace wrap {
namespace java::lang {
inline Class Class::forName(std::string &stringParam) {
return Class(Meta::data().clazz().call<jni::Object>(Meta::data().forName,
stringParam));
inline Class Class::forName(std::string const &name) {
return Class(
Meta::data().clazz().call<jni::Object>(Meta::data().forName, name));
}
inline Class Class::forName(std::string const &name, bool initialize,
jni::Object classLoader) {
ClassLoader const &classLoader) {
return Class(Meta::data().clazz().call<jni::Object>(
Meta::data().forName1, name, initialize, classLoader));
Meta::data().forName1, name, initialize, classLoader.object()));
}
inline Class Class::forName(jstring name, bool initialize,
@ -25,12 +26,6 @@ inline Class Class::forName(jstring name, bool initialize,
Meta::data().forName, name, initialize, classLoader)};
}
inline Class Class::forName(jni::Object const &module,
std::string const &name) {
return Class(Meta::data().clazz().call<jni::Object>(Meta::data().forName2,
module, name));
}
inline std::string Class::getCanonicalName() {
assert(!isNull());
return object().call<std::string>(Meta::data().getCanonicalName);
@ -55,5 +50,6 @@ inline std::string System::mapLibraryName(std::string const &name) {
return Meta::data().clazz().call<std::string>(Meta::data().mapLibraryName,
name);
}
} // namespace java::lang
} // namespace wrap

View file

@ -1,4 +1,4 @@
// Copyright 2020, Collabora, Ltd.
// Copyright 2020-2021, Collabora, Ltd.
// SPDX-License-Identifier: BSL-1.0
// Author: Ryan Pavlik <ryan.pavlik@collabora.com>

View file

@ -1,4 +1,4 @@
// Copyright 2020, Collabora, Ltd.
// Copyright 2020-2021, Collabora, Ltd.
// SPDX-License-Identifier: BSL-1.0
// Author: Ryan Pavlik <ryan.pavlik@collabora.com>
@ -51,7 +51,7 @@ class List : public ObjectWrapperBase {
* Singleton accessor
*/
static Meta &data() {
static Meta instance;
static Meta instance{};
return instance;
}
@ -59,6 +59,7 @@ class List : public ObjectWrapperBase {
Meta();
};
};
} // namespace java::util
} // namespace wrap
#include "java.util.impl.h"

View file

@ -1,6 +1,7 @@
// Copyright 2020, Collabora, Ltd.
// Copyright 2020-2021, Collabora, Ltd.
// SPDX-License-Identifier: BSL-1.0
// Author: Ryan Pavlik <ryan.pavlik@collabora.com>
// Inline implementations: do not include on its own!
#pragma once
@ -15,5 +16,6 @@ inline jni::Object List::get(int32_t index) const {
assert(!isNull());
return object().call<jni::Object>(Meta::data().get, index);
}
} // namespace java::util
} // namespace wrap