Alien-SVN
view release on metacpan or search on metacpan
src/subversion/subversion/bindings/javahl/native/DiffSummaryReceiver.cpp view on Meta::CPAN
// Create a local frame for our references
env->PushLocalFrame(LOCAL_FRAME_SIZE);
if (JNIUtil::isJavaExceptionThrown())
return SVN_NO_ERROR;
// As Java method IDs will not change during the time this library
// is loaded, they can be cached.
static jmethodID callback = 0;
jclass clazz;
if (callback == 0)
{
// Initialize the method ID.
clazz = env->FindClass(JAVA_PACKAGE "/callback/DiffSummaryCallback");
if (JNIUtil::isJavaExceptionThrown())
POP_AND_RETURN(SVN_NO_ERROR);
callback = env->GetMethodID(clazz, "onSummary",
"(L"JAVA_PACKAGE"/DiffSummary;)V");
if (JNIUtil::isJavaExceptionThrown() || callback == 0)
POP_AND_RETURN(SVN_NO_ERROR);
}
// Do some prep work for tranforming the DIFF parameter into a
// Java equivalent.
static jmethodID ctor = 0;
clazz = env->FindClass(JAVA_PACKAGE "/DiffSummary");
if (JNIUtil::isJavaExceptionThrown())
POP_AND_RETURN(SVN_NO_ERROR);
if (ctor == 0)
{
ctor = env->GetMethodID(clazz, "<init>",
"(Ljava/lang/String;"
"L"JAVA_PACKAGE"/DiffSummary$DiffKind;Z"
"L"JAVA_PACKAGE"/types/NodeKind;)V");
if (JNIUtil::isJavaExceptionThrown() || ctor == 0)
POP_AND_RETURN(SVN_NO_ERROR);
}
// Convert the arguments into their Java equivalent,
jstring jPath = JNIUtil::makeJString(diff->path);
if (JNIUtil::isJavaExceptionThrown())
POP_AND_RETURN(SVN_NO_ERROR);
jobject jNodeKind = EnumMapper::mapNodeKind(diff->node_kind);
if (JNIUtil::isJavaExceptionThrown())
POP_AND_RETURN(SVN_NO_ERROR);
jobject jSummarizeKind = EnumMapper::mapSummarizeKind(diff->summarize_kind);
if (JNIUtil::isJavaExceptionThrown())
POP_AND_RETURN(SVN_NO_ERROR);
// Actually tranform the DIFF parameter into a Java equivalent.
jobject jDiffSummary = env->NewObject(clazz, ctor, jPath, jSummarizeKind,
(jboolean) diff->prop_changed,
jNodeKind);
if (JNIUtil::isJavaExceptionThrown() || jDiffSummary == NULL)
POP_AND_RETURN(SVN_NO_ERROR);
// Invoke the Java DiffSummaryReceiver callback.
env->CallVoidMethod(m_receiver, callback, jDiffSummary);
// We return whether an exception was thrown or not.
env->PopLocalFrame(NULL);
return SVN_NO_ERROR;
}
( run in 0.537 second using v1.01-cache-2.11-cpan-3d66aa2751a )