summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShawn O. Pearce <sop@google.com>2010-06-04 11:11:34 -0700
committerShawn O. Pearce <sop@google.com>2010-06-04 12:44:50 -0700
commitcfb26cea00485376e6beab49d970c8f8fc53828e (patch)
tree95926faf41c247f9ab20263ef73fb04e78ced3e1
parent1201971bfed3566a3cdfc52c8796269bb9c24e47 (diff)
downloadgwtorm-cfb26cea00485376e6beab49d970c8f8fc53828e.tar.gz
Fix SchemaGen to pass the SchemaFactory through the constructor
When we build a new Schema instance what we really wanted to pass through was the SchemaFactory (e.g. jdbc.Database) and not the Schema type itself (since that's redundant). Change the API to pass through the database argument. Change-Id: I2fa015070b00ddcbdc308c940281fb9d21296046 Signed-off-by: Shawn O. Pearce <sop@google.com>
-rw-r--r--src/main/java/com/google/gwtorm/jdbc/Database.java2
-rw-r--r--src/main/java/com/google/gwtorm/server/SchemaGen.java27
2 files changed, 16 insertions, 13 deletions
diff --git a/src/main/java/com/google/gwtorm/jdbc/Database.java b/src/main/java/com/google/gwtorm/jdbc/Database.java
index 184edff..4f768cd 100644
--- a/src/main/java/com/google/gwtorm/jdbc/Database.java
+++ b/src/main/java/com/google/gwtorm/jdbc/Database.java
@@ -108,7 +108,7 @@ public class Database<T extends Schema> implements SchemaFactory<T> {
@SuppressWarnings("unchecked")
private Class<T> generate(final SqlDialect dialect,
final GeneratedClassLoader loader) throws OrmException {
- return new SchemaGen(loader, schemaModel, JdbcSchema.class,
+ return new SchemaGen(loader, schemaModel, getClass(), JdbcSchema.class,
new SchemaGen.AccessGenerator() {
@Override
public Class<?> create(GeneratedClassLoader loader, RelationModel rm)
diff --git a/src/main/java/com/google/gwtorm/server/SchemaGen.java b/src/main/java/com/google/gwtorm/server/SchemaGen.java
index 9cbce29..2620e08 100644
--- a/src/main/java/com/google/gwtorm/server/SchemaGen.java
+++ b/src/main/java/com/google/gwtorm/server/SchemaGen.java
@@ -16,8 +16,6 @@ package com.google.gwtorm.server;
import com.google.gwtorm.client.OrmException;
import com.google.gwtorm.client.Schema;
-import com.google.gwtorm.jdbc.Database;
-import com.google.gwtorm.jdbc.JdbcSchema;
import com.google.gwtorm.schema.RelationModel;
import com.google.gwtorm.schema.SequenceModel;
import com.google.gwtorm.schema.Util;
@@ -40,6 +38,7 @@ public class SchemaGen<S extends AbstractSchema> implements Opcodes {
private final GeneratedClassLoader classLoader;
private final JavaSchemaModel schema;
+ private final Class<?> databaseClass;
private final Class<S> schemaSuperClass;
private final AccessGenerator accessGen;
private List<RelationGen> relations;
@@ -48,10 +47,11 @@ public class SchemaGen<S extends AbstractSchema> implements Opcodes {
private String implTypeName;
public SchemaGen(final GeneratedClassLoader loader,
- final JavaSchemaModel schemaModel, final Class<S> superType,
- final AccessGenerator ag) {
+ final JavaSchemaModel schemaModel, final Class<?> databaseType,
+ final Class<S> superType, final AccessGenerator ag) {
classLoader = loader;
schema = schemaModel;
+ databaseClass = databaseType;
schemaSuperClass = superType;
accessGen = ag;
}
@@ -117,17 +117,20 @@ public class SchemaGen<S extends AbstractSchema> implements Opcodes {
private void implementConstructor() {
final String consName = "<init>";
- final String consDesc =
- Type.getMethodDescriptor(Type.VOID_TYPE, new Type[] {Type
- .getType(Database.class)});
+ final Type superType = Type.getType(schemaSuperClass);
+ final Type dbType = Type.getType(databaseClass);
+
final MethodVisitor mv =
- cw.visitMethod(ACC_PUBLIC, consName, consDesc, null, null);
+ cw.visitMethod(ACC_PUBLIC, consName, Type.getMethodDescriptor(
+ Type.VOID_TYPE, new Type[] {dbType}), null, null);
mv.visitCode();
mv.visitVarInsn(ALOAD, 0);
mv.visitVarInsn(ALOAD, 1);
- mv.visitMethodInsn(INVOKESPECIAL, Type.getInternalName(schemaSuperClass),
- consName, consDesc);
+ mv.visitMethodInsn(INVOKESPECIAL, superType.getInternalName(), consName,
+ Type.getMethodDescriptor(Type.VOID_TYPE, new Type[] {Type
+ .getType(schemaSuperClass.getDeclaredConstructors()[0]
+ .getParameterTypes()[0])}));
for (final RelationGen info : relations) {
mv.visitVarInsn(ALOAD, 0);
@@ -135,8 +138,8 @@ public class SchemaGen<S extends AbstractSchema> implements Opcodes {
mv.visitInsn(DUP);
mv.visitVarInsn(ALOAD, 0);
mv.visitMethodInsn(INVOKESPECIAL, info.accessType.getInternalName(),
- consName, Type.getMethodDescriptor(Type.VOID_TYPE, new Type[] {Type
- .getType(JdbcSchema.class)}));
+ consName, Type.getMethodDescriptor(Type.VOID_TYPE,
+ new Type[] {superType}));
mv.visitFieldInsn(PUTFIELD, implTypeName, info
.getAccessInstanceFieldName(), info.accessType.getDescriptor());
}