You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by hw...@apache.org on 2010/03/19 15:17:27 UTC

svn commit: r925230 - in /subversion/trunk/subversion/bindings/javahl: native/CreateJ.cpp native/EnumMapper.cpp native/EnumMapper.h src/org/apache/subversion/javahl/ConflictDescriptor.java src/org/tigris/subversion/javahl/ConflictDescriptor.java

Author: hwright
Date: Fri Mar 19 14:17:26 2010
New Revision: 925230

URL: http://svn.apache.org/viewvc?rev=925230&view=rev
Log:
JavaHL: Enum'ize the various enums within a conflict descriptor.

[ in subversion/bindings/javahl/ ]
* native/CreateJ.cpp
  (ConflictDescriptor): Use objects when creating the kind, action, and reason
    fields.

* native/EnumMapper.h,
  native/EnumMapper.cpp
  (mapConflictKind, mapConflictAction, mapConflictReason): Return the
    appropriate objects.

* src/org/apache/subversion/javahl/ConflictDescriptor.java
  (Kind, Action, Reason): Update to be true enums.
  (getKind, getAction, getReason): Update return types.
  (kind, action, reason): Update types.

* src/org/tigris/subversion/javahl/ConflictDescriptor.java
  (ConflictDescriptor): Update constructor to use new types.

Modified:
    subversion/trunk/subversion/bindings/javahl/native/CreateJ.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/ConflictDescriptor.java
    subversion/trunk/subversion/bindings/javahl/src/org/tigris/subversion/javahl/ConflictDescriptor.java

