From 5ba230f56c9a2121ddee3eb278e5e33c8524ae2e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Fri, 17 Apr 2009 13:53:24 +0000 Subject: [PATCH] added stub for improved supertype handling in APT class generation --- .../query/grammar/types/ExprFactory.java | 34 ++++++ .../com/mysema/query/grammar/types/Path.java | 102 +++++++++++------- .../query/grammar/types/PathMetadata.java | 27 ++--- .../grammar/types/SimpleExprFactory.java | 32 ++++-- 4 files changed, 129 insertions(+), 66 deletions(-) create mode 100644 querydsl-core/src/main/java/com/mysema/query/grammar/types/ExprFactory.java diff --git a/querydsl-core/src/main/java/com/mysema/query/grammar/types/ExprFactory.java b/querydsl-core/src/main/java/com/mysema/query/grammar/types/ExprFactory.java new file mode 100644 index 000000000..3306b441f --- /dev/null +++ b/querydsl-core/src/main/java/com/mysema/query/grammar/types/ExprFactory.java @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2009 Mysema Ltd. + * All rights reserved. + * + */ +package com.mysema.query.grammar.types; + +import com.mysema.query.grammar.Ops.Op; +import com.mysema.query.grammar.types.Expr.EBoolean; +import com.mysema.query.grammar.types.Expr.EComparable; +import com.mysema.query.grammar.types.Expr.ENumber; +import com.mysema.query.grammar.types.Expr.EString; + +/** + * ExprFactory provides + * + * @author tiwe + * @version $Id$ + */ +public interface ExprFactory { + + EBoolean createBoolean(Op operator, Expr... args); + + > EComparable createComparable(Class type, Op operator, Expr... args); + + Expr createConstant(A obj); + + > ENumber createNumber(Class type, Op operator, Expr... args); + + EString createString(Op operator, Expr... args); + + Expr createStringArray(Op operator, Expr... args); + +} diff --git a/querydsl-core/src/main/java/com/mysema/query/grammar/types/Path.java b/querydsl-core/src/main/java/com/mysema/query/grammar/types/Path.java index c7f0f12e1..e266b14cf 100644 --- a/querydsl-core/src/main/java/com/mysema/query/grammar/types/Path.java +++ b/querydsl-core/src/main/java/com/mysema/query/grammar/types/Path.java @@ -50,19 +50,23 @@ public interface Path { public PArray(Class type, String var){ this(type, PathMetadata.forVariable(var)); } + public abstract Expr get(Expr index); public abstract Expr get(int index); public Class getElementType() {return componentType;} public PathMetadata getMetadata() {return metadata;} public Class getType(){ return arrayType;} public EBoolean isnotnull() { - return isnotnull == null ? isnotnull = Grammar.isnotnull(this) : isnotnull; + if (isnotnull == null) isnotnull = Grammar.isnotnull(this); + return isnotnull; } public EBoolean isnull() { - return isnull == null ? isnull = Grammar.isnull(this) : isnull; + if (isnull == null) isnull = Grammar.isnull(this); + return isnull; } - public EComparable size() { - return size == null ? size = new PComparable(Integer.class, forSize(this)) : size; + public EComparable size() { + if (size == null) size = new PComparable(Integer.class, forSize(this)); + return size; } public Path getRoot(){ return root; @@ -88,11 +92,13 @@ public interface Path { } public PathMetadata getMetadata() {return metadata;} public EBoolean isnotnull() { - return isnotnull == null ? isnotnull = Grammar.isnotnull(this) : isnotnull; + if (isnotnull == null) isnotnull = Grammar.isnotnull(this); + return isnotnull; } public EBoolean isnull() { - return isnull == null ? isnull = Grammar.isnull(this) : isnull; - } + if (isnull == null) isnull = Grammar.isnull(this); + return isnull; + } public Path getRoot(){ return root; } @@ -141,11 +147,13 @@ public interface Path { } public PathMetadata getMetadata() {return metadata;} public EBoolean isnotnull() { - return isnotnull == null ? isnotnull = Grammar.isnotnull(this) : isnotnull; + if (isnotnull == null) isnotnull = Grammar.isnotnull(this); + return isnotnull; } public EBoolean isnull() { - return isnull == null ? isnull = Grammar.isnull(this) : isnull; - } + if (isnull == null) isnull = Grammar.isnull(this); + return isnull; + } public Path getRoot(){ return root; } @@ -171,11 +179,13 @@ public interface Path { } public PathMetadata getMetadata() {return metadata;} public EBoolean isnotnull() { - return isnotnull == null ? isnotnull = Grammar.isnotnull(this) : isnotnull; + if (isnotnull == null) isnotnull = Grammar.isnotnull(this); + return isnotnull; } public EBoolean isnull() { - return isnull == null ? isnull = Grammar.isnull(this) : isnull; - } + if (isnull == null) isnull = Grammar.isnull(this); + return isnull; + } public Path getRoot(){ return root; } @@ -220,13 +230,16 @@ public interface Path { public Class getElementType() {return type;} public PathMetadata getMetadata() {return metadata;} public EBoolean isnotnull() { - return isnotnull == null ? isnotnull = Grammar.isnotnull(this) : isnotnull; + if (isnotnull == null) isnotnull = Grammar.isnotnull(this); + return isnotnull; } public EBoolean isnull() { - return isnull == null ? isnull = Grammar.isnull(this) : isnull; - } - public EComparable size() { - return size == null ? size = new PComparable(Integer.class, forSize(this)) : size; + if (isnull == null) isnull = Grammar.isnull(this); + return isnull; + } + public EComparable size() { + if (size == null) size = new PComparable(Integer.class, forSize(this)); + return size; } public EBoolean contains(D child) { return Grammar.in(child, this); @@ -286,11 +299,13 @@ public interface Path { public PathMetadata getMetadata() {return metadata;} public Class getValueType() {return valueType; } public EBoolean isnotnull() { - return isnotnull == null ? isnotnull = Grammar.isnotnull(this) : isnotnull; + if (isnotnull == null) isnotnull = Grammar.isnotnull(this); + return isnotnull; } public EBoolean isnull() { - return isnull == null ? isnull = Grammar.isnull(this) : isnull; - } + if (isnull == null) isnull = Grammar.isnull(this); + return isnull; + } public Path getRoot(){ return root; } @@ -356,11 +371,13 @@ public interface Path { public String getEntityName(){ return entityName; } public PathMetadata getMetadata() {return metadata;} public EBoolean isnotnull() { - return isnotnull == null ? isnotnull = Grammar.isnotnull(this) : isnotnull; + if (isnotnull == null) isnotnull = Grammar.isnotnull(this); + return isnotnull; } public EBoolean isnull() { - return isnull == null ? isnull = Grammar.isnull(this) : isnull; - } + if (isnull == null) isnull = Grammar.isnull(this); + return isnull; + } public EBoolean typeOf(Class type) {return Grammar.typeOf(this, type);} public Path getRoot(){ return root; @@ -395,13 +412,16 @@ public interface Path { public String getEntityName() { return entityName; } public PathMetadata getMetadata() {return metadata;} public EBoolean isnotnull() { - return isnotnull == null ? isnotnull = Grammar.isnotnull(this) : isnotnull; + if (isnotnull == null) isnotnull = Grammar.isnotnull(this); + return isnotnull; } public EBoolean isnull() { - return isnull == null ? isnull = Grammar.isnull(this) : isnull; - } + if (isnull == null) isnull = Grammar.isnull(this); + return isnull; + } public ENumber size() { - return size == null ? size = new PNumber(Integer.class, forSize(this)) : size; + if (size == null) size = new PNumber(Integer.class, forSize(this)); + return size; } public EBoolean contains(D child) { return Grammar.in(child, this); @@ -431,6 +451,7 @@ public interface Path { return new PEntity(type, entityName, forListAccess(this,index)); } public PEntity get(int index) { + // cache return new PEntity(type, entityName, forListAccess(this,index)); } @@ -465,11 +486,13 @@ public interface Path { public PathMetadata getMetadata() {return metadata;} public Class getValueType() {return valueType; } public EBoolean isnotnull() { - return isnotnull == null ? isnotnull = Grammar.isnotnull(this) : isnotnull; + if (isnotnull == null) isnotnull = Grammar.isnotnull(this); + return isnotnull; } public EBoolean isnull() { - return isnull == null ? isnull = Grammar.isnull(this) : isnull; - } + if (isnull == null) isnull = Grammar.isnull(this); + return isnull; + } public Path getRoot(){ return root; } @@ -507,11 +530,13 @@ public interface Path { } public PathMetadata getMetadata() {return metadata;} public EBoolean isnotnull() { - return isnotnull == null ? isnotnull = Grammar.isnotnull(this) : isnotnull; + if (isnotnull == null) isnotnull = Grammar.isnotnull(this); + return isnotnull; } public EBoolean isnull() { - return isnull == null ? isnull = Grammar.isnull(this) : isnull; - } + if (isnull == null) isnull = Grammar.isnull(this); + return isnull; + } public Path getRoot(){ return root; } @@ -534,11 +559,13 @@ public interface Path { } public PathMetadata getMetadata() {return metadata;} public EBoolean isnotnull() { - return isnotnull == null ? isnotnull = Grammar.isnotnull(this) : isnotnull; + if (isnotnull == null) isnotnull = Grammar.isnotnull(this); + return isnotnull; } public EBoolean isnull() { - return isnull == null ? isnull = Grammar.isnull(this) : isnull; - } + if (isnull == null) isnull = Grammar.isnull(this); + return isnull; + } public Path getRoot(){ return metadata.getRoot() != null ? metadata.getRoot() : this; } @@ -561,6 +588,7 @@ public interface Path { return new PString(forArrayAccess(this, index)); } public EString get(int index) { + // TODO : cache return new PString(forArrayAccess(this, index)); } } diff --git a/querydsl-core/src/main/java/com/mysema/query/grammar/types/PathMetadata.java b/querydsl-core/src/main/java/com/mysema/query/grammar/types/PathMetadata.java index 6a8627ae3..c3dc3655d 100644 --- a/querydsl-core/src/main/java/com/mysema/query/grammar/types/PathMetadata.java +++ b/querydsl-core/src/main/java/com/mysema/query/grammar/types/PathMetadata.java @@ -56,40 +56,31 @@ public final class PathMetadata { this.hashCode = new HashCodeBuilder().append(expression).append(parent).append(pathType).hashCode(); } - public static PathMetadata forArrayAccess(Path.PArray parent, - Expr index) { + public static PathMetadata forArrayAccess(Path.PArray parent, Expr index) { return new PathMetadata(parent, index, ARRAYVALUE); } - public static PathMetadata forArrayAccess(Path.PArray parent, - int index) { - return new PathMetadata(parent, factory.createConstant(index), - ARRAYVALUE_CONSTANT); + public static PathMetadata forArrayAccess(Path.PArray parent, int index) { + return new PathMetadata(parent, factory.createConstant(index), ARRAYVALUE_CONSTANT); } - public static PathMetadata forListAccess(Path.PCollection parent, - Expr index) { + public static PathMetadata forListAccess(Path.PCollection parent, Expr index) { return new PathMetadata(parent, index, LISTVALUE); } - public static PathMetadata forListAccess(Path.PCollection parent, - int index) { - return new PathMetadata(parent, factory.createConstant(index), - LISTVALUE_CONSTANT); + public static PathMetadata forListAccess(Path.PCollection parent, int index) { + return new PathMetadata(parent, factory.createConstant(index),LISTVALUE_CONSTANT); } - public static PathMetadata forMapAccess(Path.PMap parent, - Expr key) { + public static PathMetadata forMapAccess(Path.PMap parent, Expr key) { return new PathMetadata(parent, key, MAPVALUE); } - public static PathMetadata forMapAccess(Path.PMap parent, - KT key) { + public static PathMetadata forMapAccess(Path.PMap parent, KT key) { return new PathMetadata(parent, factory.createConstant(key), MAPVALUE_CONSTANT); } - public static PathMetadata forProperty(Path parent, - String property) { + public static PathMetadata forProperty(Path parent, String property) { return new PathMetadata(parent, factory.createConstant(property), PROPERTY); } diff --git a/querydsl-core/src/main/java/com/mysema/query/grammar/types/SimpleExprFactory.java b/querydsl-core/src/main/java/com/mysema/query/grammar/types/SimpleExprFactory.java index 12373b14a..84f307142 100644 --- a/querydsl-core/src/main/java/com/mysema/query/grammar/types/SimpleExprFactory.java +++ b/querydsl-core/src/main/java/com/mysema/query/grammar/types/SimpleExprFactory.java @@ -6,6 +6,16 @@ package com.mysema.query.grammar.types; import com.mysema.query.grammar.Ops.Op; +import com.mysema.query.grammar.types.Expr.EBoolean; +import com.mysema.query.grammar.types.Expr.EComparable; +import com.mysema.query.grammar.types.Expr.EConstant; +import com.mysema.query.grammar.types.Expr.ENumber; +import com.mysema.query.grammar.types.Expr.EString; +import com.mysema.query.grammar.types.Operation.OBoolean; +import com.mysema.query.grammar.types.Operation.OComparable; +import com.mysema.query.grammar.types.Operation.ONumber; +import com.mysema.query.grammar.types.Operation.OString; +import com.mysema.query.grammar.types.Operation.OStringArray; import com.mysema.query.util.Assert; /** @@ -14,32 +24,32 @@ import com.mysema.query.util.Assert; * @author tiwe * @version $Id$ */ -public class SimpleExprFactory { +public class SimpleExprFactory implements ExprFactory{ - public Expr.EBoolean createBoolean(Op operator, Expr... args) { - return new Operation.OBoolean(Assert.notNull(operator), Assert.notNull(args)); + public EBoolean createBoolean(Op operator, Expr... args) { + return new OBoolean(Assert.notNull(operator), Assert.notNull(args)); } - public > Expr.EComparable createComparable(Class type, Op operator, Expr... args) { - return new Operation.OComparable(type, Assert.notNull(operator), Assert.notNull(args)); + public > EComparable createComparable(Class type, Op operator, Expr... args) { + return new OComparable(type, Assert.notNull(operator), Assert.notNull(args)); } @SuppressWarnings("unchecked") public Expr createConstant(A obj) { if (obj instanceof Expr) return (Expr) obj; - return new Expr.EConstant(Assert.notNull(obj)); + return new EConstant(Assert.notNull(obj)); } - public > Expr.ENumber createNumber(Class type, Op operator, Expr... args) { - return new Operation.ONumber(type, Assert.notNull(operator), Assert.notNull(args)); + public > ENumber createNumber(Class type, Op operator, Expr... args) { + return new ONumber(type, Assert.notNull(operator), Assert.notNull(args)); } - public Expr.EString createString(Op operator, Expr... args) { - return new Operation.OString(Assert.notNull(operator), Assert.notNull(args)); + public EString createString(Op operator, Expr... args) { + return new OString(Assert.notNull(operator), Assert.notNull(args)); } public Expr createStringArray(Op operator, Expr... args) { - return new Operation.OStringArray(Assert.notNull(operator), Assert.notNull(args)); + return new OStringArray(Assert.notNull(operator), Assert.notNull(args)); } }