Repository: calcite Updated Branches: refs/heads/master b98a8e7af -> 00c36467d
[CALCITE-2413] Use raw signatures for classes with generics when producing Java code Project: http://git-wip-us.apache.org/repos/asf/calcite/repo Commit: http://git-wip-us.apache.org/repos/asf/calcite/commit/00c36467 Tree: http://git-wip-us.apache.org/repos/asf/calcite/tree/00c36467 Diff: http://git-wip-us.apache.org/repos/asf/calcite/diff/00c36467 Branch: refs/heads/master Commit: 00c36467d0a90290f6085f88debec71b217fe43f Parents: b98a8e7 Author: Vladimir Sitnikov <[email protected]> Authored: Sat Sep 22 17:55:50 2018 +0300 Committer: Vladimir Sitnikov <[email protected]> Committed: Sat Sep 22 17:55:50 2018 +0300 ---------------------------------------------------------------------- .../linq4j/tree/MethodCallExpression.java | 2 +- .../calcite/linq4j/test/BlockBuilderTest.java | 33 ++++++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/calcite/blob/00c36467/linq4j/src/main/java/org/apache/calcite/linq4j/tree/MethodCallExpression.java ---------------------------------------------------------------------- diff --git a/linq4j/src/main/java/org/apache/calcite/linq4j/tree/MethodCallExpression.java b/linq4j/src/main/java/org/apache/calcite/linq4j/tree/MethodCallExpression.java index bd3cd91..e890d72 100644 --- a/linq4j/src/main/java/org/apache/calcite/linq4j/tree/MethodCallExpression.java +++ b/linq4j/src/main/java/org/apache/calcite/linq4j/tree/MethodCallExpression.java @@ -50,7 +50,7 @@ public class MethodCallExpression extends Expression { MethodCallExpression(Method method, Expression targetExpression, List<Expression> expressions) { - this(method.getGenericReturnType(), method, targetExpression, expressions); + this(method.getReturnType(), method, targetExpression, expressions); } @Override public Expression accept(Shuttle shuttle) { http://git-wip-us.apache.org/repos/asf/calcite/blob/00c36467/linq4j/src/test/java/org/apache/calcite/linq4j/test/BlockBuilderTest.java ---------------------------------------------------------------------- diff --git a/linq4j/src/test/java/org/apache/calcite/linq4j/test/BlockBuilderTest.java b/linq4j/src/test/java/org/apache/calcite/linq4j/test/BlockBuilderTest.java index 2886269..79d99b2 100644 --- a/linq4j/src/test/java/org/apache/calcite/linq4j/test/BlockBuilderTest.java +++ b/linq4j/src/test/java/org/apache/calcite/linq4j/test/BlockBuilderTest.java @@ -28,6 +28,9 @@ import org.apache.calcite.linq4j.tree.Shuttle; import org.junit.Before; import org.junit.Test; +import java.lang.reflect.Method; +import java.util.function.Function; + import static org.apache.calcite.linq4j.test.BlockBuilderBase.FOUR; import static org.apache.calcite.linq4j.test.BlockBuilderBase.ONE; import static org.apache.calcite.linq4j.test.BlockBuilderBase.TWO; @@ -123,6 +126,36 @@ public class BlockBuilderTest { Expressions.toString(outer.toBlock())); } + /** + * CALCITE-2413: RexToLixTranslator does not generate correct declaration of Methods with + * generic return types + */ + @Test public void genericMethodCall() throws NoSuchMethodException { + BlockBuilder bb = new BlockBuilder(); + bb.append("_i", + Expressions.call( + Expressions.new_(Identity.class), + Identity.class.getMethod("apply", Object.class), + Expressions.constant("test"))); + + assertEquals( + "{\n" + + " final Object _i = new org.apache.calcite.linq4j.test.BlockBuilderTest.Identity()" + + ".apply(\"test\");\n" + + "}\n", + Expressions.toString(bb.toBlock())); + + } + + /** + * Class with generics to validate if {@link Expressions#call(Method, Expression...)} works. + * @param <I> result type + */ + static class Identity<I> implements Function<I, I> { + @Override public I apply(I i) { + return i; + } + } }
