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/21 12:58:17 UTC
svn commit: r1544144 - in
/subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl: ./
native/jniwrapper/jni_env.hpp native/jniwrapper/jni_io_stream.cpp
native/jniwrapper/jni_stack.hpp
native/org_apache_subversion_javahl_util_PropLib.cpp
Author: brane
Date: Thu Nov 21 11:58:17 2013
New Revision: 1544144
URL: http://svn.apache.org/r1544144
Log:
On the javahl-1.8-extensions branch: Sync JavaHL with trunk to r1544138.
Modified:
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/ (props changed)
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/jniwrapper/jni_env.hpp
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_stack.hpp
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/org_apache_subversion_javahl_util_PropLib.cpp
Propchange: subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/
------------------------------------------------------------------------------
Merged /subversion/trunk/subversion/bindings/javahl:r1544061-1544138
Modified: subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/jniwrapper/jni_env.hpp
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/jniwrapper/jni_env.hpp?rev=1544144&r1=1544143&r2=1544144&view=diff
==============================================================================
--- subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/jniwrapper/jni_env.hpp (original)
+++ subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/jniwrapper/jni_env.hpp Thu Nov 21 11:58:17 2013
@@ -204,7 +204,7 @@ public:
}
/** Wrapped JNI function. */
- void DeleteGlobalRef(jobject obj) const
+ void DeleteGlobalRef(jobject obj) const throw()
{
m_env->DeleteGlobalRef(obj);
}
@@ -217,7 +217,7 @@ public:
}
/** Wrapped JNI function. */
- void PopLocalFrame() const
+ void PopLocalFrame() const throw()
{
m_env->PopLocalFrame(NULL);
}
@@ -280,7 +280,7 @@ public:
}
/** Wrapped JNI function. */
- jboolean IsInstanceOf(jobject obj, jclass cls) const
+ jboolean IsInstanceOf(jobject obj, jclass cls) const throw()
{
return m_env->IsInstanceOf(obj, cls);
}
@@ -346,7 +346,7 @@ public:
const char* text = m_env->GetStringUTFChars(str, is_copy);
check_java_exception();
if (!text)
- throw std::runtime_error(
+ throw_java_out_of_memory(
_("Could not get contents of Java String"));
return text;
}
@@ -358,7 +358,6 @@ public:
throw std::logic_error(
_("Can not release contents of a null String"));
m_env->ReleaseStringUTFChars(str, new_text);
- check_java_exception();
}
/** Wrapped JNI function. */
@@ -471,7 +470,7 @@ public:
jsize GetArrayLength(jarray array) const
{
if (!array)
- return -1;
+ return 0;
return m_env->GetArrayLength(array);
}
@@ -479,9 +478,8 @@ public:
jobjectArray NewObjectArray(jsize length, jclass cls, jobject init) const
{
jobjectArray array = m_env->NewObjectArray(length, cls, init);
- check_java_exception();
if (!array)
- throw std::runtime_error(_("Could not create Object array"));
+ throw_java_out_of_memory(_("Could not create Object array"));
return array;
}
@@ -506,24 +504,28 @@ public:
T##Array New##N##Array(jsize length) const \
{ \
T##Array array = m_env->New##N##Array(length); \
- check_java_exception(); \
if (!array) \
throw_java_out_of_memory(_("Could not create "#T" array")); \
return array; \
} \
T* Get##N##ArrayElements(T##Array array, jboolean* is_copy) const \
{ \
+ if (!array) \
+ return NULL; \
+ \
T* data = m_env->Get##N##ArrayElements(array, is_copy); \
check_java_exception(); \
if (!data) \
- throw std::runtime_error( \
- _("Could not get "#T" array contents")); \
+ throw_java_out_of_memory( \
+ _("Could not get "#N" array contents")); \
return data; \
} \
void Release##N##ArrayElements(T##Array array, T* data, jint mode) const \
{ \
+ if (!array) \
+ throw std::logic_error( \
+ _("Can not release contents of a null "#T"Array")); \
m_env->Release##N##ArrayElements(array, data, mode); \
- check_java_exception(); \
}
SVN_JAVAHL_JNIWRAPPER_PRIMITIVE_TYPE_ARRAY(jboolean, Boolean)
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=1544144&r1=1544143&r2=1544144&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 Thu Nov 21 11:58:17 2013
@@ -172,6 +172,9 @@ svn_stream_t*
InputStream::get_global_stream(Env env, jobject jstream,
const SVN::Pool& pool)
{
+ if (!jstream)
+ return NULL;
+
const bool has_mark = InputStream(env, jstream).mark_supported();
std::auto_ptr<GlobalObject> baton(new GlobalObject(env, jstream));
@@ -194,6 +197,9 @@ InputStream::get_global_stream(Env env,
svn_stream_t* InputStream::get_stream(const SVN::Pool& pool)
{
+ if (!m_jthis)
+ return NULL;
+
const bool has_mark = mark_supported();
svn_stream_t* const stream = svn_stream_create(this, pool.getPool());
@@ -217,6 +223,9 @@ svn_stream_t*
OutputStream::get_global_stream(Env env, jobject jstream,
const SVN::Pool& pool)
{
+ if (!jstream)
+ return NULL;
+
std::auto_ptr<GlobalObject> baton(new GlobalObject(env, jstream));
svn_stream_t* const stream = svn_stream_create(baton.get(), pool.getPool());
@@ -231,6 +240,9 @@ OutputStream::get_global_stream(Env env,
svn_stream_t* OutputStream::get_stream(const SVN::Pool& pool)
{
+ if (!m_jthis)
+ return NULL;
+
svn_stream_t* const stream = svn_stream_create(this, pool.getPool());
svn_stream_set_write(stream, stream_write);
svn_stream_set_close(stream, stream_close_output);
Modified: subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/jniwrapper/jni_stack.hpp
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/jniwrapper/jni_stack.hpp?rev=1544144&r1=1544143&r2=1544144&view=diff
==============================================================================
--- subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/jniwrapper/jni_stack.hpp (original)
+++ subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/jniwrapper/jni_stack.hpp Thu Nov 21 11:58:17 2013
@@ -176,6 +176,21 @@
return svn_error_create((C), NULL, msg); \
}
+/**
+ * Exception checker for the oldstyle implementation that does not use
+ * the @c Java::Env environment wrapper.
+ *
+ * @param E A wrapped environment (@c Java::Env) instance.
+ *
+ * @since New in 1.9.
+ */
+#define SVN_JAVAHL_OLDSTYLE_EXCEPTION_CHECK(E) \
+ do { \
+ if ((E).ExceptionCheck()) \
+ throw ::Java::SignalExceptionThrown(); \
+ } while(0)
+
+
namespace Java {
/**
Modified: subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/org_apache_subversion_javahl_util_PropLib.cpp
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/org_apache_subversion_javahl_util_PropLib.cpp?rev=1544144&r1=1544143&r2=1544144&view=diff
==============================================================================
--- subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/org_apache_subversion_javahl_util_PropLib.cpp (original)
+++ subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/org_apache_subversion_javahl_util_PropLib.cpp Thu Nov 21 11:58:17 2013
@@ -29,13 +29,15 @@
#include "../include/org_apache_subversion_javahl_util_PropLib.h"
-#include "JNIStackElement.h"
-#include "JNIStringHolder.h"
-#include "JNIByteArray.h"
-#include "JNIUtil.h"
-#include "InputStream.h"
+#include "jniwrapper/jni_stack.hpp"
+#include "jniwrapper/jni_array.hpp"
+#include "jniwrapper/jni_list.hpp"
+#include "jniwrapper/jni_string.hpp"
+#include "jniwrapper/jni_io_stream.hpp"
+#include "ExternalItem.hpp"
+#include "SubversionException.hpp"
+
#include "EnumMapper.h"
-#include "Path.h"
#include "Pool.h"
#include "svn_props.h"
@@ -82,74 +84,7 @@ private:
const char* m_mime_type;
svn_stream_t* m_contents;
};
-} // anonymous namespace
-
-
-JNIEXPORT jbyteArray JNICALL
-Java_org_apache_subversion_javahl_util_PropLib_checkNodeProp(
- JNIEnv* env, jobject jthis,
- jstring jname, jbyteArray jvalue, jstring jpath, jobject jkind,
- jstring jmime_type, jobject jfile_contents,
- jboolean jskip_some_checks)
-{
- JNIEntry(PropLib, checkLocalProp);
-
- JNIStringHolder name(jname);
- if (JNIUtil::isJavaExceptionThrown())
- return NULL;
-
- JNIByteArray value(jvalue);
- if (JNIUtil::isJavaExceptionThrown())
- return NULL;
-
- JNIStringHolder path(jpath);
- if (JNIUtil::isJavaExceptionThrown())
- return NULL;
-
- svn_node_kind_t kind = EnumMapper::toNodeKind(jkind);
- if (JNIUtil::isJavaExceptionThrown())
- return NULL;
-
- JNIStringHolder mime_type(jmime_type);
- if (JNIUtil::isJavaExceptionThrown())
- return NULL;
-
- InputStream contents(jfile_contents);
- if (JNIUtil::isJavaExceptionThrown())
- return NULL;
-
- // Using a "global" request pool since we don't keep a context with
- // its own pool around for these functions.
- SVN::Pool pool;
-
- PropGetter getter(mime_type.c_str(),
- (jfile_contents ? contents.getStream(pool) : NULL));
-
- svn_string_t propval;
- propval.data = reinterpret_cast<const char*>(value.getBytes());
- propval.len = value.getLength();
-
- const svn_string_t* canonval;
- SVN_JNI_ERR(svn_wc_canonicalize_svn_prop(
- &canonval, name.c_str(), &propval, path.c_str(),
- kind, svn_boolean_t(jskip_some_checks),
- PropGetter::callback, &getter,
- pool.getPool()),
- NULL);
-
- return JNIUtil::makeJByteArray(canonval->data, int(canonval->len));
-}
-
-
-#include "jniwrapper/jni_stack.hpp"
-#include "jniwrapper/jni_array.hpp"
-#include "jniwrapper/jni_list.hpp"
-#include "jniwrapper/jni_string.hpp"
-#include "ExternalItem.hpp"
-#include "SubversionException.hpp"
-
-namespace {
struct FormatRevision
{
explicit FormatRevision(const svn_opt_revision_t* const& revarg,
@@ -278,6 +213,51 @@ private:
} // anoymous namespace
+JNIEXPORT jbyteArray JNICALL
+Java_org_apache_subversion_javahl_util_PropLib_checkNodeProp(
+ JNIEnv* jenv, jobject jthis,
+ jstring jname, jbyteArray jvalue, jstring jpath, jobject jkind,
+ jstring jmime_type, jobject jfile_contents,
+ jboolean jskip_some_checks)
+{
+ SVN_JAVAHL_JNI_TRY(PropLib, checkLocalProp)
+ {
+ const Java::Env env(jenv);
+
+ const svn_node_kind_t kind = EnumMapper::toNodeKind(jkind);
+ SVN_JAVAHL_OLDSTYLE_EXCEPTION_CHECK(env);
+
+ const Java::String name_str(env, jname);
+ const Java::ByteArray value(env, jvalue);
+ const Java::String path_str(env, jpath);
+ const Java::String mime_type_str(env, jmime_type);
+ Java::InputStream file_contents(env, jfile_contents);
+
+ // Using a "global" request pool since we don't keep a context
+ // with its own pool around for these functions.
+ SVN::Pool pool;
+
+ const Java::String::Contents name(name_str);
+ const Java::String::Contents path(path_str);
+ const Java::String::Contents mime_type(mime_type_str);
+ PropGetter getter(mime_type.c_str(), file_contents.get_stream(pool));
+
+ const svn_string_t* canonval;
+ SVN_JAVAHL_CHECK(env,
+ svn_wc_canonicalize_svn_prop(
+ &canonval, name.c_str(),
+ Java::ByteArray::Contents(value).get_string(pool),
+ path.c_str(), kind,
+ svn_boolean_t(jskip_some_checks),
+ PropGetter::callback, &getter,
+ pool.getPool()));
+ return Java::ByteArray(env, canonval->data, jint(canonval->len)).get();
+ }
+ SVN_JAVAHL_JNI_CATCH;
+ return NULL;
+}
+
+
JNIEXPORT jobject JNICALL
Java_org_apache_subversion_javahl_util_PropLib_parseExternals(
JNIEnv* jenv, jobject jthis,