You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by hw...@apache.org on 2010/08/31 18:12:52 UTC
svn commit: r991229 - in
/subversion/trunk/subversion/bindings/javahl/native: CommitMessage.cpp
CreateJ.cpp CreateJ.h
Author: hwright
Date: Tue Aug 31 16:12:52 2010
New Revision: 991229
URL: http://svn.apache.org/viewvc?rev=991229&view=rev
Log:
JavaHL: Move more "create a Java object" code to the CreateJ class.
* subversion/bindings/javahl/native/CreateJ.cpp
(CommitItem): New.
* subversion/bindings/javahl/native/CommitMessage.cpp
(getCommitMessage): Remove the code to create Java commit items, and call the
CreateJ function instead.
* subversion/bindings/javahl/native/CreateJ.h
(CommitItem): New.
Modified:
subversion/trunk/subversion/bindings/javahl/native/CommitMessage.cpp
subversion/trunk/subversion/bindings/javahl/native/CreateJ.cpp
subversion/trunk/subversion/bindings/javahl/native/CreateJ.h
Modified: subversion/trunk/subversion/bindings/javahl/native/CommitMessage.cpp
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/CommitMessage.cpp?rev=991229&r1=991228&r2=991229&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/CommitMessage.cpp (original)
+++ subversion/trunk/subversion/bindings/javahl/native/CommitMessage.cpp Tue Aug 31 16:12:52 2010
@@ -30,7 +30,6 @@
#include "JNIUtil.h"
#include <apr_tables.h>
#include "svn_client.h"
-#include "../include/org_apache_subversion_javahl_CommitItemStateFlags.h"
CommitMessage::CommitMessage(jobject jcommitMessage)
{
@@ -91,26 +90,10 @@ CommitMessage::getCommitMessage(const ap
{
JNIEnv *env = JNIUtil::getEnv();
// create an Java array for the commit items
- jclass clazz = env->FindClass(JAVA_PACKAGE"/CommitItem");
- if (JNIUtil::isExceptionThrown())
- return NULL;
// Java method ids will not change during the time this library is
// loaded, so they can be cached.
- // Get the method id for the CommitItem constructor.
- static jmethodID midConstructor = 0;
- if (midConstructor == 0)
- {
- midConstructor = env->GetMethodID(clazz, "<init>",
- "(Ljava/lang/String;"
- "L"JAVA_PACKAGE"/NodeKind;"
- "ILjava/lang/String;"
- "Ljava/lang/String;J)V");
- if (JNIUtil::isExceptionThrown())
- return NULL;
- }
-
// get the method if for the CommitMessage callback method
static jmethodID midCallback = 0;
if (midCallback == 0)
@@ -134,59 +117,12 @@ CommitMessage::getCommitMessage(const ap
svn_client_commit_item3_t *item =
APR_ARRAY_IDX(commit_items, i, svn_client_commit_item3_t *);
- // convert the commit item members to the match Java members
- jstring jpath = JNIUtil::makeJString(item->path);
-
- jobject jnodeKind = EnumMapper::mapNodeKind(item->kind);
- if (JNIUtil::isJavaExceptionThrown())
- return NULL;
-
- jint jstateFlags = 0;
- if (item->state_flags & SVN_CLIENT_COMMIT_ITEM_ADD)
- jstateFlags |=
- org_apache_subversion_javahl_CommitItemStateFlags_Add;
- if (item->state_flags & SVN_CLIENT_COMMIT_ITEM_DELETE)
- jstateFlags |=
- org_apache_subversion_javahl_CommitItemStateFlags_Delete;
- if (item->state_flags & SVN_CLIENT_COMMIT_ITEM_TEXT_MODS)
- jstateFlags |=
- org_apache_subversion_javahl_CommitItemStateFlags_TextMods;
- if (item->state_flags & SVN_CLIENT_COMMIT_ITEM_PROP_MODS)
- jstateFlags |=
- org_apache_subversion_javahl_CommitItemStateFlags_PropMods;
- if (item->state_flags & SVN_CLIENT_COMMIT_ITEM_IS_COPY)
- jstateFlags |=
- org_apache_subversion_javahl_CommitItemStateFlags_IsCopy;
-
- jstring jurl = JNIUtil::makeJString(item->url);
- if (JNIUtil::isJavaExceptionThrown())
- return NULL;
-
- jstring jcopyUrl = JNIUtil::makeJString(item->copyfrom_url);
- if (JNIUtil::isJavaExceptionThrown())
- return NULL;
-
- jlong jcopyRevision = item->revision;
-
- // create the Java object
- jobject jitem = env->NewObject(clazz, midConstructor, jpath,
- jnodeKind, jstateFlags, jurl,
- jcopyUrl, jcopyRevision);
- if (JNIUtil::isJavaExceptionThrown())
- return NULL;
-
- // release the tempory Java objects
- env->DeleteLocalRef(jpath);
- env->DeleteLocalRef(jnodeKind);
- env->DeleteLocalRef(jurl);
- env->DeleteLocalRef(jcopyUrl);
+ jobject jitem = CreateJ::CommitItem(item);
// store the Java object into the array
jitems.push_back(jitem);
}
- env->DeleteLocalRef(clazz);
-
// call the Java callback method
jstring jmessage = (jstring)env->CallObjectMethod(m_jcommitMessage,
midCallback,
Modified: subversion/trunk/subversion/bindings/javahl/native/CreateJ.cpp
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/CreateJ.cpp?rev=991229&r1=991228&r2=991229&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/CreateJ.cpp (original)
+++ subversion/trunk/subversion/bindings/javahl/native/CreateJ.cpp Tue Aug 31 16:12:52 2010
@@ -32,6 +32,7 @@
#include "RevisionRange.h"
#include "CreateJ.h"
#include "../include/org_apache_subversion_javahl_Revision.h"
+#include "../include/org_apache_subversion_javahl_CommitItemStateFlags.h"
#include "svn_path.h"
#include "private/svn_wc_private.h"
@@ -850,6 +851,76 @@ CreateJ::ReposNotifyInformation(const sv
}
jobject
+CreateJ::CommitItem(svn_client_commit_item3_t *item)
+{
+ JNIEnv *env = JNIUtil::getEnv();
+
+ // Create a local frame for our references
+ env->PushLocalFrame(LOCAL_FRAME_SIZE);
+ if (JNIUtil::isJavaExceptionThrown())
+ return NULL;
+
+ jclass clazz = env->FindClass(JAVA_PACKAGE"/CommitItem");
+ if (JNIUtil::isExceptionThrown())
+ POP_AND_RETURN_NULL;
+
+ // Get the method id for the CommitItem constructor.
+ static jmethodID midConstructor = 0;
+ if (midConstructor == 0)
+ {
+ midConstructor = env->GetMethodID(clazz, "<init>",
+ "(Ljava/lang/String;"
+ "L"JAVA_PACKAGE"/NodeKind;"
+ "ILjava/lang/String;"
+ "Ljava/lang/String;J)V");
+ if (JNIUtil::isExceptionThrown())
+ POP_AND_RETURN_NULL;
+ }
+
+ jstring jpath = JNIUtil::makeJString(item->path);
+
+ jobject jnodeKind = EnumMapper::mapNodeKind(item->kind);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+
+ jint jstateFlags = 0;
+ if (item->state_flags & SVN_CLIENT_COMMIT_ITEM_ADD)
+ jstateFlags |=
+ org_apache_subversion_javahl_CommitItemStateFlags_Add;
+ if (item->state_flags & SVN_CLIENT_COMMIT_ITEM_DELETE)
+ jstateFlags |=
+ org_apache_subversion_javahl_CommitItemStateFlags_Delete;
+ if (item->state_flags & SVN_CLIENT_COMMIT_ITEM_TEXT_MODS)
+ jstateFlags |=
+ org_apache_subversion_javahl_CommitItemStateFlags_TextMods;
+ if (item->state_flags & SVN_CLIENT_COMMIT_ITEM_PROP_MODS)
+ jstateFlags |=
+ org_apache_subversion_javahl_CommitItemStateFlags_PropMods;
+ if (item->state_flags & SVN_CLIENT_COMMIT_ITEM_IS_COPY)
+ jstateFlags |=
+ org_apache_subversion_javahl_CommitItemStateFlags_IsCopy;
+
+ jstring jurl = JNIUtil::makeJString(item->url);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+
+ jstring jcopyUrl = JNIUtil::makeJString(item->copyfrom_url);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+
+ jlong jcopyRevision = item->revision;
+
+ // create the Java object
+ jobject jitem = env->NewObject(clazz, midConstructor, jpath,
+ jnodeKind, jstateFlags, jurl,
+ jcopyUrl, jcopyRevision);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NULL;
+
+ return env->PopLocalFrame(jitem);
+}
+
+jobject
CreateJ::CommitInfo(const svn_commit_info_t *commit_info)
{
JNIEnv *env = JNIUtil::getEnv();
Modified: subversion/trunk/subversion/bindings/javahl/native/CreateJ.h
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/CreateJ.h?rev=991229&r1=991228&r2=991229&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/CreateJ.h (original)
+++ subversion/trunk/subversion/bindings/javahl/native/CreateJ.h Tue Aug 31 16:12:52 2010
@@ -65,6 +65,9 @@ class CreateJ
ReposNotifyInformation(const svn_repos_notify_t *notify, apr_pool_t *pool);
static jobject
+ CommitItem(svn_client_commit_item3_t *item);
+
+ static jobject
CommitInfo(const svn_commit_info_t *info);
static jobject