Throw correct exception in HAL_getJoystickAxes/POVs JNI (#1336)

Was incorrectly not returning immediately after throwing the exception.

Also add more detail to exception.
This commit is contained in:
Thad House
2018-09-24 22:17:17 -07:00
committed by Peter Johnson
parent 15c5a820bf
commit 32ec07ee01
3 changed files with 20 additions and 6 deletions

View File

@@ -176,8 +176,14 @@ Java_edu_wpi_first_hal_HAL_getJoystickAxes
jsize javaSize = env->GetArrayLength(axesArray);
if (axes.count > javaSize) {
ThrowIllegalArgumentException(
env, "Native array size larger then passed in java array size");
wpi::SmallString<128> errStr;
wpi::raw_svector_ostream oss{errStr};
oss << "Native array size larger then passed in java array size "
<< "Native Size: " << static_cast<int>(axes.count)
<< " Java Size: " << static_cast<int>(javaSize);
ThrowIllegalArgumentException(env, errStr.str());
return 0;
}
env->SetFloatArrayRegion(axesArray, 0, axes.count, axes.axes);
@@ -200,8 +206,14 @@ Java_edu_wpi_first_hal_HAL_getJoystickPOVs
jsize javaSize = env->GetArrayLength(povsArray);
if (povs.count > javaSize) {
ThrowIllegalArgumentException(
env, "Native array size larger then passed in java array size");
wpi::SmallString<128> errStr;
wpi::raw_svector_ostream oss{errStr};
oss << "Native array size larger then passed in java array size "
<< "Native Size: " << static_cast<int>(povs.count)
<< " Java Size: " << static_cast<int>(javaSize);
ThrowIllegalArgumentException(env, errStr.str());
return 0;
}
env->SetShortArrayRegion(povsArray, 0, povs.count, povs.povs);

View File

@@ -206,7 +206,7 @@ void ReportCANError(JNIEnv* env, int32_t status, int message_id) {
}
}
void ThrowIllegalArgumentException(JNIEnv* env, const char* msg) {
void ThrowIllegalArgumentException(JNIEnv* env, wpi::StringRef msg) {
illegalArgExCls.Throw(env, msg);
}

View File

@@ -11,6 +11,8 @@
#include <jni.h>
#include <stdint.h>
#include <wpi/StringRef.h>
struct HAL_MatchInfo;
namespace frc {
@@ -43,7 +45,7 @@ inline bool CheckCANStatus(JNIEnv* env, int32_t status, int32_t message_id) {
return status == 0;
}
void ThrowIllegalArgumentException(JNIEnv* env, const char* msg);
void ThrowIllegalArgumentException(JNIEnv* env, wpi::StringRef msg);
void ThrowBoundaryException(JNIEnv* env, double value, double lower,
double upper);