Author: pcl
Date: Mon Aug 20 19:21:44 2007
New Revision: 567911

URL: http://svn.apache.org/viewvc?rev=567911&view=rev
Log:
OPENJPA-293. Fixed bug with property access and booleans and 'is' accessors.

Modified:
    
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/PCEnhancer.java
    
openjpa/trunk/openjpa-kernel/src/main/resources/org/apache/openjpa/enhance/localizer.properties

Modified: 
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/PCEnhancer.java
URL: 
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/PCEnhancer.java?rev=567911&r1=567910&r2=567911&view=diff
==============================================================================
--- 
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/PCEnhancer.java
 (original)
+++ 
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/PCEnhancer.java
 Mon Aug 20 19:21:44 2007
@@ -658,13 +658,6 @@
     }
 
     /**
-     * Return the name of the getter method for the given field.
-     */
-    private static String getGetterName(FieldMetaData fmd) {
-        return "get" + StringUtils.capitalize(fmd.getName());
-    }
-
-    /**
      * Return the field returned by the given method, or null if none.
      * Package-protected and static for testing.
      */
@@ -3325,8 +3318,12 @@
     }
 
     private boolean setVisibilityToSuperMethod(BCMethod method) {
-        BCMethod superMeth = _managedType.getMethods(method.getName(),
-            method.getParamTypes())[0];
+        BCMethod[] methods = _managedType.getMethods(method.getName(),
+            method.getParamTypes());
+        if (methods.length == 0)
+            throw new UserException(_loc.get("no-accessor",
+                _managedType.getName(), method.getName()));
+        BCMethod superMeth = methods[0];
         if (superMeth.isPrivate()) {
             method.makePrivate();
             return true;
@@ -3348,7 +3345,9 @@
      * performs any necessary field tracking.
      */
     private void addSubclassGetMethod(FieldMetaData fmd) {
-        String methName = getGetterName(fmd);
+        String methName = "get" + StringUtils.capitalize(fmd.getName());
+        if (_managedType.getMethods(methName, new Class[0]).length == 0)
+            methName = "is" + StringUtils.capitalize(fmd.getName());
         BCMethod getter = _pc.declareMethod(methName, fmd.getDeclaredType(),
             null);
         setVisibilityToSuperMethod(getter);

Modified: 
openjpa/trunk/openjpa-kernel/src/main/resources/org/apache/openjpa/enhance/localizer.properties
URL: 
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/resources/org/apache/openjpa/enhance/localizer.properties?rev=567911&r1=567910&r2=567911&view=diff
==============================================================================
--- 
openjpa/trunk/openjpa-kernel/src/main/resources/org/apache/openjpa/enhance/localizer.properties
 (original)
+++ 
openjpa/trunk/openjpa-kernel/src/main/resources/org/apache/openjpa/enhance/localizer.properties
 Mon Aug 20 19:21:44 2007
@@ -194,3 +194,4 @@
     lazily loaded, but lazy loading is not available for classes that use 
field\
     access when not running the OpenJPA enhancer or when dynamic class \
     redefinition is not available.
+no-accessor: Could not find method called {0} in type {1}.
\ No newline at end of file


Reply via email to