You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by aa...@apache.org on 2006/11/30 12:40:23 UTC

svn commit: r480894 - in /incubator/cayenne/main/trunk/core/cayenne-jdk1.5: ./ src/main/java/org/apache/cayenne/enhancer/

Author: aadamchik
Date: Thu Nov 30 03:40:22 2006
New Revision: 480894

URL: http://svn.apache.org/viewvc?view=rev&rev=480894
Log:
CAY-713: Improved Meaningful PK support
(CAY-713 accomplished 
+ switching JPA enhancer to the new generic pojo enhancement code
+ uncommenting a number of JPA relationship itests that work now with the new enhancer)

Modified:
    incubator/cayenne/main/trunk/core/cayenne-jdk1.5/.classpath
    incubator/cayenne/main/trunk/core/cayenne-jdk1.5/src/main/java/org/apache/cayenne/enhancer/AccessorVisitor.java
    incubator/cayenne/main/trunk/core/cayenne-jdk1.5/src/main/java/org/apache/cayenne/enhancer/CayenneEnhancerVisitorFactory.java
    incubator/cayenne/main/trunk/core/cayenne-jdk1.5/src/main/java/org/apache/cayenne/enhancer/PersistentAccessorVisitor.java

Modified: incubator/cayenne/main/trunk/core/cayenne-jdk1.5/.classpath
URL: http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/core/cayenne-jdk1.5/.classpath?view=diff&rev=480894&r1=480893&r2=480894
==============================================================================
--- incubator/cayenne/main/trunk/core/cayenne-jdk1.5/.classpath (original)
+++ incubator/cayenne/main/trunk/core/cayenne-jdk1.5/.classpath Thu Nov 30 03:40:22 2006
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
 	<classpathentry kind="src" path="src/main/java"/>
-	<classpathentry output="target/test-classes" kind="src" path="src/test/java"/>
+	<classpathentry kind="src" path="src/test/java"/>
 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
 	<classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/>
 	<classpathentry kind="output" path="target/classes"/>

Modified: incubator/cayenne/main/trunk/core/cayenne-jdk1.5/src/main/java/org/apache/cayenne/enhancer/AccessorVisitor.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/core/cayenne-jdk1.5/src/main/java/org/apache/cayenne/enhancer/AccessorVisitor.java?view=diff&rev=480894&r1=480893&r2=480894
==============================================================================
--- incubator/cayenne/main/trunk/core/cayenne-jdk1.5/src/main/java/org/apache/cayenne/enhancer/AccessorVisitor.java (original)
+++ incubator/cayenne/main/trunk/core/cayenne-jdk1.5/src/main/java/org/apache/cayenne/enhancer/AccessorVisitor.java Thu Nov 30 03:40:22 2006
@@ -40,6 +40,8 @@
 
     private static final Pattern SETTER_PATTERN = Pattern.compile("^set([A-Z])(.*)$");
 
+    private EnhancementHelper helper;
+
     public static String propertyNameForGetter(String getterName) {
         Matcher getMatch = GETTER_PATTERN.matcher(getterName);
         if (getMatch.matches()) {
@@ -61,12 +63,42 @@
 
     public AccessorVisitor(ClassVisitor cw) {
         super(cw);
+        this.helper = new EnhancementHelper(this);
+    }
+
+    protected abstract boolean isEnhancedProperty(String property);
+
+    protected abstract boolean isLazyFaulted(String property);
+
+    @Override
+    public void visit(
+            int version,
+            int access,
+            String name,
+            String signature,
+            String superName,
+            String[] interfaces) {
+
+        helper.reset(name);
+        super.visit(version, access, name, signature, superName, interfaces);
     }
 
     protected MethodVisitor visitGetter(
             MethodVisitor mv,
             String property,
             Type propertyType) {
+
+        if (isEnhancedProperty(property)) {
+            if (isLazyFaulted(property)) {
+                // inject fault flag field
+                helper.createField(Boolean.TYPE, "faultResolved_" + property, true);
+                return new GetterVisitor(mv, helper, property, true);
+            }
+            else {
+                return new GetterVisitor(mv, helper, property, false);
+            }
+        }
+
         return mv;
     }
 
@@ -74,6 +106,11 @@
             MethodVisitor mv,
             String property,
             Type propertyType) {
+
+        if (isEnhancedProperty(property)) {
+            return new SetterVisitor(mv, helper, property, propertyType);
+        }
+
         return mv;
     }
 

Modified: incubator/cayenne/main/trunk/core/cayenne-jdk1.5/src/main/java/org/apache/cayenne/enhancer/CayenneEnhancerVisitorFactory.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/core/cayenne-jdk1.5/src/main/java/org/apache/cayenne/enhancer/CayenneEnhancerVisitorFactory.java?view=diff&rev=480894&r1=480893&r2=480894
==============================================================================
--- incubator/cayenne/main/trunk/core/cayenne-jdk1.5/src/main/java/org/apache/cayenne/enhancer/CayenneEnhancerVisitorFactory.java (original)
+++ incubator/cayenne/main/trunk/core/cayenne-jdk1.5/src/main/java/org/apache/cayenne/enhancer/CayenneEnhancerVisitorFactory.java Thu Nov 30 03:40:22 2006
@@ -59,12 +59,11 @@
         }
 
         // create enhancer chain
