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;
+    }
+  }
 
 }
 

Reply via email to