diff --git a/querydsl-collections/src/main/java/com/querydsl/collections/CollQuerySerializer.java b/querydsl-collections/src/main/java/com/querydsl/collections/CollQuerySerializer.java index 285a92ce3..f9fb98aa7 100644 --- a/querydsl-collections/src/main/java/com/querydsl/collections/CollQuerySerializer.java +++ b/querydsl-collections/src/main/java/com/querydsl/collections/CollQuerySerializer.java @@ -195,7 +195,7 @@ public final class CollQuerySerializer extends SerializerBase) { append(CAST_SUFFIXES.get(args.get(1).getType())); } return; @@ -204,7 +204,10 @@ public final class CollQuerySerializer extends SerializerBase) ((Constant) args.get(1)).getConstant()); + @SuppressWarnings("unchecked") //this is the second argument's type + Constant> rightArg = (Constant>) args.get(1); + + visitCast(operator, args.get(0), rightArg.getConstant()); } else { super.visitOperation(type, operator, args); } diff --git a/querydsl-core/src/main/java/com/querydsl/core/support/PathsExtractor.java b/querydsl-core/src/main/java/com/querydsl/core/support/PathsExtractor.java index 89967ffdd..46ec1465d 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/support/PathsExtractor.java +++ b/querydsl-core/src/main/java/com/querydsl/core/support/PathsExtractor.java @@ -72,7 +72,7 @@ public final class PathsExtractor implements Visitor>> { public Path visit(Collection exprs, List> paths) { for (Object e : exprs) { if (e instanceof Expression) { - ((Expression) e).accept(this, paths); + ((Expression) e).accept(this, paths); } } return null; diff --git a/querydsl-core/src/main/java/com/querydsl/core/support/QueryMixin.java b/querydsl-core/src/main/java/com/querydsl/core/support/QueryMixin.java index 69ea042c9..dd334a0f4 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/support/QueryMixin.java +++ b/querydsl-core/src/main/java/com/querydsl/core/support/QueryMixin.java @@ -428,8 +428,8 @@ public class QueryMixin { public final boolean equals(Object o) { if (o == this) { return true; - } else if (o instanceof QueryMixin) { - QueryMixin q = (QueryMixin)o; + } else if (o instanceof QueryMixin) { + QueryMixin q = (QueryMixin)o; return q.metadata.equals(metadata); } else { return false; diff --git a/querydsl-core/src/main/java/com/querydsl/core/support/ReplaceVisitor.java b/querydsl-core/src/main/java/com/querydsl/core/support/ReplaceVisitor.java index 8ed072b73..ab8dc829f 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/support/ReplaceVisitor.java +++ b/querydsl-core/src/main/java/com/querydsl/core/support/ReplaceVisitor.java @@ -69,7 +69,7 @@ public class ReplaceVisitor implements Visitor, C> { Path parent = (Path)metadata.getParent().accept(this, context); Object element = metadata.getElement(); if (element instanceof Expression) { - element = ((Expression) element).accept(this, context); + element = ((Expression) element).accept(this, context); } if (parent.equals(metadata.getParent()) && Objects.equal(element, metadata.getElement())) { return expr; @@ -138,7 +138,7 @@ public class ReplaceVisitor implements Visitor, C> { ImmutableList.Builder builder = ImmutableList.builder(); for (Object arg : expr.getArgs()) { if (arg instanceof Expression) { - builder.add(((Expression)arg).accept(this, context)); + builder.add(((Expression)arg).accept(this, context)); } else { builder.add(arg); } diff --git a/querydsl-core/src/main/java/com/querydsl/core/support/SerializerBase.java b/querydsl-core/src/main/java/com/querydsl/core/support/SerializerBase.java index c601209ce..a89ea1a8e 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/support/SerializerBase.java +++ b/querydsl-core/src/main/java/com/querydsl/core/support/SerializerBase.java @@ -101,7 +101,7 @@ public abstract class SerializerBase> implements Vis public final S handle(Object arg) { if (arg instanceof Expression) { - ((Expression)arg).accept(this, null); + ((Expression)arg).accept(this, null); } else { visitConstant(arg); } @@ -136,7 +136,7 @@ public abstract class SerializerBase> implements Vis for (final Template.Element element : template.getElements()) { final Object rv = element.convert(args); if (rv instanceof Expression) { - ((Expression)rv).accept(this, null); + ((Expression)rv).accept(this, null); } else if (element.isString()) { builder.append(rv.toString()); } else { diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/ConstantImpl.java b/querydsl-core/src/main/java/com/querydsl/core/types/ConstantImpl.java index d19b5f995..7a8ecb28e 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/ConstantImpl.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/ConstantImpl.java @@ -21,21 +21,25 @@ import javax.annotation.concurrent.Immutable; * @author tiwe */ @Immutable -@SuppressWarnings("unchecked") public final class ConstantImpl extends ExpressionBase implements Constant { private static final long serialVersionUID = -3898138057967814118L; private static final int CACHE_SIZE = 256; + @SuppressWarnings({"rawtypes", "unchecked"}) //generic array creation not possible private static final Constant[] CHARACTERS = new Constant[CACHE_SIZE]; + @SuppressWarnings({"rawtypes", "unchecked"}) //generic array creation not possible private static final Constant[] BYTES = new Constant[CACHE_SIZE]; + @SuppressWarnings({"rawtypes", "unchecked"}) //generic array creation not possible private static final Constant[] INTEGERS = new Constant[CACHE_SIZE]; + @SuppressWarnings({"rawtypes", "unchecked"}) //generic array creation not possible private static final Constant[] LONGS = new Constant[CACHE_SIZE]; + @SuppressWarnings({"rawtypes", "unchecked"}) //generic array creation not possible private static final Constant[] SHORTS = new Constant[CACHE_SIZE]; private static final Constant FALSE = new ConstantImpl(Boolean.FALSE); @@ -107,6 +111,7 @@ public final class ConstantImpl extends ExpressionBase implements Constant * * @param constant */ + @SuppressWarnings("unchecked") //The class of the constant will mandate the type public ConstantImpl(T constant) { this((Class)constant.getClass(), constant); } diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/Template.java b/querydsl-core/src/main/java/com/querydsl/core/types/Template.java index c76022473..5b7c929f0 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/Template.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/Template.java @@ -59,7 +59,7 @@ public final class Template implements Serializable { @Override public Object convert(final List args) { final Object arg = args.get(index); - return arg instanceof Constant ? arg.toString() : arg; + return arg instanceof Constant ? arg.toString() : arg; } @Override diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/TemplateFactory.java b/querydsl-core/src/main/java/com/querydsl/core/types/TemplateFactory.java index 656f498e9..943f67fd6 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/TemplateFactory.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/TemplateFactory.java @@ -49,7 +49,7 @@ public class TemplateFactory { new Function() { @Override public Object apply(Object arg) { - if (arg instanceof Constant) { + if (arg instanceof Constant) { return ConstantImpl.create(apply(arg.toString()).toString()); } else if (arg instanceof Expression) { return OperationImpl.create(String.class, Ops.LOWER, (Expression)arg); @@ -63,7 +63,7 @@ public class TemplateFactory { new Function() { @Override public Object apply(Object arg) { - if (arg instanceof Constant) { + if (arg instanceof Constant) { return ConstantImpl.create(apply(arg.toString()).toString()); } else if (arg instanceof Expression) { return OperationImpl.create(String.class, Ops.UPPER, (Expression)arg); @@ -77,7 +77,7 @@ public class TemplateFactory { new Function() { @Override public Object apply(Object arg) { - if (arg instanceof Constant) { + if (arg instanceof Constant) { return ConstantImpl.create(apply(arg.toString()).toString()); } else if (arg instanceof Expression) { return OperationImpl.create(String.class, Ops.CONCAT, (Expression)arg, PERCENT); @@ -91,7 +91,7 @@ public class TemplateFactory { new Function() { @Override public Object apply(Object arg) { - if (arg instanceof Constant) { + if (arg instanceof Constant) { return ConstantImpl.create(apply(arg.toString()).toString()); } else if (arg instanceof Expression) { Expression concatenated = OperationImpl.create(String.class, Ops.CONCAT, (Expression)arg, PERCENT); @@ -120,7 +120,7 @@ public class TemplateFactory { new Function() { @Override public Object apply(Object arg) { - if (arg instanceof Constant) { + if (arg instanceof Constant) { return ConstantImpl.create(apply(arg.toString()).toString()); } else if (arg instanceof Expression) { Expression concatenated = OperationImpl.create(String.class, Ops.CONCAT, PERCENT, (Expression)arg); @@ -135,7 +135,7 @@ public class TemplateFactory { new Function() { @Override public Object apply(Object arg) { - if (arg instanceof Constant) { + if (arg instanceof Constant) { return ConstantImpl.create(apply(arg.toString()).toString()); } else if (arg instanceof Expression) { Expression concatenated = OperationImpl.create(String.class, Ops.CONCAT, PERCENT, (Expression)arg); @@ -150,7 +150,7 @@ public class TemplateFactory { new Function() { @Override public Object apply(Object arg) { - if (arg instanceof Constant) { + if (arg instanceof Constant) { return ConstantImpl.create(apply(arg.toString()).toString()); } else if (arg instanceof Expression) { Expression concatenated = OperationImpl.create(String.class, Ops.CONCAT, PERCENT, (Expression)arg); diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/ToStringVisitor.java b/querydsl-core/src/main/java/com/querydsl/core/types/ToStringVisitor.java index cdd62b40f..0737ef3e9 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/ToStringVisitor.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/ToStringVisitor.java @@ -60,12 +60,12 @@ public final class ToStringVisitor implements Visitor { if (precedence > -1 && rv instanceof Operation) { if (precedence < templates.getPrecedence(((Operation)rv).getOperator())) { builder.append("("); - builder.append(((Expression)rv).accept(this, templates)); + builder.append(((Expression)rv).accept(this, templates)); builder.append(")"); continue; } } - builder.append(((Expression)rv).accept(this, templates)); + builder.append(((Expression)rv).accept(this, templates)); } else { builder.append(rv.toString()); } @@ -93,7 +93,7 @@ public final class ToStringVisitor implements Visitor { for (Template.Element element : pattern.getElements()) { Object rv = element.convert(args); if (rv instanceof Expression) { - builder.append(((Expression)rv).accept(this, templates)); + builder.append(((Expression)rv).accept(this, templates)); } else { builder.append(rv.toString()); } @@ -118,7 +118,7 @@ public final class ToStringVisitor implements Visitor { for (Template.Element element : expr.getTemplate().getElements()) { Object rv = element.convert(expr.getArgs()); if (rv instanceof Expression) { - builder.append(((Expression)rv).accept(this, templates)); + builder.append(((Expression)rv).accept(this, templates)); } else { builder.append(rv.toString()); } diff --git a/querydsl-core/src/test/java/com/querydsl/core/ProjectionsFactory.java b/querydsl-core/src/test/java/com/querydsl/core/ProjectionsFactory.java index 9c77b04ea..afe5441dc 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/ProjectionsFactory.java +++ b/querydsl-core/src/test/java/com/querydsl/core/ProjectionsFactory.java @@ -149,7 +149,7 @@ public class ProjectionsFactory { rv.add(expr.countDistinct()); } - if (!(other instanceof Constant || module == Module.JDO || module == Module.RDFBEAN)) { + if (!(other instanceof Constant || module == Module.JDO || module == Module.RDFBEAN)) { CaseBuilder cases = new CaseBuilder(); rv.add(NumberConstant.create(1).add(cases .when(expr.gt(10)).then(expr) @@ -206,7 +206,7 @@ public class ProjectionsFactory { rv.add(expr.substring(1)); rv.add(expr.substring(0, 1)); - if (!(other instanceof Constant || module == Module.JDO || module == Module.RDFBEAN)) { + if (!(other instanceof Constant || module == Module.JDO || module == Module.RDFBEAN)) { CaseBuilder cases = new CaseBuilder(); rv.add(cases.when(expr.eq("A")).then(other) .when(expr.eq("B")).then(expr) diff --git a/querydsl-core/src/test/java/com/querydsl/core/StringConstant.java b/querydsl-core/src/test/java/com/querydsl/core/StringConstant.java index 1e63da1d0..b5e67c940 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/StringConstant.java +++ b/querydsl-core/src/test/java/com/querydsl/core/StringConstant.java @@ -58,10 +58,9 @@ public final class StringConstant extends StringExpression implements Constant s) { - if (s instanceof Constant) { + if (s instanceof Constant) { return append(((Constant)s).getConstant()); } else { return super.append(s); @@ -134,10 +133,9 @@ public final class StringConstant extends StringExpression implements Constant s) { - if (s instanceof Constant) { + if (s instanceof Constant) { return prepend(((Constant)s).getConstant()); } else { return super.prepend(s); diff --git a/querydsl-core/src/test/java/com/querydsl/core/support/DetachableAdapterTest.java b/querydsl-core/src/test/java/com/querydsl/core/support/DetachableAdapterTest.java index f057a913f..0b678d40f 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/support/DetachableAdapterTest.java +++ b/querydsl-core/src/test/java/com/querydsl/core/support/DetachableAdapterTest.java @@ -23,17 +23,15 @@ import com.querydsl.core.Detachable; import com.querydsl.core.alias.Alias; import com.querydsl.core.types.EntityPath; - -@SuppressWarnings("unchecked") public class DetachableAdapterTest { - private QueryMixin queryMixin; + private QueryMixin queryMixin; private Detachable detachable; @Before public void setUp() { - queryMixin = new QueryMixin(); + queryMixin = new QueryMixin(); detachable = new DetachableAdapter(new DetachableMixin(queryMixin)); } diff --git a/querydsl-core/src/test/java/com/querydsl/core/support/DetachableMixinTest.java b/querydsl-core/src/test/java/com/querydsl/core/support/DetachableMixinTest.java index 44da86d39..b7a416e8f 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/support/DetachableMixinTest.java +++ b/querydsl-core/src/test/java/com/querydsl/core/support/DetachableMixinTest.java @@ -27,17 +27,15 @@ import com.querydsl.core.types.*; import com.querydsl.core.types.dsl.Expressions; import com.querydsl.core.types.dsl.ListSubQuery; - -@SuppressWarnings("unchecked") public class DetachableMixinTest { - private QueryMixin query; + private QueryMixin query; private DetachableMixin detachable; @Before public void setUp() { - query = new QueryMixin(); + query = new QueryMixin(); detachable = new DetachableMixin(query); } diff --git a/querydsl-core/src/test/java/com/querydsl/core/support/DetachableQueryTest.java b/querydsl-core/src/test/java/com/querydsl/core/support/DetachableQueryTest.java index 515afbe07..534a33b5a 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/support/DetachableQueryTest.java +++ b/querydsl-core/src/test/java/com/querydsl/core/support/DetachableQueryTest.java @@ -22,14 +22,14 @@ import org.junit.Test; import com.querydsl.core.alias.Alias; import com.querydsl.core.types.EntityPath; -@SuppressWarnings("unchecked") public class DetachableQueryTest { - private QueryMixin query; + private QueryMixin query; - private DetachableQuery detachable; + private DetachableQuery detachable; @Before + @SuppressWarnings({"rawtypes", "unchecked"}) //not interested for testing purposes public void setUp() { query = new QueryMixin(); detachable = new DetachableQuery(query); diff --git a/querydsl-core/src/test/java/com/querydsl/core/support/ProjectableQueryTest.java b/querydsl-core/src/test/java/com/querydsl/core/support/ProjectableQueryTest.java index faf3e51b1..c4aa3574c 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/support/ProjectableQueryTest.java +++ b/querydsl-core/src/test/java/com/querydsl/core/support/ProjectableQueryTest.java @@ -20,12 +20,11 @@ import org.junit.Test; import com.querydsl.core.types.Expression; import com.querydsl.core.types.Projections; -@SuppressWarnings("unchecked") public class ProjectableQueryTest { @Test public void UniqueResult_Of_Array() { - QueryMixin queryMixin = new QueryMixin(); + QueryMixin queryMixin = new QueryMixin(); DummyProjectable projectable = new DummyProjectable(queryMixin); projectable.uniqueResult(new Expression[0]); assertEquals(Long.valueOf(2), queryMixin.getMetadata().getModifiers().getLimit()); @@ -33,7 +32,7 @@ public class ProjectableQueryTest { @Test public void UniqueResult() { - QueryMixin queryMixin = new QueryMixin(); + QueryMixin queryMixin = new QueryMixin(); DummyProjectable projectable = new DummyProjectable(queryMixin); projectable.uniqueResult(Projections.bean(Object.class)); assertEquals(Long.valueOf(2), queryMixin.getMetadata().getModifiers().getLimit()); diff --git a/querydsl-core/src/test/java/com/querydsl/core/support/QueryMixinPerformanceTest.java b/querydsl-core/src/test/java/com/querydsl/core/support/QueryMixinPerformanceTest.java index da05108cd..a18828f10 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/support/QueryMixinPerformanceTest.java +++ b/querydsl-core/src/test/java/com/querydsl/core/support/QueryMixinPerformanceTest.java @@ -20,7 +20,7 @@ public class QueryMixinPerformanceTest { long start = System.currentTimeMillis(); for (int i = 0; i < iterations; i++) { - QueryMixin mixin = new QueryMixin(); + QueryMixin mixin = new QueryMixin(); mixin.from(entity); mixin.where(other.eq(new DummyEntity())); mixin.setProjection(entity); @@ -37,7 +37,7 @@ public class QueryMixinPerformanceTest { long start = System.currentTimeMillis(); for (int i = 0; i < iterations; i++) { - QueryMixin mixin = new QueryMixin(); + QueryMixin mixin = new QueryMixin(); mixin.from(entities); mixin.where(other.eq(new DummyEntity())); mixin.setProjection(entity); diff --git a/querydsl-core/src/test/java/com/querydsl/core/support/QueryMixinTest.java b/querydsl-core/src/test/java/com/querydsl/core/support/QueryMixinTest.java index 85451b6f8..475a21013 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/support/QueryMixinTest.java +++ b/querydsl-core/src/test/java/com/querydsl/core/support/QueryMixinTest.java @@ -28,8 +28,7 @@ import com.querydsl.core.types.dsl.BooleanExpression; public class QueryMixinTest { - @SuppressWarnings("unchecked") - private QueryMixin mixin = new QueryMixin(); + private QueryMixin mixin = new QueryMixin(); private QCommonPersistence entity = new QCommonPersistence(PathMetadataFactory.forVariable("entity")); diff --git a/querydsl-core/src/test/java/com/querydsl/core/types/ExpressivityTest.java b/querydsl-core/src/test/java/com/querydsl/core/types/ExpressivityTest.java index d8430fd31..6281d9a89 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/types/ExpressivityTest.java +++ b/querydsl-core/src/test/java/com/querydsl/core/types/ExpressivityTest.java @@ -20,13 +20,12 @@ public class ExpressivityTest { private DetachableMixin sub; - @SuppressWarnings({ "rawtypes", "unchecked" }) @Before public void setUp() { num = Expressions.numberPath(Integer.class, "num"); str = Expressions.stringPath("str"); date = Expressions.datePath(Date.class, "date"); - QueryMixin query = new QueryMixin(); + QueryMixin query = new QueryMixin(); query.from(num, str); sub = new DetachableMixin(query); } diff --git a/querydsl-core/src/test/java/com/querydsl/core/types/dsl/NumberPathTest.java b/querydsl-core/src/test/java/com/querydsl/core/types/dsl/NumberPathTest.java index b0a3dec5c..b5b7d426c 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/types/dsl/NumberPathTest.java +++ b/querydsl-core/src/test/java/com/querydsl/core/types/dsl/NumberPathTest.java @@ -21,7 +21,6 @@ import org.junit.Test; import com.querydsl.core.types.Constant; import com.querydsl.core.types.Operation; -import com.querydsl.core.types.dsl.NumberPath; public class NumberPathTest { @@ -31,8 +30,8 @@ public class NumberPathTest { @Test public void BytePath_in() { Operation operation = (Operation) bytePath.in(1, 2, 3); - - List numbers = (List) ((Constant)operation.getArg(1)).getConstant(); + Constant> rightArg = (Constant>) operation.getArg(1); + List numbers = rightArg.getConstant(); assertEquals(Byte.valueOf((byte)1), numbers.get(0)); assertEquals(Byte.valueOf((byte)2), numbers.get(1)); assertEquals(Byte.valueOf((byte)3), numbers.get(2)); @@ -42,8 +41,8 @@ public class NumberPathTest { @Test public void BytePath_notIn() { Operation operation = (Operation) bytePath.notIn(1, 2, 3); - - List numbers = (List) ((Constant)operation.getArg(1)).getConstant(); + Constant> rightArg = (Constant>) operation.getArg(1); + List numbers = rightArg.getConstant(); assertEquals(Byte.valueOf((byte)1), numbers.get(0)); assertEquals(Byte.valueOf((byte)2), numbers.get(1)); assertEquals(Byte.valueOf((byte)3), numbers.get(2)); diff --git a/querydsl-jdo/src/main/java/com/querydsl/jdo/JDOQLSerializer.java b/querydsl-jdo/src/main/java/com/querydsl/jdo/JDOQLSerializer.java index be4e3f42f..0e8e078ad 100644 --- a/querydsl-jdo/src/main/java/com/querydsl/jdo/JDOQLSerializer.java +++ b/querydsl-jdo/src/main/java/com/querydsl/jdo/JDOQLSerializer.java @@ -273,16 +273,20 @@ public final class JDOQLSerializer extends SerializerBase { return null; } - @SuppressWarnings({ "unchecked", "rawtypes" }) +// @SuppressWarnings({ "unchecked", "rawtypes" }) @Override protected void visitOperation(Class type, Operator operator, List> args) { if (operator == Ops.INSTANCE_OF) { handle(args.get(0)).append(" instanceof "); - append(((Constant>) args.get(1)).getConstant().getName()); + @SuppressWarnings("unchecked") //This is the expected type for instanceOf + Constant> rightArg = (Constant>) args.get(1); + append(rightArg.getConstant().getName()); } else if (operator == Ops.LIKE || operator == Ops.LIKE_ESCAPE) { + @SuppressWarnings("unchecked") //This is the expected type for like + Expression rightArg = (Expression) args.get(1); super.visitOperation(type, Ops.MATCHES, - ImmutableList.of(args.get(0), ExpressionUtils.likeToRegex((Expression) args.get(1), false))); + ImmutableList.of(args.get(0), ExpressionUtils.likeToRegex(rightArg, false))); // exists } else if (operator == Ops.EXISTS && args.get(0) instanceof SubQueryExpression) { @@ -300,7 +304,9 @@ public final class JDOQLSerializer extends SerializerBase { append(") == 0"); } else if (operator == Ops.NUMCAST) { - Class clazz = ((Constant>)args.get(1)).getConstant(); + @SuppressWarnings("unchecked") //This is the expected type for castToNum + Constant> rightArg = (Constant>)args.get(1); + Class clazz = rightArg.getConstant(); if (Number.class.isAssignableFrom(clazz) && Primitives.isWrapperType(clazz)) { clazz = Primitives.unwrap(clazz); } diff --git a/querydsl-jpa/src/main/java/com/querydsl/jpa/JPQLSerializer.java b/querydsl-jpa/src/main/java/com/querydsl/jpa/JPQLSerializer.java index 6d414802f..ce611bc2a 100644 --- a/querydsl-jpa/src/main/java/com/querydsl/jpa/JPQLSerializer.java +++ b/querydsl-jpa/src/main/java/com/querydsl/jpa/JPQLSerializer.java @@ -420,7 +420,7 @@ public class JPQLSerializer extends SerializerBase { } else if (operator == Ops.IN || operator == Ops.NOT_IN) { if (args.get(1) instanceof Path) { visitAnyInPath(type, operator, args); - } else if (args.get(0) instanceof Path && args.get(1) instanceof Constant) { + } else if (args.get(0) instanceof Path && args.get(1) instanceof Constant) { visitPathInCollection(type, operator, args); } else { super.visitOperation(type, operator, args); @@ -439,7 +439,7 @@ public class JPQLSerializer extends SerializerBase { super.visitOperation(type, Ops.LIKE, ImmutableList.of(args.get(0), ExpressionUtils.regexToLike((Expression) args.get(1)))); - } else if (operator == Ops.LIKE && args.get(1) instanceof Constant) { + } else if (operator == Ops.LIKE && args.get(1) instanceof Constant) { final String escape = String.valueOf(templates.getEscapeChar()); final String escaped = args.get(1).toString().replace(escape, escape + escape); super.visitOperation(String.class, Ops.LIKE, @@ -457,7 +457,10 @@ public class JPQLSerializer extends SerializerBase { } private void visitNumCast(List> args) { - final Class targetType = (Class) ((Constant) args.get(1)).getConstant(); + @SuppressWarnings("unchecked") //this is the second argument's type + Constant> rightArg = (Constant>) args.get(1); + + final Class targetType = rightArg.getConstant(); final String typeName = templates.getTypeForCast(targetType); visitOperation(targetType, JPQLOps.CAST, ImmutableList.of(args.get(0), ConstantImpl.create(typeName))); } @@ -502,11 +505,13 @@ public class JPQLSerializer extends SerializerBase { return null; } - @SuppressWarnings({ "rawtypes", "unchecked" }) private void visitAnyInPath(Class type, Operator operator, List> args) { - if (!templates.isEnumInPathSupported() && args.get(0) instanceof Constant && Enum.class.isAssignableFrom(args.get(0).getType())) { - final Enumerated enumerated = ((Path)args.get(1)).getAnnotatedElement().getAnnotation(Enumerated.class); - final Enum constant = (Enum)((Constant)args.get(0)).getConstant(); + if (!templates.isEnumInPathSupported() && args.get(0) instanceof Constant && Enum.class.isAssignableFrom(args.get(0).getType())) { + @SuppressWarnings("unchecked") //guarded by previous check + Constant> expectedConstant = (Constant>) args.get(0); + + final Enum constant = expectedConstant.getConstant(); + final Enumerated enumerated = ((Path)args.get(1)).getAnnotatedElement().getAnnotation(Enumerated.class); if (enumerated == null || enumerated.value() == EnumType.ORDINAL) { args = ImmutableList.of(ConstantImpl.create(constant.ordinal()), args.get(1)); } else { @@ -518,33 +523,39 @@ public class JPQLSerializer extends SerializerBase { args); } - @SuppressWarnings({ "unchecked", "rawtypes" }) private List> normalizeNumericArgs(List> args) { + //we do not yet let it produce these types + //we verify the types with isAssignableFrom() + @SuppressWarnings("unchecked") + List> potentialArgs = + (List>) args; boolean hasConstants = false; Class numType = null; - for (Expression arg : args) { + for (Expression arg : potentialArgs) { if (Number.class.isAssignableFrom(arg.getType())) { - if (arg instanceof Constant) { + if (arg instanceof Constant) { hasConstants = true; } else { - numType = (Class) arg.getType(); + numType = arg.getType(); } } } if (hasConstants && numType != null) { + //now we do let the potentialArgs help us final List> newArgs = new ArrayList>(args.size()); - for (final Expression arg : args) { - if (arg instanceof Constant && Number.class.isAssignableFrom(arg.getType()) + for (final Expression arg : potentialArgs) { + if (arg instanceof Constant && Number.class.isAssignableFrom(arg.getType()) && !arg.getType().equals(numType)) { - final Number number = (Number) ((Constant)arg).getConstant(); - newArgs.add(ConstantImpl.create(MathUtils.cast(number, (Class)numType))); + final Number number = ((Constant) arg).getConstant(); + newArgs.add(ConstantImpl.create(MathUtils.cast(number, numType))); } else { newArgs.add(arg); } } return newArgs; } else { - return args; + //the types are all non-constants, or not Number expressions + return potentialArgs; } } diff --git a/querydsl-jpa/src/main/java/com/querydsl/jpa/hibernate/HibernateDeleteClause.java b/querydsl-jpa/src/main/java/com/querydsl/jpa/hibernate/HibernateDeleteClause.java index 52acaa8c6..74c410dc9 100644 --- a/querydsl-jpa/src/main/java/com/querydsl/jpa/hibernate/HibernateDeleteClause.java +++ b/querydsl-jpa/src/main/java/com/querydsl/jpa/hibernate/HibernateDeleteClause.java @@ -39,7 +39,7 @@ import org.hibernate.StatelessSession; */ public class HibernateDeleteClause implements DeleteClause { - private final QueryMixin queryMixin = new JPAQueryMixin(); + private final QueryMixin queryMixin = new JPAQueryMixin(); private final SessionHolder session; diff --git a/querydsl-jpa/src/main/java/com/querydsl/jpa/hibernate/HibernateUpdateClause.java b/querydsl-jpa/src/main/java/com/querydsl/jpa/hibernate/HibernateUpdateClause.java index 51ff14e59..05540029d 100644 --- a/querydsl-jpa/src/main/java/com/querydsl/jpa/hibernate/HibernateUpdateClause.java +++ b/querydsl-jpa/src/main/java/com/querydsl/jpa/hibernate/HibernateUpdateClause.java @@ -42,7 +42,7 @@ import com.querydsl.jpa.JPQLTemplates; public class HibernateUpdateClause implements UpdateClause { - private final QueryMixin queryMixin = new JPAQueryMixin(); + private final QueryMixin queryMixin = new JPAQueryMixin(); private final Map, Expression> updates = Maps.newLinkedHashMap(); diff --git a/querydsl-jpa/src/main/java/com/querydsl/jpa/impl/JPADeleteClause.java b/querydsl-jpa/src/main/java/com/querydsl/jpa/impl/JPADeleteClause.java index 9b6f20b25..d538bea59 100644 --- a/querydsl-jpa/src/main/java/com/querydsl/jpa/impl/JPADeleteClause.java +++ b/querydsl-jpa/src/main/java/com/querydsl/jpa/impl/JPADeleteClause.java @@ -36,7 +36,7 @@ import com.querydsl.core.types.Predicate; */ public class JPADeleteClause implements DeleteClause { - private final QueryMixin queryMixin = new JPAQueryMixin(); + private final QueryMixin queryMixin = new JPAQueryMixin(); private final EntityManager entityManager; diff --git a/querydsl-jpa/src/main/java/com/querydsl/jpa/impl/JPAUpdateClause.java b/querydsl-jpa/src/main/java/com/querydsl/jpa/impl/JPAUpdateClause.java index 7fcde9f3f..510978464 100644 --- a/querydsl-jpa/src/main/java/com/querydsl/jpa/impl/JPAUpdateClause.java +++ b/querydsl-jpa/src/main/java/com/querydsl/jpa/impl/JPAUpdateClause.java @@ -39,7 +39,7 @@ import com.querydsl.jpa.JPQLTemplates; */ public class JPAUpdateClause implements UpdateClause { - private final QueryMixin queryMixin = new JPAQueryMixin(); + private final QueryMixin queryMixin = new JPAQueryMixin(); private final Map, Expression> updates = Maps.newLinkedHashMap(); diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/JPAQueryMixinTest.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/JPAQueryMixinTest.java index 90dcc42ad..018342209 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/JPAQueryMixinTest.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/JPAQueryMixinTest.java @@ -18,7 +18,7 @@ import com.querydsl.jpa.domain4.QBookVersion; public class JPAQueryMixinTest { - private JPAQueryMixin mixin = new JPAQueryMixin(); + private JPAQueryMixin mixin = new JPAQueryMixin(); @Test public void Where_Null() { diff --git a/querydsl-lucene3/src/main/java/com/querydsl/lucene3/LuceneSerializer.java b/querydsl-lucene3/src/main/java/com/querydsl/lucene3/LuceneSerializer.java index 61631e1c4..8292364b1 100644 --- a/querydsl-lucene3/src/main/java/com/querydsl/lucene3/LuceneSerializer.java +++ b/querydsl-lucene3/src/main/java/com/querydsl/lucene3/LuceneSerializer.java @@ -115,7 +115,9 @@ public class LuceneSerializer { } else if (op == Ops.GOE) { return ge(operation, metadata); } else if (op == LuceneOps.LUCENE_QUERY) { - return ((Constant)operation.getArg(0)).getConstant(); + @SuppressWarnings("unchecked") //This is the expected type + Query rv = ((Constant)operation.getArg(0)).getConstant(); + return rv; } throw new UnsupportedOperationException("Illegal operation " + operation); } @@ -159,15 +161,15 @@ public class LuceneSerializer { return new WildcardQuery(new Term(field, terms[0])); } - @SuppressWarnings("unchecked") protected Query eq(Operation operation, QueryMetadata metadata, boolean ignoreCase) { verifyArguments(operation); Path path = getPath(operation.getArg(0)); String field = toField(path); if (Number.class.isAssignableFrom(operation.getArg(1).getType())) { - return new TermQuery(new Term(field, convertNumber(((Constant) operation - .getArg(1)).getConstant()))); + @SuppressWarnings("unchecked") //guarded by previous check + Constant rightArg = (Constant) operation.getArg(1); + return new TermQuery(new Term(field, convertNumber(rightArg.getConstant()))); } return eq(field, convert(path, operation.getArg(1), metadata), ignoreCase); @@ -211,7 +213,9 @@ public class LuceneSerializer { protected Query in(Operation operation, QueryMetadata metadata, boolean ignoreCase) { Path path = getPath(operation.getArg(0)); String field = toField(path); - Collection values = (Collection) ((Constant) operation.getArg(1)).getConstant(); + @SuppressWarnings("unchecked") //This is the second argument type + Constant> collConstant = (Constant>) operation.getArg(1); + Collection values = collConstant.getConstant(); BooleanQuery bq = new BooleanQuery(); for (Object value : values) { String[] str = convert(path, value); @@ -349,15 +353,23 @@ public class LuceneSerializer { metadata); } - @SuppressWarnings({"unchecked"}) protected Query range(Path leftHandSide, String field, @Nullable Expression min, @Nullable Expression max, boolean minInc, boolean maxInc, QueryMetadata metadata) { if (min != null && Number.class.isAssignableFrom(min.getType()) || max != null && Number.class.isAssignableFrom(max.getType())) { - Class numType = (Class) (min != null ? min.getType() : max.getType()); - return numericRange((Class) numType, field, (Number) (min == null ? null - : ((Constant) min).getConstant()), (Number) (max == null ? null - : ((Constant) max).getConstant()), minInc, maxInc); + @SuppressWarnings("unchecked") //guarded by previous check + Constant minConstant = (Constant) min; + @SuppressWarnings("unchecked") //guarded by previous check + Constant maxConstant = (Constant) max; + + Class numType = minConstant != null ? minConstant.getType() : maxConstant.getType(); + //this is not necessarily safe, but compile time checking + //on the user side mandates these types to be interchangeable + @SuppressWarnings("unchecked") + Class unboundedNumType = (Class)numType; + return numericRange(unboundedNumType, field, minConstant == null ? null + : minConstant.getConstant(), maxConstant == null ? null + : maxConstant.getConstant(), minInc, maxInc); } return stringRange(leftHandSide, field, min, max, minInc, maxInc, metadata); } diff --git a/querydsl-lucene4/src/main/java/com/querydsl/lucene4/LuceneSerializer.java b/querydsl-lucene4/src/main/java/com/querydsl/lucene4/LuceneSerializer.java index 401a0972b..adaf6161a 100644 --- a/querydsl-lucene4/src/main/java/com/querydsl/lucene4/LuceneSerializer.java +++ b/querydsl-lucene4/src/main/java/com/querydsl/lucene4/LuceneSerializer.java @@ -116,7 +116,9 @@ public class LuceneSerializer { } else if (op == Ops.GOE) { return ge(operation, metadata); } else if (op == LuceneOps.LUCENE_QUERY) { - return ((Constant)operation.getArg(0)).getConstant(); + @SuppressWarnings("unchecked") //this is the expected type + Constant expectedConstant = (Constant)operation.getArg(0); + return expectedConstant.getConstant(); } throw new UnsupportedOperationException("Illegal operation " + operation); } @@ -160,15 +162,15 @@ public class LuceneSerializer { return new WildcardQuery(new Term(field, terms[0])); } - @SuppressWarnings("unchecked") protected Query eq(Operation operation, QueryMetadata metadata, boolean ignoreCase) { verifyArguments(operation); Path path = getPath(operation.getArg(0)); String field = toField(path); if (Number.class.isAssignableFrom(operation.getArg(1).getType())) { - return new TermQuery(new Term(field, convertNumber(((Constant) operation - .getArg(1)).getConstant()))); + @SuppressWarnings("unchecked") //guarded by previous check + Constant rightArg = (Constant) operation.getArg(1); + return new TermQuery(new Term(field, convertNumber(rightArg.getConstant()))); } return eq(field, convert(path, operation.getArg(1), metadata), ignoreCase); @@ -214,7 +216,9 @@ public class LuceneSerializer { protected Query in(Operation operation, QueryMetadata metadata, boolean ignoreCase) { Path path = getPath(operation.getArg(0)); String field = toField(path); - Collection values = (Collection) ((Constant) operation.getArg(1)).getConstant(); + @SuppressWarnings("unchecked") //this is the expected type + Constant> expectedConstant = (Constant>) operation.getArg(1); + Collection values = expectedConstant.getConstant(); BooleanQuery bq = new BooleanQuery(); for (Object value : values) { String[] str = convert(path, value); @@ -352,15 +356,23 @@ public class LuceneSerializer { metadata); } - @SuppressWarnings({"unchecked"}) protected Query range(Path leftHandSide, String field, @Nullable Expression min, @Nullable Expression max, boolean minInc, boolean maxInc, QueryMetadata metadata) { if (min != null && Number.class.isAssignableFrom(min.getType()) || max != null && Number.class.isAssignableFrom(max.getType())) { - Class numType = (Class) (min != null ? min.getType() : max.getType()); - return numericRange((Class) numType, field, (Number) (min == null ? null - : ((Constant) min).getConstant()), (Number) (max == null ? null - : ((Constant) max).getConstant()), minInc, maxInc); + @SuppressWarnings("unchecked") //guarded by previous check + Constant minConstant = (Constant) min; + @SuppressWarnings("unchecked") //guarded by previous check + Constant maxConstant = (Constant) max; + + Class numType = minConstant != null ? minConstant.getType() : maxConstant.getType(); + //this is not necessarily safe, but compile time checking + //on the user side mandates these types to be interchangeable + @SuppressWarnings("unchecked") + Class unboundedNumType = (Class)numType; + return numericRange(unboundedNumType, field, minConstant == null ? null + : minConstant.getConstant(), maxConstant == null ? null + : maxConstant.getConstant(), minInc, maxInc); } return stringRange(leftHandSide, field, min, max, minInc, maxInc, metadata); } diff --git a/querydsl-mongodb/src/main/java/com/querydsl/mongodb/MongodbSerializer.java b/querydsl-mongodb/src/main/java/com/querydsl/mongodb/MongodbSerializer.java index 78d60a84e..e550df7d4 100644 --- a/querydsl-mongodb/src/main/java/com/querydsl/mongodb/MongodbSerializer.java +++ b/querydsl-mongodb/src/main/java/com/querydsl/mongodb/MongodbSerializer.java @@ -51,7 +51,9 @@ public abstract class MongodbSerializer implements Visitor { @Override public Object visit(Constant expr, Void context) { if (Enum.class.isAssignableFrom(expr.getType())) { - return ((Enum)expr.getConstant()).name(); + @SuppressWarnings("unchecked") //Guarded by previous check + Constant> expectedExpr = (Constant>)expr; + return expectedExpr.getConstant().name(); } else { return expr.getConstant(); } @@ -190,7 +192,8 @@ public abstract class MongodbSerializer implements Visitor { exprIndex = 0; } if (Collection.class.isAssignableFrom(expr.getArg(constIndex).getType())) { - Collection values = (Collection) ((Constant) expr.getArg(constIndex)).getConstant(); + @SuppressWarnings("unchecked") //guarded by previous check + Collection values = ((Constant>) expr.getArg(constIndex)).getConstant(); return asDBObject(asDBKey(expr, exprIndex), asDBObject("$in", values.toArray())); } else { if (isReference(expr, exprIndex)) { @@ -208,7 +211,8 @@ public abstract class MongodbSerializer implements Visitor { exprIndex = 0; } if (Collection.class.isAssignableFrom(expr.getArg(constIndex).getType())) { - Collection values = (Collection) ((Constant) expr.getArg(constIndex)).getConstant(); + @SuppressWarnings("unchecked") //guarded by previous check + Collection values = ((Constant>) expr.getArg(constIndex)).getConstant(); return asDBObject(asDBKey(expr, exprIndex), asDBObject("$nin", values.toArray())); } else { if (isReference(expr, exprIndex)) { diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/ProjectableSQLQuery.java b/querydsl-sql/src/main/java/com/querydsl/sql/ProjectableSQLQuery.java index de42f6eac..f960a323c 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/ProjectableSQLQuery.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/ProjectableSQLQuery.java @@ -475,7 +475,7 @@ public abstract class ProjectableSQLQuery & Que .equals(expandProjection(firstUnionSubQuery.getMetadata().getProjection()))) { serializer.serializeUnion(union, queryMixin.getMetadata(), unionAll); } else { - QueryMixin mixin2 = new QueryMixin(queryMixin.getMetadata().clone()); + QueryMixin mixin2 = new QueryMixin(queryMixin.getMetadata().clone()); Set> paths = getRootPaths(expandProjection(mixin2.getMetadata().getProjection())); if (paths.isEmpty()) { mixin2.from(ExpressionUtils.as((Expression) union, defaultQueryAlias)); diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/SQLExpressions.java b/querydsl-sql/src/main/java/com/querydsl/sql/SQLExpressions.java index 53e4b2f83..248d4ac59 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/SQLExpressions.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/SQLExpressions.java @@ -85,7 +85,7 @@ public final class SQLExpressions { if (args[i] instanceof Expression) { exprs[i] = (Expression)args[i]; } else { - exprs[i] = new ConstantImpl(args[i]); + exprs[i] = ConstantImpl.create(args[i]); } } return exprs; diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/SQLSerializer.java b/querydsl-sql/src/main/java/com/querydsl/sql/SQLSerializer.java index 1581962da..bac312367 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/SQLSerializer.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/SQLSerializer.java @@ -852,7 +852,7 @@ public class SQLSerializer extends SerializerBase { && args.get(0) instanceof Path && args.get(1) instanceof Constant && operator != Ops.NUMCAST) { - Object constant = ((Constant)args.get(1)).getConstant(); + Object constant = ((Constant)args.get(1)).getConstant(); if (!Collection.class.isInstance(constant) || !((Collection)constant).isEmpty()) { for (Element element : templates.getTemplate(operator).getElements()) { if (element instanceof Template.ByIndex && ((Template.ByIndex)element).getIndex() == 1) { @@ -870,7 +870,7 @@ public class SQLSerializer extends SerializerBase { super.visitOperation(type, operator, args); inUnion = oldUnion; - } else if (operator == Ops.LIKE && args.get(1) instanceof Constant) { + } else if (operator == Ops.LIKE && args.get(1) instanceof Constant) { final String escape = String.valueOf(templates.getEscapeChar()); final String escaped = args.get(1).toString().replace(escape, escape + escape); super.visitOperation(String.class, Ops.LIKE, @@ -882,7 +882,10 @@ public class SQLSerializer extends SerializerBase { ImmutableList.of(args.get(0), ConstantImpl.create(typeName))); } else if (operator == Ops.NUMCAST) { - final Class targetType = (Class) ((Constant) args.get(1)).getConstant(); + @SuppressWarnings("unchecked") //this is the second argument's type + Constant> expectedConstant = (Constant>) args.get(1); + + final Class targetType = expectedConstant.getConstant(); final String typeName = configuration.getTypeNameForCast(targetType); super.visitOperation(targetType, SQLOps.CAST, ImmutableList.of(args.get(0), ConstantImpl.create(typeName))); diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/PaginationTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/PaginationTest.java index 1d3c7e8c4..0968d5542 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/PaginationTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/PaginationTest.java @@ -39,7 +39,7 @@ public class PaginationTest { for (SQLTemplates templates : list) { QEmployee employee = QEmployee.employee; - QueryMixin query = new QueryMixin(); + QueryMixin query = new QueryMixin(); query.from(employee); query.orderBy(employee.firstname.asc()); query.setProjection(employee.id); diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/SelectBase.java b/querydsl-sql/src/test/java/com/querydsl/sql/SelectBase.java index d818ac6d3..36d45419f 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/SelectBase.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/SelectBase.java @@ -432,7 +432,7 @@ public class SelectBase extends AbstractBaseTest { Map failures = Maps.newIdentityHashMap(); for (Object dt : data) { - Object dt2 = query().singleResult(new ConstantImpl(dt)); + Object dt2 = query().singleResult(ConstantImpl.create(dt)); if (!dt.equals(dt2)) { failures.put(dt, dt2); }