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;
}
}