[FLINK-5070] [types] Unable to use Scala's BeanProperty with classes This closes #3318
Project: http://git-wip-us.apache.org/repos/asf/flink/repo Commit: http://git-wip-us.apache.org/repos/asf/flink/commit/949d16e8 Tree: http://git-wip-us.apache.org/repos/asf/flink/tree/949d16e8 Diff: http://git-wip-us.apache.org/repos/asf/flink/diff/949d16e8 Branch: refs/heads/release-1.3 Commit: 949d16e8a00656fa1ee1b235c8ca704331b09f55 Parents: 28a89d1 Author: twalthr <[email protected]> Authored: Wed Feb 15 11:05:38 2017 +0100 Committer: Greg Hogan <[email protected]> Committed: Tue May 9 13:12:17 2017 -0400 ---------------------------------------------------------------------- .../flink/api/java/typeutils/TypeExtractor.java | 12 +++------ .../scala/typeutils/TypeExtractionTest.scala | 28 ++++++++++++++++---- 2 files changed, 26 insertions(+), 14 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/flink/blob/949d16e8/flink-core/src/main/java/org/apache/flink/api/java/typeutils/TypeExtractor.java ---------------------------------------------------------------------- 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 2b9eed9..a5f236f 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 @@ -1711,9 +1711,6 @@ public class TypeExtractor { // return type is same as field type (or the generic variant of it) (m.getGenericReturnType().equals( fieldType ) || (fieldTypeWrapper != null && m.getReturnType().equals( fieldTypeWrapper )) || (fieldTypeGeneric != null && m.getGenericReturnType().equals(fieldTypeGeneric)) ) ) { - if(hasGetter) { - throw new IllegalStateException("Detected more than one getter"); - } hasGetter = true; } // check for setters (<FieldName>_$eq for scala) @@ -1723,9 +1720,6 @@ public class TypeExtractor { // return type is void. m.getReturnType().equals(Void.TYPE) ) { - if(hasSetter) { - throw new IllegalStateException("Detected more than one setter"); - } hasSetter = true; } } @@ -1733,10 +1727,10 @@ public class TypeExtractor { return true; } else { if(!hasGetter) { - LOG.debug(clazz+" does not contain a getter for field "+f.getName() ); + LOG.info(clazz+" does not contain a getter for field "+f.getName() ); } if(!hasSetter) { - LOG.debug(clazz+" does not contain a setter for field "+f.getName() ); + LOG.info(clazz+" does not contain a setter for field "+f.getName() ); } return false; } @@ -1771,7 +1765,7 @@ public class TypeExtractor { for (Field field : fields) { Type fieldType = field.getGenericType(); if(!isValidPojoField(field, clazz, typeHierarchy)) { - LOG.info(clazz + " is not a valid POJO type"); + LOG.info(clazz + " is not a valid POJO type because not all fields are valid POJO fields."); return null; } try { http://git-wip-us.apache.org/repos/asf/flink/blob/949d16e8/flink-scala/src/test/scala/org/apache/flink/api/scala/typeutils/TypeExtractionTest.scala ---------------------------------------------------------------------- diff --git a/flink-scala/src/test/scala/org/apache/flink/api/scala/typeutils/TypeExtractionTest.scala b/flink-scala/src/test/scala/org/apache/flink/api/scala/typeutils/TypeExtractionTest.scala index 0462ffa..d5b7867 100644 --- a/flink-scala/src/test/scala/org/apache/flink/api/scala/typeutils/TypeExtractionTest.scala +++ b/flink-scala/src/test/scala/org/apache/flink/api/scala/typeutils/TypeExtractionTest.scala @@ -20,22 +20,34 @@ package org.apache.flink.api.scala.typeutils import org.apache.flink.api.common.io.FileInputFormat import org.apache.flink.api.common.typeinfo.{BasicTypeInfo, TypeInformation} -import org.apache.flink.api.java.typeutils.ResultTypeQueryable +import org.apache.flink.api.java.typeutils.{PojoTypeInfo, ResultTypeQueryable} import org.apache.flink.api.scala._ -import org.apache.flink.api.scala.typeutils.TypeExtractionTest.CustomTypeInputFormat +import org.apache.flink.api.scala.typeutils.TypeExtractionTest.{CustomBeanClass, CustomTypeInputFormat} import org.apache.flink.util.TestLogger -import org.junit.Assert.assertEquals +import org.junit.Assert._ import org.junit.Test import org.scalatest.junit.JUnitSuiteLike +import scala.beans.BeanProperty + class TypeExtractionTest extends TestLogger with JUnitSuiteLike { @Test def testResultTypeQueryable(): Unit = { val env = ExecutionEnvironment.getExecutionEnvironment - val productedType = env.createInput(new CustomTypeInputFormat).getType() - assertEquals(productedType, BasicTypeInfo.LONG_TYPE_INFO) + val producedType = env.createInput(new CustomTypeInputFormat).getType() + assertEquals(producedType, BasicTypeInfo.LONG_TYPE_INFO) + } + + @Test + def testBeanPropertyClass(): Unit = { + val env = ExecutionEnvironment.getExecutionEnvironment + val producedType = env.fromElements(new CustomBeanClass()).getType() + assertTrue(producedType.isInstanceOf[PojoTypeInfo[_]]) + val pojoTypeInfo = producedType.asInstanceOf[PojoTypeInfo[_]] + assertEquals(pojoTypeInfo.getTypeAt(0), BasicTypeInfo.INT_TYPE_INFO) + assertEquals(pojoTypeInfo.getTypeAt(1), BasicTypeInfo.LONG_TYPE_INFO) } } @@ -50,4 +62,10 @@ object TypeExtractionTest { override def nextRecord(reuse: String): String = throw new UnsupportedOperationException() } + + class CustomBeanClass( + @BeanProperty var prop: Int, + var prop2: Long) { + def this() = this(0, 0L) + } }
