You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by br...@apache.org on 2013/11/25 11:25:06 UTC
svn commit: r1545212 [1/2] - in
/subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl: ./
native/ native/jniwrapper/ src/org/apache/subversion/javahl/
src/org/apache/subversion/javahl/types/ tests/org/apache/subversion/javahl/
tests/org...
Author: brane
Date: Mon Nov 25 10:25:05 2013
New Revision: 1545212
URL: http://svn.apache.org/r1545212
Log:
On the javahl-1.8-extensions branch: Sync JavaHL with trunk to r1545207.
Modified:
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/ (props changed)
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/CommitEditor.cpp
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/ExternalItem.cpp
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/ExternalItem.hpp
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/JNIUtil.cpp
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/jniwrapper/jni_base.cpp
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/jniwrapper/jni_channel.cpp
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/jniwrapper/jni_channel.hpp
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/jniwrapper/jni_class_cache.cpp
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/jniwrapper/jni_io_stream.cpp
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/jniwrapper/jni_io_stream.hpp
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/jniwrapper/jni_list.cpp
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/jniwrapper/jni_list.hpp
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/jniwrapper/jni_object.hpp
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/jniwrapper/jni_string_map.cpp
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/jniwrapper/jni_string_map.hpp
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/org_apache_subversion_javahl_util_SubstLib.cpp
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/ClientException.java
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/ClientNotifyInformation.java
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/CommitInfo.java
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/CommitItem.java
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/DiffSummary.java
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNClient.java
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNConfig.java
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNEditor.java
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNRemote.java
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/JNIError.java
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/NativeException.java
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/ProgressEvent.java
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/ReposNotifyInformation.java
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNClient.java
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNUtil.java
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/ChangePath.java
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/Checksum.java
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/CopySource.java
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/DirEntry.java
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/ExternalItem.java
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/Info.java
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/Lock.java
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/Mergeinfo.java
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/Revision.java
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/RevisionRange.java
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/Status.java
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNRemoteTests.java
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNTests.java
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/tests/org/apache/subversion/javahl/UtilTests.java
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/tests/org/apache/subversion/javahl/WC.java
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/tests/org/tigris/subversion/javahl/BasicTests.java
Propchange: subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/
------------------------------------------------------------------------------
Merged /subversion/trunk/subversion/bindings/javahl:r1544139-1545207
Modified: subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/CommitEditor.cpp
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/CommitEditor.cpp?rev=1545212&r1=1545211&r2=1545212&view=diff
==============================================================================
--- subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/CommitEditor.cpp (original)
+++ subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/CommitEditor.cpp Mon Nov 25 10:25:05 2013
@@ -488,7 +488,8 @@ CommitEditor::provide_props_cb(apr_hash_
// FIXME: Getting properties from the youngest revision is in fact
// not such a bright idea, as the path may have been moved or
- // deleted in the path.
+ // deleted in the repository. On the other hand, if that happens,
+ // the commit would fail due to a conflict anyway.
if (kind == svn_node_file)
return svn_ra_get_file(editor->m_callback_session,
repos_relpath, SVN_INVALID_REVNUM,
Modified: subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/ExternalItem.cpp
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/ExternalItem.cpp?rev=1545212&r1=1545211&r2=1545212&view=diff
==============================================================================
--- subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/ExternalItem.cpp (original)
+++ subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/ExternalItem.cpp Mon Nov 25 10:25:05 2013
@@ -31,39 +31,53 @@ namespace JavaHL {
const char* const ExternalItem::m_class_name =
JAVA_PACKAGE"/types/ExternalItem";
+::Java::MethodID ExternalItem::m_mid_ctor;
+::Java::FieldID ExternalItem::m_fid_target_dir;
+::Java::FieldID ExternalItem::m_fid_url;
+::Java::FieldID ExternalItem::m_fid_revision;
+::Java::FieldID ExternalItem::m_fid_peg_revision;
+
+void ExternalItem::static_init(::Java::Env env)
+{
+ const jclass cls = ::Java::ClassCache::get_external_item();
+ m_mid_ctor =
+ env.GetMethodID(cls, "<init>",
+ "(ZLjava/lang/String;Ljava/lang/String;"
+ "L"JAVA_PACKAGE"/types/Revision;"
+ "L"JAVA_PACKAGE"/types/Revision;)V");
+ m_fid_target_dir = env.GetFieldID(cls, "targetDir", "Ljava/lang/String;");
+ m_fid_url = env.GetFieldID(cls, "url", "Ljava/lang/String;");
+ m_fid_revision = env.GetFieldID(cls, "revision",
+ "L"JAVA_PACKAGE"/types/Revision;");
+ m_fid_peg_revision = env.GetFieldID(cls, "pegRevision",
+ "L"JAVA_PACKAGE"/types/Revision;");
+}
+
namespace {
-jstring get_string_field(::Java::Env env, jclass cls, jobject jthis,
- const char* field_name)
+inline jstring
+get_string_field(::Java::Env env, jobject jthis,
+ const ::Java::FieldID& fid)
{
- return jstring(
- env.GetObjectField(
- jthis, env.GetFieldID(cls, field_name, "Ljava/lang/String;")));
+ return jstring(env.GetObjectField(jthis, fid));
}
-svn_opt_revision_t get_revision_field(::Java::Env env,
- jclass cls, jobject jthis,
- const char* field_name)
+inline svn_opt_revision_t
+get_revision_field(::Java::Env env, jobject jthis,
+ const ::Java::FieldID& fid)
{
- const jobject rev = env.GetObjectField(
- jthis, env.GetFieldID(cls, field_name,
- "L"JAVA_PACKAGE"/types/Revision;"));
+ const jobject rev = env.GetObjectField(jthis, fid);
return *Revision(rev).revision();
}
-jobject make_external_item(::Java::Env env,
- const char* class_name,
- const char* target_dir,
- const char* url,
- const svn_opt_revision_t* revision,
- const svn_opt_revision_t* peg_revision)
+inline jobject
+make_external_item(::Java::Env env, const ::Java::MethodID& mid_ctor,
+ const char* target_dir,
+ const char* url,
+ const svn_opt_revision_t* revision,
+ const svn_opt_revision_t* peg_revision)
{
- const jclass cls = env.FindClass(class_name);
- const jmethodID mid_ctor =
- env.GetMethodID(cls, "<init>",
- "(ZLjava/lang/String;Ljava/lang/String;"
- "L"JAVA_PACKAGE"/types/Revision;"
- "L"JAVA_PACKAGE"/types/Revision;)V");
- return env.NewObject(cls, mid_ctor, JNI_FALSE,
+ return env.NewObject(::Java::ClassCache::get_external_item(), mid_ctor,
+ JNI_FALSE,
env.NewStringUTF(target_dir),
env.NewStringUTF(url),
Revision::makeJRevision(*revision),
@@ -72,11 +86,11 @@ jobject make_external_item(::Java::Env e
} // anonymous namespace
ExternalItem::ExternalItem(::Java::Env env, jobject jthis)
- : Object(env, m_class_name, jthis),
- m_target_dir(env, get_string_field(env, m_class, jthis, "targetDir")),
- m_url(env, get_string_field(env, m_class, jthis, "url")),
- m_revision(get_revision_field(env, m_class, jthis, "revision")),
- m_peg_revision(get_revision_field(env, m_class, jthis, "pegRevision"))
+ : Object(env, ::Java::ClassCache::get_external_item(), jthis),
+ m_target_dir(env, get_string_field(env, jthis, m_fid_target_dir)),
+ m_url(env, get_string_field(env, jthis, m_fid_url)),
+ m_revision(get_revision_field(env, jthis, m_fid_revision)),
+ m_peg_revision(get_revision_field(env, jthis, m_fid_peg_revision))
{}
ExternalItem::ExternalItem(::Java::Env env,
@@ -84,8 +98,8 @@ ExternalItem::ExternalItem(::Java::Env e
const char* url,
const svn_opt_revision_t* revision,
const svn_opt_revision_t* peg_revision)
- : Object(env, m_class_name,
- make_external_item(env, m_class_name, target_dir, url,
+ : Object(env, ::Java::ClassCache::get_external_item(),
+ make_external_item(env, m_mid_ctor, target_dir, url,
revision, peg_revision)),
m_target_dir(env, target_dir),
m_url(env, url),
Modified: subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/ExternalItem.hpp
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/ExternalItem.hpp?rev=1545212&r1=1545211&r2=1545212&view=diff
==============================================================================
--- subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/ExternalItem.hpp (original)
+++ subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/ExternalItem.hpp Mon Nov 25 10:25:05 2013
@@ -100,7 +100,14 @@ public:
svn_wc_external_item2_t* get_external_item(SVN::Pool& pool) const;
private:
+ friend class ::Java::ClassCache;
static const char* const m_class_name;
+ static void static_init(::Java::Env env);
+ static ::Java::MethodID m_mid_ctor;
+ static ::Java::FieldID m_fid_target_dir;
+ static ::Java::FieldID m_fid_url;
+ static ::Java::FieldID m_fid_revision;
+ static ::Java::FieldID m_fid_peg_revision;
::Java::String m_target_dir;
::Java::String m_url;
Modified: subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/JNIUtil.cpp
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/JNIUtil.cpp?rev=1545212&r1=1545211&r2=1545212&view=diff
==============================================================================
--- subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/JNIUtil.cpp (original)
+++ subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/JNIUtil.cpp Mon Nov 25 10:25:05 2013
@@ -225,24 +225,6 @@ bool JNIUtil::JNIGlobalInit(JNIEnv *env)
g_initEnv = env;
svn_error_t *err;
- apr_status_t status;
-
-
- /* Initialize the APR subsystem, and register an atexit() function
- * to Uninitialize that subsystem at program exit. */
- status = apr_initialize();
- if (status)
- {
- if (stderr)
- {
- char buf[1024];
- apr_strerror(status, buf, sizeof(buf) - 1);
- fprintf(stderr,
- "%s: error: cannot initialize APR: %s\n",
- "svnjavahl", buf);
- }
- return FALSE;
- }
/* This has to happen before any pools are created. */
if ((err = svn_dso_initialize2()))
@@ -254,16 +236,8 @@ bool JNIUtil::JNIGlobalInit(JNIEnv *env)
return FALSE;
}
- if (0 > atexit(apr_terminate))
- {
- if (stderr)
- fprintf(stderr,
- "%s: error: atexit registration failed\n",
- "svnjavahl");
- return FALSE;
- }
-
- /* Create our top-level pool. */
+ /* Create our top-level pool.
+ N.B.: APR was initialized by JNI_OnLoad. */
g_pool = svn_pool_create(NULL);
apr_allocator_t* allocator = apr_pool_allocator_get(g_pool);
Modified: subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/jniwrapper/jni_base.cpp
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/jniwrapper/jni_base.cpp?rev=1545212&r1=1545211&r2=1545212&view=diff
==============================================================================
--- subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/jniwrapper/jni_base.cpp (original)
+++ subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/jniwrapper/jni_base.cpp Mon Nov 25 10:25:05 2013
@@ -21,6 +21,9 @@
* @endcopyright
*/
+#include <cstring>
+#include <apr.h>
+
#include "jni_env.hpp"
#include "jni_globalref.hpp"
#include "jni_exception.hpp"
@@ -42,7 +45,19 @@ JNIEXPORT jint JNICALL
JNI_OnLoad(JavaVM* jvm, void*)
{
::Java::Env::static_init(jvm);
- ::Java::ClassCache::create();
+
+ const apr_status_t status = apr_initialize();
+ if (!status)
+ ::Java::ClassCache::create();
+ else
+ {
+ char buf[2048];
+ std::strcpy(buf, "Could not initialize APR: ");
+ const std::size_t offset = std::strlen(buf);
+ apr_strerror(status, buf + offset, sizeof(buf) - offset - 1);
+ const ::Java::Env env;
+ env.ThrowNew(env.FindClass("java/lang/Error"), buf);
+ }
return JNI_VERSION_1_2;
}
@@ -54,6 +69,7 @@ JNIEXPORT void JNICALL
JNI_OnUnload(JavaVM*, void*)
{
::Java::ClassCache::destroy();
+ apr_terminate();
}
Modified: subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/jniwrapper/jni_channel.cpp
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/jniwrapper/jni_channel.cpp?rev=1545212&r1=1545211&r2=1545212&view=diff
==============================================================================
--- subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/jniwrapper/jni_channel.cpp (original)
+++ subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/jniwrapper/jni_channel.cpp Mon Nov 25 10:25:05 2013
@@ -23,6 +23,7 @@
#include <stdexcept>
+#include "jni_object.hpp"
#include "jni_array.hpp"
#include "jni_channel.hpp"
@@ -32,79 +33,60 @@ namespace Java {
namespace {
// Get the ByteBuffer's internal array.
-jbyteArray get_array(Env env, jclass cls, jobject buffer,
- MethodID& mid_has_array, MethodID& mid_get_array)
+jbyteArray get_array(Env env, jobject buffer,
+ const MethodID& mid_has_array,
+ const MethodID& mid_get_array)
{
- if (!mid_has_array)
- mid_has_array = env.GetMethodID(cls, "hasArray", "()Z");
if (!env.CallBooleanMethod(buffer, mid_has_array))
return NULL;
-
- if (!mid_get_array)
- mid_get_array = env.GetMethodID(cls, "array", "()[B");
return jbyteArray(env.CallObjectMethod(buffer, mid_get_array));
}
// Get the offset in the ByteBuffer's array. NEVER call this function
// unless the buffer actually has an accessible array.
-jint get_array_offset(Env env, jclass cls, jobject buffer,
- MethodID& mid_get_array_offset)
+jint get_array_offset(Env env, jobject buffer,
+ const MethodID& mid_get_array_offset)
{
- if (!mid_get_array_offset)
- mid_get_array_offset = env.GetMethodID(cls, "arrayOffset", "()I");
return env.CallIntMethod(buffer, mid_get_array_offset);
}
// Get the remaining space in a ByteBuffer.
-jint get_remaining(Env env, jclass cls, jobject buffer,
- MethodID& mid_get_remaining)
+jint get_remaining(Env env, jobject buffer,
+ const MethodID& mid_get_remaining)
{
- if (!mid_get_remaining)
- mid_get_remaining = env.GetMethodID(cls, "remaining", "()I");
return env.CallIntMethod(buffer, mid_get_remaining);
}
// Get the current position of a ByteBuffer.
-jint get_position(Env env, jclass cls, jobject buffer,
- MethodID& mid_get_position)
+jint get_position(Env env, jobject buffer,
+ const MethodID& mid_get_position)
{
- if (!mid_get_position)
- mid_get_position = env.GetMethodID(cls, "position", "()I");
return env.CallIntMethod(buffer, mid_get_position);
}
// Set the new position of a ByteBuffer.
-void set_position(Env env, jclass cls, jobject buffer,
- MethodID& mid_set_position,
+void set_position(Env env, jobject buffer,
+ const MethodID& mid_set_position,
jint new_position)
{
- if (!mid_set_position)
- mid_set_position = env.GetMethodID(cls, "position",
- "(I)Ljava/nio/Buffer;");
env.CallObjectMethod(buffer, mid_set_position, new_position);
}
// Get byte array contents from a ByteBuffer.
-void get_bytearray(Env env, jclass cls, jobject buffer,
- MethodID& mid_get_bytearray,
+void get_bytearray(Env env, jobject buffer,
+ const MethodID& mid_get_bytearray,
ByteArray& array, jint length = -1, jint offset = 0)
{
- if (!mid_get_bytearray)
- mid_get_bytearray = env.GetMethodID(cls, "get",
- "([BII)Ljava/nio/ByteBuffer;");
env.CallObjectMethod(
buffer, mid_get_bytearray, array.get(), offset,
(length >= 0 ? length : (array.length() - offset)));
}
// Put byte array contents into a ByteBuffer.
-void put_bytearray(Env env, jclass cls, jobject buffer,
- MethodID& mid_put_bytearray,
+void put_bytearray(Env env, jobject buffer,
+ const MethodID& mid_put_bytearray,
ByteArray& array, jint length = -1, jint offset = 0)
{
- if (!mid_put_bytearray)
- mid_put_bytearray = env.GetMethodID(cls, "put",
- "([BII)Ljava/nio/ByteBuffer;");
env.CallObjectMethod(buffer, mid_put_bytearray,
array.get(), offset,
(length >= 0 ? length : (array.length() - offset)));
@@ -131,21 +113,47 @@ struct BadReaderWriter : public ChannelR
ChannelReader& ByteChannel::m_null_reader = bad_reader_writer;
ChannelWriter& ByteChannel::m_null_writer = bad_reader_writer;
-const char* const ByteChannel::m_byte_buffer_class_name =
+const char* const ByteChannel::ByteBuffer::m_class_name =
"java/nio/ByteBuffer";
+MethodID ByteChannel::ByteBuffer::m_mid_has_array;
+MethodID ByteChannel::ByteBuffer::m_mid_get_array;
+MethodID ByteChannel::ByteBuffer::m_mid_get_array_offset;
+MethodID ByteChannel::ByteBuffer::m_mid_get_remaining;
+MethodID ByteChannel::ByteBuffer::m_mid_get_position;
+MethodID ByteChannel::ByteBuffer::m_mid_set_position;
+MethodID ByteChannel::ByteBuffer::m_mid_get_bytearray;
+MethodID ByteChannel::ByteBuffer::m_mid_put_bytearray;
+
+void ByteChannel::ByteBuffer::static_init(Env env)
+{
+ const jclass cls = ClassCache::get_byte_buffer();
+ m_mid_has_array = env.GetMethodID(cls, "hasArray", "()Z");
+ m_mid_get_array = env.GetMethodID(cls, "array", "()[B");
+ m_mid_get_array_offset = env.GetMethodID(cls, "arrayOffset", "()I");
+ m_mid_get_remaining = env.GetMethodID(cls, "remaining", "()I");
+ m_mid_get_position = env.GetMethodID(cls, "position", "()I");
+ m_mid_set_position = env.GetMethodID(cls, "position",
+ "(I)Ljava/nio/Buffer;");
+ m_mid_get_bytearray = env.GetMethodID(cls, "get",
+ "([BII)Ljava/nio/ByteBuffer;");
+ m_mid_put_bytearray = env.GetMethodID(cls, "put",
+ "([BII)Ljava/nio/ByteBuffer;");
+}
+
+
jint ByteChannel::read(jobject destination)
{
- const jint remaining = get_remaining(m_env, m_cls_byte_buffer, destination,
- m_mid_byte_buffer_get_remaining);
+ const jint remaining = get_remaining(m_env, destination,
+ ByteBuffer::m_mid_get_remaining);
if (!remaining)
{
// No space in the buffer; don't try to read anything.
return 0;
}
- const jint position = get_position(m_env, m_cls_byte_buffer, destination,
- m_mid_byte_buffer_get_position);
+ const jint position = get_position(m_env, destination,
+ ByteBuffer::m_mid_get_position);
jint bytes_read = 0;
void* data = m_env.GetDirectBufferAddress(destination);
@@ -157,14 +165,14 @@ jint ByteChannel::read(jobject destinati
else
{
// It was not a direct buffer ... see if it has an array.
- jbyteArray raw_array = get_array(m_env, m_cls_byte_buffer, destination,
- m_mid_byte_buffer_has_array,
- m_mid_byte_buffer_get_array);
+ jbyteArray raw_array = get_array(m_env, destination,
+ ByteBuffer::m_mid_has_array,
+ ByteBuffer::m_mid_get_array);
if (raw_array)
{
const jint array_offset = get_array_offset(
- m_env, m_cls_byte_buffer, destination,
- m_mid_byte_buffer_get_array_offset);
+ m_env, destination,
+ ByteBuffer::m_mid_get_array_offset);
ByteArray array(m_env, raw_array);
ByteArray::MutableContents contents(array);
data = contents.data();
@@ -175,8 +183,8 @@ jint ByteChannel::read(jobject destinati
if (data)
{
if (bytes_read > 0)
- set_position(m_env, m_cls_byte_buffer, destination,
- m_mid_byte_buffer_set_position,
+ set_position(m_env, destination,
+ ByteBuffer::m_mid_set_position,
position + bytes_read);
return bytes_read;
}
@@ -187,24 +195,24 @@ jint ByteChannel::read(jobject destinati
ByteArray::MutableContents contents(array);
bytes_read = m_reader(m_env, contents.data(), contents.length());
if (bytes_read > 0)
- put_bytearray(m_env, m_cls_byte_buffer, destination,
- m_mid_byte_buffer_put_bytearray,
+ put_bytearray(m_env, destination,
+ ByteBuffer::m_mid_put_bytearray,
array, bytes_read);
return bytes_read;
}
jint ByteChannel::write(jobject source)
{
- const jint remaining = get_remaining(m_env, m_cls_byte_buffer, source,
- m_mid_byte_buffer_get_remaining);
+ const jint remaining = get_remaining(m_env, source,
+ ByteBuffer::m_mid_get_remaining);
if (!remaining)
{
// No data in the buffer; don't try to write anything.
return 0;
}
- const jint position = get_position(m_env, m_cls_byte_buffer, source,
- m_mid_byte_buffer_get_position);
+ const jint position = get_position(m_env, source,
+ ByteBuffer::m_mid_get_position);
jint bytes_written = 0;
const void* data = m_env.GetDirectBufferAddress(source);
@@ -216,14 +224,14 @@ jint ByteChannel::write(jobject source)
else
{
// It was not a direct buffer ... see if it has an array.
- jbyteArray raw_array = get_array(m_env, m_cls_byte_buffer, source,
- m_mid_byte_buffer_has_array,
- m_mid_byte_buffer_get_array);
+ jbyteArray raw_array = get_array(m_env, source,
+ ByteBuffer::m_mid_has_array,
+ ByteBuffer::m_mid_get_array);
if (raw_array)
{
const jint array_offset = get_array_offset(
- m_env, m_cls_byte_buffer, source,
- m_mid_byte_buffer_get_array_offset);
+ m_env, source,
+ ByteBuffer::m_mid_get_array_offset);
const ByteArray array(m_env, raw_array);
ByteArray::Contents contents(array);
data = contents.data();
@@ -234,8 +242,8 @@ jint ByteChannel::write(jobject source)
if (data)
{
if (bytes_written > 0)
- set_position(m_env, m_cls_byte_buffer, source,
- m_mid_byte_buffer_set_position,
+ set_position(m_env, source,
+ ByteBuffer::m_mid_set_position,
position + bytes_written);
return bytes_written;
}
@@ -243,8 +251,8 @@ jint ByteChannel::write(jobject source)
// No accessible array, either. Oh well. Get an array from the
// buffer and read data from that.
ByteArray array(m_env, remaining);
- get_bytearray(m_env, m_cls_byte_buffer, source,
- m_mid_byte_buffer_get_bytearray,
+ get_bytearray(m_env, source,
+ ByteBuffer::m_mid_get_bytearray,
array);
ByteArray::Contents contents(array);
bytes_written = m_writer(m_env, contents.data(), contents.length());
Modified: subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/jniwrapper/jni_channel.hpp
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/jniwrapper/jni_channel.hpp?rev=1545212&r1=1545211&r2=1545212&view=diff
==============================================================================
--- subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/jniwrapper/jni_channel.hpp (original)
+++ subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/jniwrapper/jni_channel.hpp Mon Nov 25 10:25:05 2013
@@ -81,8 +81,7 @@ public:
explicit ByteChannel(Env env, ChannelReader& reader, ChannelWriter& writer)
: m_env(env),
m_reader(reader),
- m_writer(writer),
- m_cls_byte_buffer(env.FindClass(m_byte_buffer_class_name))
+ m_writer(writer)
{}
/**
@@ -106,8 +105,7 @@ protected:
explicit ByteChannel(Env env, ChannelReader& reader)
: m_env(env),
m_reader(reader),
- m_writer(m_null_writer),
- m_cls_byte_buffer(env.FindClass(m_byte_buffer_class_name))
+ m_writer(m_null_writer)
{}
/**
@@ -116,8 +114,7 @@ protected:
explicit ByteChannel(Env env, ChannelWriter& writer)
: m_env(env),
m_reader(m_null_reader),
- m_writer(writer),
- m_cls_byte_buffer(env.FindClass(m_byte_buffer_class_name))
+ m_writer(writer)
{}
private:
@@ -129,16 +126,20 @@ private:
static ChannelWriter& m_null_writer;
// Private references for the java.nio.ByteBuffer class.
- static const char* const m_byte_buffer_class_name;
- const jclass m_cls_byte_buffer;
- MethodID m_mid_byte_buffer_has_array;
- MethodID m_mid_byte_buffer_get_array;
- MethodID m_mid_byte_buffer_get_array_offset;
- MethodID m_mid_byte_buffer_get_remaining;
- MethodID m_mid_byte_buffer_get_position;
- MethodID m_mid_byte_buffer_set_position;
- MethodID m_mid_byte_buffer_get_bytearray;
- MethodID m_mid_byte_buffer_put_bytearray;
+ friend class ClassCache;
+ struct ByteBuffer
+ {
+ static const char* const m_class_name;
+ static void static_init(Env env);
+ static MethodID m_mid_has_array;
+ static MethodID m_mid_get_array;
+ static MethodID m_mid_get_array_offset;
+ static MethodID m_mid_get_remaining;
+ static MethodID m_mid_get_position;
+ static MethodID m_mid_set_position;
+ static MethodID m_mid_get_bytearray;
+ static MethodID m_mid_put_bytearray;
+ };
};
Modified: subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/jniwrapper/jni_class_cache.cpp
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/jniwrapper/jni_class_cache.cpp?rev=1545212&r1=1545211&r2=1545212&view=diff
==============================================================================
--- subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/jniwrapper/jni_class_cache.cpp (original)
+++ subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/jniwrapper/jni_class_cache.cpp Mon Nov 25 10:25:05 2013
@@ -30,7 +30,13 @@
#include "jni_object.hpp"
#include "jni_string.hpp"
+#include "jni_channel.hpp"
+#include "jni_io_stream.hpp"
+#include "jni_list.hpp"
+#include "jni_string_map.hpp"
+
#include "../SubversionException.hpp"
+#include "../ExternalItem.hpp"
namespace Java {
@@ -53,24 +59,23 @@ void ClassCache::create()
exception_message = "Caught unknown C++ exception";
}
- // Use the raw environment without exception checks here
- ::JNIEnv* const jenv = Env().get();
- if (exception_message || jenv->ExceptionCheck())
+ const ::Java::Env env;
+ if (exception_message || env.ExceptionCheck())
{
- const jclass rtx = jenv->FindClass("java/lang/RuntimeException");
- const jmethodID ctor = jenv->GetMethodID(rtx, "<init>",
- "(Ljava/lang/String;"
- "Ljava/lang/Throwable;)V");
- jobject cause = jenv->ExceptionOccurred();
+ const jclass rtx = env.FindClass("java/lang/RuntimeException");
+ const jmethodID ctor = env.GetMethodID(rtx, "<init>",
+ "(Ljava/lang/String;"
+ "Ljava/lang/Throwable;)V");
+ jobject cause = env.ExceptionOccurred();
if (!cause && exception_message)
{
- const jstring msg = jenv->NewStringUTF(exception_message);
- cause = jenv->NewObject(rtx, ctor, msg, jthrowable(0));
+ const jstring msg = env.NewStringUTF(exception_message);
+ cause = env.NewObject(rtx, ctor, msg, jthrowable(0));
}
const jstring reason =
- jenv->NewStringUTF("JavaHL native library initialization failed");
- const jobject exception = jenv->NewObject(rtx, ctor, reason, cause);
- jenv->Throw(jthrowable(exception));
+ env.NewStringUTF("JavaHL native library initialization failed");
+ const jobject exception = env.NewObject(rtx, ctor, reason, cause);
+ env.Throw(jthrowable(exception));
}
}
@@ -91,15 +96,48 @@ ClassCache::ClassCache(Env env)
SVN_JAVAHL_JNIWRAPPER_CLASS_CACHE_INIT(throwable, Exception),
SVN_JAVAHL_JNIWRAPPER_CLASS_CACHE_INIT(string, String),
+ SVN_JAVAHL_JNIWRAPPER_CLASS_CACHE_INIT(list, BaseList),
+ SVN_JAVAHL_JNIWRAPPER_CLASS_CACHE_INIT(array_list, BaseMutableList),
+
+ SVN_JAVAHL_JNIWRAPPER_CLASS_CACHE_INIT(map, BaseMap),
+ SVN_JAVAHL_JNIWRAPPER_CLASS_CACHE_INIT(set, BaseMap::Set),
+ SVN_JAVAHL_JNIWRAPPER_CLASS_CACHE_INIT(iterator, BaseMap::Iterator),
+ SVN_JAVAHL_JNIWRAPPER_CLASS_CACHE_INIT(map_entry, BaseMap::Entry),
+ SVN_JAVAHL_JNIWRAPPER_CLASS_CACHE_INIT(hash_map, BaseMutableMap),
+
+ SVN_JAVAHL_JNIWRAPPER_CLASS_CACHE_INIT(input_stream, InputStream),
+ SVN_JAVAHL_JNIWRAPPER_CLASS_CACHE_INIT(output_stream, OutputStream),
+
+ SVN_JAVAHL_JNIWRAPPER_CLASS_CACHE_INIT(byte_buffer,
+ ByteChannel::ByteBuffer),
+
SVN_JAVAHL_JNIWRAPPER_CLASS_CACHE_INIT(subversion_exception,
- ::JavaHL::SubversionException)
+ ::JavaHL::SubversionException),
+ SVN_JAVAHL_JNIWRAPPER_CLASS_CACHE_INIT(external_item,
+ ::JavaHL::ExternalItem)
{
m_instance = this;
// no-op: Object::static_init(env);
Class::static_init(env);
Exception::static_init(env);
// no-op: String::static_init(env);
+
+ BaseList::static_init(env);
+ BaseMutableList::static_init(env);
+
+ BaseMap::static_init(env);
+ BaseMap::Set::static_init(env);
+ BaseMap::Iterator::static_init(env);
+ BaseMap::Entry::static_init(env);
+ BaseMutableMap::static_init(env);
+
+ InputStream::static_init(env);
+ OutputStream::static_init(env);
+
+ ByteChannel::ByteBuffer::static_init(env);
+
// no-op: ::JavaHL::SubversionException::static_init(env);
+ ::JavaHL::ExternalItem::static_init(env);
}
#undef SVN_JAVAHL_JNIWRAPPER_CLASS_CACHE_INIT
Modified: subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/jniwrapper/jni_io_stream.cpp
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/jniwrapper/jni_io_stream.cpp?rev=1545212&r1=1545211&r2=1545212&view=diff
==============================================================================
--- subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/jniwrapper/jni_io_stream.cpp (original)
+++ subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/jniwrapper/jni_io_stream.cpp Mon Nov 25 10:25:05 2013
@@ -168,6 +168,26 @@ apr_status_t cleanup_global_object(void*
const char* const InputStream::m_class_name = "java/io/InputStream";
+MethodID InputStream::m_mid_close;
+MethodID InputStream::m_mid_mark_supported;
+MethodID InputStream::m_mid_mark;
+MethodID InputStream::m_mid_reset;
+MethodID InputStream::m_mid_read_byte;
+MethodID InputStream::m_mid_read_bytearray;
+MethodID InputStream::m_mid_skip;
+
+void InputStream::static_init(Env env)
+{
+ const jclass cls = ClassCache::get_input_stream();
+ m_mid_close = env.GetMethodID(cls, "close", "()V");
+ m_mid_mark_supported = env.GetMethodID(cls, "markSupported", "()Z");
+ m_mid_mark = env.GetMethodID(cls, "mark", "(I)V");
+ m_mid_reset = env.GetMethodID(cls, "reset", "()V");
+ m_mid_read_byte = env.GetMethodID(cls, "read", "()I");
+ m_mid_read_bytearray = env.GetMethodID(cls, "read", "([BII)I");
+ m_mid_skip = env.GetMethodID(cls, "skip", "(J)J");
+}
+
svn_stream_t*
InputStream::get_global_stream(Env env, jobject jstream,
const SVN::Pool& pool)
@@ -219,6 +239,18 @@ svn_stream_t* InputStream::get_stream(co
const char* const OutputStream::m_class_name = "java/io/OutputStream";
+MethodID OutputStream::m_mid_close;
+MethodID OutputStream::m_mid_write_byte;
+MethodID OutputStream::m_mid_write_bytearray;
+
+void OutputStream::static_init(Env env)
+{
+ const jclass cls = ClassCache::get_output_stream();
+ m_mid_close = env.GetMethodID(cls, "close", "()V");
+ m_mid_write_byte = env.GetMethodID(cls, "write", "(I)V");
+ m_mid_write_bytearray = env.GetMethodID(cls, "write", "([BII)V");
+}
+
svn_stream_t*
OutputStream::get_global_stream(Env env, jobject jstream,
const SVN::Pool& pool)
Modified: subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/jniwrapper/jni_io_stream.hpp
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/jniwrapper/jni_io_stream.hpp?rev=1545212&r1=1545211&r2=1545212&view=diff
==============================================================================
--- subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/jniwrapper/jni_io_stream.hpp (original)
+++ subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/jniwrapper/jni_io_stream.hpp Mon Nov 25 10:25:05 2013
@@ -49,7 +49,7 @@ public:
* Constructs a wrapper around an existing @c InputStream @a jstream.
*/
explicit InputStream(Env env, jobject jstream)
- : Object(env, m_class_name, jstream)
+ : Object(env, ClassCache::get_input_stream(), jstream)
{}
/**
@@ -73,8 +73,6 @@ public:
*/
void close()
{
- if (!m_mid_close)
- m_mid_close = m_env.GetMethodID(m_class, "close", "()V");
m_env.CallVoidMethod(m_jthis, m_mid_close);
}
@@ -83,9 +81,6 @@ public:
*/
bool mark_supported()
{
- if (!m_mid_mark_supported)
- m_mid_mark_supported = m_env.GetMethodID(m_class,
- "markSupported", "()Z");
return m_env.CallBooleanMethod(m_jthis, m_mid_mark_supported);
}
@@ -94,8 +89,6 @@ public:
*/
void mark(jint readlimit)
{
- if (!m_mid_mark)
- m_mid_mark = m_env.GetMethodID(m_class, "mark", "(I)V");
m_env.CallVoidMethod(m_jthis, m_mid_mark, readlimit);
}
@@ -104,8 +97,6 @@ public:
*/
void reset()
{
- if (!m_mid_reset)
- m_mid_reset = m_env.GetMethodID(m_class, "reset", "()V");
m_env.CallVoidMethod(m_jthis, m_mid_reset);
}
@@ -114,8 +105,6 @@ public:
*/
jint read()
{
- if (!m_mid_read_byte)
- m_mid_read_byte = m_env.GetMethodID(m_class, "read", "()I");
return m_env.CallIntMethod(m_jthis, m_mid_read_byte);
}
@@ -124,8 +113,6 @@ public:
*/
jint read(ByteArray& dst, jint length = -1, jint offset = 0)
{
- if (!m_mid_read_bytearray)
- m_mid_read_bytearray = m_env.GetMethodID(m_class, "read", "([BII)I");
return m_env.CallIntMethod(m_jthis, m_mid_read_bytearray,
dst.get(), offset,
(length >= 0 ? length
@@ -149,20 +136,20 @@ public:
*/
jlong skip(jlong count)
{
- if (!m_mid_skip)
- m_mid_skip = m_env.GetMethodID(m_class, "skip", "(J)J");
return m_env.CallLongMethod(m_jthis, m_mid_skip, count);
}
private:
+ friend class ClassCache;
+ static void static_init(Env env);
static const char* const m_class_name;
- MethodID m_mid_close;
- MethodID m_mid_mark_supported;
- MethodID m_mid_mark;
- MethodID m_mid_reset;
- MethodID m_mid_read_byte;
- MethodID m_mid_read_bytearray;
- MethodID m_mid_skip;
+ static MethodID m_mid_close;
+ static MethodID m_mid_mark_supported;
+ static MethodID m_mid_mark;
+ static MethodID m_mid_reset;
+ static MethodID m_mid_read_byte;
+ static MethodID m_mid_read_bytearray;
+ static MethodID m_mid_skip;
};
@@ -178,7 +165,7 @@ public:
* Constructs a wrapper around an existing @c OutputStream @a jstream.
*/
explicit OutputStream(Env env, jobject jstream)
- : Object(env, m_class_name, jstream)
+ : Object(env, ClassCache::get_output_stream(), jstream)
{}
/**
@@ -202,8 +189,6 @@ public:
*/
void close()
{
- if (!m_mid_close)
- m_mid_close = m_env.GetMethodID(m_class, "close", "()V");
m_env.CallVoidMethod(m_jthis, m_mid_close);
}
@@ -212,8 +197,6 @@ public:
*/
void write(jint byte)
{
- if (!m_mid_write_byte)
- m_mid_write_byte = m_env.GetMethodID(m_class, "write", "(I)V");
m_env.CallVoidMethod(m_jthis, m_mid_write_byte, byte);
}
@@ -222,8 +205,6 @@ public:
*/
void write(const ByteArray& src, jint length = -1, jint offset = 0)
{
- if (!m_mid_write_bytearray)
- m_mid_write_bytearray = m_env.GetMethodID(m_class, "write", "([BII)V");
m_env.CallVoidMethod(m_jthis, m_mid_write_bytearray,
src.get(), offset,
(length >= 0 ? length
@@ -255,10 +236,12 @@ public:
}
private:
+ friend class ClassCache;
+ static void static_init(Env env);
static const char* const m_class_name;
- MethodID m_mid_close;
- MethodID m_mid_write_byte;
- MethodID m_mid_write_bytearray;
+ static MethodID m_mid_close;
+ static MethodID m_mid_write_byte;
+ static MethodID m_mid_write_bytearray;
};
} // namespace Java
Modified: subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/jniwrapper/jni_list.cpp
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/jniwrapper/jni_list.cpp?rev=1545212&r1=1545211&r2=1545212&view=diff
==============================================================================
--- subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/jniwrapper/jni_list.cpp (original)
+++ subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/jniwrapper/jni_list.cpp Mon Nov 25 10:25:05 2013
@@ -29,22 +29,29 @@ namespace Java {
const char* const BaseList::m_class_name = "java/util/List";
+MethodID BaseList::m_mid_size;
+MethodID BaseList::m_mid_get;
+
+void BaseList::static_init(Env env)
+{
+ const jclass cls = ClassCache::get_list();
+ m_mid_size = env.GetMethodID(cls, "size", "()I");
+ m_mid_get = env.GetMethodID(cls, "get", "(I)Ljava/lang/Object;");
+}
+
BaseList::ovector
-BaseList::convert_to_vector(Env env, jclass cls, jobject jlist)
+BaseList::convert_to_vector(Env env, jobject jlist)
{
- const jint length = env.CallIntMethod(
- jlist, env.GetMethodID(cls, "size", "()I"));
+ const jint length = env.CallIntMethod(jlist, m_mid_size);
if (!length)
return ovector();
- const jmethodID mid_get = env.GetMethodID(cls, "get",
- "(I)Ljava/lang/Object;");
ovector contents(length);
ovector::iterator it;
jint i;
for (i = 0, it = contents.begin(); it != contents.end(); ++it, ++i)
- *it = env.CallObjectMethod(jlist, mid_get, i);
+ *it = env.CallObjectMethod(jlist, m_mid_get, i);
return contents;
}
@@ -53,46 +60,20 @@ BaseList::convert_to_vector(Env env, jcl
const char* const BaseMutableList::m_class_name = "java/util/ArrayList";
-namespace {
-jobject make_array_list(Env env, const char* class_name, jint length)
-{
- const jclass cls = env.FindClass(class_name);
- const jmethodID mid_ctor = env.GetMethodID(cls, "<init>", "(I)V");
- return env.NewObject(cls, mid_ctor, length);
-}
-} // anonymous namespace
-
-BaseMutableList::BaseMutableList(Env env, jint length)
- : Object(env, m_class_name,
- make_array_list(env, m_class_name, length))
-{}
-
-void BaseMutableList::add(jobject obj)
-{
- if (!m_mid_add)
- m_mid_add = m_env.GetMethodID(m_class, "add", "(Ljava/lang/Object;)Z");
- m_env.CallBooleanMethod(m_jthis, m_mid_add, obj);
-}
-
-void BaseMutableList::clear()
-{
- if (!m_mid_clear)
- m_mid_clear = m_env.GetMethodID(m_class, "clear", "()V");
- m_env.CallVoidMethod(m_jthis, m_mid_clear);
-}
-
-jobject BaseMutableList::operator[](jint index) const
-{
- if (!m_mid_get)
- m_mid_get = m_env.GetMethodID(m_class, "get", "(I)Ljava/lang/Object;");
- return m_env.CallObjectMethod(m_jthis, m_mid_get, index);
-}
-
-jint BaseMutableList::length() const
-{
- if (!m_mid_size)
- m_mid_size = m_env.GetMethodID(m_class, "size", "()I");
- return m_env.CallIntMethod(m_jthis, m_mid_size);
+MethodID BaseMutableList::m_mid_ctor;
+MethodID BaseMutableList::m_mid_add;
+MethodID BaseMutableList::m_mid_clear;
+MethodID BaseMutableList::m_mid_get;
+MethodID BaseMutableList::m_mid_size;
+
+void BaseMutableList::static_init(Env env)
+{
+ const jclass cls = ClassCache::get_array_list();
+ m_mid_ctor = env.GetMethodID(cls, "<init>", "(I)V");
+ m_mid_add = env.GetMethodID(cls, "add", "(Ljava/lang/Object;)Z");
+ m_mid_clear = env.GetMethodID(cls, "clear", "()V");
+ m_mid_get = env.GetMethodID(cls, "get", "(I)Ljava/lang/Object;");
+ m_mid_size = env.GetMethodID(cls, "size", "()I");
}
} // namespace Java
Modified: subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/jniwrapper/jni_list.hpp
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/jniwrapper/jni_list.hpp?rev=1545212&r1=1545211&r2=1545212&view=diff
==============================================================================
--- subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/jniwrapper/jni_list.hpp (original)
+++ subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/jniwrapper/jni_list.hpp Mon Nov 25 10:25:05 2013
@@ -58,8 +58,8 @@ protected:
* @c std::vector.
*/
explicit BaseList(Env env, jobject jlist)
- : Object(env, m_class_name, jlist),
- m_contents(convert_to_vector(env, m_class, m_jthis))
+ : Object(env, ClassCache::get_list(), jlist),
+ m_contents(convert_to_vector(env, m_jthis))
{}
/**
@@ -74,8 +74,12 @@ protected:
const ovector m_contents;
private:
+ friend class ClassCache;
+ static void static_init(Env env);
static const char* const m_class_name;
- static ovector convert_to_vector(Env env, jclass cls, jobject jlist);
+ static MethodID m_mid_size;
+ static MethodID m_mid_get;
+ static ovector convert_to_vector(Env env, jobject jlist);
};
/**
@@ -148,12 +152,18 @@ public:
/**
* Clears the contents of the list.
*/
- void clear();
+ void clear()
+ {
+ m_env.CallVoidMethod(m_jthis, m_mid_clear);
+ }
/**
* Returns the number of elements in the list.
*/
- jint length() const;
+ jint length() const
+ {
+ return m_env.CallIntMethod(m_jthis, m_mid_size);
+ }
/**
* Checks if the list is empty.
@@ -175,25 +185,38 @@ protected:
* Constructs and wraps an empty list of type @c java.util.ArrayList
* with initial allocation size @a length.
*/
- explicit BaseMutableList(Env env, jint length);
+ explicit BaseMutableList(Env env, jint length)
+ : Object(env, ClassCache::get_array_list(),
+ env.NewObject(ClassCache::get_array_list(), m_mid_ctor, length))
+ {}
+
/**
* Appends @a obj to the end of the list.
*/
- void add(jobject obj);
+ void add(jobject obj)
+ {
+ m_env.CallBooleanMethod(m_jthis, m_mid_add, obj);
+ }
/**
* Returns the object reference at @a index.
* @note Throws a Java exception if the index value is not valid.
*/
- jobject operator[](jint index) const;
+ jobject operator[](jint index) const
+ {
+ return m_env.CallObjectMethod(m_jthis, m_mid_get, index);
+ }
private:
+ friend class ClassCache;
+ static void static_init(Env env);
static const char* const m_class_name;
- MethodID m_mid_add;
- MethodID m_mid_clear;
- mutable MethodID m_mid_get;
- mutable MethodID m_mid_size;
+ static MethodID m_mid_ctor;
+ static MethodID m_mid_add;
+ static MethodID m_mid_clear;
+ static MethodID m_mid_get;
+ static MethodID m_mid_size;
};
/**
Modified: subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/jniwrapper/jni_object.hpp
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/jniwrapper/jni_object.hpp?rev=1545212&r1=1545211&r2=1545212&view=diff
==============================================================================
--- subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/jniwrapper/jni_object.hpp (original)
+++ subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/jniwrapper/jni_object.hpp Mon Nov 25 10:25:05 2013
@@ -145,7 +145,23 @@ class ClassCache
SVN_JAVAHL_JNIWRAPPER_CACHED_CLASS(classtype);
SVN_JAVAHL_JNIWRAPPER_CACHED_CLASS(throwable);
SVN_JAVAHL_JNIWRAPPER_CACHED_CLASS(string);
+
+ SVN_JAVAHL_JNIWRAPPER_CACHED_CLASS(list);
+ SVN_JAVAHL_JNIWRAPPER_CACHED_CLASS(array_list);
+
+ SVN_JAVAHL_JNIWRAPPER_CACHED_CLASS(map);
+ SVN_JAVAHL_JNIWRAPPER_CACHED_CLASS(set);
+ SVN_JAVAHL_JNIWRAPPER_CACHED_CLASS(iterator);
+ SVN_JAVAHL_JNIWRAPPER_CACHED_CLASS(map_entry);
+ SVN_JAVAHL_JNIWRAPPER_CACHED_CLASS(hash_map);
+
+ SVN_JAVAHL_JNIWRAPPER_CACHED_CLASS(input_stream);
+ SVN_JAVAHL_JNIWRAPPER_CACHED_CLASS(output_stream);
+
+ SVN_JAVAHL_JNIWRAPPER_CACHED_CLASS(byte_buffer);
+
SVN_JAVAHL_JNIWRAPPER_CACHED_CLASS(subversion_exception);
+ SVN_JAVAHL_JNIWRAPPER_CACHED_CLASS(external_item);
#undef SVN_JAVAHL_JNIWRAPPER_CACHED_CLASS
public:
Modified: subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/jniwrapper/jni_string_map.cpp
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/jniwrapper/jni_string_map.cpp?rev=1545212&r1=1545211&r2=1545212&view=diff
==============================================================================
--- subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/jniwrapper/jni_string_map.cpp (original)
+++ subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/jniwrapper/jni_string_map.cpp Mon Nov 25 10:25:05 2013
@@ -31,6 +31,43 @@ namespace Java {
// Class Java::BaseMap
const char* const BaseMap::m_class_name = "java/util/Map";
+MethodID BaseMap::m_mid_size;
+MethodID BaseMap::m_mid_entry_set;
+void BaseMap::static_init(Env env)
+{
+ const jclass cls = ClassCache::get_map();
+ m_mid_size = env.GetMethodID(cls, "size", "()I");
+ m_mid_entry_set = env.GetMethodID(cls, "entrySet", "()Ljava/util/Set;");
+}
+
+const char* const BaseMap::Set::m_class_name = "java/util/Set";
+MethodID BaseMap::Set::m_mid_iterator;
+void BaseMap::Set::static_init(Env env)
+{
+ m_mid_iterator = env.GetMethodID(ClassCache::get_set(), "iterator",
+ "()Ljava/util/Iterator;");
+}
+
+const char* const BaseMap::Iterator::m_class_name = "java/util/Iterator";
+MethodID BaseMap::Iterator::m_mid_has_next;
+MethodID BaseMap::Iterator::m_mid_next;
+void BaseMap::Iterator::static_init(Env env)
+{
+ const jclass cls = ClassCache::get_iterator();
+ m_mid_has_next = env.GetMethodID(cls, "hasNext", "()Z");
+ m_mid_next = env.GetMethodID(cls, "next", "()Ljava/lang/Object;");
+}
+
+const char* const BaseMap::Entry::m_class_name = "java/util/Map$Entry";
+MethodID BaseMap::Entry::m_mid_get_key;
+MethodID BaseMap::Entry::m_mid_get_value;
+void BaseMap::Entry::static_init(Env env)
+{
+ const jclass cls = ClassCache::get_map_entry();
+ m_mid_get_key = env.GetMethodID(cls, "getKey", "()Ljava/lang/Object;");
+ m_mid_get_value = env.GetMethodID(cls, "getValue", "()Ljava/lang/Object;");
+}
+
jobject BaseMap::operator[](const std::string& index) const
{
@@ -44,37 +81,25 @@ jobject BaseMap::operator[](const std::s
return it->second;
}
-BaseMap::somap BaseMap::convert_to_map(Env env, jclass cls, jobject jmap)
+BaseMap::somap BaseMap::convert_to_map(Env env, jobject jmap)
{
- if (!env.CallIntMethod(jmap, env.GetMethodID(cls, "size", "()I")))
+ if (!env.CallIntMethod(jmap, m_mid_size))
return somap();
// Get an iterator over the map's entry set
- const jobject entries = env.CallObjectMethod(
- jmap, env.GetMethodID(cls, "entrySet", "()Ljava/util/Set;"));
- const jobject iterator = env.CallObjectMethod(
- entries, env.GetMethodID(env.GetObjectClass(entries), "iterator",
- "()Ljava/util/Iterator;"));
- const jclass cls_iterator = env.GetObjectClass(iterator);
- const jmethodID mid_it_has_next = env.GetMethodID(cls_iterator,
- "hasNext", "()Z");
- const jmethodID mid_it_next = env.GetMethodID(cls_iterator, "next",
- "()Ljava/lang/Object;");
-
- // Find the methods for retreiving the key and value from an entry
- const jclass cls_entry = env.FindClass("java/util/Map$Entry");
- const jmethodID mid_get_key = env.GetMethodID(cls_entry, "getKey",
- "()Ljava/lang/Object;");
- const jmethodID mid_get_value = env.GetMethodID(cls_entry, "getValue",
- "()Ljava/lang/Object;");
+ const jobject entries = env.CallObjectMethod(jmap, m_mid_entry_set);
+ const jobject iterator = env.CallObjectMethod(entries, Set::m_mid_iterator);
- // And finally ... iterate over the map, filling the native map
+ // Yterate over the map, filling the native map
somap contents;
- while (env.CallBooleanMethod(iterator, mid_it_has_next))
+ while (env.CallBooleanMethod(iterator, Iterator::m_mid_has_next))
{
- const jobject e = env.CallObjectMethod(iterator, mid_it_next);
- const String keystr(env, jstring(env.CallObjectMethod(e, mid_get_key)));
- const jobject value(env.CallObjectMethod(e, mid_get_value));
+ const jobject entry =
+ env.CallObjectMethod(iterator, Iterator::m_mid_next);
+ const String keystr(
+ env, jstring(env.CallObjectMethod(entry, Entry::m_mid_get_key)));
+ const jobject value(
+ env.CallObjectMethod(entry, Entry::m_mid_get_value));
const String::Contents key(keystr);
contents.insert(somap::value_type(key.c_str(), value));
}
@@ -85,49 +110,31 @@ BaseMap::somap BaseMap::convert_to_map(E
const char* const BaseMutableMap::m_class_name = "java/util/HashMap";
-namespace {
-jobject make_hash_map(Env env, const char* class_name, jint length)
-{
- const jclass cls = env.FindClass(class_name);
- const jmethodID mid_ctor = env.GetMethodID(cls, "<init>", "(I)V");
- return env.NewObject(cls, mid_ctor, length);
-}
-} // anonymous namespace
-
-BaseMutableMap::BaseMutableMap(Env env, jint length)
- : Object(env, m_class_name,
- make_hash_map(env, m_class_name, length))
-{}
-
-void BaseMutableMap::clear()
-{
- if (!m_mid_clear)
- m_mid_clear = m_env.GetMethodID(m_class, "clear", "()V");
- m_env.CallVoidMethod(m_jthis, m_mid_clear);
-}
-
-jint BaseMutableMap::length() const
-{
- if (!m_mid_size)
- m_mid_size = m_env.GetMethodID(m_class, "size", "()I");
- return m_env.CallIntMethod(m_jthis, m_mid_size);
+MethodID BaseMutableMap::m_mid_ctor;
+MethodID BaseMutableMap::m_mid_put;
+MethodID BaseMutableMap::m_mid_clear;
+MethodID BaseMutableMap::m_mid_has_key;
+MethodID BaseMutableMap::m_mid_get;
+MethodID BaseMutableMap::m_mid_size;
+
+void BaseMutableMap::static_init(Env env)
+{
+ const jclass cls = ClassCache::get_hash_map();
+ m_mid_ctor = env.GetMethodID(cls, "<init>", "(I)V");
+ m_mid_put = env.GetMethodID(cls, "put",
+ "(Ljava/lang/Object;Ljava/lang/Object;)"
+ "Ljava/lang/Object;");
+ m_mid_clear = env.GetMethodID(cls, "clear", "()V");
+ m_mid_has_key = env.GetMethodID(cls, "containsKey",
+ "(Ljava/lang/Object;)Z");
+ m_mid_get = env.GetMethodID(cls, "get",
+ "(Ljava/lang/Object;)Ljava/lang/Object;");
+ m_mid_size = env.GetMethodID(cls, "size", "()I");
}
-void BaseMutableMap::put(const std::string& key, jobject obj)
-{
- if (!m_mid_put)
- m_mid_put = m_env.GetMethodID(m_class, "put",
- "(Ljava/lang/Object;Ljava/lang/Object;)"
- "Ljava/lang/Object;");
- m_env.CallObjectMethod(m_jthis, m_mid_put, String(m_env, key).get(), obj);
-}
jobject BaseMutableMap::operator[](const std::string& index) const
{
- if (!m_mid_has_key)
- m_mid_has_key = m_env.GetMethodID(m_class, "containsKey",
- "(Ljava/lang/Object;)Z");
-
const String key(m_env, index);
if (!m_env.CallBooleanMethod(m_jthis, m_mid_has_key, key.get()))
{
@@ -135,10 +142,6 @@ jobject BaseMutableMap::operator[](const
msg += index;
throw std::out_of_range(msg.c_str());
}
-
- if (!m_mid_get)
- m_mid_get = m_env.GetMethodID(m_class, "get",
- "(Ljava/lang/Object;)Ljava/lang/Object;");
return m_env.CallObjectMethod(m_jthis, m_mid_get, key.get());
}
Modified: subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/jniwrapper/jni_string_map.hpp
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/jniwrapper/jni_string_map.hpp?rev=1545212&r1=1545211&r2=1545212&view=diff
==============================================================================
--- subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/jniwrapper/jni_string_map.hpp (original)
+++ subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/jniwrapper/jni_string_map.hpp Mon Nov 25 10:25:05 2013
@@ -61,8 +61,8 @@ protected:
* @c std::map.
*/
explicit BaseMap(Env env, jobject jmap)
- : Object(env, m_class_name, jmap),
- m_contents(convert_to_map(env, m_class, m_jthis))
+ : Object(env, ClassCache::get_map(), jmap),
+ m_contents(convert_to_map(env, m_jthis))
{}
/**
@@ -74,8 +74,36 @@ protected:
const somap m_contents;
private:
+ friend class ClassCache;
+ static void static_init(Env env);
static const char* const m_class_name;
- static somap convert_to_map(Env env, jclass cls, jobject jmap);
+
+ struct Set
+ {
+ static MethodID m_mid_iterator;
+ static void static_init(Env env);
+ static const char* const m_class_name;
+ };
+
+ struct Iterator
+ {
+ static MethodID m_mid_has_next;
+ static MethodID m_mid_next;
+ static void static_init(Env env);
+ static const char* const m_class_name;
+ };
+
+ struct Entry
+ {
+ static MethodID m_mid_get_key;
+ static MethodID m_mid_get_value;
+ static void static_init(Env env);
+ static const char* const m_class_name;
+ };
+
+ static MethodID m_mid_size;
+ static MethodID m_mid_entry_set;
+ static somap convert_to_map(Env env, jobject jmap);
};
/**
@@ -153,12 +181,18 @@ public:
/**
* Clears the contents of the map.
*/
- void clear();
+ void clear()
+ {
+ m_env.CallVoidMethod(m_jthis, m_mid_clear);
+ }
/**
* Returns the number of elements in the map.
*/
- jint length() const;
+ jint length() const
+ {
+ return m_env.CallIntMethod(m_jthis, m_mid_size);
+ }
/**
* Checks if the map is empty.
@@ -180,12 +214,20 @@ protected:
* Constructs and wraps an empty map of type @c java.util.HashMap
* with initial allocation size @a length.
*/
- explicit BaseMutableMap(Env env, jint length);
+ explicit BaseMutableMap(Env env, jint length)
+ : Object(env, ClassCache::get_hash_map(),
+ env.NewObject(ClassCache::get_hash_map(), m_mid_ctor, length))
+ {}
+
/**
* Inserts @a obj identified by @a key into the map.
*/
- void put(const std::string& key, jobject obj);
+ void put(const std::string& key, jobject obj)
+ {
+ m_env.CallObjectMethod(m_jthis, m_mid_put,
+ String(m_env, key).get(), obj);
+ }
/**
* Returns the object reference identified by @a index.
@@ -194,12 +236,15 @@ protected:
jobject operator[](const std::string& index) const;
private:
+ friend class ClassCache;
+ static void static_init(Env env);
static const char* const m_class_name;
- MethodID m_mid_put;
- MethodID m_mid_clear;
- mutable MethodID m_mid_has_key;
- mutable MethodID m_mid_get;
- mutable MethodID m_mid_size;
+ static MethodID m_mid_ctor;
+ static MethodID m_mid_put;
+ static MethodID m_mid_clear;
+ static MethodID m_mid_has_key;
+ static MethodID m_mid_get;
+ static MethodID m_mid_size;
};
/**
Modified: subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/org_apache_subversion_javahl_util_SubstLib.cpp
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/org_apache_subversion_javahl_util_SubstLib.cpp?rev=1545212&r1=1545211&r2=1545212&view=diff
==============================================================================
--- subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/org_apache_subversion_javahl_util_SubstLib.cpp (original)
+++ subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/org_apache_subversion_javahl_util_SubstLib.cpp Mon Nov 25 10:25:05 2013
@@ -86,15 +86,21 @@ class KeywordHashBuilder
public:
explicit KeywordHashBuilder(const SVN::Pool& pool)
: m_pool(pool),
- m_hash(apr_hash_make(pool.getPool()))
+ m_hash(apr_hash_make(pool.getPool())),
+ m_empty(svn_string_create_empty(pool.getPool()))
{}
void operator()(const std::string& key, const Java::ByteArray& value)
{
const char* const safe_key =
apr_pstrmemdup(m_pool.getPool(), key.c_str(), key.size() + 1);
- Java::ByteArray::Contents val(value);
- apr_hash_set(m_hash, safe_key, key.size(), val.get_string(m_pool));
+ if (!value.get())
+ apr_hash_set(m_hash, safe_key, key.size(), m_empty);
+ else
+ {
+ Java::ByteArray::Contents val(value);
+ apr_hash_set(m_hash, safe_key, key.size(), val.get_string(m_pool));
+ }
}
apr_hash_t* get() const
@@ -105,6 +111,7 @@ public:
private:
const SVN::Pool& m_pool;
apr_hash_t* const m_hash;
+ svn_string_t* const m_empty;
};
inline apr_hash_t*
Modified: subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/ClientException.java
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/ClientException.java?rev=1545212&r1=1545211&r2=1545212&view=diff
==============================================================================
--- subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/ClientException.java (original)
+++ subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/ClientException.java Mon Nov 25 10:25:05 2013
@@ -30,13 +30,9 @@ import java.util.List;
*/
public class ClientException extends NativeException
{
- // Update the serialVersionUID when there is a incompatible change
- // made to this class. See any of the following, depending upon
- // the Java release.
- // http://java.sun.com/j2se/1.3/docs/guide/serialization/spec/version.doc7.html
- // http://java.sun.com/j2se/1.4/pdf/serial-spec.pdf
- // http://java.sun.com/j2se/1.5.0/docs/guide/serialization/spec/version.html#6678
- // http://java.sun.com/javase/6/docs/platform/serialization/spec/version.html#6678
+ // Update the serialVersionUID when there is a incompatible change made to
+ // this class. See the java documentation for when a change is incompatible.
+ // http://java.sun.com/javase/7/docs/platform/serialization/spec/version.html#6678
private static final long serialVersionUID = 2L;
/**
Modified: subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/ClientNotifyInformation.java
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/ClientNotifyInformation.java?rev=1545212&r1=1545211&r2=1545212&view=diff
==============================================================================
--- subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/ClientNotifyInformation.java (original)
+++ subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/ClientNotifyInformation.java Mon Nov 25 10:25:05 2013
@@ -36,13 +36,9 @@ import java.util.EventObject;
*/
public class ClientNotifyInformation extends EventObject
{
- // Update the serialVersionUID when there is a incompatible change
- // made to this class. See any of the following, depending upon
- // the Java release.
- // http://java.sun.com/j2se/1.3/docs/guide/serialization/spec/version.doc7.html
- // http://java.sun.com/j2se/1.4/pdf/serial-spec.pdf
- // http://java.sun.com/j2se/1.5.0/docs/guide/serialization/spec/version.html#6678
- // http://java.sun.com/javase/6/docs/platform/serialization/spec/version.html#6678
+ // Update the serialVersionUID when there is a incompatible change made to
+ // this class. See the java documentation for when a change is incompatible.
+ // http://java.sun.com/javase/7/docs/platform/serialization/spec/version.html#6678
private static final long serialVersionUID = 2L;
/**
@@ -206,6 +202,7 @@ public class ClientNotifyInformation ext
* @deprecated Constructor compatible with teh 1.8 API; uses
* <code>null</code> URL and errMsgStack values.
*/
+ @Deprecated
public ClientNotifyInformation(String path, Action action, NodeKind kind,
String mimeType, Lock lock, String errMsg,
Status contentState, Status propState,
Modified: subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/CommitInfo.java
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/CommitInfo.java?rev=1545212&r1=1545211&r2=1545212&view=diff
==============================================================================
--- subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/CommitInfo.java (original)
+++ subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/CommitInfo.java Mon Nov 25 10:25:05 2013
@@ -32,13 +32,9 @@ import org.apache.subversion.javahl.type
*/
public class CommitInfo implements java.io.Serializable
{
- // Update the serialVersionUID when there is a incompatible change
- // made to this class. See any of the following, depending upon
- // the Java release.
- // http://java.sun.com/j2se/1.3/docs/guide/serialization/spec/version.doc7.html
- // http://java.sun.com/j2se/1.4/pdf/serial-spec.pdf
- // http://java.sun.com/j2se/1.5.0/docs/guide/serialization/spec/version.html#6678
- // http://java.sun.com/javase/6/docs/platform/serialization/spec/version.html#6678
+ // Update the serialVersionUID when there is a incompatible change made to
+ // this class. See the java documentation for when a change is incompatible.
+ // http://java.sun.com/javase/7/docs/platform/serialization/spec/version.html#6678
private static final long serialVersionUID = 1L;
/** the revision committed */
Modified: subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/CommitItem.java
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/CommitItem.java?rev=1545212&r1=1545211&r2=1545212&view=diff
==============================================================================
--- subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/CommitItem.java (original)
+++ subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/CommitItem.java Mon Nov 25 10:25:05 2013
@@ -30,13 +30,9 @@ import org.apache.subversion.javahl.type
*/
public class CommitItem implements java.io.Serializable
{
- // Update the serialVersionUID when there is a incompatible change
- // made to this class. See any of the following, depending upon
- // the Java release.
- // http://java.sun.com/j2se/1.3/docs/guide/serialization/spec/version.doc7.html
- // http://java.sun.com/j2se/1.4/pdf/serial-spec.pdf
- // http://java.sun.com/j2se/1.5.0/docs/guide/serialization/spec/version.html#6678
- // http://java.sun.com/javase/6/docs/platform/serialization/spec/version.html#6678
+ // Update the serialVersionUID when there is a incompatible change made to
+ // this class. See the java documentation for when a change is incompatible.
+ // http://java.sun.com/javase/7/docs/platform/serialization/spec/version.html#6678
private static final long serialVersionUID = 1L;
/**
Modified: subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/DiffSummary.java
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/DiffSummary.java?rev=1545212&r1=1545211&r2=1545212&view=diff
==============================================================================
--- subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/DiffSummary.java (original)
+++ subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/DiffSummary.java Mon Nov 25 10:25:05 2013
@@ -33,13 +33,9 @@ import org.apache.subversion.javahl.type
*/
public class DiffSummary extends EventObject
{
- // Update the serialVersionUID when there is a incompatible change
- // made to this class. See any of the following, depending upon
- // the Java release.
- // http://java.sun.com/j2se/1.3/docs/guide/serialization/spec/version.doc7.html
- // http://java.sun.com/j2se/1.4/pdf/serial-spec.pdf
- // http://java.sun.com/j2se/1.5.0/docs/guide/serialization/spec/version.html#6678
- // http://java.sun.com/javase/6/docs/platform/serialization/spec/version.html#6678
+ // Update the serialVersionUID when there is a incompatible change made to
+ // this class. See the java documentation for when a change is incompatible.
+ // http://java.sun.com/javase/7/docs/platform/serialization/spec/version.html#6678
private static final long serialVersionUID = 1L;
private DiffKind diffKind;
Modified: subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNClient.java
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNClient.java?rev=1545212&r1=1545211&r2=1545212&view=diff
==============================================================================
--- subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNClient.java (original)
+++ subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNClient.java Mon Nov 25 10:25:05 2013
@@ -355,6 +355,7 @@ public interface ISVNClient
* @deprecated Provided for backward compatibility with 1.7. Passes
* metadataOnly false and allowMixRev true.
*/
+ @Deprecated
void move(Set<String> srcPaths, String destPath, boolean force,
boolean moveAsChild, boolean makeParents,
Map<String, String> revpropTable,
@@ -598,7 +599,7 @@ public interface ISVNClient
* Merge set of revisions into a new local path.
* <p>
* <b>Note:</b> Behaves like the 1.8 version where ignoreAncestry
- * maps to both ignoreMergeinfo and diffIgnoreAncestry
+ * maps to both ignoreMergeinfo and diffIgnoreAncestry.
*
* @param path path or url
* @param pegRevision revision to interpret path
@@ -635,6 +636,7 @@ public interface ISVNClient
* @throws ClientException
* @deprecated Will be removed in a future release
*/
+ @Deprecated
void mergeReintegrate(String path, Revision pegRevision,
String localPath, boolean dryRun)
throws ClientException;
@@ -657,7 +659,7 @@ public interface ISVNClient
* @param pegRevision peg rev for pathOrUrl
* @param mergeSourceUrl the source of the merge
* @param srcPegRevision peg rev for mergeSourceUrl
- * @param srcStartRevieion lower bound of the source revision range
+ * @param srcStartRevision lower bound of the source revision range
* @param srcEndRevision upper bound of the source revision range
* @param discoverChangedPaths return paths of changed items
* @param depth the depth to recurse to
@@ -704,7 +706,7 @@ public interface ISVNClient
* @param target2 second path or url
* @param revision2 second revision
* @param relativeToDir index path is relative to this path
- * @param outFileName file name where difference are written
+ * @param outStream the stream to which difference are written
* @param depth how deep to traverse into subdirectories
* @param ignoreAncestry ignore if files are not related
* @param noDiffDeleted no output on deleted files
@@ -725,6 +727,26 @@ public interface ISVNClient
DiffOptions options)
throws ClientException;
+ /**
+ * Display the differences between two paths
+ * @param target1 first path or url
+ * @param revision1 first revision
+ * @param target2 second path or url
+ * @param revision2 second revision
+ * @param relativeToDir index path is relative to this path
+ * @param outFileName file name where difference are written
+ * @param depth how deep to traverse into subdirectories
+ * @param ignoreAncestry ignore if files are not related
+ * @param noDiffDeleted no output on deleted files
+ * @param force diff even on binary files
+ * @param copiesAsAdds if set, copied files will be shown in their
+ * entirety, not as diffs from their sources
+ * @param ignoreProps don't show property diffs
+ * @param propsOnly show property changes only
+ * @param options additional options for controlling the output
+ * @throws ClientException
+ * @since 1.8
+ */
void diff(String target1, Revision revision1, String target2,
Revision revision2, String relativeToDir, String outFileName,
Depth depth, Collection<String> changelists,
@@ -740,7 +762,7 @@ public interface ISVNClient
* @param target2 second path or url
* @param revision2 second revision
* @param relativeToDir index path is relative to this path
- * @param outFileName file name where difference are written
+ * @param outStream the stream to which difference are written
* @param depth how deep to traverse into subdirectories
* @param ignoreAncestry ignore if files are not related
* @param noDiffDeleted no output on deleted files
@@ -758,6 +780,24 @@ public interface ISVNClient
boolean copiesAsAdds, boolean ignoreProps, boolean propsOnly)
throws ClientException;
+ /**
+ * Display the differences between two paths
+ * @param target1 first path or url
+ * @param revision1 first revision
+ * @param target2 second path or url
+ * @param revision2 second revision
+ * @param relativeToDir index path is relative to this path
+ * @param outFileName file name where difference are written
+ * @param depth how deep to traverse into subdirectories
+ * @param ignoreAncestry ignore if files are not related
+ * @param noDiffDeleted no output on deleted files
+ * @param force diff even on binary files
+ * @param copiesAsAdds if set, copied files will be shown in their
+ * entirety, not as diffs from their sources
+ * @param ignoreProps don't show property diffs
+ * @param propsOnly show property changes only
+ * @throws ClientException
+ */
void diff(String target1, Revision revision1, String target2,
Revision revision2, String relativeToDir, String outFileName,
Depth depth, Collection<String> changelists,
@@ -772,7 +812,7 @@ public interface ISVNClient
* @param startRevision first Revision to compare
* @param endRevision second Revision to compare
* @param relativeToDir index path is relative to this path
- * @param outFileName file name where difference are written
+ * @param outStream the stream to which difference are written
* @param depth how deep to traverse into subdirectories
* @param changelists if non-null, filter paths using changelists
* @param ignoreAncestry ignore if files are not related
@@ -794,6 +834,27 @@ public interface ISVNClient
DiffOptions options)
throws ClientException;
+ /**
+ * Display the differences between two paths.
+ * @param target path or url
+ * @param pegRevision revision tointerpret target
+ * @param startRevision first Revision to compare
+ * @param endRevision second Revision to compare
+ * @param relativeToDir index path is relative to this path
+ * @param outFileName file name where difference are written
+ * @param depth how deep to traverse into subdirectories
+ * @param changelists if non-null, filter paths using changelists
+ * @param ignoreAncestry ignore if files are not related
+ * @param noDiffDeleted no output on deleted files
+ * @param force diff even on binary files
+ * @param copiesAsAdds if set, copied files will be shown in their
+ * entirety, not as diffs from their sources
+ * @param ignoreProps don't show property diffs
+ * @param propsOnly show property changes only
+ * @param options additional options for controlling the output
+ * @throws ClientException
+ * @since 1.8
+ */
void diff(String target, Revision pegRevision, Revision startRevision,
Revision endRevision, String relativeToDir, String outFileName,
Depth depth, Collection<String> changelists,
@@ -809,7 +870,7 @@ public interface ISVNClient
* @param startRevision first Revision to compare
* @param endRevision second Revision to compare
* @param relativeToDir index path is relative to this path
- * @param outFileName file name where difference are written
+ * @param outStream the stream to which difference are written
* @param depth how deep to traverse into subdirectories
* @param changelists if non-null, filter paths using changelists
* @param ignoreAncestry ignore if files are not related
@@ -829,6 +890,25 @@ public interface ISVNClient
boolean copiesAsAdds, boolean ignoreProps, boolean propsOnly)
throws ClientException;
+ /**
+ * Display the differences between two paths.
+ * @param target path or url
+ * @param pegRevision revision tointerpret target
+ * @param startRevision first Revision to compare
+ * @param endRevision second Revision to compare
+ * @param relativeToDir index path is relative to this path
+ * @param outFileName file name where difference are written
+ * @param depth how deep to traverse into subdirectories
+ * @param changelists if non-null, filter paths using changelists
+ * @param ignoreAncestry ignore if files are not related
+ * @param noDiffDeleted no output on deleted files
+ * @param force diff even on binary files
+ * @param copiesAsAdds if set, copied files will be shown in their
+ * entirety, not as diffs from their sources
+ * @param ignoreProps don't show property diffs
+ * @param propsOnly show property changes only
+ * @throws ClientException
+ */
void diff(String target, Revision pegRevision, Revision startRevision,
Revision endRevision, String relativeToDir, String outFileName,
Depth depth, Collection<String> changelists,
@@ -868,7 +948,7 @@ public interface ISVNClient
*
* @param target Path or URL.
* @param pegRevision Revision at which to interpret
- * <code>target</code>. If {@link Revision.Kind#unspecified} or
+ * <code>target</code>. If {@link Revision#UNSPECIFIED} or
* <code>null</code>, behave identically to {@link
* #diffSummarize(String, Revision, String, Revision, Depth,
* Collection, boolean, DiffSummaryCallback)}, using
@@ -933,14 +1013,11 @@ public interface ISVNClient
*
* @param paths paths of the items
* @param name name of the property
- * @param value new value of the property. Set value to <code>
- * null</code> to delete a property
+ * @param value new value of the property. Set value to
+ * <code>null</code> to delete a property
* @param depth the depth to recurse into subdirectories
* @param changelists changelists to filter by
* @param force do not check if the value is valid
- * @param revpropTable A string-to-string mapping of revision properties
- * to values which will be set if this operation
- * results in a commit.
* @throws ClientException
*/
void propertySetLocal(Set<String> paths, String name, byte[] value,
@@ -948,6 +1025,21 @@ public interface ISVNClient
boolean force)
throws ClientException;
+ /**
+ * Sets one property of an item with a String value
+ *
+ * @param paths paths of the items
+ * @param name name of the property
+ * @param value new value of the property. Set value to <code>
+ * null</code> to delete a property
+ * @param depth the depth to recurse into subdirectories
+ * @param changelists changelists to filter by
+ * @param force do not check if the value is valid
+ * @param revpropTable A string-to-string mapping of revision properties
+ * to values which will be set if this operation
+ * results in a commit.
+ * @throws ClientException
+ */
void propertySetRemote(String path, long baseRev, String name,
byte[] value, CommitMessageCallback handler,
boolean force, Map<String, String> revpropTable,
@@ -1194,7 +1286,7 @@ public interface ISVNClient
*/
void info2(String pathOrUrl,
Revision revision, Revision pegRevision, Depth depth,
- boolean fertchExcluded, boolean fetchActualOnly,
+ boolean fetchExcluded, boolean fetchActualOnly,
Collection<String> changelists, InfoCallback callback)
throws ClientException;
Modified: subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNConfig.java
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNConfig.java?rev=1545212&r1=1545211&r2=1545212&view=diff
==============================================================================
--- subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNConfig.java (original)
+++ subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNConfig.java Mon Nov 25 10:25:05 2013
@@ -132,7 +132,7 @@ public interface ISVNConfig
/**
* Interface for reading and modifying configuration
* categories. Returned by {@link #config()} and
- * {@link servers()}.
+ * {@link #servers()}.
*/
public interface Category
{
@@ -160,7 +160,7 @@ public interface ISVNConfig
/**
* Returns the long integer value of a configuration option.
- * @see #get(String,String,Boolean)
+ * @see #get(String,String,boolean)
*/
long get(String section,
String option,
@@ -169,8 +169,8 @@ public interface ISVNConfig
/**
* Returns the {@link Tristate} value of a configuration option.
- * @param unknown The value used for {@link Tristate.Unknown}.
- * @see #get(String,String,Boolean)
+ * @param unknown The value used for {@link Tristate#Unknown}.
+ * @see #get(String,String,boolean)
*/
Tristate get(String section,
String option,
@@ -181,7 +181,7 @@ public interface ISVNConfig
/**
* Check that the configuration option's value is true, false
* or "ask". The boolean representations are the same as those
- * understood by {@link #get(String,String,Boolean)}. If the
+ * understood by {@link #get(String,String,boolean)}. If the
* option is not found, the default value will be parsed
* instead.
* @return {@link ISVNConfig#TRUE}, {@link ISVNConfig#FALSE}
@@ -207,7 +207,7 @@ public interface ISVNConfig
/**
* Set the value of a configuration option to represent a boolean.
- * @see @set(String,String,String)
+ * @see #set(String,String,String)
*/
void set(String section,
String option,
@@ -215,7 +215,7 @@ public interface ISVNConfig
/**
* Set the value of a configuration option to represent a long integer.
- * @see @set(String,String,String)
+ * @see #set(String,String,String)
*/
void set(String section,
String option,
Modified: subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNEditor.java
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNEditor.java?rev=1545212&r1=1545211&r2=1545212&view=diff
==============================================================================
--- subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNEditor.java (original)
+++ subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNEditor.java Mon Nov 25 10:25:05 2013
@@ -31,8 +31,8 @@ import java.util.Map;
/**
* Editor interface (implements the EV2 abstraction).
- * @see <a href="http://svn.apache.org/repos/asf/subversion/trunk/subversion/include/private/svn_editor.h"
- * >svn_editor.h</a> for all restrictions on driving an editor.
+ * @see <a href="http://svn.apache.org/repos/asf/subversion/trunk/subversion/include/private/svn_editor.h">svn_editor.h</a>
+ * for all restrictions on driving an editor.
* @since 1.9
*/
public interface ISVNEditor