Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
doujutun3207
flink
提交
17e7b423
F
flink
项目概览
doujutun3207
/
flink
与 Fork 源项目一致
从无法访问的项目Fork
通知
24
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
F
flink
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
17e7b423
编写于
10月 11, 2015
作者:
U
Ulf Karlsson
提交者:
Fabian Hueske
10月 23, 2015
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[FLINK-2874] Fix Avro getter/setter recognition
This closes #1252
上级
32b0dfd1
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
53 addition
and
8 deletion
+53
-8
flink-java/src/main/java/org/apache/flink/api/java/typeutils/TypeExtractor.java
...va/org/apache/flink/api/java/typeutils/TypeExtractor.java
+11
-6
flink-java/src/test/java/org/apache/flink/api/java/typeutils/PojoTypeInfoTest.java
...org/apache/flink/api/java/typeutils/PojoTypeInfoTest.java
+42
-2
未找到文件。
flink-java/src/main/java/org/apache/flink/api/java/typeutils/TypeExtractor.java
浏览文件 @
17e7b423
...
...
@@ -30,6 +30,7 @@ import java.util.ArrayList;
import
java.util.List
;
import
org.apache.avro.specific.SpecificRecordBase
;
import
org.apache.commons.lang3.ClassUtils
;
import
org.apache.flink.api.common.functions.CoGroupFunction
;
import
org.apache.flink.api.common.functions.CrossFunction
;
import
org.apache.flink.api.common.functions.FlatJoinFunction
;
...
...
@@ -1299,22 +1300,26 @@ public class TypeExtractor {
return
true
;
}
else
{
boolean
hasGetter
=
false
,
hasSetter
=
false
;
final
String
fieldNameLow
=
f
.
getName
().
toLowerCase
();
final
String
fieldNameLow
=
f
.
getName
().
toLowerCase
()
.
replaceAll
(
"_"
,
""
)
;
Type
fieldType
=
f
.
getGenericType
();
Class
<?>
fieldTypeWrapper
=
ClassUtils
.
primitiveToWrapper
(
f
.
getType
());
TypeVariable
<?>
fieldTypeGeneric
=
null
;
if
(
fieldType
instanceof
TypeVariable
)
{
fieldTypeGeneric
=
(
TypeVariable
<?>)
fieldType
;
fieldType
=
materializeTypeVariable
(
typeHierarchy
,
(
TypeVariable
<?>)
fieldType
);
}
for
(
Method
m
:
clazz
.
getMethods
())
{
final
String
methodNameLow
=
m
.
getName
().
toLowerCase
().
replaceAll
(
"_"
,
""
);
// check for getter
if
(
// The name should be "get<FieldName>" or "<fieldName>" (for scala) or "is<fieldName>" for boolean fields.
(
m
.
getName
().
toLowerCase
().
equals
(
"get"
+
fieldNameLow
)
||
m
.
getName
().
toLowerCase
().
equals
(
"is"
+
fieldNameLow
)
||
m
.
getName
().
toLowerCase
()
.
equals
(
fieldNameLow
))
&&
(
m
ethodNameLow
.
equals
(
"get"
+
fieldNameLow
)
||
methodNameLow
.
equals
(
"is"
+
fieldNameLow
)
||
methodNameLow
.
equals
(
fieldNameLow
))
&&
// no arguments for the getter
m
.
getParameterTypes
().
length
==
0
&&
// return type is same as field type (or the generic variant of it)
(
m
.
getGenericReturnType
().
equals
(
fieldType
)
||
(
fieldTypeGeneric
!=
null
&&
m
.
getGenericReturnType
().
equals
(
fieldTypeGeneric
))
)
(
m
.
getGenericReturnType
().
equals
(
fieldType
)
||
(
fieldType
Wrapper
!=
null
&&
m
.
getReturnType
().
equals
(
fieldTypeWrapper
))
||
(
fieldType
Generic
!=
null
&&
m
.
getGenericReturnType
().
equals
(
fieldTypeGeneric
))
)
)
{
if
(
hasGetter
)
{
throw
new
IllegalStateException
(
"Detected more than one getter"
);
...
...
@@ -1322,9 +1327,9 @@ public class TypeExtractor {
hasGetter
=
true
;
}
// check for setters (<FieldName>_$eq for scala)
if
((
m
.
getName
().
toLowerCase
().
equals
(
"set"
+
fieldNameLow
)
||
m
.
getName
().
toLowerCase
()
.
equals
(
fieldNameLow
+
"_$eq"
))
&&
if
((
m
ethodNameLow
.
equals
(
"set"
+
fieldNameLow
)
||
methodNameLow
.
equals
(
fieldNameLow
+
"_$eq"
))
&&
m
.
getParameterTypes
().
length
==
1
&&
// one parameter of the field's type
(
m
.
getGenericParameterTypes
()[
0
].
equals
(
fieldType
)
||
(
fieldTypeGeneric
!=
null
&&
m
.
getGenericParameterTypes
()[
0
].
equals
(
fieldTypeGeneric
)
)
)&&
(
m
.
getGenericParameterTypes
()[
0
].
equals
(
fieldType
)
||
(
fieldTypeWrapper
!=
null
&&
m
.
getParameterTypes
()[
0
].
equals
(
fieldTypeWrapper
)
)
||
(
fieldTypeGeneric
!=
null
&&
m
.
getGenericParameterTypes
()[
0
].
equals
(
fieldTypeGeneric
)
)
)&&
// return type is void.
m
.
getReturnType
().
equals
(
Void
.
TYPE
)
)
{
...
...
flink-java/src/test/java/org/apache/flink/api/java/typeutils/PojoTypeInfoTest.java
浏览文件 @
17e7b423
...
...
@@ -74,11 +74,25 @@ public class PojoTypeInfoTest {
assertEquals
(
pojoTypeInfo
,
deserializedPojoTypeInfo
);
}
@Test
public
void
testPrimitivePojo
()
{
TypeInformation
<
PrimitivePojo
>
info1
=
TypeExtractor
.
getForClass
(
PrimitivePojo
.
class
);
assertTrue
(
info1
instanceof
PojoTypeInfo
);
}
@Test
public
void
testUnderscorePojo
()
{
TypeInformation
<
UnderscorePojo
>
info1
=
TypeExtractor
.
getForClass
(
UnderscorePojo
.
class
);
assertTrue
(
info1
instanceof
PojoTypeInfo
);
}
public
static
final
class
TestPojo
{
public
int
someInt
;
private
String
aString
;
public
Double
[]
doubleArray
;
...
...
@@ -110,4 +124,30 @@ public class PojoTypeInfoTest {
return
aString
;
}
}
public
static
final
class
PrimitivePojo
{
private
int
someInt
;
public
void
setSomeInt
(
Integer
someInt
)
{
this
.
someInt
=
someInt
;
}
public
Integer
getSomeInt
()
{
return
this
.
someInt
;
}
}
public
static
final
class
UnderscorePojo
{
private
int
some_int
;
public
void
setSomeInt
(
int
some_int
)
{
this
.
some_int
=
some_int
;
}
public
Integer
getSomeInt
()
{
return
this
.
some_int
;
}
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录