You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flink.apache.org by se...@apache.org on 2020/03/02 14:29:56 UTC

[flink] 01/03: [FLINK-2336][DataStream API] Fix ArrayIndexOufOBoundsException in TypeExtractor for type erased lambdas

This is an automated email from the ASF dual-hosted git repository.

sewen pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/flink.git

commit cc75e01abcb6b6eed50591c94db9e2a26f179518
Author: GuoWei Ma <gu...@gmail.com>
AuthorDate: Thu Feb 27 16:12:27 2020 +0800

    [FLINK-2336][DataStream API] Fix ArrayIndexOufOBoundsException in TypeExtractor for type erased lambdas
    
    This closes #11234
---
 .../java/org/apache/flink/api/java/typeutils/TypeExtractor.java     | 5 +++++
 .../org/apache/flink/api/java/typeutils/LambdaExtractionTest.java   | 6 ++++++
 2 files changed, 11 insertions(+)

diff --git a/flink-core/src/main/java/org/apache/flink/api/java/typeutils/TypeExtractor.java b/flink-core/src/main/java/org/apache/flink/api/java/typeutils/TypeExtractor.java
index 81cd4d2..acb1ec9 100644
--- a/flink-core/src/main/java/org/apache/flink/api/java/typeutils/TypeExtractor.java
+++ b/flink-core/src/main/java/org/apache/flink/api/java/typeutils/TypeExtractor.java
@@ -953,6 +953,11 @@ public class TypeExtractor {
 				break;
 			}
 		}
+
+		if (inputTypeHierarchy.size() == 0) {
+			return null;
+		}
+
 		ParameterizedType baseClass = (ParameterizedType) inputTypeHierarchy.get(inputTypeHierarchy.size() - 1);
 
 		TypeInformation<?> info = null;
diff --git a/flink-core/src/test/java/org/apache/flink/api/java/typeutils/LambdaExtractionTest.java b/flink-core/src/test/java/org/apache/flink/api/java/typeutils/LambdaExtractionTest.java
index 1d5cf22..36d3637 100644
--- a/flink-core/src/test/java/org/apache/flink/api/java/typeutils/LambdaExtractionTest.java
+++ b/flink-core/src/test/java/org/apache/flink/api/java/typeutils/LambdaExtractionTest.java
@@ -232,6 +232,12 @@ public class LambdaExtractionTest {
 	}
 
 	@Test
+	public void testLambdaWithoutTypeErasure() {
+		TypeInformation<?> ti = TypeExtractor.getMapReturnTypes(Tuple1::of, BasicTypeInfo.STRING_TYPE_INFO, null, true);
+		assertTrue(ti instanceof MissingTypeInfo);
+	}
+
+	@Test
 	public void testPartitionerLambda() {
 		Partitioner<Tuple2<Integer, String>> partitioner = (key, numPartitions) -> key.f1.length() % numPartitions;
 		final TypeInformation<?> ti = TypeExtractor.getPartitionerTypes(partitioner, null, true);