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