From 481956a9330e2eac3d2c23cb376ab0deb5000aac Mon Sep 17 00:00:00 2001 From: Luke Cwik Date: Tue, 17 Jul 2018 09:18:03 -0700 Subject: [PATCH] [BEAM-4769] Fix issue when performing coder inference for wildcard types. --- .../apache/beam/sdk/coders/CoderRegistry.java | 6 +----- .../beam/sdk/coders/CoderRegistryTest.java | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/CoderRegistry.java b/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/CoderRegistry.java index 167ff84f01c3..865b24886085 100644 --- a/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/CoderRegistry.java +++ b/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/CoderRegistry.java @@ -621,11 +621,7 @@ private Coder getCoderFromTypeDescriptor( } else if (type instanceof WildcardType) { // No coder for an unknown generic type. throw new CannotProvideCoderException( - String.format( - "Cannot provide a coder for type variable %s" - + " (declared by %s) because the actual type is unknown due to erasure.", - type, ((TypeVariable) type).getGenericDeclaration()), - ReasonCode.TYPE_ERASURE); + String.format("Cannot provide a coder for wildcard type %s.", type), ReasonCode.UNKNOWN); } else { throw new RuntimeException("Internal error: unexpected kind of Type: " + type); } diff --git a/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/CoderRegistryTest.java b/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/CoderRegistryTest.java index de561dd1779b..4b21fd29fbf5 100644 --- a/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/CoderRegistryTest.java +++ b/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/CoderRegistryTest.java @@ -27,6 +27,7 @@ import java.io.InputStream; import java.io.OutputStream; import java.io.Serializable; +import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import java.util.Collections; import java.util.List; @@ -149,6 +150,21 @@ public void testParameterizedDefaultCoderUnknown() throws Exception { registry.getCoder(listUnknownToken); } + @Test + public void testParameterizedWildcardTypeIsUnknown() throws Exception { + CoderRegistry registry = CoderRegistry.createDefault(); + TypeDescriptor> wildcardUnknownToken = + new TypeDescriptor>() {}; + + thrown.expect(CannotProvideCoderException.class); + thrown.expectMessage( + String.format( + "Cannot provide coder for parameterized type %s: Cannot provide a coder for wildcard type %s.", + wildcardUnknownToken, + ((ParameterizedType) wildcardUnknownToken.getType()).getActualTypeArguments()[0])); + registry.getCoder(wildcardUnknownToken); + } + @Test public void testTypeParameterInferenceForward() throws Exception { CoderRegistry registry = CoderRegistry.createDefault();