Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Avoids passing of useless parameter #1585

Merged
merged 2 commits into from
May 6, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -277,7 +277,7 @@ internal class JavaGenerator : Generator {
"JniThrowNewException",
)
private val UTILS_FILES_HEADER_ONLY =
listOf("ArrayConversionUtils", "JniCallJavaMethod", "JniTemplateMetainfo")
listOf("ArrayConversionUtils", "JniCallJavaMethod", "JniTemplateMetainfo", "JniTypeId")

private fun annotationFromOption(option: Pair<String, List<String>>?) = option?.let { JavaImport(option.second, option.first) }
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ namespace jni
auto nErrorValue = {{#set typeRef=exception.errorType}}{{>jni/JniConversionPrefix}}{{/set}}convert_from_jni(
jniEnv,
jErrorValue,
({{resolveName exception.errorType "C++ FQN"}}*)nullptr );
TypeId<{{resolveName exception.errorType "C++ FQN"}}>{});

{{#instanceOf exception.errorType.type.actualType "LimeEnumeration"}}
return ::std::error_code{nErrorValue};
Expand All @@ -108,7 +108,7 @@ namespace jni
}}{{#unless returnType.isVoid}}
return {{#unlessPredicate returnType.typeRef "isJniPrimitive"}}{{!!
}}{{#returnType}}{{>jni/JniConversionPrefix}}{{/returnType}}convert_from_jni( jniEnv, _result, {{!!
}}({{resolveName returnType "C++"}}*)nullptr ){{/unlessPredicate}}{{!!
}}TypeId<{{resolveName returnType "C++"}}>{}){{/unlessPredicate}}{{!!
}}{{#ifPredicate returnType.typeRef "isJniPrimitive"}}_result{{/ifPredicate}};
{{/unless}}
{{#if thrownType}}{{#if returnType.isVoid}}{{#instanceOf exception.errorType.type.actualType "LimeEnumeration"}}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
{{>common/Include}}
{{/includes}}
#include "JniReference.h"
#include "JniTypeId.h"
#include <optional>

{{#internalNamespace}}
Expand All @@ -35,8 +36,8 @@ namespace {{.}}
namespace jni
{
{{#enum}}
JNIEXPORT {{resolveName "C++ FQN"}} convert_from_jni(JNIEnv* _jenv, const JniReference<jobject>& _jinput, {{resolveName "C++ FQN"}}*);
JNIEXPORT std::optional<{{resolveName "C++ FQN"}}> convert_from_jni(JNIEnv* _jenv, const JniReference<jobject>& _jinput, std::optional<{{resolveName "C++ FQN"}}>*);
JNIEXPORT {{resolveName "C++ FQN"}} convert_from_jni(JNIEnv* _jenv, const JniReference<jobject>& _jinput, TypeId<{{resolveName "C++ FQN"}}>);
JNIEXPORT std::optional<{{resolveName "C++ FQN"}}> convert_from_jni(JNIEnv* _jenv, const JniReference<jobject>& _jinput, TypeId<std::optional<{{resolveName "C++ FQN"}}>>);
JNIEXPORT JniReference<jobject> convert_to_jni(JNIEnv* _jenv, const {{resolveName "C++ FQN"}} _ninput);
JNIEXPORT JniReference<jobject> convert_to_jni(JNIEnv* _jenv, const std::optional<{{resolveName "C++ FQN"}}> _ninput);
{{/enum}}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ namespace jni
{{/if}}

{{resolveName "C++ FQN"}}
convert_from_jni(JNIEnv* _jenv, const JniReference<jobject>& _jinput{{#if external.java.converter}}_ext{{/if}}, {{resolveName "C++ FQN"}}*)
convert_from_jni(JNIEnv* _jenv, const JniReference<jobject>& _jinput{{#if external.java.converter}}_ext{{/if}}, TypeId<{{resolveName "C++ FQN"}}>)
{
{{#if external.java.converter}}
{{prefixPartial "jni/ExternalConversionFromJni" " "}}
Expand All @@ -57,15 +57,15 @@ convert_from_jni(JNIEnv* _jenv, const JniReference<jobject>& _jinput{{#if extern
{{/ifPredicate}}{{!!
}}{{#unlessPredicate "needsOrdinalConversion"}}
return {{resolveName "C++ FQN"}}(
{{>common/InternalNamespace}}jni::get_field_value(_jenv, _jinput, "value", (int32_t*)nullptr));
{{>common/InternalNamespace}}jni::get_field_value(_jenv, _jinput, "value", TypeId<int32_t>{}));
{{/unlessPredicate}}
}

std::optional<{{resolveName "C++ FQN"}}>
convert_from_jni(JNIEnv* _jenv, const JniReference<jobject>& _jinput, std::optional<{{resolveName "C++ FQN"}}>*)
convert_from_jni(JNIEnv* _jenv, const JniReference<jobject>& _jinput, TypeId<std::optional<{{resolveName "C++ FQN"}}>>)
{
return _jinput
? std::optional<{{resolveName "C++ FQN"}}>(convert_from_jni(_jenv, _jinput, ({{resolveName "C++ FQN"}}*)nullptr))
? std::optional<{{resolveName "C++ FQN"}}>(convert_from_jni(_jenv, _jinput, TypeId<{{resolveName "C++ FQN"}}>{}))
: std::optional<{{resolveName "C++ FQN"}}>{};
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,7 @@ jint
{{#unlessPredicate typeRef "isJniPrimitive"}}
{{resolveName typeRef "C++"}} {{resolveName}} = {{>common/InternalNamespace}}jni::{{>jni/JniConversionPrefix}}convert_from_jni(_jenv,
{{>common/InternalNamespace}}jni::make_non_releasing_ref(j{{resolveName}}),
({{resolveName typeRef "C++"}}*)nullptr);
{{>common/InternalNamespace}}jni::TypeId<{{resolveName typeRef "C++"}}>{});
{{/unlessPredicate}}{{#ifPredicate typeRef "isJniPrimitive"}}
{{resolveName typeRef "C++"}} {{resolveName}} = j{{resolveName}};
{{/ifPredicate}}
Expand All @@ -150,7 +150,7 @@ jint
}}{{#instanceOf container "LimeStruct"}}
auto _ninstance = {{>common/InternalNamespace}}jni::convert_from_jni(_jenv,
{{>common/InternalNamespace}}jni::make_non_releasing_ref(_jinstance),
({{resolveName container "C++ FQN"}}*)nullptr);
{{>common/InternalNamespace}}jni::TypeId<{{resolveName container "C++ FQN"}}>{});
{{/instanceOf}}{{/unless}}

{{#if thrownType}}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
#include "JniCallJavaMethod.h"
{{/ifPredicate}}
#include "JniReference.h"
#include "JniTypeId.h"
#include <memory>
#include <optional>
{{#ifPredicate model "hasOverloadedLambda"}}
Expand All @@ -44,7 +45,7 @@ namespace jni
{

{{#model}}
JNIEXPORT {{>cppTypeName}} {{>conversionPrefix}}convert_from_jni(JNIEnv* _env, const JniReference<jobject>& _jobj, {{>cppTypeName}}*);
JNIEXPORT {{>cppTypeName}} {{>conversionPrefix}}convert_from_jni(JNIEnv* _env, const JniReference<jobject>& _jobj, TypeId<{{>cppTypeName}}>);
JNIEXPORT JniReference<jobject> {{>conversionPrefix}}convert_to_jni(JNIEnv* _jenv, const {{>cppTypeName}}& _ninput);
{{#ifPredicate "hasOverloadedLambda"}}{{>jni/LambdaOverloadedConversionHeader}}{{/ifPredicate}}
{{/model}}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,15 +71,15 @@ void createCppProxy(JNIEnv* env, const JniReference<jobject>& obj, ::std::shared
{{#interface}}{{>cppTypeName}}{{/interface}} try_descendant_from_jni(JNIEnv* _env, const JniReference<jobject>& _jobj, {{#interface}}{{>cppTypeName}}{{/interface}}*) {
{{#this}}{{!! pre-sorted, most distant descendants are prioritized }}
if (_env->IsInstanceOf(_jobj.get(), CachedJavaInterface<{{resolveName "C++ FQN"}}>::java_class.get())) {
return {{>conversionPrefix}}convert_from_jni(_env, _jobj, ({{>cppTypeName}}*)nullptr);
return {{>conversionPrefix}}convert_from_jni(_env, _jobj, TypeId<{{>cppTypeName}}>{});
}
{{/this}}
return {};
}

{{/eval}}{{/set}}{{/instanceOf}}{{/unless}}

{{>cppTypeName}} {{>conversionPrefix}}convert_from_jni(JNIEnv* _env, const JniReference<jobject>& _jobj, {{>cppTypeName}}*)
{{>cppTypeName}} {{>conversionPrefix}}convert_from_jni(JNIEnv* _env, const JniReference<jobject>& _jobj, TypeId<{{>cppTypeName}}>)
{
{{>cppTypeName}} _nresult{};
{{#if isNarrow}}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,15 +18,15 @@
! License-Filename: LICENSE
!
!}}
JNIEXPORT std::optional<{{resolveName "C++ FQN"}}> {{resolveName "mangled"}}_convert_from_jni(JNIEnv* _env, const JniReference<jobject>& _jobj, std::optional<{{resolveName "C++ FQN"}}>*);
JNIEXPORT std::optional<{{resolveName "C++ FQN"}}> {{resolveName "mangled"}}_convert_from_jni(JNIEnv* _env, const JniReference<jobject>& _jobj, TypeId<std::optional<{{resolveName "C++ FQN"}}>>);
JNIEXPORT JniReference<jobject> {{resolveName "mangled"}}_convert_to_jni(JNIEnv* _env, const std::optional<{{resolveName "C++ FQN"}}>& _ninput);

// Functions to create ArrayLists from C++ vectors and vice versa, for overloaded lambdas.

JNIEXPORT JniReference<jobject> {{resolveName "mangled"}}_convert_to_jni(JNIEnv* _env, const std::vector<{{resolveName "C++ FQN"}}>& _ninput);
JNIEXPORT JniReference<jobject> {{resolveName "mangled"}}_convert_to_jni(JNIEnv* _env, const std::optional<std::vector<{{resolveName "C++ FQN"}}>>& _ninput);
JNIEXPORT std::vector<{{resolveName "C++ FQN"}}> {{resolveName "mangled"}}_convert_from_jni(JNIEnv* _env, const JniReference<jobject>& _arrayList, std::vector<{{resolveName "C++ FQN"}}>*);
JNIEXPORT std::optional<std::vector<{{resolveName "C++ FQN"}}>> {{resolveName "mangled"}}_convert_from_jni(JNIEnv* _env, const JniReference<jobject>& _arrayList, std::optional<std::vector<{{resolveName "C++ FQN"}}>>*);
JNIEXPORT std::vector<{{resolveName "C++ FQN"}}> {{resolveName "mangled"}}_convert_from_jni(JNIEnv* _env, const JniReference<jobject>& _arrayList, TypeId<std::vector<{{resolveName "C++ FQN"}}>>);
JNIEXPORT std::optional<std::vector<{{resolveName "C++ FQN"}}>> {{resolveName "mangled"}}_convert_from_jni(JNIEnv* _env, const JniReference<jobject>& _arrayList, TypeId<std::optional<std::vector<{{resolveName "C++ FQN"}}>>>);

// Templated functions to create HashMaps from C++ unordered_maps and vice versa, for overloaded lambdas as values.

Expand Down Expand Up @@ -55,7 +55,7 @@ JniReference<jobject>
template <typename K, typename Hash>
std::unordered_map<K, {{resolveName "C++ FQN"}}, Hash>
{{resolveName "mangled"}}_convert_from_jni(
JNIEnv* _env, const JniReference<jobject>& _jMap, std::unordered_map<K, {{resolveName "C++ FQN"}}, Hash>*
JNIEnv* _env, const JniReference<jobject>& _jMap, TypeId<std::unordered_map<K, {{resolveName "C++ FQN"}}, Hash>>
) {
std::unordered_map<K, {{resolveName "C++ FQN"}}, Hash> _nresult{};

Expand All @@ -82,10 +82,10 @@ std::unordered_map<K, {{resolveName "C++ FQN"}}, Hash>
while (call_java_method<jboolean>(_env, jIterator, hasNextMethodId)) {
auto jEntry = call_java_method<jobject>(_env, jIterator, nextMethodId);
auto jKey = call_java_method<jobject>(_env, jEntry, getKeyMethodId);
K nKey = convert_from_jni(_env, jKey, (K*)nullptr);
K nKey = convert_from_jni(_env, jKey, TypeId<K>{});

auto jValue = call_java_method<jobject>(_env, jEntry, getValueMethodId);
auto nValue = {{resolveName "mangled"}}_convert_from_jni(_env, jValue, ({{resolveName "C++ FQN"}}*)nullptr);
auto nValue = {{resolveName "mangled"}}_convert_from_jni(_env, jValue, TypeId<{{resolveName "C++ FQN"}}>{});

_nresult.emplace(std::move(nKey), std::move(nValue));
}
Expand All @@ -97,10 +97,10 @@ template<typename K, typename Hash>
std::optional<std::unordered_map<K, {{resolveName "C++ FQN"}}, Hash>>
{{resolveName "mangled"}}_convert_from_jni(JNIEnv* _env,
const JniReference<jobject>& _jMap,
std::optional<std::unordered_map<K, {{resolveName "C++ FQN"}}, Hash>>*)
TypeId<std::optional<std::unordered_map<K, {{resolveName "C++ FQN"}}, Hash>>>)
{
return _jMap
? std::optional<std::unordered_map<K, {{resolveName "C++ FQN"}}, Hash>>(
{{resolveName "mangled"}}_convert_from_jni(_env, _jMap, (std::unordered_map<K, {{resolveName "C++ FQN"}}, Hash>*)nullptr)
{{resolveName "mangled"}}_convert_from_jni(_env, _jMap, TypeId<std::unordered_map<K, {{resolveName "C++ FQN"}}, Hash>>{})
) : std::optional<std::unordered_map<K, {{resolveName "C++ FQN"}}, Hash>>{};
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,9 @@
!
!}}
std::optional<{{resolveName "C++ FQN"}}>
{{resolveName "mangled"}}_convert_from_jni(JNIEnv* _env, const JniReference<jobject>& _jobj, std::optional<{{resolveName "C++ FQN"}}>*) {
{{resolveName "mangled"}}_convert_from_jni(JNIEnv* _env, const JniReference<jobject>& _jobj, TypeId<std::optional<{{resolveName "C++ FQN"}}>>) {
return _jobj
? std::optional<{{resolveName "C++ FQN"}}>({{resolveName "mangled"}}_convert_from_jni(_env, _jobj, ({{resolveName "C++ FQN"}}*)nullptr))
? std::optional<{{resolveName "C++ FQN"}}>({{resolveName "mangled"}}_convert_from_jni(_env, _jobj, TypeId<{{resolveName "C++ FQN"}}>{}))
: std::optional<{{resolveName "C++ FQN"}}>{};
}

Expand Down Expand Up @@ -50,7 +50,7 @@ JniReference<jobject>
}

std::vector<{{resolveName "C++ FQN"}}>
{{resolveName "mangled"}}_convert_from_jni(JNIEnv* _env, const JniReference<jobject>& _arrayList, std::vector<{{resolveName "C++ FQN"}}>*) {
{{resolveName "mangled"}}_convert_from_jni(JNIEnv* _env, const JniReference<jobject>& _arrayList, TypeId<std::vector<{{resolveName "C++ FQN"}}>>) {
std::vector<{{resolveName "C++ FQN"}}> _nresult{};
if (_env->IsSameObject(_arrayList.get(), nullptr)) {
return _nresult;
Expand All @@ -64,15 +64,15 @@ std::vector<{{resolveName "C++ FQN"}}>
auto getMethodId = _env->GetMethodID(javaArrayListClass.get(), "get", "(I)Ljava/lang/Object;");
for (jint i = 0; i < length; i++) {
auto javaListItem = call_java_method<jobject>(_env, _arrayList, getMethodId, i);
_nresult.push_back({{resolveName "mangled"}}_convert_from_jni(_env, javaListItem, ({{resolveName "C++ FQN"}}*)nullptr));
_nresult.push_back({{resolveName "mangled"}}_convert_from_jni(_env, javaListItem, TypeId<{{resolveName "C++ FQN"}}>{}));
}

return _nresult;
}

std::optional<std::vector<{{resolveName "C++ FQN"}}>>
{{resolveName "mangled"}}_convert_from_jni(JNIEnv* _env, const JniReference<jobject>& _arrayList, std::optional<std::vector<{{resolveName "C++ FQN"}}>>*) {
{{resolveName "mangled"}}_convert_from_jni(JNIEnv* _env, const JniReference<jobject>& _arrayList, TypeId<std::optional<std::vector<{{resolveName "C++ FQN"}}>>>) {
return _arrayList
? std::optional<std::vector<{{resolveName "C++ FQN"}}>>({{resolveName "mangled"}}_convert_from_jni(_env, _arrayList, (std::vector<{{resolveName "C++ FQN"}}>*)nullptr))
? std::optional<std::vector<{{resolveName "C++ FQN"}}>>({{resolveName "mangled"}}_convert_from_jni(_env, _arrayList, TypeId<std::vector<{{resolveName "C++ FQN"}}>>{}))
: std::optional<std::vector<{{resolveName "C++ FQN"}}>>{};
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
{{>common/Include}}
{{/includes}}
#include "JniReference.h"
#include "JniTypeId.h"
#include <optional>

{{#internalNamespace}}
Expand All @@ -35,9 +36,9 @@ namespace {{.}}
namespace jni
{
{{#struct}}
JNIEXPORT {{resolveName "C++ FQN"}} convert_from_jni(JNIEnv* _jenv, const JniReference<jobject>& _jinput, {{resolveName "C++ FQN"}}*);
JNIEXPORT {{resolveName "C++ FQN"}} convert_from_jni(JNIEnv* _jenv, const JniReference<jobject>& _jinput, TypeId<{{resolveName "C++ FQN"}}>);
JNIEXPORT std::optional<{{resolveName "C++ FQN"}}> convert_from_jni({{!!
}}JNIEnv* _jenv, const JniReference<jobject>& _jinput, std::optional<{{resolveName "C++ FQN"}}>*);
}}JNIEnv* _jenv, const JniReference<jobject>& _jinput, TypeId<std::optional<{{resolveName "C++ FQN"}}>>);
JNIEXPORT JniReference<jobject> convert_to_jni(JNIEnv* _jenv, const {{resolveName "C++ FQN"}}& _ninput);
{{#if external.java.converter constructors}}
JNIEXPORT JniReference<jobject> convert_to_jni_internal(JNIEnv* _jenv, const {{resolveName "C++ FQN"}}& _ninput);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ namespace jni

{{resolveName "C++ FQN"}}
convert_from_jni(JNIEnv* _jenv, const JniReference<jobject>& _jinput{{!!
}}{{#if external.java.converter}}_ext{{/if}}, {{resolveName "C++ FQN"}}*)
}}{{#if external.java.converter}}_ext{{/if}}, TypeId<{{resolveName "C++ FQN"}}>)
{
{{#if external.java.converter}}
{{prefixPartial "jni/ExternalConversionFromJni" " "}}
Expand All @@ -50,7 +50,7 @@ convert_from_jni(JNIEnv* _jenv, const JniReference<jobject>& _jinput{{!!
{{#fields}}{{#ifPredicate "shouldRetain"}}{{#if external.java.getterName}}{{#unlessPredicate typeRef "isJniPrimitive"}}
auto j_{{resolveName "C++"}} = call_java_method<{{resolveName typeRef}}>(_jenv, _jinput, {{!!
}}"{{external.java.getterName}}", "(){{resolveName typeRef "signature"}}");
auto n_{{resolveName "C++"}} = {{>jni/JniConversionPrefix}}convert_from_jni(_jenv, j_{{resolveName "C++"}}, ({{resolveName typeRef "C++"}}*)nullptr);
auto n_{{resolveName "C++"}} = {{>jni/JniConversionPrefix}}convert_from_jni(_jenv, j_{{resolveName "C++"}}, TypeId<{{resolveName typeRef "C++"}}>{});
{{/unlessPredicate}}{{#ifPredicate typeRef "isJniPrimitive"}}
auto n_{{resolveName "C++"}} = call_java_method<{{resolveName typeRef}}>(_jenv, _jinput, {{!!
}}"{{external.java.getterName}}", "(){{resolveName typeRef "signature"}}");
Expand All @@ -65,14 +65,14 @@ convert_from_jni(JNIEnv* _jenv, const JniReference<jobject>& _jinput{{!!
_jenv,
{{>common/InternalNamespace}}jni::get_object_field_value({{!!
}}_jenv, _jinput, "{{resolveName}}", "L{{resolveName typeRef.type.actualType}};"),
({{resolveName typeRef "C++"}}*)nullptr );
TypeId<{{resolveName typeRef "C++"}}>{} );
{{/unless}}
{{/notInstanceOf}}{{#instanceOf typeRef.type.actualType "LimeBasicType"}}
{{resolveName typeRef "C++"}} n_{{resolveName "C++"}} = {{>common/InternalNamespace}}jni::get_field_value(
_jenv,
_jinput,
"{{resolveName}}",
({{resolveName typeRef "C++"}}*)nullptr );
TypeId<{{resolveName typeRef "C++"}}>{} );
{{/instanceOf}}{{/unless}}
{{#unlessPredicate struct "hasImmutableFields"}}_nout.{{!!
}}{{#ifPredicate "hasCppSetter"}}{{resolveName this "C++" "setter"}}(n_{{resolveName this "C++"}}){{/ifPredicate}}{{!!
Expand All @@ -87,10 +87,10 @@ convert_from_jni(JNIEnv* _jenv, const JniReference<jobject>& _jinput{{!!
}

std::optional<{{resolveName "C++ FQN"}}>
convert_from_jni(JNIEnv* _jenv, const JniReference<jobject>& _jinput, std::optional<{{resolveName "C++ FQN"}}>*)
convert_from_jni(JNIEnv* _jenv, const JniReference<jobject>& _jinput, TypeId<std::optional<{{resolveName "C++ FQN"}}>>)
{
return _jinput
? std::optional<{{resolveName "C++ FQN"}}>(convert_from_jni(_jenv, _jinput, ({{resolveName "C++ FQN"}}*)nullptr))
? std::optional<{{resolveName "C++ FQN"}}>(convert_from_jni(_jenv, _jinput, TypeId<{{resolveName "C++ FQN"}}>{}))
: std::optional<{{resolveName "C++ FQN"}}>{};
}

Expand Down
Loading
Loading