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/03/09 20:04:08 UTC
svn commit: r921058 - in /subversion/trunk/subversion/bindings/javahl:
native/StringArray.cpp native/StringArray.h
native/org_apache_subversion_javahl_SVNClient.cpp
src/org/apache/subversion/javahl/SVNClient.java
Author: hwright
Date: Tue Mar 9 19:04:08 2010
New Revision: 921058
URL: http://svn.apache.org/viewvc?rev=921058&view=rev
Log:
JavaHL: Convert String collections to native string vectors in the JNI
code, eliminating the need to do so in the SVNClient Java class.
[ in subversion/bindings/javahl/ ]
* native/StringArray.h,
native/StringArray.cpp
(StringArray): New constructor which takes a collection of strings.
(~StringArray): Properly destroy the referenced collection.
* native/org_apache_subversion_javahl_SVNClient.cpp
(Java_org_apache_subversion_javahl_SVNClient_getChangelists):
Update function parameter list.
* src/org/apache/subversion/javahl/SVNClient.java
(getChangelists): Remove wrapper around the native method, since the native
version can now handle String collections.
Modified:
subversion/trunk/subversion/bindings/javahl/native/StringArray.cpp
subversion/trunk/subversion/bindings/javahl/native/StringArray.h
subversion/trunk/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNClient.cpp
subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNClient.java
Modified: subversion/trunk/subversion/bindings/javahl/native/StringArray.cpp
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/StringArray.cpp?rev=921058&r1=921057&r2=921058&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/StringArray.cpp (original)
+++ subversion/trunk/subversion/bindings/javahl/native/StringArray.cpp Tue Mar 9 19:04:08 2010
@@ -36,6 +36,8 @@ StringArray::~StringArray()
{
if (m_stringArray != NULL)
JNIUtil::getEnv()->DeleteLocalRef(m_stringArray);
+ if (m_stringCollection != NULL)
+ JNIUtil::getEnv()->DeleteLocalRef(m_stringCollection);
}
const apr_array_header_t *StringArray::array(const SVN::Pool &pool)
@@ -57,6 +59,7 @@ const apr_array_header_t *StringArray::a
StringArray::StringArray(jobjectArray jstrings)
{
m_stringArray = jstrings;
+ m_stringCollection = NULL;
if (jstrings != NULL)
{
@@ -79,3 +82,53 @@ StringArray::StringArray(jobjectArray js
}
}
}
+
+StringArray::StringArray(jobject jstringCollection)
+{
+ m_stringArray = NULL;
+ m_stringCollection = jstringCollection;
+
+ if (jstringCollection != NULL)
+ {
+ JNIEnv *env = JNIUtil::getEnv();
+
+ jclass clazz = env->FindClass("java/util/Collection");
+
+ static jmethodID mid_toArray = 0;
+ if (mid_toArray == 0)
+ {
+ mid_toArray = env->GetMethodID(clazz, "toArray",
+ "()[Ljava/lang/Object;");
+ if (JNIUtil::isExceptionThrown())
+ return;
+ }
+
+ jobjectArray jstrings = (jobjectArray) env->CallObjectMethod(
+ jstringCollection, mid_toArray);
+
+ jint arraySize = env->GetArrayLength(jstrings);
+ if (JNIUtil::isExceptionThrown())
+ return;
+
+ for (int i = 0; i < arraySize; ++i)
+ {
+ jobject jstr = env->GetObjectArrayElement(jstrings, i);
+ if (JNIUtil::isExceptionThrown())
+ return;
+
+ JNIStringHolder str((jstring)jstr);
+ if (JNIUtil::isExceptionThrown())
+ return;
+
+ m_strings.push_back(std::string((const char *)str));
+ }
+
+ JNIUtil::getEnv()->DeleteLocalRef(clazz);
+ if (JNIUtil::isExceptionThrown())
+ return;
+
+ JNIUtil::getEnv()->DeleteLocalRef(jstrings);
+ if (JNIUtil::isExceptionThrown())
+ return;
+ }
+}
Modified: subversion/trunk/subversion/bindings/javahl/native/StringArray.h
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/StringArray.h?rev=921058&r1=921057&r2=921058&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/StringArray.h (original)
+++ subversion/trunk/subversion/bindings/javahl/native/StringArray.h Tue Mar 9 19:04:08 2010
@@ -43,8 +43,10 @@ class StringArray
private:
std::vector<std::string> m_strings;
jobjectArray m_stringArray;
+ jobject m_stringCollection;
public:
StringArray(jobjectArray jstrings);
+ StringArray(jobject jstringCollection);
~StringArray();
const apr_array_header_t *array(const SVN::Pool &pool);
};
Modified: subversion/trunk/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNClient.cpp
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNClient.cpp?rev=921058&r1=921057&r2=921058&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNClient.cpp (original)
+++ subversion/trunk/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNClient.cpp Tue Mar 9 19:04:08 2010
@@ -1712,7 +1712,7 @@ Java_org_apache_subversion_javahl_SVNCli
JNIEXPORT void JNICALL
Java_org_apache_subversion_javahl_SVNClient_getChangelists
-(JNIEnv *env, jobject jthis, jstring jroot_path, jobjectArray jchangelists,
+(JNIEnv *env, jobject jthis, jstring jroot_path, jobject jchangelists,
jint jdepth, jobject jchangelistCallback)
{
JNIEntry(SVNClient, getChangelist);
Modified: subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNClient.java
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNClient.java?rev=921058&r1=921057&r2=921058&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNClient.java (original)
+++ subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNClient.java Tue Mar 9 19:04:08 2010
@@ -776,18 +776,9 @@ public class SVNClient implements ISVNCl
/**
* @since 1.5
*/
- public void getChangelists(String rootPath, Collection<String> changelists,
- int depth, ChangelistCallback callback)
- throws ClientException
- {
- this.getChangelists(rootPath,
- changelists == null ? null :
- changelists.toArray(new String[changelists.size()]),
- depth, callback);
- }
-
- private native void getChangelists(String rootPath, String[] changelists,
- int depth, ChangelistCallback callback)
+ public native void getChangelists(String rootPath,
+ Collection<String> changelists,
+ int depth, ChangelistCallback callback)
throws ClientException;
/**