-
         PersistentInterfaceVisitor e1 = new PersistentInterfaceVisitor(out);
         PersistentAccessorVisitor e2 = new PersistentAccessorVisitor(e1, entity);
 
-        // this ensures that enhanced and original class have compatible serialized format
-        // even if no serialVersionUID is defined by the user
+        // this ensures that both enhanced and original classes have compatible serialized
+        // format even if no serialVersionUID is defined by the user
         SerialVersionUIDAdder e3 = new SerialVersionUIDAdder(e2);
         return e3;
     }

Modified: incubator/cayenne/main/trunk/core/cayenne-jdk1.5/src/main/java/org/apache/cayenne/enhancer/PersistentAccessorVisitor.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/core/cayenne-jdk1.5/src/main/java/org/apache/cayenne/enhancer/PersistentAccessorVisitor.java?view=diff&rev=480894&r1=480893&r2=480894
==============================================================================
--- incubator/cayenne/main/trunk/core/cayenne-jdk1.5/src/main/java/org/apache/cayenne/enhancer/PersistentAccessorVisitor.java (original)
+++ incubator/cayenne/main/trunk/core/cayenne-jdk1.5/src/main/java/org/apache/cayenne/enhancer/PersistentAccessorVisitor.java Thu Nov 30 03:40:22 2006
@@ -20,8 +20,6 @@
 
 import org.apache.cayenne.map.ObjEntity;
 import org.objectweb.asm.ClassVisitor;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Type;
 
 /**
  * Accessor enhancer that enhances getters and setters mapped in a given {@link ObjEntity}.
@@ -32,56 +30,20 @@
 public class PersistentAccessorVisitor extends AccessorVisitor {
 
     private ObjEntity entity;
-    private EnhancementHelper helper;
 
     public PersistentAccessorVisitor(ClassVisitor visitor, ObjEntity entity) {
         super(visitor);
         this.entity = entity;
-        this.helper = new EnhancementHelper(this);
     }
 
     @Override
-    public void visit(
-            int version,
-            int access,
-            String name,
-            String signature,
-            String superName,
-            String[] interfaces) {
-
-        helper.reset(name);
-        super.visit(version, access, name, signature, superName, interfaces);
+    protected boolean isEnhancedProperty(String property) {
+        return entity.getAttribute(property) != null
+                || entity.getRelationship(property) != null;
     }
 
     @Override
-    protected MethodVisitor visitGetter(
-            MethodVisitor mv,
-            String property,
-            Type propertyType) {
-
-        if (entity.getAttribute(property) != null) {
-            return new GetterVisitor(mv, helper, property, false);
-        }
-
-        if (entity.getRelationship(property) != null) {
-            // inject fault flag field
-            helper.createField(Boolean.TYPE, "faultResolved_" + property, true);
-            return new GetterVisitor(mv, helper, property, true);
-        }
-
-        return mv;
-    }
-
-    @Override
-    protected MethodVisitor visitSetter(
-            MethodVisitor mv,
-            String property,
-            Type propertyType) {
-
-        if (entity.getAttribute(property) != null) {
-            return new SetterVisitor(mv, helper, property, propertyType);
-        }
-
-        return mv;
+    protected boolean isLazyFaulted(String property) {
+        return entity.getRelationship(property) != null;
     }
 }