Author: hwright
Date: Wed Mar 17 21:30:15 2010
New Revision: 924502
URL: http://svn.apache.org/viewvc?rev=924502&view=rev
Log:
JavaHL: Replace a hacked-together class with an enum that provides the same
functionality.
[ in subversion/bindings/javahl/ ]
* tests/org/apache/subversion/javahl/BasicTests.java:
Update tests to use the enum type.
* native/DiffSummaryReceiver.cpp
(onSummary): Treat the enum as an object, allocate and free it accordingly.
* native/EnumMapper.h,
native/EnumMapper.cpp
(mapSummarizeKind): New.
* src/org/apache/subversion/javahl/DiffSummary.java
(DiffSummary): Update constructor to take the right type.
(DiffKind): Rewrite as an enum, stripping out the enum facilities we now get
for free.
* src/org/tigris/subversion/javahl/DiffSummary.java
(DiffSummary): Update compat wrapper.
Modified:
subversion/trunk/subversion/bindings/javahl/native/DiffSummaryReceiver.cpp
subversion/trunk/subversion/bindings/javahl/native/EnumMapper.cpp
subversion/trunk/subversion/bindings/javahl/native/EnumMapper.h
subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/DiffSummary.java
subversion/trunk/subversion/bindings/javahl/src/org/tigris/subversion/javahl/DiffSummary.java
subversion/trunk/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java
Modified:
subversion/trunk/subversion/bindings/javahl/native/DiffSummaryReceiver.cpp
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/DiffSummaryReceiver.cpp?rev=924502&r1=924501&r2=924502&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/DiffSummaryReceiver.cpp
(original)
+++ subversion/trunk/subversion/bindings/javahl/native/DiffSummaryReceiver.cpp
Wed Mar 17 21:30:15 2010
@@ -88,7 +88,8 @@ DiffSummaryReceiver::onSummary(const svn
if (ctor == 0)
{
ctor = env->GetMethodID(clazz, "<init>",
- "(Ljava/lang/String;IZI)V");
+ "(Ljava/lang/String;"
+ "L"JAVA_PACKAGE"/DiffSummary$DiffKind;ZI)V");
if (JNIUtil::isJavaExceptionThrown() || ctor == 0)
return SVN_NO_ERROR;
}
@@ -97,15 +98,22 @@ DiffSummaryReceiver::onSummary(const svn
if (JNIUtil::isJavaExceptionThrown())
return SVN_NO_ERROR;
+ jobject jSummarizeKind = EnumMapper::mapSummarizeKind(diff->summarize_kind);
+ if (JNIUtil::isJavaExceptionThrown())
+ return SVN_NO_ERROR;
+
jint jNodeKind = EnumMapper::mapNodeKind(diff->node_kind);
// Actually tranform the DIFF parameter into a Java equivalent.
- jobject jDiffSummary = env->NewObject(clazz, ctor, jPath,
- (jint) diff->summarize_kind,
+ jobject jDiffSummary = env->NewObject(clazz, ctor, jPath, jSummarizeKind,
(jboolean) diff->prop_changed,
jNodeKind);
if (JNIUtil::isJavaExceptionThrown() || jDiffSummary == NULL)
return SVN_NO_ERROR;
+ env->DeleteLocalRef(jSummarizeKind);
+ if (JNIUtil::isJavaExceptionThrown())
+ return SVN_NO_ERROR;
+
env->DeleteLocalRef(jPath);
if (JNIUtil::isJavaExceptionThrown())
return SVN_NO_ERROR;
Modified: subversion/trunk/subversion/bindings/javahl/native/EnumMapper.cpp
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/EnumMapper.cpp?rev=924502&r1=924501&r2=924502&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/EnumMapper.cpp (original)
+++ subversion/trunk/subversion/bindings/javahl/native/EnumMapper.cpp Wed Mar
17 21:30:15 2010
@@ -535,6 +535,25 @@ svn_opt_revision_kind EnumMapper::toRevi
return svn_opt_revision_unspecified;
}
+jobject EnumMapper::mapSummarizeKind(svn_client_diff_summarize_kind_t sKind)
+{
+ switch (sKind)
+ {
+ default:
+ case svn_client_diff_summarize_kind_normal:
+ return mapEnum(JAVA_PACKAGE"/DiffSummary$DiffKind", "normal");
+
+ case svn_client_diff_summarize_kind_added:
+ return mapEnum(JAVA_PACKAGE"/DiffSummary$DiffKind", "added");
+
+ case svn_client_diff_summarize_kind_modified:
+ return mapEnum(JAVA_PACKAGE"/DiffSummary$DiffKind", "modified");
+
+ case svn_client_diff_summarize_kind_deleted:
+ return mapEnum(JAVA_PACKAGE"/DiffSummary$DiffKind", "deleted");
+ }
+}
+
jobject EnumMapper::mapEnum(const char *clazzName, const char *name)
{
std::string methodSig("(Ljava/lang/String;)L");
Modified: subversion/trunk/subversion/bindings/javahl/native/EnumMapper.h
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/EnumMapper.h?rev=924502&r1=924501&r2=924502&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/EnumMapper.h (original)
+++ subversion/trunk/subversion/bindings/javahl/native/EnumMapper.h Wed Mar 17
21:30:15 2010
@@ -59,6 +59,7 @@ class EnumMapper
static jobject mapDepth(svn_depth_t depth);
static jint mapOperation(svn_wc_operation_t);
static jobject mapTristate(svn_tristate_t);
+ static jobject mapSummarizeKind(svn_client_diff_summarize_kind_t);
private:
static jobject mapEnum(const char *clazzName, const char *name);
static jstring getName(const char *clazzName, jobject jenum);
Modified:
subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/DiffSummary.java
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/DiffSummary.java?rev=924502&r1=924501&r2=924502&view=diff
==============================================================================
---
subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/DiffSummary.java
(original)
+++
subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/DiffSummary.java
Wed Mar 17 21:30:15 2010
@@ -56,11 +56,11 @@ public class DiffSummary extends EventOb
* @param nodeKind The type of node which changed (corresponds to
* the {...@link NodeKind} enumeration).
*/
- public DiffSummary(String path, int diffKind, boolean propsChanged,
+ public DiffSummary(String path, DiffKind diffKind, boolean propsChanged,
int nodeKind)
{
super(path);
- this.diffKind = DiffKind.getInstance(diffKind);
+ this.diffKind = diffKind;
this.propsChanged = propsChanged;
this.nodeKind = nodeKind;
}
@@ -109,78 +109,26 @@ public class DiffSummary extends EventOb
/**
* The type of difference being summarized.
*/
- public static class DiffKind
+ public enum DiffKind
{
- // Corresponds to the svn_client_diff_summarize_kind_t enum.
- public static DiffKind NORMAL = new DiffKind(0);
- public static DiffKind ADDED = new DiffKind(1);
- public static DiffKind MODIFIED = new DiffKind(2);
- public static DiffKind DELETED = new DiffKind(3);
-
- private int kind;
-
- private DiffKind(int kind)
- {
- this.kind = kind;
- }
+ normal ("normal"),
+ added ("added"),
+ modified ("modified"),
+ deleted ("deleted");
/**
- * @return The appropriate instance.
- * @throws IllegalArgumentException If the diff kind is not
- * recognized.
+ * The description of the action.
*/
- public static DiffKind getInstance(int diffKind)
- throws IllegalArgumentException
- {
- switch (diffKind)
- {
- case 0:
- return NORMAL;
- case 1:
- return ADDED;
- case 2:
- return MODIFIED;
- case 3:
- return DELETED;
- default:
- throw new IllegalArgumentException("Diff kind " + diffKind +
- " not recognized");
- }
- }
+ private String description;
- /**
- * @param diffKind A DiffKind for comparison.
- * @return Whether both DiffKinds are of the same type.
- */
- public boolean equals(Object diffKind)
- {
- return (((DiffKind) diffKind).kind == this.kind);
- }
-
- public int hashCode()
+ DiffKind(String description)
{
- // Equivalent to new Integer(this.kind).hashCode().
- return this.kind;
+ this.description = description;
}
- /**
- * @return A textual representation of the type of diff.
- */
public String toString()
{
- switch (this.kind)
- {
- case 0:
- return "normal";
- case 1:
- return "added";
- case 2:
- return "modified";
- case 3:
- return "deleted";
- default:
- return "unknown";
- }
+ return description;
}
}
}
Modified:
subversion/trunk/subversion/bindings/javahl/src/org/tigris/subversion/javahl/DiffSummary.java
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/src/org/tigris/subversion/javahl/DiffSummary.java?rev=924502&r1=924501&r2=924502&view=diff
==============================================================================
---
subversion/trunk/subversion/bindings/javahl/src/org/tigris/subversion/javahl/DiffSummary.java
(original)
+++
subversion/trunk/subversion/bindings/javahl/src/org/tigris/subversion/javahl/DiffSummary.java
Wed Mar 17 21:30:15 2010
@@ -70,7 +70,7 @@ public class DiffSummary extends EventOb
*/
DiffSummary(org.apache.subversion.javahl.DiffSummary aSummary)
{
- this(aSummary.getPath(), aSummary.getDiffKind().hashCode(),
+ this(aSummary.getPath(), aSummary.getDiffKind().ordinal(),
aSummary.propsChanged(), aSummary.getNodeKind());
}
Modified:
subversion/trunk/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java?rev=924502&r1=924501&r2=924502&view=diff
==============================================================================
---
subversion/trunk/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java
(original)
+++
subversion/trunk/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java
Wed Mar 17 21:30:15 2010
@@ -3069,7 +3069,7 @@ public class BasicTests extends SVNTests
assertEquals("Incorrect path for " + BETA_PATH, BETA_PATH,
betaDiff.getPath());
assertTrue("Incorrect diff kind for " + BETA_PATH,
- DiffSummary.DiffKind.ADDED.equals(betaDiff.getDiffKind()));
+ betaDiff.getDiffKind() == DiffSummary.DiffKind.added);
assertEquals("Incorrect props changed notice for " + BETA_PATH,
false, betaDiff.propsChanged());
assertEquals("Incorrect node kind for " + BETA_PATH, 1,