diff --git a/querydsl-core/src/main/java/com/mysema/query/types/ConstantImpl.java b/querydsl-core/src/main/java/com/mysema/query/types/ConstantImpl.java index 3e99e17be..3e09c503f 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/ConstantImpl.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/ConstantImpl.java @@ -113,10 +113,6 @@ public class ConstantImpl extends ExpressionBase implements Constant { public static Constant> create(Class constant) { return new ConstantImpl>(constant); } - -// public static Constant create(C value){ -// return new ConstantImpl(value); -// } private final T constant; diff --git a/querydsl-core/src/main/java/com/mysema/query/types/ExpressionBase.java b/querydsl-core/src/main/java/com/mysema/query/types/ExpressionBase.java index 47c8cb164..aad1bb80c 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/ExpressionBase.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/ExpressionBase.java @@ -18,7 +18,7 @@ public abstract class ExpressionBase implements Expression{ private static final long serialVersionUID = -8862014178653364345L; - protected final Class type; + private final Class type; @Nullable private volatile String toString; diff --git a/querydsl-core/src/main/java/com/mysema/query/types/OperationImpl.java b/querydsl-core/src/main/java/com/mysema/query/types/OperationImpl.java index 6587854ba..543eddce8 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/OperationImpl.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/OperationImpl.java @@ -62,7 +62,7 @@ public class OperationImpl extends ExpressionBase implements Operation{ Operation op = (Operation)o; return op.getOperator().equals(operator) && op.getArgs().equals(args) - && op.getType().equals(type); + && op.getType().equals(getType()); } else { return false; } @@ -75,7 +75,7 @@ public class OperationImpl extends ExpressionBase implements Operation{ @Override public int hashCode(){ - return type.hashCode(); + return getType().hashCode(); } } diff --git a/querydsl-core/src/main/java/com/mysema/query/types/PathImpl.java b/querydsl-core/src/main/java/com/mysema/query/types/PathImpl.java index 5c6f0cdb2..adc0d1d1d 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/PathImpl.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/PathImpl.java @@ -76,10 +76,10 @@ public class PathImpl extends ExpressionBase implements Path { if (metadata.getPathType() == PathType.PROPERTY) { Class beanClass = metadata.getParent().getType(); String propertyName = metadata.getExpression().toString(); - annotatedElement = ReflectionUtils.getAnnotatedElement(beanClass, propertyName, type); + annotatedElement = ReflectionUtils.getAnnotatedElement(beanClass, propertyName, getType()); } else { - annotatedElement = type; + annotatedElement = getType(); } } return annotatedElement; diff --git a/querydsl-core/src/main/java/com/mysema/query/types/QBean.java b/querydsl-core/src/main/java/com/mysema/query/types/QBean.java index 16212ea22..38652b218 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/QBean.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/QBean.java @@ -144,7 +144,7 @@ public class QBean extends ExpressionBase implements FactoryExpression{ private void initFields() { for (String property : bindings.keySet()){ - Class beanType = type; + Class beanType = getType(); while (!beanType.equals(Object.class)) { try { Field field = beanType.getDeclaredField(property); diff --git a/querydsl-core/src/main/java/com/mysema/query/types/SubQueryExpressionImpl.java b/querydsl-core/src/main/java/com/mysema/query/types/SubQueryExpressionImpl.java index 797286edd..1b69a6374 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/SubQueryExpressionImpl.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/SubQueryExpressionImpl.java @@ -42,7 +42,7 @@ public class SubQueryExpressionImpl extends ExpressionBase implements SubQ } public int hashCode(){ - return type.hashCode(); + return getType().hashCode(); } @Override diff --git a/querydsl-core/src/main/java/com/mysema/query/types/TemplateExpressionImpl.java b/querydsl-core/src/main/java/com/mysema/query/types/TemplateExpressionImpl.java index 8209c7837..12a93a313 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/TemplateExpressionImpl.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/TemplateExpressionImpl.java @@ -83,7 +83,7 @@ public class TemplateExpressionImpl extends ExpressionBase implements Temp } else if (o instanceof TemplateExpression) { TemplateExpression c = (TemplateExpression)o; return c.getTemplate().equals(template) - && c.getType().equals(type); + && c.getType().equals(getType()); } else { return false; } diff --git a/querydsl-core/src/main/java/com/mysema/query/types/expr/SimpleExpression.java b/querydsl-core/src/main/java/com/mysema/query/types/expr/SimpleExpression.java index 29ec68277..d3a582a0b 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/expr/SimpleExpression.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/expr/SimpleExpression.java @@ -150,7 +150,7 @@ public abstract class SimpleExpression extends ExpressionBase { @Override public int hashCode() { - return type.hashCode(); + return getType().hashCode(); } /** diff --git a/querydsl-scala/.cache b/querydsl-scala/.cache index ee90f334f..f89dfe1c8 100644 Binary files a/querydsl-scala/.cache and b/querydsl-scala/.cache differ diff --git a/querydsl-scala/src/main/scala/com/mysema/query/scala/EntitySerializer.scala b/querydsl-scala/src/main/scala/com/mysema/query/scala/EntitySerializer.scala index 6656c3c01..f2e216ffb 100644 --- a/querydsl-scala/src/main/scala/com/mysema/query/scala/EntitySerializer.scala +++ b/querydsl-scala/src/main/scala/com/mysema/query/scala/EntitySerializer.scala @@ -18,6 +18,7 @@ import java.io.IOException import scala.reflect.BeanProperty import scala.collection.JavaConversions._ import scala.collection.mutable.Set +import scala.collection.immutable.Map import javax.inject.Inject; @@ -30,7 +31,11 @@ import javax.inject.Inject; class ScalaEntitySerializer @Inject()(val typeMappings: TypeMappings) extends Serializer { // val typeMappings = ScalaTypeMappings.typeMappings - + + private val methodNames = Map(ARRAY->"Array", BOOLEAN->"Boolean", COLLECTION->"Collection", COMPARABLE->"Comparable", + DATE->"Date", DATETIME->"DateTime", ENUM->"Enum", LIST->"List", MAP->"Map", NUMERIC->"Number", SET->"Set", + SIMPLE->"Simple", STRING->"String", TIME->"Time") + val classHeaderFormat = "%1$s(cl: Class[_ <: %2$s], md: PathMetadata[_]) extends EntityPathImpl[%2$s](cl, md)" def serialize(model: EntityType, serializerConfig: SerializerConfig, writer: CodeWriter) { @@ -45,8 +50,8 @@ class ScalaEntitySerializer @Inject()(val typeMappings: TypeMappings) extends Se writer.staticimports(classOf[PathMetadataFactory]) var importedClasses = getAnnotationTypes(model) - if (model.hasLists()) importedClasses.add(classOf[List[_]].getName) - if (model.hasMaps()) importedClasses.add(classOf[Map[_, _]].getName) + if (model.hasLists()) importedClasses.add(classOf[java.util.List[_]].getName) + if (model.hasMaps()) importedClasses.add(classOf[java.util.Map[_, _]].getName) writer.importClasses(importedClasses.toArray: _*) writeHeader(model, scalaWriter) @@ -102,7 +107,7 @@ class ScalaEntitySerializer @Inject()(val typeMappings: TypeMappings) extends Se def writeAdditionalCompanionContent(model: EntityType, writer: ScalaWriter) = {} - private def serializeEntityProperties(model: EntityType, writer: CodeWriter, properties: Collection[Property]) = { + private def getEntityProperties(model: EntityType, writer: CodeWriter, properties: Collection[Property]) = { for (property <- properties if property.getType.getCategory == ENTITY) yield { val queryType = typeMappings.getPathType(property.getType, model, false) val typeName = writer.getRawName(queryType) @@ -111,24 +116,9 @@ class ScalaEntitySerializer @Inject()(val typeMappings: TypeMappings) extends Se } } - private def serializeOtherProperties(model: EntityType, writer: CodeWriter, properties: Collection[Property]) = { + private def getOtherProperties(model: EntityType, writer: CodeWriter, properties: Collection[Property]) = { for (property <- properties if property.getType.getCategory != ENTITY) yield { - val methodName: String = property.getType.getCategory match { - case ARRAY => "createArray" - case BOOLEAN => "createBoolean" - case COLLECTION => "createCollection" - case COMPARABLE => "createComparable" - case DATE => "createDate" - case DATETIME => "createDateTime" - case ENUM => "createEnum" - case LIST => "createList" - case MAP => "createMap" - case NUMERIC => "createNumber" - case SET => "createSet" - case SIMPLE => "createSimple" - case STRING => "createString" - case TIME => "createTime" - } + val methodName: String = "create" + methodNames(property.getType.getCategory) val value = property.getType.getCategory match { case BOOLEAN | STRING => methodName + "(\"" + property.getName + "\")" @@ -151,20 +141,18 @@ class ScalaEntitySerializer @Inject()(val typeMappings: TypeMappings) extends Se def serializeProperties(model: EntityType, writer: CodeWriter, properties: Collection[Property]) { // entity properties - serializeEntityProperties(model, writer, properties) foreach (writer.line(_, "\n")) + getEntityProperties(model, writer, properties) foreach (writer.line(_, "\n")) // other properties - serializeOtherProperties(model, writer, properties) foreach { case (propertyName, value) => + getOtherProperties(model, writer, properties) foreach { case (propertyName, value) => writer.line("val ", escape(propertyName), " = ", value, "\n") } } def escape(token: String): String = { - if (token == "type") "type$" // type is already available as a property in Expression - else if (ScalaSyntaxUtils.isReserved(token)) "`" + token + "`" - else token + if (ScalaSyntaxUtils.isReserved(token)) "`" + token + "`" else token } - + def getAnnotationTypes(model: EntityType): Set[String] = { Set() ++ (model.getAnnotations.map(_.annotationType.getName)) } diff --git a/querydsl-scala/src/test/scala/com/mysema/query/scala/ScalaEntitySerializerTest.scala b/querydsl-scala/src/test/scala/com/mysema/query/scala/ScalaEntitySerializerTest.scala index 9f6e69e71..2fa3cf169 100644 --- a/querydsl-scala/src/test/scala/com/mysema/query/scala/ScalaEntitySerializerTest.scala +++ b/querydsl-scala/src/test/scala/com/mysema/query/scala/ScalaEntitySerializerTest.scala @@ -62,6 +62,7 @@ class ScalaEntitySerializerTest extends CompileTestUtils { val serializer = new ScalaEntitySerializer(typeMappings) serializer.serialize(entityType, SimpleSerializerConfig.DEFAULT, new ScalaWriter(writer)) val str = writer.toString() + System.err.println(str); assertCompileSuccess(str) } } \ No newline at end of file diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/AbstractSQLQuery.java b/querydsl-sql/src/main/java/com/mysema/query/sql/AbstractSQLQuery.java index dbcbc45fa..e985ff42c 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/AbstractSQLQuery.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/AbstractSQLQuery.java @@ -405,7 +405,7 @@ public abstract class AbstractSQLQuery> extends if (bindings.isEmpty()) { throw new IllegalArgumentException("No bindings could be derived from " + expr); } - return new QBean((Class)expr.getType(), bindings); + return new QBean((Class)expr.getType(), true, bindings); }catch(IllegalAccessException e) { throw new QueryException(e); } diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/RelationalFunctionCall.java b/querydsl-sql/src/main/java/com/mysema/query/sql/RelationalFunctionCall.java index 1320a2b61..d6dbf8654 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/RelationalFunctionCall.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/RelationalFunctionCall.java @@ -91,7 +91,7 @@ public class RelationalFunctionCall extends SimpleExpression implements Te } else if (o instanceof TemplateExpression) { TemplateExpression c = (TemplateExpression)o; return c.getTemplate().equals(template) - && c.getType().equals(type); + && c.getType().equals(getType()); } else { return false; }