Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_jdk
提交
d262410c
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看板
提交
d262410c
编写于
4月 16, 2014
作者:
B
bagiras
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
8035625: [parfait] JNI exception pending in jdk/src/windows/native/sun/windows/awt_MenuItem.cpp
Reviewed-by: serb, pchelko
上级
e83e333c
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
92 addition
and
24 deletion
+92
-24
src/windows/native/sun/windows/awt_MenuItem.cpp
src/windows/native/sun/windows/awt_MenuItem.cpp
+92
-24
未找到文件。
src/windows/native/sun/windows/awt_MenuItem.cpp
浏览文件 @
d262410c
/*
/*
* Copyright (c) 1996, 201
1
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1996, 201
4
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
*
* This code is free software; you can redistribute it and/or modify it
* This code is free software; you can redistribute it and/or modify it
...
@@ -152,6 +152,9 @@ BOOL AwtMenuItem::CheckMenuCreation(JNIEnv *env, jobject self, HMENU hMenu)
...
@@ -152,6 +152,9 @@ BOOL AwtMenuItem::CheckMenuCreation(JNIEnv *env, jobject self, HMENU hMenu)
if
(
dw
==
ERROR_OUTOFMEMORY
)
if
(
dw
==
ERROR_OUTOFMEMORY
)
{
{
jstring
errorMsg
=
JNU_NewStringPlatform
(
env
,
L"too many menu handles"
);
jstring
errorMsg
=
JNU_NewStringPlatform
(
env
,
L"too many menu handles"
);
if
(
errorMsg
==
NULL
)
{
throw
std
::
bad_alloc
();
}
createError
=
JNU_NewObjectByName
(
env
,
"java/lang/OutOfMemoryError"
,
createError
=
JNU_NewObjectByName
(
env
,
"java/lang/OutOfMemoryError"
,
"(Ljava/lang/String;)V"
,
"(Ljava/lang/String;)V"
,
errorMsg
);
errorMsg
);
...
@@ -164,16 +167,19 @@ BOOL AwtMenuItem::CheckMenuCreation(JNIEnv *env, jobject self, HMENU hMenu)
...
@@ -164,16 +167,19 @@ BOOL AwtMenuItem::CheckMenuCreation(JNIEnv *env, jobject self, HMENU hMenu)
NULL
,
dw
,
MAKELANGID
(
LANG_NEUTRAL
,
SUBLANG_DEFAULT
),
NULL
,
dw
,
MAKELANGID
(
LANG_NEUTRAL
,
SUBLANG_DEFAULT
),
(
LPTSTR
)
&
buf
,
0
,
NULL
);
(
LPTSTR
)
&
buf
,
0
,
NULL
);
jstring
s
=
JNU_NewStringPlatform
(
env
,
buf
);
jstring
s
=
JNU_NewStringPlatform
(
env
,
buf
);
if
(
s
==
NULL
)
{
throw
std
::
bad_alloc
();
}
createError
=
JNU_NewObjectByName
(
env
,
"java/lang/InternalError"
,
createError
=
JNU_NewObjectByName
(
env
,
"java/lang/InternalError"
,
"(Ljava/lang/String;)V"
,
s
);
"(Ljava/lang/String;)V"
,
s
);
LocalFree
(
buf
);
LocalFree
(
buf
);
env
->
DeleteLocalRef
(
s
);
env
->
DeleteLocalRef
(
s
);
}
}
env
->
SetObjectField
(
self
,
AwtObject
::
createErrorID
,
createError
);
if
(
createError
==
NULL
)
{
if
(
createError
!=
NULL
)
throw
std
::
bad_alloc
();
{
env
->
DeleteLocalRef
(
createError
);
}
}
env
->
SetObjectField
(
self
,
AwtObject
::
createErrorID
,
createError
);
env
->
DeleteLocalRef
(
createError
);
return
FALSE
;
return
FALSE
;
}
}
return
TRUE
;
return
TRUE
;
...
@@ -238,12 +244,18 @@ AwtMenuItem::GetFont(JNIEnv *env)
...
@@ -238,12 +244,18 @@ AwtMenuItem::GetFont(JNIEnv *env)
jobject
self
=
GetPeer
(
env
);
jobject
self
=
GetPeer
(
env
);
jobject
target
=
env
->
GetObjectField
(
self
,
AwtObject
::
targetID
);
jobject
target
=
env
->
GetObjectField
(
self
,
AwtObject
::
targetID
);
jobject
font
=
JNU_CallMethodByName
(
env
,
0
,
target
,
"getFont_NoClientCode"
,
"()Ljava/awt/Font;"
).
l
;
jobject
font
=
JNU_CallMethodByName
(
env
,
0
,
target
,
"getFont_NoClientCode"
,
"()Ljava/awt/Font;"
).
l
;
env
->
DeleteLocalRef
(
target
);
if
(
env
->
ExceptionCheck
())
{
throw
std
::
bad_alloc
();
}
if
(
font
==
NULL
)
{
if
(
font
==
NULL
)
{
font
=
env
->
NewLocalRef
(
GetDefaultFont
(
env
));
font
=
env
->
NewLocalRef
(
GetDefaultFont
(
env
));
if
(
env
->
ExceptionCheck
())
{
throw
std
::
bad_alloc
();
}
}
}
env
->
DeleteLocalRef
(
target
);
return
font
;
return
font
;
}
}
...
@@ -251,13 +263,22 @@ jobject
...
@@ -251,13 +263,22 @@ jobject
AwtMenuItem
::
GetDefaultFont
(
JNIEnv
*
env
)
{
AwtMenuItem
::
GetDefaultFont
(
JNIEnv
*
env
)
{
if
(
AwtMenuItem
::
systemFont
==
NULL
)
{
if
(
AwtMenuItem
::
systemFont
==
NULL
)
{
jclass
cls
=
env
->
FindClass
(
"sun/awt/windows/WMenuItemPeer"
);
jclass
cls
=
env
->
FindClass
(
"sun/awt/windows/WMenuItemPeer"
);
DASSERT
(
cls
!=
NULL
);
if
(
cls
==
NULL
)
{
throw
std
::
bad_alloc
();
}
AwtMenuItem
::
systemFont
=
AwtMenuItem
::
systemFont
=
env
->
CallStaticObjectMethod
(
cls
,
AwtMenuItem
::
getDefaultFontMID
);
env
->
CallStaticObjectMethod
(
cls
,
AwtMenuItem
::
getDefaultFontMID
);
DASSERT
(
AwtMenuItem
::
systemFont
);
if
(
env
->
ExceptionCheck
())
{
env
->
DeleteLocalRef
(
cls
);
throw
std
::
bad_alloc
();
}
AwtMenuItem
::
systemFont
=
env
->
NewGlobalRef
(
AwtMenuItem
::
systemFont
);
AwtMenuItem
::
systemFont
=
env
->
NewGlobalRef
(
AwtMenuItem
::
systemFont
);
if
(
systemFont
==
NULL
)
{
env
->
DeleteLocalRef
(
cls
);
throw
std
::
bad_alloc
();
}
}
}
return
AwtMenuItem
::
systemFont
;
return
AwtMenuItem
::
systemFont
;
}
}
...
@@ -284,8 +305,19 @@ AwtMenuItem::DrawSelf(DRAWITEMSTRUCT& drawInfo)
...
@@ -284,8 +305,19 @@ AwtMenuItem::DrawSelf(DRAWITEMSTRUCT& drawInfo)
DWORD
crBack
,
crText
;
DWORD
crBack
,
crText
;
HBRUSH
hbrBack
;
HBRUSH
hbrBack
;
jobject
font
=
GetFont
(
env
);
jobject
font
;
try
{
font
=
GetFont
(
env
);
}
catch
(
std
::
bad_alloc
&
)
{
env
->
DeleteLocalRef
(
target
);
throw
;
}
jstring
text
=
GetJavaString
(
env
);
jstring
text
=
GetJavaString
(
env
);
if
(
env
->
ExceptionCheck
())
{
env
->
DeleteLocalRef
(
target
);
throw
std
::
bad_alloc
();
}
size
=
AwtFont
::
getMFStringSize
(
hDC
,
font
,
text
);
size
=
AwtFont
::
getMFStringSize
(
hDC
,
font
,
text
);
/* 4700350: If the font size is taller than the menubar, change to the
/* 4700350: If the font size is taller than the menubar, change to the
...
@@ -294,7 +326,13 @@ AwtMenuItem::DrawSelf(DRAWITEMSTRUCT& drawInfo)
...
@@ -294,7 +326,13 @@ AwtMenuItem::DrawSelf(DRAWITEMSTRUCT& drawInfo)
*/
*/
if
(
IsTopMenu
()
&&
size
.
cy
>
::
GetSystemMetrics
(
SM_CYMENU
))
{
if
(
IsTopMenu
()
&&
size
.
cy
>
::
GetSystemMetrics
(
SM_CYMENU
))
{
env
->
DeleteLocalRef
(
font
);
env
->
DeleteLocalRef
(
font
);
font
=
env
->
NewLocalRef
(
GetDefaultFont
(
env
));
try
{
font
=
env
->
NewLocalRef
(
GetDefaultFont
(
env
));
}
catch
(
std
::
bad_alloc
&
)
{
env
->
DeleteLocalRef
(
target
);
env
->
DeleteLocalRef
(
text
);
throw
;
}
size
=
AwtFont
::
getMFStringSize
(
hDC
,
font
,
text
);
size
=
AwtFont
::
getMFStringSize
(
hDC
,
font
,
text
);
}
}
...
@@ -452,6 +490,10 @@ void AwtMenuItem::MeasureSelf(HDC hDC, MEASUREITEMSTRUCT& measureInfo)
...
@@ -452,6 +490,10 @@ void AwtMenuItem::MeasureSelf(HDC hDC, MEASUREITEMSTRUCT& measureInfo)
/* font is a java.awt.Font */
/* font is a java.awt.Font */
jobject
font
=
GetFont
(
env
);
jobject
font
=
GetFont
(
env
);
jstring
text
=
GetJavaString
(
env
);
jstring
text
=
GetJavaString
(
env
);
if
(
env
->
ExceptionCheck
())
{
env
->
DeleteLocalRef
(
font
);
throw
std
::
bad_alloc
();
}
SIZE
size
=
AwtFont
::
getMFStringSize
(
hDC
,
font
,
text
);
SIZE
size
=
AwtFont
::
getMFStringSize
(
hDC
,
font
,
text
);
/* 4700350: If the font size is taller than the menubar, change to the
/* 4700350: If the font size is taller than the menubar, change to the
...
@@ -459,7 +501,14 @@ void AwtMenuItem::MeasureSelf(HDC hDC, MEASUREITEMSTRUCT& measureInfo)
...
@@ -459,7 +501,14 @@ void AwtMenuItem::MeasureSelf(HDC hDC, MEASUREITEMSTRUCT& measureInfo)
* client area. -bchristi
* client area. -bchristi
*/
*/
if
(
IsTopMenu
()
&&
size
.
cy
>
::
GetSystemMetrics
(
SM_CYMENU
))
{
if
(
IsTopMenu
()
&&
size
.
cy
>
::
GetSystemMetrics
(
SM_CYMENU
))
{
jobject
defFont
=
GetDefaultFont
(
env
);
jobject
defFont
;
try
{
defFont
=
GetDefaultFont
(
env
);
}
catch
(
std
::
bad_alloc
&
)
{
env
->
DeleteLocalRef
(
text
);
env
->
DeleteLocalRef
(
font
);
throw
;
}
env
->
DeleteLocalRef
(
font
);
env
->
DeleteLocalRef
(
font
);
font
=
env
->
NewLocalRef
(
defFont
);
font
=
env
->
NewLocalRef
(
defFont
);
size
=
AwtFont
::
getMFStringSize
(
hDC
,
font
,
text
);
size
=
AwtFont
::
getMFStringSize
(
hDC
,
font
,
text
);
...
@@ -468,13 +517,31 @@ void AwtMenuItem::MeasureSelf(HDC hDC, MEASUREITEMSTRUCT& measureInfo)
...
@@ -468,13 +517,31 @@ void AwtMenuItem::MeasureSelf(HDC hDC, MEASUREITEMSTRUCT& measureInfo)
jstring
fontName
=
jstring
fontName
=
(
jstring
)
JNU_CallMethodByName
(
env
,
0
,
font
,
"getName"
,
(
jstring
)
JNU_CallMethodByName
(
env
,
0
,
font
,
"getName"
,
"()Ljava/lang/String;"
).
l
;
"()Ljava/lang/String;"
).
l
;
if
(
env
->
ExceptionCheck
())
{
env
->
DeleteLocalRef
(
text
);
env
->
DeleteLocalRef
(
font
);
throw
std
::
bad_alloc
();
}
/* fontMetrics is a Hsun_awt_windows_WFontMetrics */
/* fontMetrics is a Hsun_awt_windows_WFontMetrics */
jobject
fontMetrics
=
GetFontMetrics
(
env
,
font
);
jobject
fontMetrics
=
GetFontMetrics
(
env
,
font
);
if
(
env
->
ExceptionCheck
())
{
env
->
DeleteLocalRef
(
text
);
env
->
DeleteLocalRef
(
font
);
env
->
DeleteLocalRef
(
fontName
);
throw
std
::
bad_alloc
();
}
// int height = env->GetIntField(fontMetrics, AwtFont::heightID);
// int height = env->GetIntField(fontMetrics, AwtFont::heightID);
int
height
=
(
jint
)
JNU_CallMethodByName
(
env
,
0
,
fontMetrics
,
"getHeight"
,
int
height
=
(
jint
)
JNU_CallMethodByName
(
env
,
0
,
fontMetrics
,
"getHeight"
,
"()I"
).
i
;
"()I"
).
i
;
if
(
env
->
ExceptionCheck
())
{
env
->
DeleteLocalRef
(
text
);
env
->
DeleteLocalRef
(
font
);
env
->
DeleteLocalRef
(
fontName
);
env
->
DeleteLocalRef
(
fontMetrics
);
throw
std
::
bad_alloc
();
}
measureInfo
.
itemHeight
=
height
;
measureInfo
.
itemHeight
=
height
;
measureInfo
.
itemHeight
+=
measureInfo
.
itemHeight
/
3
;
measureInfo
.
itemHeight
+=
measureInfo
.
itemHeight
/
3
;
...
@@ -520,10 +587,14 @@ jobject AwtMenuItem::GetFontMetrics(JNIEnv *env, jobject font)
...
@@ -520,10 +587,14 @@ jobject AwtMenuItem::GetFontMetrics(JNIEnv *env, jobject font)
if
(
env
->
PushLocalFrame
(
2
)
<
0
)
if
(
env
->
PushLocalFrame
(
2
)
<
0
)
return
NULL
;
return
NULL
;
jclass
cls
=
env
->
FindClass
(
"java/awt/Toolkit"
);
jclass
cls
=
env
->
FindClass
(
"java/awt/Toolkit"
);
CHECK_NULL_RETURN
(
cls
,
NULL
);
jobject
toolkitLocal
=
jobject
toolkitLocal
=
env
->
CallStaticObjectMethod
(
cls
,
AwtToolkit
::
getDefaultToolkitMID
);
env
->
CallStaticObjectMethod
(
cls
,
AwtToolkit
::
getDefaultToolkitMID
);
env
->
DeleteLocalRef
(
cls
);
CHECK_NULL_RETURN
(
toolkitLocal
,
NULL
);
toolkit
=
env
->
NewGlobalRef
(
toolkitLocal
);
toolkit
=
env
->
NewGlobalRef
(
toolkitLocal
);
DASSERT
(
!
safe_ExceptionOccurred
(
env
));
env
->
DeleteLocalRef
(
toolkitLocal
);
CHECK_NULL_RETURN
(
toolkit
,
NULL
);
env
->
PopLocalFrame
(
0
);
env
->
PopLocalFrame
(
0
);
}
}
/*
/*
...
@@ -739,6 +810,10 @@ void AwtMenuItem::_SetLabel(void *param) {
...
@@ -739,6 +810,10 @@ void AwtMenuItem::_SetLabel(void *param) {
{
{
empty
=
JNU_NewStringPlatform
(
env
,
TEXT
(
""
));
empty
=
JNU_NewStringPlatform
(
env
,
TEXT
(
""
));
}
}
if
(
env
->
ExceptionCheck
())
{
badAlloc
=
1
;
goto
ret
;
}
LPCTSTR
labelPtr
;
LPCTSTR
labelPtr
;
if
(
empty
!=
NULL
)
if
(
empty
!=
NULL
)
{
{
...
@@ -846,10 +921,9 @@ Java_java_awt_MenuComponent_initIDs(JNIEnv *env, jclass cls)
...
@@ -846,10 +921,9 @@ Java_java_awt_MenuComponent_initIDs(JNIEnv *env, jclass cls)
TRY
;
TRY
;
AwtMenuItem
::
fontID
=
env
->
GetFieldID
(
cls
,
"font"
,
"Ljava/awt/Font;"
);
AwtMenuItem
::
fontID
=
env
->
GetFieldID
(
cls
,
"font"
,
"Ljava/awt/Font;"
);
CHECK_NULL
(
AwtMenuItem
::
fontID
);
AwtMenuItem
::
appContextID
=
env
->
GetFieldID
(
cls
,
"appContext"
,
"Lsun/awt/AppContext;"
);
AwtMenuItem
::
appContextID
=
env
->
GetFieldID
(
cls
,
"appContext"
,
"Lsun/awt/AppContext;"
);
DASSERT
(
AwtMenuItem
::
fontID
!=
NULL
);
CATCH_BAD_ALLOC
;
CATCH_BAD_ALLOC
;
}
}
...
@@ -868,11 +942,9 @@ Java_java_awt_MenuItem_initIDs(JNIEnv *env, jclass cls)
...
@@ -868,11 +942,9 @@ Java_java_awt_MenuItem_initIDs(JNIEnv *env, jclass cls)
TRY
;
TRY
;
AwtMenuItem
::
labelID
=
env
->
GetFieldID
(
cls
,
"label"
,
"Ljava/lang/String;"
);
AwtMenuItem
::
labelID
=
env
->
GetFieldID
(
cls
,
"label"
,
"Ljava/lang/String;"
);
CHECK_NULL
(
AwtMenuItem
::
labelID
);
AwtMenuItem
::
enabledID
=
env
->
GetFieldID
(
cls
,
"enabled"
,
"Z"
);
AwtMenuItem
::
enabledID
=
env
->
GetFieldID
(
cls
,
"enabled"
,
"Z"
);
DASSERT
(
AwtMenuItem
::
labelID
!=
NULL
);
DASSERT
(
AwtMenuItem
::
enabledID
!=
NULL
);
CATCH_BAD_ALLOC
;
CATCH_BAD_ALLOC
;
}
}
...
@@ -892,8 +964,6 @@ Java_java_awt_CheckboxMenuItem_initIDs(JNIEnv *env, jclass cls)
...
@@ -892,8 +964,6 @@ Java_java_awt_CheckboxMenuItem_initIDs(JNIEnv *env, jclass cls)
AwtMenuItem
::
stateID
=
env
->
GetFieldID
(
cls
,
"state"
,
"Z"
);
AwtMenuItem
::
stateID
=
env
->
GetFieldID
(
cls
,
"state"
,
"Z"
);
DASSERT
(
AwtMenuItem
::
stateID
!=
NULL
);
CATCH_BAD_ALLOC
;
CATCH_BAD_ALLOC
;
}
}
...
@@ -917,15 +987,13 @@ Java_sun_awt_windows_WMenuItemPeer_initIDs(JNIEnv *env, jclass cls)
...
@@ -917,15 +987,13 @@ Java_sun_awt_windows_WMenuItemPeer_initIDs(JNIEnv *env, jclass cls)
TRY
;
TRY
;
AwtMenuItem
::
isCheckboxID
=
env
->
GetFieldID
(
cls
,
"isCheckbox"
,
"Z"
);
AwtMenuItem
::
isCheckboxID
=
env
->
GetFieldID
(
cls
,
"isCheckbox"
,
"Z"
);
CHECK_NULL
(
AwtMenuItem
::
isCheckboxID
);
AwtMenuItem
::
shortcutLabelID
=
env
->
GetFieldID
(
cls
,
"shortcutLabel"
,
AwtMenuItem
::
shortcutLabelID
=
env
->
GetFieldID
(
cls
,
"shortcutLabel"
,
"Ljava/lang/String;"
);
"Ljava/lang/String;"
);
CHECK_NULL
(
AwtMenuItem
::
shortcutLabelID
);
AwtMenuItem
::
getDefaultFontMID
=
AwtMenuItem
::
getDefaultFontMID
=
env
->
GetStaticMethodID
(
cls
,
"getDefaultFont"
,
"()Ljava/awt/Font;"
);
env
->
GetStaticMethodID
(
cls
,
"getDefaultFont"
,
"()Ljava/awt/Font;"
);
DASSERT
(
AwtMenuItem
::
isCheckboxID
!=
NULL
);
DASSERT
(
AwtMenuItem
::
shortcutLabelID
!=
NULL
);
DASSERT
(
AwtMenuItem
::
getDefaultFontMID
!=
NULL
);
CATCH_BAD_ALLOC
;
CATCH_BAD_ALLOC
;
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录