From ef9a74a80e70657198673c653971517e2e167210 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 19 May 2015 23:10:49 +0300 Subject: [PATCH] Improve QBean alias handling --- .../src/main/java/com/querydsl/core/types/QBean.java | 11 ++++++++++- .../test/java/com/querydsl/core/types/QBeanTest.java | 6 ++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/QBean.java b/querydsl-core/src/main/java/com/querydsl/core/types/QBean.java index d20c8f1be..7787bee01 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/QBean.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/QBean.java @@ -27,6 +27,7 @@ import java.util.Map; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.primitives.Primitives; +import com.querydsl.core.group.GroupExpression; /** * {@code QBean} is a JavaBean populating projection type @@ -61,7 +62,11 @@ public class QBean extends FactoryExpressionBase { Operation operation = (Operation) expr; if (operation.getOperator() == Ops.ALIAS && operation.getArg(1) instanceof Path) { Path path = (Path) operation.getArg(1); - rv.put(path.getMetadata().getName(), operation.getArg(0)); + if (isCompoundExpression(operation.getArg(0))) { + rv.put(path.getMetadata().getName(), operation.getArg(0)); + } else { + rv.put(path.getMetadata().getName(), operation); + } } else { throw new IllegalArgumentException("Unsupported expression " + expr); } @@ -73,6 +78,10 @@ public class QBean extends FactoryExpressionBase { return rv.build(); } + private static boolean isCompoundExpression(Expression expr) { + return expr instanceof FactoryExpression || expr instanceof GroupExpression; + } + private static Class normalize(Class cl) { return cl.isPrimitive() ? Primitives.wrap(cl) : cl; } diff --git a/querydsl-core/src/test/java/com/querydsl/core/types/QBeanTest.java b/querydsl-core/src/test/java/com/querydsl/core/types/QBeanTest.java index 700be9db3..15b9d4fb7 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/types/QBeanTest.java +++ b/querydsl-core/src/test/java/com/querydsl/core/types/QBeanTest.java @@ -180,4 +180,10 @@ public class QBeanTest { assertFalse(bean.equals(bean.skipNulls())); } + @Test + public void Alias() { + QBean beanProjection = new QBean(Entity.class, name.as("name2")); + assertEquals(name.as("name2"), beanProjection.getArgs().get(0)); + } + }