Skip to content
This repository has been archived by the owner on Mar 26, 2020. It is now read-only.

Fix old cast style use in generated file and support lib. #453

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
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
14 changes: 8 additions & 6 deletions src/source/JNIGenerator.scala
Original file line number Diff line number Diff line change
Expand Up @@ -173,7 +173,7 @@ class JNIGenerator(spec: Spec) extends Generator(spec) {
w.wl(s"const auto& data = ::djinni::JniClass<$jniHelper>::get();")
writeAlignedCall(w, "return {", r.fields, "}", f => {
val fieldId = "data.field_" + idJava.field(f.ident)
val jniFieldAccess = toJniCall(f.ty, (jt: String) => s"jniEnv->Get${jt}Field(j, $fieldId)")
val jniFieldAccess = toJniCall(f.ty, (jt: String) => s"jniEnv->Get${jt}Field(j, $fieldId)") + ")"
jniMarshal.toCpp(f.ty, jniFieldAccess)
})
w.wl(";")
Expand Down Expand Up @@ -298,7 +298,9 @@ class JNIGenerator(spec: Spec) extends Generator(spec) {
}
else
w.w(")")
w.wl(";")
if (m.ret.nonEmpty)
w.w(")");
w.wl(";");
w.wl(s"::djinni::jniExceptionCheck(jniEnv);")
m.ret.fold()(ty => {
(spec.cppNnCheckExpression, isInterface(ty.resolved)) match {
Expand Down Expand Up @@ -404,11 +406,11 @@ class JNIGenerator(spec: Spec) extends Generator(spec) {

def toJniCall(ty: TypeRef, f: String => String): String = toJniCall(ty.resolved, f, false)
def toJniCall(m: MExpr, f: String => String, needRef: Boolean): String = m.base match {
case p: MPrimitive => f(if (needRef) "Object" else IdentStyle.camelUpper(p.jName))
case MString => "(jstring)" + f("Object")
case p: MPrimitive => "(" + f(if (needRef) "Object" else IdentStyle.camelUpper(p.jName))
case MString => "reinterpret_cast<jstring>(" + f("Object")
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Generating the open-paren and close-paren at widely-separated places in the code seems confusing, and likely to miss some cases. Why can't the close-paren be generated here so it's directly part of the cast expression?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The problem lies in JNIGenerator.scala:288 where the expression to be casted is not entirely passed to the toJniCall method. I could add a function to generate the whole expression to be casted and then send that to toJniCall. It was not a problem before with c-style cast of course.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So after looking at it again, it does not really make sense to try to do that. Line 288 generates the first line of the call: something like

auto jret = reinterpret_cast<jstring>(jniEnv->CallObjectMethod(

Then on line 294 it uses that string length to generate properly aligned method call so it means the output of toJniCall should depends on the length of its output... Hoping I am clear here ;)

case MOptional => toJniCall(m.args.head, f, true)
case MBinary => "(jbyteArray)" + f("Object")
case _ => f("Object")
case MBinary => "reinterpret_cast<jbyteArray>(" + f("Object")
case _ => "(" + f("Object")
}

def cppTypeArgs(params: Seq[TypeParam]): String =
Expand Down
2 changes: 1 addition & 1 deletion support-lib/objc/DJIMarshal+Private.h
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,7 @@ struct WString {
assert(string);
NSStringEncoding encoding = getWCharEncoding<sizeof(wchar_t)>();
NSData* data = [string dataUsingEncoding:encoding];
return std::wstring((wchar_t*)[data bytes], [data length] / sizeof (wchar_t));
return std::wstring(reinterpret_cast<const wchar_t*>([data bytes]), [data length] / sizeof (wchar_t));
}

static ObjcType fromCpp(const CppType& string) {
Expand Down
28 changes: 14 additions & 14 deletions test-suite/generated-src/jni/NativeAssortedPrimitives.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -35,20 +35,20 @@ auto NativeAssortedPrimitives::toCpp(JNIEnv* jniEnv, JniType j) -> CppType {
::djinni::JniLocalScope jscope(jniEnv, 15);
assert(j != nullptr);
const auto& data = ::djinni::JniClass<NativeAssortedPrimitives>::get();
return {::djinni::Bool::toCpp(jniEnv, jniEnv->GetBooleanField(j, data.field_mB)),
::djinni::I8::toCpp(jniEnv, jniEnv->GetByteField(j, data.field_mEight)),
::djinni::I16::toCpp(jniEnv, jniEnv->GetShortField(j, data.field_mSixteen)),
::djinni::I32::toCpp(jniEnv, jniEnv->GetIntField(j, data.field_mThirtytwo)),
::djinni::I64::toCpp(jniEnv, jniEnv->GetLongField(j, data.field_mSixtyfour)),
::djinni::F32::toCpp(jniEnv, jniEnv->GetFloatField(j, data.field_mFthirtytwo)),
::djinni::F64::toCpp(jniEnv, jniEnv->GetDoubleField(j, data.field_mFsixtyfour)),
::djinni::Optional<std::experimental::optional, ::djinni::Bool>::toCpp(jniEnv, jniEnv->GetObjectField(j, data.field_mOB)),
::djinni::Optional<std::experimental::optional, ::djinni::I8>::toCpp(jniEnv, jniEnv->GetObjectField(j, data.field_mOEight)),
::djinni::Optional<std::experimental::optional, ::djinni::I16>::toCpp(jniEnv, jniEnv->GetObjectField(j, data.field_mOSixteen)),
::djinni::Optional<std::experimental::optional, ::djinni::I32>::toCpp(jniEnv, jniEnv->GetObjectField(j, data.field_mOThirtytwo)),
::djinni::Optional<std::experimental::optional, ::djinni::I64>::toCpp(jniEnv, jniEnv->GetObjectField(j, data.field_mOSixtyfour)),
::djinni::Optional<std::experimental::optional, ::djinni::F32>::toCpp(jniEnv, jniEnv->GetObjectField(j, data.field_mOFthirtytwo)),
::djinni::Optional<std::experimental::optional, ::djinni::F64>::toCpp(jniEnv, jniEnv->GetObjectField(j, data.field_mOFsixtyfour))};
return {::djinni::Bool::toCpp(jniEnv, (jniEnv->GetBooleanField(j, data.field_mB))),
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This seems to be generating a lot of extra parens, as in this line. Can you make that conditional so they're only generated when necessary as part of generating a cast expression, not always?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Due to the problem with the closing parentheses (see my following comments), it would means that toJniCall should also return a value saying if there is a need to add the closing parentheses or not which starts to get things more complicated than they should be I think. If you have an idea on how to fix all those problems, I'll gladly give it a shot.

::djinni::I8::toCpp(jniEnv, (jniEnv->GetByteField(j, data.field_mEight))),
::djinni::I16::toCpp(jniEnv, (jniEnv->GetShortField(j, data.field_mSixteen))),
::djinni::I32::toCpp(jniEnv, (jniEnv->GetIntField(j, data.field_mThirtytwo))),
::djinni::I64::toCpp(jniEnv, (jniEnv->GetLongField(j, data.field_mSixtyfour))),
::djinni::F32::toCpp(jniEnv, (jniEnv->GetFloatField(j, data.field_mFthirtytwo))),
::djinni::F64::toCpp(jniEnv, (jniEnv->GetDoubleField(j, data.field_mFsixtyfour))),
::djinni::Optional<std::experimental::optional, ::djinni::Bool>::toCpp(jniEnv, (jniEnv->GetObjectField(j, data.field_mOB))),
::djinni::Optional<std::experimental::optional, ::djinni::I8>::toCpp(jniEnv, (jniEnv->GetObjectField(j, data.field_mOEight))),
::djinni::Optional<std::experimental::optional, ::djinni::I16>::toCpp(jniEnv, (jniEnv->GetObjectField(j, data.field_mOSixteen))),
::djinni::Optional<std::experimental::optional, ::djinni::I32>::toCpp(jniEnv, (jniEnv->GetObjectField(j, data.field_mOThirtytwo))),
::djinni::Optional<std::experimental::optional, ::djinni::I64>::toCpp(jniEnv, (jniEnv->GetObjectField(j, data.field_mOSixtyfour))),
::djinni::Optional<std::experimental::optional, ::djinni::F32>::toCpp(jniEnv, (jniEnv->GetObjectField(j, data.field_mOFthirtytwo))),
::djinni::Optional<std::experimental::optional, ::djinni::F64>::toCpp(jniEnv, (jniEnv->GetObjectField(j, data.field_mOFsixtyfour)))};
}

} // namespace djinni_generated
26 changes: 13 additions & 13 deletions test-suite/generated-src/jni/NativeClientInterface.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,47 +19,47 @@ ::testsuite::ClientReturnedRecord NativeClientInterface::JavaProxy::get_record(i
auto jniEnv = ::djinni::jniGetThreadEnv();
::djinni::JniLocalScope jscope(jniEnv, 10);
const auto& data = ::djinni::JniClass<::djinni_generated::NativeClientInterface>::get();
auto jret = jniEnv->CallObjectMethod(Handle::get().get(), data.method_getRecord,
::djinni::get(::djinni::I64::fromCpp(jniEnv, c_record_id)),
::djinni::get(::djinni::String::fromCpp(jniEnv, c_utf8string)),
::djinni::get(::djinni::Optional<std::experimental::optional, ::djinni::String>::fromCpp(jniEnv, c_misc)));
auto jret = (jniEnv->CallObjectMethod(Handle::get().get(), data.method_getRecord,
::djinni::get(::djinni::I64::fromCpp(jniEnv, c_record_id)),
::djinni::get(::djinni::String::fromCpp(jniEnv, c_utf8string)),
::djinni::get(::djinni::Optional<std::experimental::optional, ::djinni::String>::fromCpp(jniEnv, c_misc))));
::djinni::jniExceptionCheck(jniEnv);
return ::djinni_generated::NativeClientReturnedRecord::toCpp(jniEnv, jret);
}
double NativeClientInterface::JavaProxy::identifier_check(const std::vector<uint8_t> & c_data, int32_t c_r, int64_t c_jret) {
auto jniEnv = ::djinni::jniGetThreadEnv();
::djinni::JniLocalScope jscope(jniEnv, 10);
const auto& data = ::djinni::JniClass<::djinni_generated::NativeClientInterface>::get();
auto jret = jniEnv->CallDoubleMethod(Handle::get().get(), data.method_identifierCheck,
::djinni::get(::djinni::Binary::fromCpp(jniEnv, c_data)),
::djinni::get(::djinni::I32::fromCpp(jniEnv, c_r)),
::djinni::get(::djinni::I64::fromCpp(jniEnv, c_jret)));
auto jret = (jniEnv->CallDoubleMethod(Handle::get().get(), data.method_identifierCheck,
::djinni::get(::djinni::Binary::fromCpp(jniEnv, c_data)),
::djinni::get(::djinni::I32::fromCpp(jniEnv, c_r)),
::djinni::get(::djinni::I64::fromCpp(jniEnv, c_jret))));
::djinni::jniExceptionCheck(jniEnv);
return ::djinni::F64::toCpp(jniEnv, jret);
}
std::string NativeClientInterface::JavaProxy::return_str() {
auto jniEnv = ::djinni::jniGetThreadEnv();
::djinni::JniLocalScope jscope(jniEnv, 10);
const auto& data = ::djinni::JniClass<::djinni_generated::NativeClientInterface>::get();
auto jret = (jstring)jniEnv->CallObjectMethod(Handle::get().get(), data.method_returnStr);
auto jret = reinterpret_cast<jstring>(jniEnv->CallObjectMethod(Handle::get().get(), data.method_returnStr));
::djinni::jniExceptionCheck(jniEnv);
return ::djinni::String::toCpp(jniEnv, jret);
}
std::string NativeClientInterface::JavaProxy::meth_taking_interface(const std::shared_ptr<::testsuite::ClientInterface> & c_i) {
auto jniEnv = ::djinni::jniGetThreadEnv();
::djinni::JniLocalScope jscope(jniEnv, 10);
const auto& data = ::djinni::JniClass<::djinni_generated::NativeClientInterface>::get();
auto jret = (jstring)jniEnv->CallObjectMethod(Handle::get().get(), data.method_methTakingInterface,
::djinni::get(::djinni_generated::NativeClientInterface::fromCpp(jniEnv, c_i)));
auto jret = reinterpret_cast<jstring>(jniEnv->CallObjectMethod(Handle::get().get(), data.method_methTakingInterface,
::djinni::get(::djinni_generated::NativeClientInterface::fromCpp(jniEnv, c_i))));
::djinni::jniExceptionCheck(jniEnv);
return ::djinni::String::toCpp(jniEnv, jret);
}
std::string NativeClientInterface::JavaProxy::meth_taking_optional_interface(const std::shared_ptr<::testsuite::ClientInterface> & c_i) {
auto jniEnv = ::djinni::jniGetThreadEnv();
::djinni::JniLocalScope jscope(jniEnv, 10);
const auto& data = ::djinni::JniClass<::djinni_generated::NativeClientInterface>::get();
auto jret = (jstring)jniEnv->CallObjectMethod(Handle::get().get(), data.method_methTakingOptionalInterface,
::djinni::get(::djinni::Optional<std::experimental::optional, ::djinni_generated::NativeClientInterface>::fromCpp(jniEnv, c_i)));
auto jret = reinterpret_cast<jstring>(jniEnv->CallObjectMethod(Handle::get().get(), data.method_methTakingOptionalInterface,
::djinni::get(::djinni::Optional<std::experimental::optional, ::djinni_generated::NativeClientInterface>::fromCpp(jniEnv, c_i))));
::djinni::jniExceptionCheck(jniEnv);
return ::djinni::String::toCpp(jniEnv, jret);
}
Expand Down
6 changes: 3 additions & 3 deletions test-suite/generated-src/jni/NativeClientReturnedRecord.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,9 @@ auto NativeClientReturnedRecord::toCpp(JNIEnv* jniEnv, JniType j) -> CppType {
::djinni::JniLocalScope jscope(jniEnv, 4);
assert(j != nullptr);
const auto& data = ::djinni::JniClass<NativeClientReturnedRecord>::get();
return {::djinni::I64::toCpp(jniEnv, jniEnv->GetLongField(j, data.field_mRecordId)),
::djinni::String::toCpp(jniEnv, (jstring)jniEnv->GetObjectField(j, data.field_mContent)),
::djinni::Optional<std::experimental::optional, ::djinni::String>::toCpp(jniEnv, (jstring)jniEnv->GetObjectField(j, data.field_mMisc))};
return {::djinni::I64::toCpp(jniEnv, (jniEnv->GetLongField(j, data.field_mRecordId))),
::djinni::String::toCpp(jniEnv, reinterpret_cast<jstring>(jniEnv->GetObjectField(j, data.field_mContent))),
::djinni::Optional<std::experimental::optional, ::djinni::String>::toCpp(jniEnv, reinterpret_cast<jstring>(jniEnv->GetObjectField(j, data.field_mMisc)))};
}

} // namespace djinni_generated
4 changes: 2 additions & 2 deletions test-suite/generated-src/jni/NativeConstantRecord.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,8 @@ auto NativeConstantRecord::toCpp(JNIEnv* jniEnv, JniType j) -> CppType {
::djinni::JniLocalScope jscope(jniEnv, 3);
assert(j != nullptr);
const auto& data = ::djinni::JniClass<NativeConstantRecord>::get();
return {::djinni::I32::toCpp(jniEnv, jniEnv->GetIntField(j, data.field_mSomeInteger)),
::djinni::String::toCpp(jniEnv, (jstring)jniEnv->GetObjectField(j, data.field_mSomeString))};
return {::djinni::I32::toCpp(jniEnv, (jniEnv->GetIntField(j, data.field_mSomeInteger))),
::djinni::String::toCpp(jniEnv, reinterpret_cast<jstring>(jniEnv->GetObjectField(j, data.field_mSomeString)))};
}

} // namespace djinni_generated
2 changes: 1 addition & 1 deletion test-suite/generated-src/jni/NativeDateRecord.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ auto NativeDateRecord::toCpp(JNIEnv* jniEnv, JniType j) -> CppType {
::djinni::JniLocalScope jscope(jniEnv, 2);
assert(j != nullptr);
const auto& data = ::djinni::JniClass<NativeDateRecord>::get();
return {::djinni::Date::toCpp(jniEnv, jniEnv->GetObjectField(j, data.field_mCreatedAt))};
return {::djinni::Date::toCpp(jniEnv, (jniEnv->GetObjectField(j, data.field_mCreatedAt)))};
}

} // namespace djinni_generated
20 changes: 10 additions & 10 deletions test-suite/generated-src/jni/NativeEnumUsageInterface.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,44 +19,44 @@ ::testsuite::color NativeEnumUsageInterface::JavaProxy::e(::testsuite::color c_e
auto jniEnv = ::djinni::jniGetThreadEnv();
::djinni::JniLocalScope jscope(jniEnv, 10);
const auto& data = ::djinni::JniClass<::djinni_generated::NativeEnumUsageInterface>::get();
auto jret = jniEnv->CallObjectMethod(Handle::get().get(), data.method_e,
::djinni::get(::djinni_generated::NativeColor::fromCpp(jniEnv, c_e)));
auto jret = (jniEnv->CallObjectMethod(Handle::get().get(), data.method_e,
::djinni::get(::djinni_generated::NativeColor::fromCpp(jniEnv, c_e))));
::djinni::jniExceptionCheck(jniEnv);
return ::djinni_generated::NativeColor::toCpp(jniEnv, jret);
}
std::experimental::optional<::testsuite::color> NativeEnumUsageInterface::JavaProxy::o(std::experimental::optional<::testsuite::color> c_o) {
auto jniEnv = ::djinni::jniGetThreadEnv();
::djinni::JniLocalScope jscope(jniEnv, 10);
const auto& data = ::djinni::JniClass<::djinni_generated::NativeEnumUsageInterface>::get();
auto jret = jniEnv->CallObjectMethod(Handle::get().get(), data.method_o,
::djinni::get(::djinni::Optional<std::experimental::optional, ::djinni_generated::NativeColor>::fromCpp(jniEnv, c_o)));
auto jret = (jniEnv->CallObjectMethod(Handle::get().get(), data.method_o,
::djinni::get(::djinni::Optional<std::experimental::optional, ::djinni_generated::NativeColor>::fromCpp(jniEnv, c_o))));
::djinni::jniExceptionCheck(jniEnv);
return ::djinni::Optional<std::experimental::optional, ::djinni_generated::NativeColor>::toCpp(jniEnv, jret);
}
std::vector<::testsuite::color> NativeEnumUsageInterface::JavaProxy::l(const std::vector<::testsuite::color> & c_l) {
auto jniEnv = ::djinni::jniGetThreadEnv();
::djinni::JniLocalScope jscope(jniEnv, 10);
const auto& data = ::djinni::JniClass<::djinni_generated::NativeEnumUsageInterface>::get();
auto jret = jniEnv->CallObjectMethod(Handle::get().get(), data.method_l,
::djinni::get(::djinni::List<::djinni_generated::NativeColor>::fromCpp(jniEnv, c_l)));
auto jret = (jniEnv->CallObjectMethod(Handle::get().get(), data.method_l,
::djinni::get(::djinni::List<::djinni_generated::NativeColor>::fromCpp(jniEnv, c_l))));
::djinni::jniExceptionCheck(jniEnv);
return ::djinni::List<::djinni_generated::NativeColor>::toCpp(jniEnv, jret);
}
std::unordered_set<::testsuite::color> NativeEnumUsageInterface::JavaProxy::s(const std::unordered_set<::testsuite::color> & c_s) {
auto jniEnv = ::djinni::jniGetThreadEnv();
::djinni::JniLocalScope jscope(jniEnv, 10);
const auto& data = ::djinni::JniClass<::djinni_generated::NativeEnumUsageInterface>::get();
auto jret = jniEnv->CallObjectMethod(Handle::get().get(), data.method_s,
::djinni::get(::djinni::Set<::djinni_generated::NativeColor>::fromCpp(jniEnv, c_s)));
auto jret = (jniEnv->CallObjectMethod(Handle::get().get(), data.method_s,
::djinni::get(::djinni::Set<::djinni_generated::NativeColor>::fromCpp(jniEnv, c_s))));
::djinni::jniExceptionCheck(jniEnv);
return ::djinni::Set<::djinni_generated::NativeColor>::toCpp(jniEnv, jret);
}
std::unordered_map<::testsuite::color, ::testsuite::color> NativeEnumUsageInterface::JavaProxy::m(const std::unordered_map<::testsuite::color, ::testsuite::color> & c_m) {
auto jniEnv = ::djinni::jniGetThreadEnv();
::djinni::JniLocalScope jscope(jniEnv, 10);
const auto& data = ::djinni::JniClass<::djinni_generated::NativeEnumUsageInterface>::get();
auto jret = jniEnv->CallObjectMethod(Handle::get().get(), data.method_m,
::djinni::get(::djinni::Map<::djinni_generated::NativeColor, ::djinni_generated::NativeColor>::fromCpp(jniEnv, c_m)));
auto jret = (jniEnv->CallObjectMethod(Handle::get().get(), data.method_m,
::djinni::get(::djinni::Map<::djinni_generated::NativeColor, ::djinni_generated::NativeColor>::fromCpp(jniEnv, c_m))));
::djinni::jniExceptionCheck(jniEnv);
return ::djinni::Map<::djinni_generated::NativeColor, ::djinni_generated::NativeColor>::toCpp(jniEnv, jret);
}
Expand Down
10 changes: 5 additions & 5 deletions test-suite/generated-src/jni/NativeEnumUsageRecord.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,11 +27,11 @@ auto NativeEnumUsageRecord::toCpp(JNIEnv* jniEnv, JniType j) -> CppType {
::djinni::JniLocalScope jscope(jniEnv, 6);
assert(j != nullptr);
const auto& data = ::djinni::JniClass<NativeEnumUsageRecord>::get();
return {::djinni_generated::NativeColor::toCpp(jniEnv, jniEnv->GetObjectField(j, data.field_mE)),
::djinni::Optional<std::experimental::optional, ::djinni_generated::NativeColor>::toCpp(jniEnv, jniEnv->GetObjectField(j, data.field_mO)),
::djinni::List<::djinni_generated::NativeColor>::toCpp(jniEnv, jniEnv->GetObjectField(j, data.field_mL)),
::djinni::Set<::djinni_generated::NativeColor>::toCpp(jniEnv, jniEnv->GetObjectField(j, data.field_mS)),
::djinni::Map<::djinni_generated::NativeColor, ::djinni_generated::NativeColor>::toCpp(jniEnv, jniEnv->GetObjectField(j, data.field_mM))};
return {::djinni_generated::NativeColor::toCpp(jniEnv, (jniEnv->GetObjectField(j, data.field_mE))),
::djinni::Optional<std::experimental::optional, ::djinni_generated::NativeColor>::toCpp(jniEnv, (jniEnv->GetObjectField(j, data.field_mO))),
::djinni::List<::djinni_generated::NativeColor>::toCpp(jniEnv, (jniEnv->GetObjectField(j, data.field_mL))),
::djinni::Set<::djinni_generated::NativeColor>::toCpp(jniEnv, (jniEnv->GetObjectField(j, data.field_mS))),
::djinni::Map<::djinni_generated::NativeColor, ::djinni_generated::NativeColor>::toCpp(jniEnv, (jniEnv->GetObjectField(j, data.field_mM)))};
}

} // namespace djinni_generated
2 changes: 1 addition & 1 deletion test-suite/generated-src/jni/NativeExtendedRecord.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ auto NativeExtendedRecord::toCpp(JNIEnv* jniEnv, JniType j) -> CppType {
::djinni::JniLocalScope jscope(jniEnv, 2);
assert(j != nullptr);
const auto& data = ::djinni::JniClass<NativeExtendedRecord>::get();
return {::djinni::Bool::toCpp(jniEnv, jniEnv->GetBooleanField(j, data.field_mFoo))};
return {::djinni::Bool::toCpp(jniEnv, (jniEnv->GetBooleanField(j, data.field_mFoo)))};
}

} // namespace djinni_generated
4 changes: 2 additions & 2 deletions test-suite/generated-src/jni/NativeExternInterface2.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@ ::ExternRecordWithDerivings NativeExternInterface2::JavaProxy::foo(const std::sh
auto jniEnv = ::djinni::jniGetThreadEnv();
::djinni::JniLocalScope jscope(jniEnv, 10);
const auto& data = ::djinni::JniClass<::djinni_generated::NativeExternInterface2>::get();
auto jret = jniEnv->CallObjectMethod(Handle::get().get(), data.method_foo,
::djinni::get(::djinni_generated::NativeTestHelpers::fromCpp(jniEnv, c_i)));
auto jret = (jniEnv->CallObjectMethod(Handle::get().get(), data.method_foo,
::djinni::get(::djinni_generated::NativeTestHelpers::fromCpp(jniEnv, c_i))));
::djinni::jniExceptionCheck(jniEnv);
return ::djinni_generated::NativeExternRecordWithDerivings::toCpp(jniEnv, jret);
}
Expand Down
Loading