From 9a6fd4e75a8262ece2810e27fc47acb7787efa7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Fri, 6 Feb 2015 18:46:34 +0200 Subject: [PATCH] Improve generic type constraints Add sorted* variants with comparators Remove brdige annotations --- .../java/com/querydsl/core/group/GMap.java | 16 +++++--- .../java/com/querydsl/core/group/GSet.java | 12 +++++- .../java/com/querydsl/core/group/GroupBy.java | 40 +++++++++++++++---- 3 files changed, 55 insertions(+), 13 deletions(-) diff --git a/querydsl-core/src/main/java/com/querydsl/core/group/GMap.java b/querydsl-core/src/main/java/com/querydsl/core/group/GMap.java index d8faf7f9e..787d31e4b 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/group/GMap.java +++ b/querydsl-core/src/main/java/com/querydsl/core/group/GMap.java @@ -13,10 +13,7 @@ */ package com.querydsl.core.group; -import java.util.HashMap; -import java.util.LinkedHashMap; -import java.util.Map; -import java.util.TreeMap; +import java.util.*; import com.mysema.commons.lang.Pair; @@ -43,7 +40,7 @@ abstract class GMap extends AbstractGroupExpression, Map> }; } - public static GMap createSorted(QPair expr) { + public static , U> GMap createSorted(QPair expr) { return new GMap(expr) { @Override protected Map createMap() { @@ -52,6 +49,15 @@ abstract class GMap extends AbstractGroupExpression, Map> }; } + public static GMap createSorted(QPair expr, final Comparator comparator) { + return new GMap(expr) { + @Override + protected Map createMap() { + return new TreeMap(comparator); + } + }; + } + @Override public GroupCollector, Map> createGroupCollector() { return new GroupCollector, Map>() { diff --git a/querydsl-core/src/main/java/com/querydsl/core/group/GSet.java b/querydsl-core/src/main/java/com/querydsl/core/group/GSet.java index 4db50221a..57035dafd 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/group/GSet.java +++ b/querydsl-core/src/main/java/com/querydsl/core/group/GSet.java @@ -13,6 +13,7 @@ */ package com.querydsl.core.group; +import java.util.Comparator; import java.util.LinkedHashSet; import java.util.Set; import java.util.TreeSet; @@ -37,7 +38,7 @@ abstract class GSet extends AbstractGroupExpression> { }; } - public static GSet createSorted(Expression expr) { + public static > GSet createSorted(Expression expr) { return new GSet(expr) { @Override protected Set createSet() { @@ -46,6 +47,15 @@ abstract class GSet extends AbstractGroupExpression> { }; } + public static GSet createSorted(Expression expr, final Comparator comparator) { + return new GSet(expr) { + @Override + protected Set createSet() { + return new TreeSet(comparator); + } + }; + } + public GSet(Expression expr) { super(Set.class, expr); } diff --git a/querydsl-core/src/main/java/com/querydsl/core/group/GroupBy.java b/querydsl-core/src/main/java/com/querydsl/core/group/GroupBy.java index 988345ebd..523efb13b 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/group/GroupBy.java +++ b/querydsl-core/src/main/java/com/querydsl/core/group/GroupBy.java @@ -13,6 +13,7 @@ */ package com.querydsl.core.group; +import java.util.Comparator; import java.util.List; import java.util.Map; import java.util.Set; @@ -125,14 +126,23 @@ public final class GroupBy { * @param expression * @return */ - public static AbstractGroupExpression> sortedSet(Expression expression) { + public static > AbstractGroupExpression> sortedSet(Expression expression) { return GSet.createSorted(expression); } - public static GroupExpression> sortedSet(GroupExpression groupExpression) { + public static > GroupExpression> sortedSet(GroupExpression groupExpression) { return new MixinGroupExpression>(groupExpression, GSet.createSorted(groupExpression)); } + public static AbstractGroupExpression> sortedSet(Expression expression, Comparator comparator) { + return GSet.createSorted(expression, comparator); + } + + public static GroupExpression> sortedSet(GroupExpression groupExpression, Comparator comparator) { + return new MixinGroupExpression>(groupExpression, GSet.createSorted(groupExpression, comparator)); + } + + /** * Create a new aggregating map expression using a backing LinkedHashMap * @@ -164,23 +174,39 @@ public final class GroupBy { * @param value * @return */ - @WithBridgeMethods(value=Expression.class,castRequired=true) - public static AbstractGroupExpression,Map> sortedMap(Expression key, Expression value) { + public static , V> AbstractGroupExpression,Map> sortedMap(Expression key, Expression value) { return GMap.createSorted(QPair.create(key, value)); } - public static AbstractGroupExpression, Map> sortedMap(GroupExpression key, Expression value) { + public static , V, T extends Comparable> AbstractGroupExpression, Map> sortedMap(GroupExpression key, Expression value) { return sortedMap(key, new GOne(value)); } - public static AbstractGroupExpression, Map> sortedMap(Expression key, GroupExpression value) { + public static , V, U> AbstractGroupExpression, Map> sortedMap(Expression key, GroupExpression value) { return sortedMap(new GOne(key), value); } - public static AbstractGroupExpression, Map> sortedMap(GroupExpression key, GroupExpression value) { + public static , V, T extends Comparable, U> AbstractGroupExpression, Map> sortedMap(GroupExpression key, GroupExpression value) { return new GMap.Mixin>(key, value, GMap.createSorted(QPair.create(key, value))); } + public static AbstractGroupExpression,Map> sortedMap(Expression key, Expression value, Comparator comparator) { + return GMap.createSorted(QPair.create(key, value), comparator); + } + + public static AbstractGroupExpression, Map> sortedMap(GroupExpression key, Expression value, Comparator comparator) { + return sortedMap(key, new GOne(value), comparator); + } + + public static AbstractGroupExpression, Map> sortedMap(Expression key, GroupExpression value, Comparator comparator) { + return sortedMap(new GOne(key), value, comparator); + } + + public static AbstractGroupExpression, Map> sortedMap(GroupExpression key, GroupExpression value, Comparator comparator) { + return new GMap.Mixin>(key, value, GMap.createSorted(QPair.create(key, value), comparator)); + } + + private GroupBy() {} }