Modified: subversion/trunk/subversion/bindings/javahl/native/CreateJ.cpp
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/CreateJ.cpp?rev=925230&r1=925229&r2=925230&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/CreateJ.cpp (original)
+++ subversion/trunk/subversion/bindings/javahl/native/CreateJ.cpp Fri Mar 19 14:17:26 2010
@@ -48,9 +48,12 @@ CreateJ::ConflictDescriptor(const svn_wc
 
   if (ctor == 0)
     {
-      ctor = env->GetMethodID(clazz, "<init>", "(Ljava/lang/String;I"
+      ctor = env->GetMethodID(clazz, "<init>", "(Ljava/lang/String;"
+                              "L"JAVA_PACKAGE"/ConflictDescriptor$Kind;"
                               "L"JAVA_PACKAGE"/NodeKind;"
-                              "Ljava/lang/String;ZLjava/lang/String;III"
+                              "Ljava/lang/String;ZLjava/lang/String;"
+                              "L"JAVA_PACKAGE"/ConflictDescriptor$Action;"
+                              "L"JAVA_PACKAGE"/ConflictDescriptor$Reason;I"
                               "Ljava/lang/String;Ljava/lang/String;"
                               "Ljava/lang/String;Ljava/lang/String;"
                               "L"JAVA_PACKAGE"/ConflictVersion;"
@@ -89,14 +92,21 @@ CreateJ::ConflictDescriptor(const svn_wc
   jobject jnodeKind = EnumMapper::mapNodeKind(desc->node_kind);
   if (JNIUtil::isJavaExceptionThrown())
     return NULL;
+  jobject jconflictKind = EnumMapper::mapConflictKind(desc->kind);
+  if (JNIUtil::isJavaExceptionThrown())
+    return NULL;
+  jobject jconflictAction = EnumMapper::mapConflictAction(desc->action);
+  if (JNIUtil::isJavaExceptionThrown())
+    return NULL;
+  jobject jconflictReason = EnumMapper::mapConflictReason(desc->reason);
+  if (JNIUtil::isJavaExceptionThrown())
+    return NULL;
 
   // Instantiate the conflict descriptor.
-  jobject jdesc = env->NewObject(clazz, ctor, jpath,
-                                 EnumMapper::mapConflictKind(desc->kind),
+  jobject jdesc = env->NewObject(clazz, ctor, jpath, jconflictKind,
                                  jnodeKind, jpropertyName,
                                  (jboolean) desc->is_binary, jmimeType,
-                                 EnumMapper::mapConflictAction(desc->action),
-                                 EnumMapper::mapConflictReason(desc->reason),
+                                 jconflictAction, jconflictReason,
                                  EnumMapper::mapOperation(desc->operation),
                                  jbasePath, jreposPath, juserPath,
                                  jmergedPath, jsrcLeft, jsrcRight);
@@ -107,6 +117,15 @@ CreateJ::ConflictDescriptor(const svn_wc
   if (JNIUtil::isJavaExceptionThrown())
     return NULL;
 
+  env->DeleteLocalRef(jconflictKind);
+  if (JNIUtil::isJavaExceptionThrown())
+    return NULL;
+  env->DeleteLocalRef(jconflictAction);
+  if (JNIUtil::isJavaExceptionThrown())
+    return NULL;
+  env->DeleteLocalRef(jconflictReason);
+  if (JNIUtil::isJavaExceptionThrown())
+    return NULL;
   env->DeleteLocalRef(jnodeKind);
   if (JNIUtil::isJavaExceptionThrown())
     return NULL;

Modified: subversion/trunk/subversion/bindings/javahl/native/EnumMapper.cpp
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/EnumMapper.cpp?rev=925230&r1=925229&r2=925230&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/EnumMapper.cpp (original)
+++ subversion/trunk/subversion/bindings/javahl/native/EnumMapper.cpp Fri Mar 19 14:17:26 2010
@@ -368,57 +368,57 @@ jobject EnumMapper::mapStatusKind(svn_wc
     }
 }
 
-jint EnumMapper::mapConflictKind(svn_wc_conflict_kind_t kind)
+jobject EnumMapper::mapConflictKind(svn_wc_conflict_kind_t kind)
 {
   switch (kind)
     {
     case svn_wc_conflict_kind_text:
     default:
-      return org_apache_subversion_javahl_ConflictDescriptor_Kind_text;
+      return mapEnum(JAVA_PACKAGE"/ConflictDescriptor$Kind", "text");
 
     case svn_wc_conflict_kind_property:
-      return org_apache_subversion_javahl_ConflictDescriptor_Kind_property;
+      return mapEnum(JAVA_PACKAGE"/ConflictDescriptor$Kind", "property");
     }
 }
 
-jint EnumMapper::mapConflictAction(svn_wc_conflict_action_t action)
+jobject EnumMapper::mapConflictAction(svn_wc_conflict_action_t action)
 {
   switch (action)
     {
     case svn_wc_conflict_action_edit:
     default:
-      return org_apache_subversion_javahl_ConflictDescriptor_Action_edit;
+      return mapEnum(JAVA_PACKAGE"/ConflictDescriptor$Action", "edit");
 
     case svn_wc_conflict_action_add:
-      return org_apache_subversion_javahl_ConflictDescriptor_Action_add;
+      return mapEnum(JAVA_PACKAGE"/ConflictDescriptor$Action", "add");
 
     case svn_wc_conflict_action_delete:
-      return org_apache_subversion_javahl_ConflictDescriptor_Action_delete;
+      return mapEnum(JAVA_PACKAGE"/ConflictDescriptor$Action", "delete");
     }
 }
 
-jint EnumMapper::mapConflictReason(svn_wc_conflict_reason_t reason)
+jobject EnumMapper::mapConflictReason(svn_wc_conflict_reason_t reason)
 {
   switch (reason)
     {
     case svn_wc_conflict_reason_edited:
     default:
-      return org_apache_subversion_javahl_ConflictDescriptor_Reason_edited;
+      return mapEnum(JAVA_PACKAGE"/ConflictDescriptor$Reason", "edited");
 
     case svn_wc_conflict_reason_obstructed:
-      return org_apache_subversion_javahl_ConflictDescriptor_Reason_obstructed;
+      return mapEnum(JAVA_PACKAGE"/ConflictDescriptor$Reason", "obstructed");
 
     case svn_wc_conflict_reason_deleted:
-      return org_apache_subversion_javahl_ConflictDescriptor_Reason_deleted;
+      return mapEnum(JAVA_PACKAGE"/ConflictDescriptor$Reason", "deleted");
 
     case svn_wc_conflict_reason_missing:
-      return org_apache_subversion_javahl_ConflictDescriptor_Reason_missing;
+      return mapEnum(JAVA_PACKAGE"/ConflictDescriptor$Reason", "missing");
 
     case svn_wc_conflict_reason_unversioned:
-      return org_apache_subversion_javahl_ConflictDescriptor_Reason_unversioned;
+      return mapEnum(JAVA_PACKAGE"/ConflictDescriptor$Reason", "unversioned");
 
     case svn_wc_conflict_reason_added:
-      return org_apache_subversion_javahl_ConflictDescriptor_Reason_added;
+      return mapEnum(JAVA_PACKAGE"/ConflictDescriptor$Reason", "added");
     }
 }
 

Modified: subversion/trunk/subversion/bindings/javahl/native/EnumMapper.h
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/EnumMapper.h?rev=925230&r1=925229&r2=925230&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/EnumMapper.h (original)
+++ subversion/trunk/subversion/bindings/javahl/native/EnumMapper.h Fri Mar 19 14:17:26 2010
@@ -53,9 +53,9 @@ class EnumMapper
   static jint mapNotifyLockState(svn_wc_notify_lock_state_t state);
   static jobject mapStatusKind(svn_wc_status_kind svnKind);
   static jint mapScheduleKind(svn_wc_schedule_t schedule);
-  static jint mapConflictKind(svn_wc_conflict_kind_t kind);
-  static jint mapConflictAction(svn_wc_conflict_action_t action);
-  static jint mapConflictReason(svn_wc_conflict_reason_t reason);
+  static jobject mapConflictKind(svn_wc_conflict_kind_t kind);
+  static jobject mapConflictAction(svn_wc_conflict_action_t action);
+  static jobject mapConflictReason(svn_wc_conflict_reason_t reason);
   static jobject mapDepth(svn_depth_t depth);
   static jint mapOperation(svn_wc_operation_t);
   static jobject mapTristate(svn_tristate_t);

Modified: subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/ConflictDescriptor.java
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/ConflictDescriptor.java?rev=925230&r1=925229&r2=925230&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/ConflictDescriptor.java (original)
+++ subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/ConflictDescriptor.java Fri Mar 19 14:17:26 2010
@@ -33,10 +33,7 @@ public class ConflictDescriptor
 {
     private String path;
 
-    /**
-     * @see .Kind
-     */
-    private int conflictKind;
+    private Kind conflictKind;
 
     private NodeKind nodeKind;
 
@@ -45,22 +42,8 @@ public class ConflictDescriptor
     private boolean isBinary;
     private String mimeType;
 
-    // svn_wc_conflict_description_t also provides us with an
-    // svn_wc_adm_access_t *.  However, that is only useful to
-    // JNI-based APIs written against svn_wc.h.  So, we don't (yet)
-    // expose that to JavaHL.  We could expose it is a long
-    // representing the memory address of the struct, which could be
-    // passed off to other JNI APIs.
-
-    /**
-     * @see #Action
-     */
-    private int action;
-
-    /**
-     * @see #Reason
-     */
-    private int reason;
+    private Action action;
+    private Reason reason;
 
     // File paths, present only when the conflict involves the merging
     // of two files descended from a common ancestor, here are the
@@ -89,9 +72,9 @@ public class ConflictDescriptor
     private ConflictVersion srcRightVersion;
 
     /** This constructor should only be called from JNI code. */
-    public ConflictDescriptor(String path, int conflictKind, NodeKind nodeKind,
+    public ConflictDescriptor(String path, Kind conflictKind, NodeKind nodeKind,
                        String propertyName, boolean isBinary, String mimeType,
-                       int action, int reason, int operation,
+                       Action action, Reason reason, int operation,
                        String basePath, String theirPath,
                        String myPath, String mergedPath,
                        ConflictVersion srcLeft, ConflictVersion srcRight)
@@ -118,17 +101,11 @@ public class ConflictDescriptor
         return path;
     }
 
-    /**
-     * @see .Kind
-     */
-    public int getKind()
+    public Kind getKind()
     {
         return conflictKind;
     }
 
-    /**
-     * @see NodeKind
-     */
     public NodeKind getNodeKind()
     {
         return nodeKind;
@@ -149,18 +126,12 @@ public class ConflictDescriptor
         return mimeType;
     }
 
-    /**
-     * @see .Action
-     */
-    public int getAction()
+    public Action getAction()
     {
         return action;
     }
 
-    /**
-     * @see .Reason
-     */
-    public int getReason()
+    public Reason getReason()
     {
         return reason;
     }
@@ -201,76 +172,76 @@ public class ConflictDescriptor
     }
 
     /**
-     * Poor man's enum for <code>svn_wc_conflict_kind_t</code>.
+     * Rich man's enum for <code>svn_wc_conflict_kind_t</code>.
      */
-    public final class Kind
+    public enum Kind
     {
         /**
          * Attempting to change text or props.
          */
-        public static final int text = 0;
+        text,
 
         /**
          * Attempting to add object.
          */
-        public static final int property = 1;
+        property;
     }
 
     /**
-     * Poor man's enum for <code>svn_wc_conflict_action_t</code>.
+     * Rich man's enum for <code>svn_wc_conflict_action_t</code>.
      */
-    public final class Action
+    public enum Action
     {
         /**
          * Attempting to change text or props.
          */
-        public static final int edit = 0;
+        edit,
 
         /**
          * Attempting to add object.
          */
-        public static final int add = 1;
+        add,
 
         /**
          * Attempting to delete object.
          */
-        public static final int delete = 2;
+        delete;
     }
 
     /**
-     * Poor man's enum for <code>svn_wc_conflict_reason_t</code>.
+     * Rich man's enum for <code>svn_wc_conflict_reason_t</code>.
      */
-    public final class Reason
+    public enum Reason
     {
         /**
          * Local edits are already present.
          */
-        public static final int edited = 0;
+        edited,
 
         /**
          * Another object is in the way.
          */
-        public static final int obstructed = 1;
+        obstructed,
 
         /**
          * Object is already schedule-delete.
          */
-        public static final int deleted = 2;
+        deleted,
 
         /**
          * Object is unknown or missing.
          */
-        public static final int missing = 3;
+        missing,
 
         /**
          * Object is unversioned.
          */
-        public static final int unversioned = 4;
+        unversioned,
 
         /**
          * Object is already added or schedule-add.
          * @since New in 1.6.
          */
-        public static final int added = 5;
+        added;
     }
 }

Modified: subversion/trunk/subversion/bindings/javahl/src/org/tigris/subversion/javahl/ConflictDescriptor.java
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/src/org/tigris/subversion/javahl/ConflictDescriptor.java?rev=925230&r1=925229&r2=925230&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/src/org/tigris/subversion/javahl/ConflictDescriptor.java (original)
+++ subversion/trunk/subversion/bindings/javahl/src/org/tigris/subversion/javahl/ConflictDescriptor.java Fri Mar 19 14:17:26 2010
@@ -119,12 +119,12 @@ public class ConflictDescriptor
     public ConflictDescriptor(org.apache.subversion.javahl.ConflictDescriptor
                                                                 aDesc)
     {
-        this(aDesc.getPath(), aDesc.getKind(),
+        this(aDesc.getPath(), aDesc.getKind().ordinal(),
              NodeKind.fromApache(aDesc.getNodeKind()),
              aDesc.getPropertyName(), aDesc.isBinary(), aDesc.getMIMEType(),
-             aDesc.getAction(), aDesc.getReason(), aDesc.getOperation(),
-             aDesc.getBasePath(), aDesc.getTheirPath(), aDesc.getMyPath(),
-             aDesc.getMergedPath(),
+             aDesc.getAction().ordinal(), aDesc.getReason().ordinal(),
+             aDesc.getOperation(), aDesc.getBasePath(), aDesc.getTheirPath(),
+             aDesc.getMyPath(), aDesc.getMergedPath(),
              new ConflictVersion(aDesc.getSrcLeftVersion()),
              new ConflictVersion(aDesc.getSrcRightVersion()));
     }