Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_jdk
提交
06fcc2e5
D
dragonwell8_jdk
项目概览
openanolis
/
dragonwell8_jdk
通知
4
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
dragonwell8_jdk
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
06fcc2e5
编写于
12月 01, 2015
作者:
R
robm
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
8143185: Cleanup for handling proxies
Reviewed-by: chegar
上级
51ac0e20
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
45 addition
and
7 deletion
+45
-7
src/share/classes/sun/reflect/annotation/AnnotationInvocationHandler.java
...s/sun/reflect/annotation/AnnotationInvocationHandler.java
+45
-7
未找到文件。
src/share/classes/sun/reflect/annotation/AnnotationInvocationHandler.java
浏览文件 @
06fcc2e5
...
...
@@ -25,6 +25,7 @@
package
sun.reflect.annotation
;
import
java.io.ObjectInputStream
;
import
java.lang.annotation.*
;
import
java.lang.reflect.*
;
import
java.io.Serializable
;
...
...
@@ -425,35 +426,72 @@ class AnnotationInvocationHandler implements InvocationHandler, Serializable {
private
void
readObject
(
java
.
io
.
ObjectInputStream
s
)
throws
java
.
io
.
IOException
,
ClassNotFoundException
{
s
.
defaultReadObject
();
ObjectInputStream
.
GetField
fields
=
s
.
readFields
();
@SuppressWarnings
(
"unchecked"
)
Class
<?
extends
Annotation
>
t
=
(
Class
<?
extends
Annotation
>)
fields
.
get
(
"type"
,
null
);
@SuppressWarnings
(
"unchecked"
)
Map
<
String
,
Object
>
streamVals
=
(
Map
<
String
,
Object
>)
fields
.
get
(
"memberValues"
,
null
);
// Check to make sure that types have not evolved incompatibly
AnnotationType
annotationType
=
null
;
try
{
annotationType
=
AnnotationType
.
getInstance
(
t
ype
);
annotationType
=
AnnotationType
.
getInstance
(
t
);
}
catch
(
IllegalArgumentException
e
)
{
// Class is no longer an annotation type; time to punch out
throw
new
java
.
io
.
InvalidObjectException
(
"Non-annotation type in annotation serial stream"
);
}
Map
<
String
,
Class
<?>>
memberTypes
=
annotationType
.
memberTypes
();
// consistent with runtime Map type
Map
<
String
,
Object
>
mv
=
new
LinkedHashMap
<>();
// If there are annotation members without values, that
// situation is handled by the invoke method.
for
(
Map
.
Entry
<
String
,
Object
>
memberValue
:
memberValue
s
.
entrySet
())
{
for
(
Map
.
Entry
<
String
,
Object
>
memberValue
:
streamVal
s
.
entrySet
())
{
String
name
=
memberValue
.
getKey
();
Object
value
=
null
;
Class
<?>
memberType
=
memberTypes
.
get
(
name
);
if
(
memberType
!=
null
)
{
// i.e. member still exists
Object
value
=
memberValue
.
getValue
();
value
=
memberValue
.
getValue
();
if
(!(
memberType
.
isInstance
(
value
)
||
value
instanceof
ExceptionProxy
))
{
memberValue
.
setValue
(
new
AnnotationTypeMismatchExceptionProxy
(
value
=
new
AnnotationTypeMismatchExceptionProxy
(
value
.
getClass
()
+
"["
+
value
+
"]"
).
setMember
(
annotationType
.
members
().
get
(
name
))
)
;
annotationType
.
members
().
get
(
name
));
}
}
mv
.
put
(
name
,
value
);
}
UnsafeAccessor
.
setType
(
this
,
t
);
UnsafeAccessor
.
setMemberValues
(
this
,
mv
);
}
private
static
class
UnsafeAccessor
{
private
static
final
sun
.
misc
.
Unsafe
unsafe
;
private
static
final
long
typeOffset
;
private
static
final
long
memberValuesOffset
;
static
{
try
{
unsafe
=
sun
.
misc
.
Unsafe
.
getUnsafe
();
typeOffset
=
unsafe
.
objectFieldOffset
(
AnnotationInvocationHandler
.
class
.
getDeclaredField
(
"type"
));
memberValuesOffset
=
unsafe
.
objectFieldOffset
(
AnnotationInvocationHandler
.
class
.
getDeclaredField
(
"memberValues"
));
}
catch
(
Exception
ex
)
{
throw
new
ExceptionInInitializerError
(
ex
);
}
}
static
void
setType
(
AnnotationInvocationHandler
o
,
Class
<?
extends
Annotation
>
type
)
{
unsafe
.
putObject
(
o
,
typeOffset
,
type
);
}
static
void
setMemberValues
(
AnnotationInvocationHandler
o
,
Map
<
String
,
Object
>
memberValues
)
{
unsafe
.
putObject
(
o
,
memberValuesOffset
,
memberValues
);
}
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录