Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_jdk
提交
8255fd7b
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看板
提交
8255fd7b
编写于
10月 09, 2014
作者:
L
lana
浏览文件
操作
浏览文件
下载
差异文件
Merge
上级
c57d5dbf
5606a2cd
变更
87
展开全部
隐藏空白更改
内联
并排
Showing
87 changed file
with
5262 addition
and
2238 deletion
+5262
-2238
make/data/jdwp/jdwp.spec
make/data/jdwp/jdwp.spec
+83
-3
src/share/back/InterfaceTypeImpl.c
src/share/back/InterfaceTypeImpl.c
+39
-0
src/share/back/InterfaceTypeImpl.h
src/share/back/InterfaceTypeImpl.h
+25
-0
src/share/back/VirtualMachineImpl.c
src/share/back/VirtualMachineImpl.c
+1
-1
src/share/back/debugDispatch.c
src/share/back/debugDispatch.c
+2
-0
src/share/back/util.c
src/share/back/util.c
+2
-0
src/share/classes/com/sun/jarsigner/ContentSigner.java
src/share/classes/com/sun/jarsigner/ContentSigner.java
+1
-0
src/share/classes/com/sun/jarsigner/package-info.java
src/share/classes/com/sun/jarsigner/package-info.java
+35
-0
src/share/classes/com/sun/jarsigner/package.html
src/share/classes/com/sun/jarsigner/package.html
+0
-38
src/share/classes/com/sun/java/util/jar/pack/DriverResource_ja.java
...classes/com/sun/java/util/jar/pack/DriverResource_ja.java
+2
-2
src/share/classes/com/sun/jdi/ClassType.java
src/share/classes/com/sun/jdi/ClassType.java
+6
-6
src/share/classes/com/sun/jdi/InterfaceType.java
src/share/classes/com/sun/jdi/InterfaceType.java
+119
-0
src/share/classes/com/sun/jdi/Method.java
src/share/classes/com/sun/jdi/Method.java
+12
-0
src/share/classes/com/sun/jdi/ObjectReference.java
src/share/classes/com/sun/jdi/ObjectReference.java
+6
-6
src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_ja.properties
...n/swing/internal/plaf/basic/resources/basic_ja.properties
+3
-3
src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_ko.properties
...n/swing/internal/plaf/basic/resources/basic_ko.properties
+3
-3
src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_zh_CN.properties
...wing/internal/plaf/basic/resources/basic_zh_CN.properties
+3
-3
src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_zh_TW.properties
...wing/internal/plaf/basic/resources/basic_zh_TW.properties
+3
-3
src/share/classes/com/sun/tools/example/debug/expr/LValue.java
...hare/classes/com/sun/tools/example/debug/expr/LValue.java
+3
-0
src/share/classes/com/sun/tools/jdi/ArrayTypeImpl.java
src/share/classes/com/sun/tools/jdi/ArrayTypeImpl.java
+3
-1
src/share/classes/com/sun/tools/jdi/ClassTypeImpl.java
src/share/classes/com/sun/tools/jdi/ClassTypeImpl.java
+45
-177
src/share/classes/com/sun/tools/jdi/InterfaceTypeImpl.java
src/share/classes/com/sun/tools/jdi/InterfaceTypeImpl.java
+51
-90
src/share/classes/com/sun/tools/jdi/InvokableTypeImpl.java
src/share/classes/com/sun/tools/jdi/InvokableTypeImpl.java
+305
-0
src/share/classes/com/sun/tools/jdi/MethodImpl.java
src/share/classes/com/sun/tools/jdi/MethodImpl.java
+7
-0
src/share/classes/com/sun/tools/jdi/ObjectReferenceImpl.java
src/share/classes/com/sun/tools/jdi/ObjectReferenceImpl.java
+30
-6
src/share/classes/com/sun/tools/jdi/ReferenceTypeImpl.java
src/share/classes/com/sun/tools/jdi/ReferenceTypeImpl.java
+2
-2
src/share/classes/com/sun/tools/jdi/VirtualMachineManagerImpl.java
.../classes/com/sun/tools/jdi/VirtualMachineManagerImpl.java
+1
-1
src/share/classes/java/lang/invoke/InvokerBytecodeGenerator.java
...re/classes/java/lang/invoke/InvokerBytecodeGenerator.java
+2
-2
src/share/classes/java/net/URLClassLoader.java
src/share/classes/java/net/URLClassLoader.java
+8
-3
src/share/classes/java/security/KeyPairGenerator.java
src/share/classes/java/security/KeyPairGenerator.java
+18
-1
src/share/classes/java/security/KeyStore.java
src/share/classes/java/security/KeyStore.java
+12
-0
src/share/classes/java/security/MessageDigest.java
src/share/classes/java/security/MessageDigest.java
+19
-7
src/share/classes/java/security/SecureRandom.java
src/share/classes/java/security/SecureRandom.java
+11
-0
src/share/classes/java/security/Signature.java
src/share/classes/java/security/Signature.java
+26
-1
src/share/classes/java/util/concurrent/ForkJoinPool.java
src/share/classes/java/util/concurrent/ForkJoinPool.java
+1478
-1374
src/share/classes/java/util/concurrent/ForkJoinTask.java
src/share/classes/java/util/concurrent/ForkJoinTask.java
+83
-104
src/share/classes/java/util/concurrent/ForkJoinWorkerThread.java
...re/classes/java/util/concurrent/ForkJoinWorkerThread.java
+5
-6
src/share/classes/java/util/logging/FileHandler.java
src/share/classes/java/util/logging/FileHandler.java
+9
-1
src/share/classes/javax/crypto/Cipher.java
src/share/classes/javax/crypto/Cipher.java
+45
-1
src/share/classes/javax/crypto/KeyAgreement.java
src/share/classes/javax/crypto/KeyAgreement.java
+16
-1
src/share/classes/javax/crypto/KeyGenerator.java
src/share/classes/javax/crypto/KeyGenerator.java
+17
-1
src/share/classes/javax/crypto/Mac.java
src/share/classes/javax/crypto/Mac.java
+16
-1
src/share/classes/sun/awt/datatransfer/DataTransferer.java
src/share/classes/sun/awt/datatransfer/DataTransferer.java
+8
-0
src/share/classes/sun/security/jgss/spnego/SpNegoContext.java
...share/classes/sun/security/jgss/spnego/SpNegoContext.java
+34
-11
src/share/classes/sun/security/tools/keytool/Resources.java
src/share/classes/sun/security/tools/keytool/Resources.java
+1
-1
src/share/classes/sun/security/tools/keytool/Resources_de.java
...hare/classes/sun/security/tools/keytool/Resources_de.java
+1
-1
src/share/classes/sun/security/tools/keytool/Resources_es.java
...hare/classes/sun/security/tools/keytool/Resources_es.java
+2
-2
src/share/classes/sun/security/tools/keytool/Resources_fr.java
...hare/classes/sun/security/tools/keytool/Resources_fr.java
+2
-2
src/share/classes/sun/security/tools/keytool/Resources_it.java
...hare/classes/sun/security/tools/keytool/Resources_it.java
+2
-2
src/share/classes/sun/security/tools/keytool/Resources_ja.java
...hare/classes/sun/security/tools/keytool/Resources_ja.java
+2
-2
src/share/classes/sun/security/tools/keytool/Resources_ko.java
...hare/classes/sun/security/tools/keytool/Resources_ko.java
+2
-2
src/share/classes/sun/security/tools/keytool/Resources_pt_BR.java
...e/classes/sun/security/tools/keytool/Resources_pt_BR.java
+1
-1
src/share/classes/sun/security/tools/keytool/Resources_sv.java
...hare/classes/sun/security/tools/keytool/Resources_sv.java
+2
-2
src/share/classes/sun/security/tools/keytool/Resources_zh_CN.java
...e/classes/sun/security/tools/keytool/Resources_zh_CN.java
+2
-2
src/share/classes/sun/security/tools/keytool/Resources_zh_TW.java
...e/classes/sun/security/tools/keytool/Resources_zh_TW.java
+2
-2
src/share/classes/sun/security/util/Debug.java
src/share/classes/sun/security/util/Debug.java
+10
-2
src/share/classes/sun/text/resources/FormatData.java
src/share/classes/sun/text/resources/FormatData.java
+13
-13
src/share/classes/sun/text/resources/en/FormatData_en.java
src/share/classes/sun/text/resources/en/FormatData_en.java
+18
-1
src/share/classes/sun/tools/jconsole/resources/messages_ja.properties
...asses/sun/tools/jconsole/resources/messages_ja.properties
+1
-1
src/share/native/sun/security/ec/ECC_JNI.cpp
src/share/native/sun/security/ec/ECC_JNI.cpp
+39
-6
src/solaris/classes/sun/awt/X11/XRootWindow.java
src/solaris/classes/sun/awt/X11/XRootWindow.java
+3
-2
src/solaris/classes/sun/awt/X11/XToolkit.java
src/solaris/classes/sun/awt/X11/XToolkit.java
+14
-47
src/solaris/native/sun/awt/awt_util.h
src/solaris/native/sun/awt/awt_util.h
+2
-0
src/solaris/native/sun/xawt/XlibWrapper.c
src/solaris/native/sun/xawt/XlibWrapper.c
+12
-5
src/windows/native/sun/java2d/windows/GDIRenderer.cpp
src/windows/native/sun/java2d/windows/GDIRenderer.cpp
+1
-1
src/windows/native/sun/security/mscapi/security.cpp
src/windows/native/sun/security/mscapi/security.cpp
+96
-33
src/windows/native/sun/windows/awt_Component.cpp
src/windows/native/sun/windows/awt_Component.cpp
+0
-1
src/windows/native/sun/windows/awt_TextArea.cpp
src/windows/native/sun/windows/awt_TextArea.cpp
+1
-213
src/windows/native/sun/windows/awt_TextArea.h
src/windows/native/sun/windows/awt_TextArea.h
+0
-21
src/windows/native/sun/windows/awt_TextComponent.cpp
src/windows/native/sun/windows/awt_TextComponent.cpp
+203
-1
src/windows/native/sun/windows/awt_TextComponent.h
src/windows/native/sun/windows/awt_TextComponent.h
+24
-0
src/windows/native/sun/windows/awt_TextField.cpp
src/windows/native/sun/windows/awt_TextField.cpp
+1
-7
test/com/sun/jdi/EvalInterfaceStatic.sh
test/com/sun/jdi/EvalInterfaceStatic.sh
+126
-0
test/com/sun/jdi/InterfaceMethodsTest.java
test/com/sun/jdi/InterfaceMethodsTest.java
+422
-0
test/com/sun/jdi/VisibleMethods.java
test/com/sun/jdi/VisibleMethods.java
+141
-0
test/java/awt/Focus/SortingFPT/JDK8048887.java
test/java/awt/Focus/SortingFPT/JDK8048887.java
+1
-1
test/java/net/InetAddress/IPv4Formats.java
test/java/net/InetAddress/IPv4Formats.java
+2
-1
test/java/util/logging/FileHandlerPath.java
test/java/util/logging/FileHandlerPath.java
+315
-0
test/javax/xml/ws/xsanymixed/CopyingResponse.java
test/javax/xml/ws/xsanymixed/CopyingResponse.java
+35
-0
test/javax/xml/ws/xsanymixed/ServiceImpl.java
test/javax/xml/ws/xsanymixed/ServiceImpl.java
+51
-0
test/javax/xml/ws/xsanymixed/Test.java
test/javax/xml/ws/xsanymixed/Test.java
+197
-0
test/javax/xml/ws/xsanymixed/compile-wsdl.sh
test/javax/xml/ws/xsanymixed/compile-wsdl.sh
+36
-0
test/javax/xml/ws/xsanymixed/service.wsdl
test/javax/xml/ws/xsanymixed/service.wsdl
+87
-0
test/sun/awt/datatransfer/DataFlavorComparatorTest1.java
test/sun/awt/datatransfer/DataFlavorComparatorTest1.java
+115
-0
test/sun/security/jgss/spnego/NotPreferredMech.java
test/sun/security/jgss/spnego/NotPreferredMech.java
+100
-0
test/sun/text/resources/LocaleData
test/sun/text/resources/LocaleData
+577
-3
test/sun/text/resources/LocaleDataTest.java
test/sun/text/resources/LocaleDataTest.java
+1
-1
未找到文件。
make/data/jdwp/jdwp.spec
浏览文件 @
8255fd7b
...
...
@@ -1147,7 +1147,8 @@ JDWP "Java(tm) Debug Wire Protocol"
(ErrorSet
(Error INVALID_CLASS "clazz is not the ID of a class.")
(Error INVALID_OBJECT "clazz is not a known ID.")
(Error INVALID_METHODID "methodID is not the ID of a method.")
(Error INVALID_METHODID "methodID is not the ID of a static method in "
"this class type or one of its superclasses.")
(Error INVALID_THREAD)
(Error THREAD_NOT_SUSPENDED)
(Error VM_DEAD)
...
...
@@ -1250,6 +1251,83 @@ JDWP "Java(tm) Debug Wire Protocol"
)
)
(CommandSet InterfaceType=5
(Command InvokeMethod=1
"Invokes a static method. "
"The method must not be a static initializer. "
"The method must be a member of the interface type. "
"<p>Since JDWP version 1.8 "
"<p>"
"The method invocation will occur in the specified thread. "
"Method invocation can occur only if the specified thread "
"has been suspended by an event. "
"Method invocation is not supported "
"when the target VM has been suspended by the front-end. "
"<p>"
"The specified method is invoked with the arguments in the specified "
"argument list. "
"The method invocation is synchronous; the reply packet is not "
"sent until the invoked method returns in the target VM. "
"The return value (possibly the void value) is "
"included in the reply packet. "
"If the invoked method throws an exception, the "
"exception object ID is set in the reply packet; otherwise, the "
"exception object ID is null. "
"<p>"
"For primitive arguments, the argument value's type must match the "
"argument's type exactly. For object arguments, there must exist a "
"widening reference conversion from the argument value's type to the "
"argument's type and the argument's type must be loaded. "
"<p>"
"By default, all threads in the target VM are resumed while "
"the method is being invoked if they were previously "
"suspended by an event or by a command. "
"This is done to prevent the deadlocks "
"that will occur if any of the threads own monitors "
"that will be needed by the invoked method. It is possible that "
"breakpoints or other events might occur during the invocation. "
"Note, however, that this implicit resume acts exactly like "
"the ThreadReference resume command, so if the thread's suspend "
"count is greater than 1, it will remain in a suspended state "
"during the invocation. By default, when the invocation completes, "
"all threads in the target VM are suspended, regardless their state "
"before the invocation. "
"<p>"
"The resumption of other threads during the invoke can be prevented "
"by specifying the INVOKE_SINGLE_THREADED "
"bit flag in the <code>options</code> field; however, "
"there is no protection against or recovery from the deadlocks "
"described above, so this option should be used with great caution. "
"Only the specified thread will be resumed (as described for all "
"threads above). Upon completion of a single threaded invoke, the invoking thread "
"will be suspended once again. Note that any threads started during "
"the single threaded invocation will not be suspended when the "
"invocation completes. "
"<p>"
"If the target VM is disconnected during the invoke (for example, through "
"the VirtualMachine dispose command) the method invocation continues. "
(Out
(interfaceType clazz "The interface type ID.")
(threadObject thread "The thread in which to invoke.")
(method methodID "The method to invoke.")
(Repeat arguments
(value arg "The argument value.")
)
(int options "Invocation <a href=\"#JDWP_InvokeOptions\">options</a>")
)
(Reply
(value returnValue "The returned value.")
(tagged-object exception "The thrown exception.")
)
(ErrorSet
(Error INVALID_CLASS "clazz is not the ID of an interface.")
(Error INVALID_OBJECT "clazz is not a known ID.")
(Error INVALID_METHODID "methodID is not the ID of a static method in this "
"interface type or is the ID of a static initializer.")
(Error INVALID_THREAD)
(Error THREAD_NOT_SUSPENDED)
(Error VM_DEAD)
)
)
)
(CommandSet Method=6
(Command LineTable=1
...
...
@@ -1543,7 +1621,7 @@ JDWP "Java(tm) Debug Wire Protocol"
"<p>"
"By default, all threads in the target VM are resumed while "
"the method is being invoked if they were previously "
"suspended by an event or by command. "
"suspended by an event or by
a
command. "
"This is done to prevent the deadlocks "
"that will occur if any of the threads own monitors "
"that will be needed by the invoked method. It is possible that "
...
...
@@ -1586,7 +1664,9 @@ JDWP "Java(tm) Debug Wire Protocol"
(Error INVALID_OBJECT)
(Error INVALID_CLASS "clazz is not the ID of a reference "
"type.")
(Error INVALID_METHODID "methodID is not the ID of a method.")
(Error INVALID_METHODID "methodID is not the ID of an instance method "
"in this object's type or one of its superclasses, "
"superinterfaces, or implemented interfaces.")
(Error INVALID_THREAD)
(Error THREAD_NOT_SUSPENDED)
(Error VM_DEAD)
...
...
src/share/back/InterfaceTypeImpl.c
0 → 100644
浏览文件 @
8255fd7b
/*
* Copyright (c) 1998, 2005, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
#include "util.h"
#include "InterfaceTypeImpl.h"
#include "inStream.h"
#include "outStream.h"
static
jboolean
invokeStatic
(
PacketInputStream
*
in
,
PacketOutputStream
*
out
)
{
return
sharedInvoke
(
in
,
out
);
}
void
*
InterfaceType_Cmds
[]
=
{
(
void
*
)
0x1
,
(
void
*
)
invokeStatic
};
src/share/back/InterfaceTypeImpl.h
0 → 100644
浏览文件 @
8255fd7b
/*
* Copyright (c) 1998, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
extern
void
*
InterfaceType_Cmds
[];
src/share/back/VirtualMachineImpl.c
浏览文件 @
8255fd7b
...
...
@@ -36,7 +36,7 @@
static
char
*
versionName
=
"Java Debug Wire Protocol (Reference Implementation)"
;
static
int
majorVersion
=
1
;
/* JDWP major version */
static
int
minorVersion
=
6
;
/* JDWP minor version */
static
int
minorVersion
=
8
;
/* JDWP minor version */
static
jboolean
version
(
PacketInputStream
*
in
,
PacketOutputStream
*
out
)
...
...
src/share/back/debugDispatch.c
浏览文件 @
8255fd7b
...
...
@@ -29,6 +29,7 @@
#include "VirtualMachineImpl.h"
#include "ReferenceTypeImpl.h"
#include "ClassTypeImpl.h"
#include "InterfaceTypeImpl.h"
#include "ArrayTypeImpl.h"
#include "FieldImpl.h"
#include "MethodImpl.h"
...
...
@@ -67,6 +68,7 @@ debugDispatch_initialize(void)
l1Array
[
JDWP_COMMAND_SET
(
VirtualMachine
)]
=
(
void
*
)
VirtualMachine_Cmds
;
l1Array
[
JDWP_COMMAND_SET
(
ReferenceType
)]
=
(
void
*
)
ReferenceType_Cmds
;
l1Array
[
JDWP_COMMAND_SET
(
ClassType
)]
=
(
void
*
)
ClassType_Cmds
;
l1Array
[
JDWP_COMMAND_SET
(
InterfaceType
)]
=
(
void
*
)
InterfaceType_Cmds
;
l1Array
[
JDWP_COMMAND_SET
(
ArrayType
)]
=
(
void
*
)
ArrayType_Cmds
;
l1Array
[
JDWP_COMMAND_SET
(
Field
)]
=
(
void
*
)
Field_Cmds
;
...
...
src/share/back/util.c
浏览文件 @
8255fd7b
...
...
@@ -591,6 +591,8 @@ sharedInvoke(PacketInputStream *in, PacketOutputStream *out)
invokeType
=
INVOKE_CONSTRUCTOR
;
}
else
if
(
inStream_command
(
in
)
==
JDWP_COMMAND
(
ClassType
,
InvokeMethod
))
{
invokeType
=
INVOKE_STATIC
;
}
else
if
(
inStream_command
(
in
)
==
JDWP_COMMAND
(
InterfaceType
,
InvokeMethod
))
{
invokeType
=
INVOKE_STATIC
;
}
else
if
(
inStream_command
(
in
)
==
JDWP_COMMAND
(
ObjectReference
,
InvokeMethod
))
{
invokeType
=
INVOKE_INSTANCE
;
}
else
{
...
...
src/share/classes/com/sun/jarsigner/ContentSigner.java
浏览文件 @
8255fd7b
...
...
@@ -37,6 +37,7 @@ import java.security.cert.CertificateException;
* @author Vincent Ryan
*/
@jdk
.
Exported
public
abstract
class
ContentSigner
{
/**
...
...
src/share/classes/com/sun/jarsigner/package-info.java
0 → 100644
浏览文件 @
8255fd7b
/*
* Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/**
* This package comprises the interfaces and classes used to define the
* signing mechanism used by the <tt>jarsigner</tt> tool.
* <p>
* Clients may override the default signing mechanism of the <tt>jarsigner</tt>
* tool by supplying an alternative implementation of
* {@link com.sun.jarsigner.ContentSigner}.
*/
@jdk
.
Exported
package
com.sun.jarsigner
;
src/share/classes/com/sun/jarsigner/package.html
已删除
100644 → 0
浏览文件 @
c57d5dbf
<html>
<!--
Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
This code is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License version 2 only, as
published by the Free Software Foundation. Oracle designates this
particular file as subject to the "Classpath" exception as provided
by Oracle in the LICENSE file that accompanied this code.
This code is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
version 2 for more details (a copy is included in the LICENSE file that
accompanied this code).
You should have received a copy of the GNU General Public License version
2 along with this work; if not, write to the Free Software Foundation,
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
or visit www.oracle.com if you need additional information or have any
questions.
-->
<head>
<title>
Jarsigner Signing Mechanism Package
</title>
</head>
<body>
This package comprises the interfaces and classes used to define the
signing mechanism used by the
<tt>
jarsigner
</tt>
tool.
<p>
Clients may override the default signing mechanism of the
<tt>
jarsigner
</tt>
tool by supplying an alternative implementation of
{@link com.sun.jarsigner.ContentSigner}.
</body>
</html>
src/share/classes/com/sun/java/util/jar/pack/DriverResource_ja.java
浏览文件 @
8255fd7b
/*
* Copyright (c) 2005, 201
3
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2005, 201
4
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
...
...
@@ -84,7 +84,7 @@ public class DriverResource_ja extends ListResourceBundle {
" -V\u3001--version \u30D7\u30ED\u30B0\u30E9\u30E0\u306E\u30D0\u30FC\u30B8\u30E7\u30F3\u3092\u51FA\u529B\u3057\u307E\u3059"
,
" -J{X} \u30AA\u30D7\u30B7\u30E7\u30F3X\u3092\u57FA\u790E\u3068\u306A\u308BJava VM\u306B\u6E21\u3057\u307E\u3059"
,
""
,
"\u6CE8
\u610F
:"
,
"\u6CE8:"
,
" -P\u3001-C\u3001-F\u3001-M\u304A\u3088\u3073-D\u30AA\u30D7\u30B7\u30E7\u30F3\u306F\u7D2F\u7A4D\u3055\u308C\u307E\u3059\u3002"
,
" \u5C5E\u6027\u5B9A\u7FA9\u306E\u4F8B: -C SourceFile=RUH ."
,
" Config.\u30D5\u30A1\u30A4\u30EB\u30FB\u30D7\u30ED\u30D1\u30C6\u30A3\u306F\u3001Pack200 API\u306B\u3088\u3063\u3066\u5B9A\u7FA9\u3055\u308C\u307E\u3059\u3002"
,
...
...
src/share/classes/com/sun/jdi/ClassType.java
浏览文件 @
8255fd7b
...
...
@@ -103,7 +103,7 @@ public interface ClassType extends ReferenceType {
* <p>
* Object values must be assignment compatible with the field type
* (This implies that the field type must be loaded through the
* enclosing class'
s
class loader). Primitive values must be
* enclosing class' class loader). Primitive values must be
* either assignment compatible with the field type or must be
* convertible to the field type without loss of information.
* See JLS section 5.2 for more information on assignment
...
...
@@ -153,7 +153,7 @@ public interface ClassType extends ReferenceType {
* <p>
* Object arguments must be assignment compatible with the argument type
* (This implies that the argument type must be loaded through the
* enclosing class'
s
class loader). Primitive arguments must be
* enclosing class' class loader). Primitive arguments must be
* either assignment compatible with the argument type or must be
* convertible to the argument type without loss of information.
* If the method being called accepts a variable number of arguments,
...
...
@@ -216,7 +216,7 @@ public interface ClassType extends ReferenceType {
* @return a {@link Value} mirror of the invoked method's return value.
* @throws java.lang.IllegalArgumentException if the method is not
* a member of this class or a superclass, if the size of the argument list
* does not match the number of declared argu
em
nts for the method, or
* does not match the number of declared argu
me
nts for the method, or
* if the method is an initializer, constructor or static intializer.
* @throws {@link InvalidTypeException} if any argument in the
* argument list is not assignable to the corresponding method argument
...
...
@@ -230,7 +230,7 @@ public interface ClassType extends ReferenceType {
* @throws InvalidTypeException If the arguments do not meet this requirement --
* Object arguments must be assignment compatible with the argument
* type. This implies that the argument type must be
* loaded through the enclosing class'
s
class loader.
* loaded through the enclosing class' class loader.
* Primitive arguments must be either assignment compatible with the
* argument type or must be convertible to the argument type without loss
* of information. See JLS section 5.2 for more information on assignment
...
...
@@ -267,7 +267,7 @@ public interface ClassType extends ReferenceType {
* <p>
* Object arguments must be assignment compatible with the argument type
* (This implies that the argument type must be loaded through the
* enclosing class'
s
class loader). Primitive arguments must be
* enclosing class' class loader). Primitive arguments must be
* either assignment compatible with the argument type or must be
* convertible to the argument type without loss of information.
* If the method being called accepts a variable number of arguments,
...
...
@@ -335,7 +335,7 @@ public interface ClassType extends ReferenceType {
* @throws InvalidTypeException If the arguments do not meet this requirement --
* Object arguments must be assignment compatible with the argument
* type. This implies that the argument type must be
* loaded through the enclosing class'
s
class loader.
* loaded through the enclosing class' class loader.
* Primitive arguments must be either assignment compatible with the
* argument type or must be convertible to the argument type without loss
* of information. See JLS section 5.2 for more information on assignment
...
...
src/share/classes/com/sun/jdi/InterfaceType.java
浏览文件 @
8255fd7b
...
...
@@ -79,4 +79,123 @@ public interface InterfaceType extends ReferenceType {
* If none exist, returns a zero length List.
*/
List
<
ClassType
>
implementors
();
/**
* Invokes the specified static {@link Method} in the
* target VM. The
* specified method must be defined in this interface.
* The method must be a static method
* but not a static initializer.
* <p>
* The method invocation will occur in the specified thread.
* Method invocation can occur only if the specified thread
* has been suspended by an event which occurred in that thread.
* Method invocation is not supported
* when the target VM has been suspended through
* {@link VirtualMachine#suspend} or when the specified thread
* is suspended through {@link ThreadReference#suspend}.
* <p>
* The specified method is invoked with the arguments in the specified
* argument list. The method invocation is synchronous; this method
* does not return until the invoked method returns in the target VM.
* If the invoked method throws an exception, this method will throw
* an {@link InvocationException} which contains a mirror to the exception
* object thrown.
* <p>
* Object arguments must be assignment compatible with the argument type
* (This implies that the argument type must be loaded through the
* enclosing class' class loader). Primitive arguments must be
* either assignment compatible with the argument type or must be
* convertible to the argument type without loss of information.
* If the method being called accepts a variable number of arguments,
* then the last argument type is an array of some component type.
* The argument in the matching position can be omitted, or can be null,
* an array of the same component type, or an argument of the
* component type followed by any number of other arguments of the same
* type. If the argument is omitted, then a 0 length array of the
* component type is passed. The component type can be a primitive type.
* Autoboxing is not supported.
*
* See Section 5.2 of
* <cite>The Java™ Language Specification</cite>
* for more information on assignment compatibility.
* <p>
* By default, all threads in the target VM are resumed while
* the method is being invoked if they were previously
* suspended by an event or by {@link VirtualMachine#suspend} or
* {@link ThreadReference#suspend}. This is done to prevent the deadlocks
* that will occur if any of the threads own monitors
* that will be needed by the invoked method.
* Note, however, that this implicit resume acts exactly like
* {@link ThreadReference#resume}, so if the thread's suspend
* count is greater than 1, it will remain in a suspended state
* during the invocation and thus a deadlock could still occur.
* By default, when the invocation completes,
* all threads in the target VM are suspended, regardless their state
* before the invocation.
* It is possible that
* breakpoints or other events might occur during the invocation.
* This can cause deadlocks as described above. It can also cause a deadlock
* if invokeMethod is called from the client's event handler thread. In this
* case, this thread will be waiting for the invokeMethod to complete and
* won't read the EventSet that comes in for the new event. If this
* new EventSet is SUSPEND_ALL, then a deadlock will occur because no
* one will resume the EventSet. To avoid this, all EventRequests should
* be disabled before doing the invokeMethod, or the invokeMethod should
* not be done from the client's event handler thread.
* <p>
* The resumption of other threads during the invocation can be prevented
* by specifying the {@link #INVOKE_SINGLE_THREADED}
* bit flag in the <code>options</code> argument; however,
* there is no protection against or recovery from the deadlocks
* described above, so this option should be used with great caution.
* Only the specified thread will be resumed (as described for all
* threads above). Upon completion of a single threaded invoke, the invoking thread
* will be suspended once again. Note that any threads started during
* the single threaded invocation will not be suspended when the
* invocation completes.
* <p>
* If the target VM is disconnected during the invoke (for example, through
* {@link VirtualMachine#dispose}) the method invocation continues.
*
* @param thread the thread in which to invoke.
* @param method the {@link Method} to invoke.
* @param arguments the list of {@link Value} arguments bound to the
* invoked method. Values from the list are assigned to arguments
* in the order they appear in the method signature.
* @param options the integer bit flag options.
* @return a {@link Value} mirror of the invoked method's return value.
* @throws java.lang.IllegalArgumentException if the method is not
* a member of this interface, if the size of the argument list
* does not match the number of declared arguments for the method, or
* if the method is not static or is a static initializer.
* @throws {@link InvalidTypeException} if any argument in the
* argument list is not assignable to the corresponding method argument
* type.
* @throws ClassNotLoadedException if any argument type has not yet been loaded
* through the appropriate class loader.
* @throws IncompatibleThreadStateException if the specified thread has not
* been suspended by an event.
* @throws InvocationException if the method invocation resulted in
* an exception in the target VM.
* @throws InvalidTypeException If the arguments do not meet this requirement --
* Object arguments must be assignment compatible with the argument
* type. This implies that the argument type must be
* loaded through the enclosing class' class loader.
* Primitive arguments must be either assignment compatible with the
* argument type or must be convertible to the argument type without loss
* of information. See JLS section 5.2 for more information on assignment
* compatibility.
* @throws VMCannotBeModifiedException if the VirtualMachine is read-only - see {@link VirtualMachine#canBeModified()}.
*
* @since 1.8
*/
default
Value
invokeMethod
(
ThreadReference
thread
,
Method
method
,
List
<?
extends
Value
>
arguments
,
int
options
)
throws
InvalidTypeException
,
ClassNotLoadedException
,
IncompatibleThreadStateException
,
InvocationException
{
throw
new
UnsupportedOperationException
();
}
}
src/share/classes/com/sun/jdi/Method.java
浏览文件 @
8255fd7b
...
...
@@ -137,6 +137,18 @@ public interface Method extends TypeComponent, Locatable, Comparable<Method> {
*/
boolean
isAbstract
();
/**
* Determine if this method is a default method
*
* @return <code>true</code> if the method is declared default;
* false otherwise
*
* @since 1.8
*/
default
boolean
isDefault
()
{
throw
new
UnsupportedOperationException
();
}
/**
* Determine if this method is synchronized.
*
...
...
src/share/classes/com/sun/jdi/ObjectReference.java
浏览文件 @
8255fd7b
...
...
@@ -194,10 +194,10 @@ public interface ObjectReference extends Value {
* {@link #INVOKE_NONVIRTUAL} bit flag in the <code>options</code>
* argument. If this flag is set, the specified method is invoked
* whether or not it is overridden for this object's runtime type.
* The method, in this case, must
not belong to an interface and
*
must not be abstract. This option is useful for performing method
*
invocations like those done with the <code>super</code> keyword in
*
the Java programming
language.
* The method, in this case, must
have an implementation, either in a class
*
or an interface. This option is useful for performing method invocations
*
like those done with the <code>super</code> keyword in the Java programming
* language.
* <p>
* By default, all threads in the target VM are resumed while
* the method is being invoked if they were previously
...
...
@@ -246,10 +246,10 @@ public interface ObjectReference extends Value {
* @return a {@link Value} mirror of the invoked method's return value.
* @throws java.lang.IllegalArgumentException if the method is not
* a member of this object's class, if the size of the argument list
* does not match the number of declared argu
em
nts for the method,
* does not match the number of declared argu
me
nts for the method,
* if the method is a constructor or static intializer, or
* if {@link #INVOKE_NONVIRTUAL} is specified and the method is
* either abstract or a
n
interface member.
* either abstract or a
non-default
interface member.
* @throws {@link InvalidTypeException} if any argument in the
* argument list is not assignable to the corresponding method argument
* type.
...
...
src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_ja.properties
浏览文件 @
8255fd7b
...
...
@@ -42,13 +42,13 @@ FileChooser.renameError.textAndMnemonic={0}\u306E\u540D\u524D\u3092\u5909\u66F4\
FileChooser.renameErrorFileExists.textAndMnemonic
=
{0}
\u
306E
\u
540D
\u
524D
\u3092\u5909\u
66F4
\u3067\u
304D
\u
307E
\u
305B
\u3093
:
\u6307\u
5B9A
\u3057\u
305F
\u
540D
\u
524D
\u
306E
\u
30D5
\u
30A1
\u
30A4
\u
30EB
\u
306F
\u3059\u3067\u
306B
\u
5B58
\u5728\u3057\u
307E
\u3059\u3002\u5225\u
306E
\u
30D5
\u
30A1
\u
30A4
\u
30EB
\u
540D
\u3092\u6307\u
5B9A
\u3057\u3066\u
304F
\u3060\u3055\u3044\u3002
FileChooser.acceptAllFileFilter.textAndMnemonic=
\u3059\u3079\u3066\u
306E
\u
30D5
\u
30A1
\u
30A4
\u
30EB
FileChooser.cancelButton.textAndMnemonic
=
\u
53D6
\u
6D88
FileChooser.saveButton.textAndMnemonic
=
\u
4FDD
\u
5B58
FileChooser.openButton.textAndMnemonic
=
\u
958B
\u
304F
FileChooser.saveButton.textAndMnemonic
=
\u
4FDD
\u
5B58
(&S)
FileChooser.openButton.textAndMnemonic
=
\u
958B
\u
304F
(&O)
FileChooser.saveDialogTitle.textAndMnemonic
=
\u
4FDD
\u
5B58
FileChooser.openDialogTitle.textAndMnemonic
=
\u
958B
\u
304F
FileChooser.updateButton.textAndMnemonic
=
\u
66F4
\u
65B0(&U)
FileChooser.helpButton.textAndMnemonic
=
\u
30D8
\u
30EB
\u
30D7(&H)
FileChooser.directoryOpenButton.textAndMnemonic
=
\u
958B
\u
304F
FileChooser.directoryOpenButton.textAndMnemonic
=
\u
958B
\u
304F
(&O)
# File Size Units
FileChooser.fileSizeKiloBytes
=
{0} KB
...
...
src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_ko.properties
浏览文件 @
8255fd7b
...
...
@@ -42,13 +42,13 @@ FileChooser.renameError.textAndMnemonic={0}\uC758 \uC774\uB984\uC744 \uBC14\uAFC
FileChooser.renameErrorFileExists.textAndMnemonic
=
{0}
\u
C758
\u
C774
\u
B984
\u
C744
\u
BC14
\u
AFC0
\u
C218
\u
C5C6
\u
C74C:
\u
C9C0
\u
C815
\u
D55C
\u
C774
\u
B984
\u
C744
\u
C0AC
\u
C6A9
\u
D558
\u
B294
\u
D30C
\u
C77C
\u
C774
\u
C874
\u
C7AC
\u
D569
\u
B2C8
\u
B2E4.
\u
B2E4
\u
B978
\u
D30C
\u
C77C
\u
C774
\u
B984
\u
C744
\u
C9C0
\u
C815
\u
D558
\u
C2ED
\u
C2DC
\u
C624.
FileChooser.acceptAllFileFilter.textAndMnemonic
=
\u
BAA8
\u
B4E0
\u
D30C
\u
C77C
FileChooser.cancelButton.textAndMnemonic
=
\u
CDE8
\u
C18C
FileChooser.saveButton.textAndMnemonic
=
\u
C800
\u
C7A5
FileChooser.openButton.textAndMnemonic
=
\u
C5F4
\u
AE30
FileChooser.saveButton.textAndMnemonic
=
\u
C800
\u
C7A5
(&S)
FileChooser.openButton.textAndMnemonic
=
\u
C5F4
\u
AE30
(&O)
FileChooser.saveDialogTitle.textAndMnemonic
=
\u
C800
\u
C7A5
FileChooser.openDialogTitle.textAndMnemonic
=
\u
C5F4
\u
AE30
FileChooser.updateButton.textAndMnemonic
=
\u
C5C5
\u
B370
\u
C774
\u
D2B8(&U)
FileChooser.helpButton.textAndMnemonic
=
\u
B3C4
\u
C6C0
\u
B9D0(&H)
FileChooser.directoryOpenButton.textAndMnemonic
=
\u
C5F4
\u
AE30
FileChooser.directoryOpenButton.textAndMnemonic
=
\u
C5F4
\u
AE30
(&O)
# File Size Units
FileChooser.fileSizeKiloBytes
=
{0} KB
...
...
src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_zh_CN.properties
浏览文件 @
8255fd7b
...
...
@@ -42,13 +42,13 @@ FileChooser.renameError.textAndMnemonic=\u65E0\u6CD5\u91CD\u547D\u540D{0}
FileChooser.renameErrorFileExists.textAndMnemonic
=
\u
65E0
\u
6CD5
\u
91CD
\u
547D
\u
540D{0}:
\u
5DF2
\u
5B58
\u5728\u5177\u6709\u6240\u6307\u
5B9A
\u
540D
\u
79F0
\u7684\u6587\u
4EF6
\u3002\u
8BF7
\u6307\u
5B9A
\u5176\u
4ED6
\u6587\u
4EF6
\u
540D
\u3002
FileChooser.acceptAllFileFilter.textAndMnemonic
=
\u6240\u6709\u6587\u
4EF6
FileChooser.cancelButton.textAndMnemonic
=
\u
53D6
\u
6D88
FileChooser.saveButton.textAndMnemonic
=
\u
4FDD
\u
5B58
FileChooser.openButton.textAndMnemonic
=
\u6253\u
5F00
FileChooser.saveButton.textAndMnemonic
=
\u
4FDD
\u
5B58
(&S)
FileChooser.openButton.textAndMnemonic
=
\u6253\u
5F00
(&O)
FileChooser.saveDialogTitle.textAndMnemonic
=
\u
4FDD
\u
5B58
FileChooser.openDialogTitle.textAndMnemonic
=
\u6253\u
5F00
FileChooser.updateButton.textAndMnemonic
=
\u
66F4
\u
65B0(&U)
FileChooser.helpButton.textAndMnemonic
=
\u
5E2E
\u
52A9(&H)
FileChooser.directoryOpenButton.textAndMnemonic
=
\u6253\u
5F00
FileChooser.directoryOpenButton.textAndMnemonic
=
\u6253\u
5F00
(&O)
# File Size Units
FileChooser.fileSizeKiloBytes
=
{0} KB
...
...
src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_zh_TW.properties
浏览文件 @
8255fd7b
...
...
@@ -42,13 +42,13 @@ FileChooser.renameError.textAndMnemonic=\u7121\u6CD5\u91CD\u65B0\u547D\u540D {0}
FileChooser.renameErrorFileExists.textAndMnemonic
=
\u7121\u
6CD5
\u
91CD
\u
65B0
\u
547D
\u
540D {0}:
\u
5DF2
\u
7D93
\u
5B58
\u5728\u
60A8
\u6240\u6307\u
5B9A
\u
540D
\u
7A31
\u7684\u
6A94
\u6848\u3002\u
8ACB
\u6307\u
5B9A
\u
4E0D
\u
540C
\u7684\u
540D
\u
7A31
\u3002
FileChooser.acceptAllFileFilter.textAndMnemonic
=
\u6240\u6709\u
6A94
\u6848
FileChooser.cancelButton.textAndMnemonic
=
\u
53D6
\u
6D88
FileChooser.saveButton.textAndMnemonic
=
\u5132\u
5B58
FileChooser.openButton.textAndMnemonic
=
\u
958B
\u
555F
FileChooser.saveButton.textAndMnemonic
=
\u5132\u
5B58
(&S)
FileChooser.openButton.textAndMnemonic
=
\u
958B
\u
555F
(&O)
FileChooser.saveDialogTitle.textAndMnemonic
=
\u5132\u
5B58
FileChooser.openDialogTitle.textAndMnemonic
=
\u
958B
\u
555F
FileChooser.updateButton.textAndMnemonic
=
\u
66F4
\u
65B0(&U)
FileChooser.helpButton.textAndMnemonic
=
\u
8AAA
\u
660E(&H)
FileChooser.directoryOpenButton.textAndMnemonic
=
\u
958B
\u
555F
FileChooser.directoryOpenButton.textAndMnemonic
=
\u
958B
\u
555F
(&O)
# File Size Units
FileChooser.fileSizeKiloBytes
=
{0} KB
...
...
src/share/classes/com/sun/tools/example/debug/expr/LValue.java
浏览文件 @
8255fd7b
...
...
@@ -559,6 +559,9 @@ abstract class LValue {
}
else
if
(
refType
instanceof
ClassType
)
{
ClassType
clazz
=
(
ClassType
)
refType
;
return
jdiValue
=
clazz
.
invokeMethod
(
thread
,
matchingMethod
,
methodArguments
,
0
);
}
else
if
(
refType
instanceof
InterfaceType
)
{
InterfaceType
iface
=
(
InterfaceType
)
refType
;
return
jdiValue
=
iface
.
invokeMethod
(
thread
,
matchingMethod
,
methodArguments
,
0
);
}
else
{
throw
new
InvalidTypeException
(
"Cannot invoke static method on "
+
refType
.
name
());
...
...
src/share/classes/com/sun/tools/jdi/ArrayTypeImpl.java
浏览文件 @
8255fd7b
...
...
@@ -31,6 +31,7 @@ import java.util.List;
import
java.util.ArrayList
;
import
java.util.Iterator
;
import
java.util.Map
;
import
java.util.Set
;
public
class
ArrayTypeImpl
extends
ReferenceTypeImpl
implements
ArrayType
...
...
@@ -61,7 +62,8 @@ public class ArrayTypeImpl extends ReferenceTypeImpl
return
findType
(
componentSignature
());
}
void
addVisibleMethods
(
Map
<
String
,
Method
>
map
)
{
@Override
void
addVisibleMethods
(
Map
<
String
,
Method
>
map
,
Set
<
InterfaceType
>
seenInterfaces
)
{
// arrays don't have methods
}
...
...
src/share/classes/com/sun/tools/jdi/ClassTypeImpl.java
浏览文件 @
8255fd7b
...
...
@@ -29,9 +29,27 @@ import com.sun.jdi.*;
import
java.util.*
;
public
class
ClassTypeImpl
extends
Referenc
eTypeImpl
final
public
class
ClassTypeImpl
extends
Invokabl
eTypeImpl
implements
ClassType
{
private
static
class
IResult
implements
InvocationResult
{
final
private
JDWP
.
ClassType
.
InvokeMethod
rslt
;
public
IResult
(
JDWP
.
ClassType
.
InvokeMethod
rslt
)
{
this
.
rslt
=
rslt
;
}
@Override
public
ObjectReferenceImpl
getException
()
{
return
rslt
.
exception
;
}
@Override
public
ValueImpl
getResult
()
{
return
rslt
.
returnValue
;
}
}
private
boolean
cachedSuperclass
=
false
;
private
ClassType
superclass
=
null
;
private
int
lastLine
=
-
1
;
...
...
@@ -65,6 +83,7 @@ public class ClassTypeImpl extends ReferenceTypeImpl
return
superclass
;
}
@Override
public
List
<
InterfaceType
>
interfaces
()
{
if
(
interfaces
==
null
)
{
interfaces
=
getInterfaces
();
...
...
@@ -72,26 +91,9 @@ public class ClassTypeImpl extends ReferenceTypeImpl
return
interfaces
;
}
void
addInterfaces
(
List
<
InterfaceType
>
list
)
{
List
<
InterfaceType
>
immediate
=
interfaces
();
list
.
addAll
(
interfaces
());
Iterator
<
InterfaceType
>
iter
=
immediate
.
iterator
();
while
(
iter
.
hasNext
())
{
InterfaceTypeImpl
interfaze
=
(
InterfaceTypeImpl
)
iter
.
next
();
interfaze
.
addSuperinterfaces
(
list
);
}
ClassTypeImpl
superclass
=
(
ClassTypeImpl
)
superclass
();
if
(
superclass
!=
null
)
{
superclass
.
addInterfaces
(
list
);
}
}
public
List
<
InterfaceType
>
allInterfaces
()
{
List
<
InterfaceType
>
all
=
new
ArrayList
<
InterfaceType
>();
addInterfaces
(
all
);
return
all
;
@Override
public
List
<
InterfaceType
>
allInterfaces
()
{
return
getAllInterfaces
();
}
public
List
<
ClassType
>
subclasses
()
{
...
...
@@ -159,28 +161,6 @@ public class ClassTypeImpl extends ReferenceTypeImpl
}
}
PacketStream
sendInvokeCommand
(
final
ThreadReferenceImpl
thread
,
final
MethodImpl
method
,
final
ValueImpl
[]
args
,
final
int
options
)
{
CommandSender
sender
=
new
CommandSender
()
{
public
PacketStream
send
()
{
return
JDWP
.
ClassType
.
InvokeMethod
.
enqueueCommand
(
vm
,
ClassTypeImpl
.
this
,
thread
,
method
.
ref
(),
args
,
options
);
}
};
PacketStream
stream
;
if
((
options
&
INVOKE_SINGLE_THREADED
)
!=
0
)
{
stream
=
thread
.
sendResumingCommand
(
sender
);
}
else
{
stream
=
vm
.
sendResumingCommand
(
sender
);
}
return
stream
;
}
PacketStream
sendNewInstanceCommand
(
final
ThreadReferenceImpl
thread
,
final
MethodImpl
method
,
final
ValueImpl
[]
args
,
...
...
@@ -203,52 +183,6 @@ public class ClassTypeImpl extends ReferenceTypeImpl
return
stream
;
}
public
Value
invokeMethod
(
ThreadReference
threadIntf
,
Method
methodIntf
,
List
<?
extends
Value
>
origArguments
,
int
options
)
throws
InvalidTypeException
,
ClassNotLoadedException
,
IncompatibleThreadStateException
,
InvocationException
{
validateMirror
(
threadIntf
);
validateMirror
(
methodIntf
);
validateMirrorsOrNulls
(
origArguments
);
MethodImpl
method
=
(
MethodImpl
)
methodIntf
;
ThreadReferenceImpl
thread
=
(
ThreadReferenceImpl
)
threadIntf
;
validateMethodInvocation
(
method
);
List
<?
extends
Value
>
arguments
=
method
.
validateAndPrepareArgumentsForInvoke
(
origArguments
);
ValueImpl
[]
args
=
arguments
.
toArray
(
new
ValueImpl
[
0
]);
JDWP
.
ClassType
.
InvokeMethod
ret
;
try
{
PacketStream
stream
=
sendInvokeCommand
(
thread
,
method
,
args
,
options
);
ret
=
JDWP
.
ClassType
.
InvokeMethod
.
waitForReply
(
vm
,
stream
);
}
catch
(
JDWPException
exc
)
{
if
(
exc
.
errorCode
()
==
JDWP
.
Error
.
INVALID_THREAD
)
{
throw
new
IncompatibleThreadStateException
();
}
else
{
throw
exc
.
toJDIException
();
}
}
/*
* There is an implict VM-wide suspend at the conclusion
* of a normal (non-single-threaded) method invoke
*/
if
((
options
&
INVOKE_SINGLE_THREADED
)
==
0
)
{
vm
.
notifySuspend
();
}
if
(
ret
.
exception
!=
null
)
{
throw
new
InvocationException
(
ret
.
exception
);
}
else
{
return
ret
.
returnValue
;
}
}
public
ObjectReference
newInstance
(
ThreadReference
threadIntf
,
Method
methodIntf
,
List
<?
extends
Value
>
origArguments
,
...
...
@@ -311,58 +245,6 @@ public class ClassTypeImpl extends ReferenceTypeImpl
return
method
;
}
public
List
<
Method
>
allMethods
()
{
ArrayList
<
Method
>
list
=
new
ArrayList
<
Method
>(
methods
());
ClassType
clazz
=
superclass
();
while
(
clazz
!=
null
)
{
list
.
addAll
(
clazz
.
methods
());
clazz
=
clazz
.
superclass
();
}
/*
* Avoid duplicate checking on each method by iterating through
* duplicate-free allInterfaces() rather than recursing
*/
for
(
InterfaceType
interfaze
:
allInterfaces
())
{
list
.
addAll
(
interfaze
.
methods
());
}
return
list
;
}
List
<
ReferenceType
>
inheritedTypes
()
{
List
<
ReferenceType
>
inherited
=
new
ArrayList
<
ReferenceType
>();
if
(
superclass
()
!=
null
)
{
inherited
.
add
(
0
,
(
ReferenceType
)
superclass
());
/* insert at front */
}
for
(
ReferenceType
rt
:
interfaces
())
{
inherited
.
add
(
rt
);
}
return
inherited
;
}
void
validateMethodInvocation
(
Method
method
)
throws
InvalidTypeException
,
InvocationException
{
/*
* Method must be in this class or a superclass.
*/
ReferenceTypeImpl
declType
=
(
ReferenceTypeImpl
)
method
.
declaringType
();
if
(!
declType
.
isAssignableFrom
(
this
))
{
throw
new
IllegalArgumentException
(
"Invalid method"
);
}
/*
* Method must be a static and not a static initializer
*/
if
(!
method
.
isStatic
())
{
throw
new
IllegalArgumentException
(
"Cannot invoke instance method on a class type"
);
}
else
if
(
method
.
isStaticInitializer
())
{
throw
new
IllegalArgumentException
(
"Cannot invoke static initializer"
);
}
}
void
validateConstructorInvocation
(
Method
method
)
throws
InvalidTypeException
,
InvocationException
{
...
...
@@ -382,47 +264,33 @@ public class ClassTypeImpl extends ReferenceTypeImpl
}
}
void
addVisibleMethods
(
Map
<
String
,
Method
>
methodMap
)
{
/*
* Add methods from
* parent types first, so that the methods in this class will
* overwrite them in the hash table
*/
Iterator
<
InterfaceType
>
iter
=
interfaces
().
iterator
();
while
(
iter
.
hasNext
())
{
InterfaceTypeImpl
interfaze
=
(
InterfaceTypeImpl
)
iter
.
next
();
interfaze
.
addVisibleMethods
(
methodMap
);
}
ClassTypeImpl
clazz
=
(
ClassTypeImpl
)
superclass
();
if
(
clazz
!=
null
)
{
clazz
.
addVisibleMethods
(
methodMap
);
}
public
String
toString
()
{
return
"class "
+
name
()
+
" ("
+
loaderString
()
+
")"
;
}
addToMethodMap
(
methodMap
,
methods
());
@Override
CommandSender
getInvokeMethodSender
(
ThreadReferenceImpl
thread
,
MethodImpl
method
,
ValueImpl
[]
args
,
int
options
)
{
return
()
->
JDWP
.
ClassType
.
InvokeMethod
.
enqueueCommand
(
vm
,
ClassTypeImpl
.
this
,
thread
,
method
.
ref
(),
args
,
options
);
}
boolean
isAssignableTo
(
ReferenceType
type
)
{
ClassTypeImpl
superclazz
=
(
ClassTypeImpl
)
superclass
();
if
(
this
.
equals
(
type
))
{
return
true
;
}
else
if
((
superclazz
!=
null
)
&&
superclazz
.
isAssignableTo
(
type
))
{
return
true
;
}
else
{
List
<
InterfaceType
>
interfaces
=
interfaces
();
Iterator
<
InterfaceType
>
iter
=
interfaces
.
iterator
();
while
(
iter
.
hasNext
())
{
InterfaceTypeImpl
interfaze
=
(
InterfaceTypeImpl
)
iter
.
next
();
if
(
interfaze
.
isAssignableTo
(
type
))
{
return
true
;
}
}
return
false
;
}
@Override
InvocationResult
waitForReply
(
PacketStream
stream
)
throws
JDWPException
{
return
new
IResult
(
JDWP
.
ClassType
.
InvokeMethod
.
waitForReply
(
vm
,
stream
));
}
public
String
toString
()
{
return
"class "
+
name
()
+
" ("
+
loaderString
()
+
")"
;
@Override
boolean
canInvoke
(
Method
method
)
{
// Method must be in this class or a superclass.
return
((
ReferenceTypeImpl
)
method
.
declaringType
()).
isAssignableFrom
(
this
);
}
}
src/share/classes/com/sun/tools/jdi/InterfaceTypeImpl.java
浏览文件 @
8255fd7b
...
...
@@ -29,13 +29,31 @@ import com.sun.jdi.*;
import
java.util.List
;
import
java.util.ArrayList
;
import
java.util.Map
;
import
java.util.Iterator
;
import
java.util.Collections
;
import
java.util.Set
;
import
java.lang.ref.SoftReference
;
public
class
InterfaceTypeImpl
extends
ReferenceTypeImpl
implements
InterfaceType
{
final
public
class
InterfaceTypeImpl
extends
InvokableTypeImpl
implements
InterfaceType
{
private
static
class
IResult
implements
InvocationResult
{
final
private
JDWP
.
InterfaceType
.
InvokeMethod
rslt
;
public
IResult
(
JDWP
.
InterfaceType
.
InvokeMethod
rslt
)
{
this
.
rslt
=
rslt
;
}
@Override
public
ObjectReferenceImpl
getException
()
{
return
rslt
.
exception
;
}
@Override
public
ValueImpl
getResult
()
{
return
rslt
.
returnValue
;
}
}
private
SoftReference
<
List
<
InterfaceType
>>
superinterfacesRef
=
null
;
...
...
@@ -80,103 +98,46 @@ public class InterfaceTypeImpl extends ReferenceTypeImpl
return
implementors
;
}
void
addVisibleMethods
(
Map
<
String
,
Method
>
methodMap
)
{
/*
* Add methods from
* parent types first, so that the methods in this class will
* overwrite them in the hash table
*/
for
(
InterfaceType
interfaze
:
superinterfaces
())
{
((
InterfaceTypeImpl
)
interfaze
).
addVisibleMethods
(
methodMap
);
}
addToMethodMap
(
methodMap
,
methods
());
public
boolean
isInitialized
()
{
return
isPrepared
();
}
public
List
<
Method
>
allMethods
()
{
ArrayList
<
Method
>
list
=
new
ArrayList
<
Method
>(
methods
());
/*
* It's more efficient if don't do this
* recursively.
*/
for
(
InterfaceType
interfaze
:
allSuperinterfaces
())
{
list
.
addAll
(
interfaze
.
methods
());
}
return
list
;
public
String
toString
()
{
return
"interface "
+
name
()
+
" ("
+
loaderString
()
+
")"
;
}
List
<
InterfaceType
>
allSuperinterfaces
()
{
ArrayList
<
InterfaceType
>
list
=
new
ArrayList
<
InterfaceType
>();
addSuperinterfaces
(
list
);
return
list
;
@Override
InvocationResult
waitForReply
(
PacketStream
stream
)
throws
JDWPException
{
return
new
IResult
(
JDWP
.
InterfaceType
.
InvokeMethod
.
waitForReply
(
vm
,
stream
));
}
void
addSuperinterfaces
(
List
<
InterfaceType
>
list
)
{
/*
* This code is a little strange because it
* builds the list with a more suitable order than the
* depth-first approach a normal recursive solution would
* take. Instead, all direct superinterfaces precede all
* indirect ones.
*/
/*
* Get a list of direct superinterfaces that's not already in the
* list being built.
*/
List
<
InterfaceType
>
immediate
=
new
ArrayList
<
InterfaceType
>(
superinterfaces
());
Iterator
<
InterfaceType
>
iter
=
immediate
.
iterator
();
while
(
iter
.
hasNext
())
{
InterfaceType
interfaze
=
iter
.
next
();
if
(
list
.
contains
(
interfaze
))
{
iter
.
remove
();
}
}
/*
* Add all new direct superinterfaces
*/
list
.
addAll
(
immediate
);
/*
* Recurse for all new direct superinterfaces.
*/
iter
=
immediate
.
iterator
();
while
(
iter
.
hasNext
())
{
InterfaceTypeImpl
interfaze
=
(
InterfaceTypeImpl
)
iter
.
next
();
interfaze
.
addSuperinterfaces
(
list
);
}
@Override
CommandSender
getInvokeMethodSender
(
final
ThreadReferenceImpl
thread
,
final
MethodImpl
method
,
final
ValueImpl
[]
args
,
final
int
options
)
{
return
()
->
JDWP
.
InterfaceType
.
InvokeMethod
.
enqueueCommand
(
vm
,
InterfaceTypeImpl
.
this
,
thread
,
method
.
ref
(),
args
,
options
);
}
boolean
isAssignableTo
(
ReferenceType
type
)
{
// Exact match?
if
(
this
.
equals
(
type
))
{
return
true
;
}
else
{
// Try superinterfaces.
for
(
InterfaceType
interfaze
:
superinterfaces
())
{
if
(((
InterfaceTypeImpl
)
interfaze
).
isAssignableTo
(
type
))
{
return
true
;
}
}
return
false
;
}
@Override
ClassType
superclass
()
{
return
null
;
}
List
<
InterfaceType
>
inheritedTypes
()
{
@Override
List
<
InterfaceType
>
interfaces
()
{
return
superinterfaces
();
}
public
boolean
isInitialized
()
{
return
isPrepared
();
}
public
String
toString
()
{
return
"interface "
+
name
()
+
" ("
+
loaderString
()
+
")"
;
@Override
boolean
canInvoke
(
Method
method
)
{
// method must be directly in this interface
return
this
.
equals
(
method
.
declaringType
());
}
}
}
\ No newline at end of file
src/share/classes/com/sun/tools/jdi/InvokableTypeImpl.java
0 → 100644
浏览文件 @
8255fd7b
/*
* Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package
com.sun.tools.jdi
;
import
com.sun.jdi.ClassNotLoadedException
;
import
com.sun.jdi.ClassType
;
import
com.sun.jdi.IncompatibleThreadStateException
;
import
com.sun.jdi.InterfaceType
;
import
com.sun.jdi.InvalidTypeException
;
import
com.sun.jdi.InvocationException
;
import
com.sun.jdi.Method
;
import
com.sun.jdi.ReferenceType
;
import
com.sun.jdi.ThreadReference
;
import
com.sun.jdi.Value
;
import
com.sun.jdi.VirtualMachine
;
import
java.util.ArrayList
;
import
java.util.Iterator
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Set
;
/**
* A supertype for ReferenceTypes allowing method invocations
*/
abstract
class
InvokableTypeImpl
extends
ReferenceTypeImpl
{
/**
* The invocation result wrapper
* It is necessary because both ClassType and InterfaceType
* use their own type to represent the invocation result
*/
static
interface
InvocationResult
{
ObjectReferenceImpl
getException
();
ValueImpl
getResult
();
}
InvokableTypeImpl
(
VirtualMachine
aVm
,
long
aRef
)
{
super
(
aVm
,
aRef
);
}
/**
* Method invocation support.
* Shared by ClassType and InterfaceType
* @param threadIntf the thread in which to invoke.
* @param methodIntf method the {@link Method} to invoke.
* @param origArguments the list of {@link Value} arguments bound to the
* invoked method. Values from the list are assigned to arguments
* in the order they appear in the method signature.
* @param options the integer bit flag options.
* @return a {@link Value} mirror of the invoked method's return value.
* @throws java.lang.IllegalArgumentException if the method is not
* a member of this type, if the size of the argument list
* does not match the number of declared arguments for the method, or
* if the method is not static or is a static initializer.
* @throws {@link InvalidTypeException} if any argument in the
* argument list is not assignable to the corresponding method argument
* type.
* @throws ClassNotLoadedException if any argument type has not yet been loaded
* through the appropriate class loader.
* @throws IncompatibleThreadStateException if the specified thread has not
* been suspended by an event.
* @throws InvocationException if the method invocation resulted in
* an exception in the target VM.
* @throws InvalidTypeException If the arguments do not meet this requirement --
* Object arguments must be assignment compatible with the argument
* type. This implies that the argument type must be
* loaded through the enclosing class's class loader.
* Primitive arguments must be either assignment compatible with the
* argument type or must be convertible to the argument type without loss
* of information. See JLS section 5.2 for more information on assignment
* compatibility.
* @throws VMCannotBeModifiedException if the VirtualMachine is read-only - see {@link VirtualMachine#canBeModified()}.
*/
final
public
Value
invokeMethod
(
ThreadReference
threadIntf
,
Method
methodIntf
,
List
<?
extends
Value
>
origArguments
,
int
options
)
throws
InvalidTypeException
,
ClassNotLoadedException
,
IncompatibleThreadStateException
,
InvocationException
{
validateMirror
(
threadIntf
);
validateMirror
(
methodIntf
);
validateMirrorsOrNulls
(
origArguments
);
MethodImpl
method
=
(
MethodImpl
)
methodIntf
;
ThreadReferenceImpl
thread
=
(
ThreadReferenceImpl
)
threadIntf
;
validateMethodInvocation
(
method
);
List
<?
extends
Value
>
arguments
=
method
.
validateAndPrepareArgumentsForInvoke
(
origArguments
);
ValueImpl
[]
args
=
arguments
.
toArray
(
new
ValueImpl
[
0
]);
InvocationResult
ret
;
try
{
PacketStream
stream
=
sendInvokeCommand
(
thread
,
method
,
args
,
options
);
ret
=
waitForReply
(
stream
);
}
catch
(
JDWPException
exc
)
{
if
(
exc
.
errorCode
()
==
JDWP
.
Error
.
INVALID_THREAD
)
{
throw
new
IncompatibleThreadStateException
();
}
else
{
throw
exc
.
toJDIException
();
}
}
/*
* There is an implict VM-wide suspend at the conclusion
* of a normal (non-single-threaded) method invoke
*/
if
((
options
&
ClassType
.
INVOKE_SINGLE_THREADED
)
==
0
)
{
vm
.
notifySuspend
();
}
if
(
ret
.
getException
()
!=
null
)
{
throw
new
InvocationException
(
ret
.
getException
());
}
else
{
return
ret
.
getResult
();
}
}
@Override
boolean
isAssignableTo
(
ReferenceType
type
)
{
ClassTypeImpl
superclazz
=
(
ClassTypeImpl
)
superclass
();
if
(
this
.
equals
(
type
))
{
return
true
;
}
else
if
((
superclazz
!=
null
)
&&
superclazz
.
isAssignableTo
(
type
))
{
return
true
;
}
else
{
List
<
InterfaceType
>
interfaces
=
interfaces
();
Iterator
<
InterfaceType
>
iter
=
interfaces
.
iterator
();
while
(
iter
.
hasNext
())
{
InterfaceTypeImpl
interfaze
=
(
InterfaceTypeImpl
)
iter
.
next
();
if
(
interfaze
.
isAssignableTo
(
type
))
{
return
true
;
}
}
return
false
;
}
}
@Override
final
void
addVisibleMethods
(
Map
<
String
,
Method
>
methodMap
,
Set
<
InterfaceType
>
seenInterfaces
)
{
/*
* Add methods from
* parent types first, so that the methods in this class will
* overwrite them in the hash table
*/
Iterator
<
InterfaceType
>
iter
=
interfaces
().
iterator
();
while
(
iter
.
hasNext
())
{
InterfaceTypeImpl
interfaze
=
(
InterfaceTypeImpl
)
iter
.
next
();
if
(!
seenInterfaces
.
contains
(
interfaze
))
{
interfaze
.
addVisibleMethods
(
methodMap
,
seenInterfaces
);
seenInterfaces
.
add
(
interfaze
);
}
}
ClassTypeImpl
clazz
=
(
ClassTypeImpl
)
superclass
();
if
(
clazz
!=
null
)
{
clazz
.
addVisibleMethods
(
methodMap
,
seenInterfaces
);
}
addToMethodMap
(
methodMap
,
methods
());
}
final
void
addInterfaces
(
List
<
InterfaceType
>
list
)
{
List
<
InterfaceType
>
immediate
=
interfaces
();
list
.
addAll
(
interfaces
());
Iterator
<
InterfaceType
>
iter
=
immediate
.
iterator
();
while
(
iter
.
hasNext
())
{
InterfaceTypeImpl
interfaze
=
(
InterfaceTypeImpl
)
iter
.
next
();
interfaze
.
addInterfaces
(
list
);
}
ClassTypeImpl
superclass
=
(
ClassTypeImpl
)
superclass
();
if
(
superclass
!=
null
)
{
superclass
.
addInterfaces
(
list
);
}
}
/**
* Returns all the implemented interfaces recursively
* @return A list of all the implemented interfaces (recursively)
*/
final
List
<
InterfaceType
>
getAllInterfaces
()
{
List
<
InterfaceType
>
all
=
new
ArrayList
<>();
addInterfaces
(
all
);
return
all
;
}
/**
* Shared implementation of {@linkplain ClassType#allMethods()} and
* {@linkplain InterfaceType#allMethods()}
* @return A list of all methods (recursively)
*/
public
final
List
<
Method
>
allMethods
()
{
ArrayList
<
Method
>
list
=
new
ArrayList
<>(
methods
());
ClassType
clazz
=
superclass
();
while
(
clazz
!=
null
)
{
list
.
addAll
(
clazz
.
methods
());
clazz
=
clazz
.
superclass
();
}
/*
* Avoid duplicate checking on each method by iterating through
* duplicate-free allInterfaces() rather than recursing
*/
for
(
InterfaceType
interfaze
:
getAllInterfaces
())
{
list
.
addAll
(
interfaze
.
methods
());
}
return
list
;
}
@Override
final
List
<
ReferenceType
>
inheritedTypes
()
{
List
<
ReferenceType
>
inherited
=
new
ArrayList
<>();
if
(
superclass
()
!=
null
)
{
inherited
.
add
(
0
,
superclass
());
/* insert at front */
}
for
(
ReferenceType
rt
:
interfaces
())
{
inherited
.
add
(
rt
);
}
return
inherited
;
}
private
PacketStream
sendInvokeCommand
(
final
ThreadReferenceImpl
thread
,
final
MethodImpl
method
,
final
ValueImpl
[]
args
,
final
int
options
)
{
CommandSender
sender
=
getInvokeMethodSender
(
thread
,
method
,
args
,
options
);
PacketStream
stream
;
if
((
options
&
ClassType
.
INVOKE_SINGLE_THREADED
)
!=
0
)
{
stream
=
thread
.
sendResumingCommand
(
sender
);
}
else
{
stream
=
vm
.
sendResumingCommand
(
sender
);
}
return
stream
;
}
private
void
validateMethodInvocation
(
Method
method
)
throws
InvalidTypeException
,
InvocationException
{
if
(!
canInvoke
(
method
))
{
throw
new
IllegalArgumentException
(
"Invalid method"
);
}
/*
* Method must be a static and not a static initializer
*/
if
(!
method
.
isStatic
())
{
throw
new
IllegalArgumentException
(
"Cannot invoke instance method on a class/interface type"
);
}
else
if
(
method
.
isStaticInitializer
())
{
throw
new
IllegalArgumentException
(
"Cannot invoke static initializer"
);
}
}
/**
* A subclass will provide specific {@linkplain CommandSender}
* @param thread the current invocation thread
* @param method the method to invoke
* @param args the arguments to pass to the method
* @param options the integer bit flag options
* @return the specific {@literal CommandSender} instance
*/
abstract
CommandSender
getInvokeMethodSender
(
ThreadReferenceImpl
thread
,
MethodImpl
method
,
ValueImpl
[]
args
,
int
options
);
/**
* Waits for the reply to the last sent command
* @param stream the stream to listen for the reply on
* @return the {@linkplain InvocationResult} instance
* @throws JDWPException when something goes wrong in JDWP
*/
abstract
InvocationResult
waitForReply
(
PacketStream
stream
)
throws
JDWPException
;
/**
* Get the {@linkplain ReferenceType} superclass
* @return the superclass or null
*/
abstract
ClassType
superclass
();
/**
* Get the implemented/extended interfaces
* @return the list of implemented/extended interfaces
*/
abstract
List
<
InterfaceType
>
interfaces
();
/**
* Checks the provided method whether it can be invoked
* @param method the method to check
* @return {@code TRUE} if the implementation knows how to invoke the method,
* {@code FALSE} otherwise
*/
abstract
boolean
canInvoke
(
Method
method
);
}
src/share/classes/com/sun/tools/jdi/MethodImpl.java
浏览文件 @
8255fd7b
...
...
@@ -187,6 +187,13 @@ public abstract class MethodImpl extends TypeComponentImpl
return
isModifierSet
(
VMModifiers
.
ABSTRACT
);
}
public
boolean
isDefault
()
{
return
!
isModifierSet
(
VMModifiers
.
ABSTRACT
)
&&
!
isModifierSet
(
VMModifiers
.
STATIC
)
&&
!
isModifierSet
(
VMModifiers
.
PRIVATE
)
&&
declaringType
()
instanceof
InterfaceType
;
}
public
boolean
isSynchronized
()
{
return
isModifierSet
(
VMModifiers
.
SYNCHRONIZED
);
}
...
...
src/share/classes/com/sun/tools/jdi/ObjectReferenceImpl.java
浏览文件 @
8255fd7b
...
...
@@ -277,7 +277,6 @@ public class ObjectReferenceImpl extends ValueImpl
void
validateMethodInvocation
(
Method
method
,
int
options
)
throws
InvalidTypeException
,
InvocationException
{
/*
* Method must be in this object's class, a superclass, or
* implemented interface
...
...
@@ -287,6 +286,19 @@ public class ObjectReferenceImpl extends ValueImpl
throw
new
IllegalArgumentException
(
"Invalid method"
);
}
if
(
declType
instanceof
ClassTypeImpl
)
{
validateClassMethodInvocation
(
method
,
options
);
}
else
if
(
declType
instanceof
InterfaceTypeImpl
)
{
validateIfaceMethodInvocation
(
method
,
options
);
}
else
{
throw
new
InvalidTypeException
();
}
}
void
validateClassMethodInvocation
(
Method
method
,
int
options
)
throws
InvalidTypeException
,
InvocationException
{
ClassTypeImpl
clazz
=
invokableReferenceType
(
method
);
/*
...
...
@@ -300,9 +312,7 @@ public class ObjectReferenceImpl extends ValueImpl
* For nonvirtual invokes, method must have a body
*/
if
((
options
&
INVOKE_NONVIRTUAL
)
!=
0
)
{
if
(
method
.
declaringType
()
instanceof
InterfaceType
)
{
throw
new
IllegalArgumentException
(
"Interface method"
);
}
else
if
(
method
.
isAbstract
())
{
if
(
method
.
isAbstract
())
{
throw
new
IllegalArgumentException
(
"Abstract method"
);
}
}
...
...
@@ -324,7 +334,7 @@ public class ObjectReferenceImpl extends ValueImpl
*/
Method
invoker
=
clazz
.
concreteMethodByName
(
method
.
name
(),
method
.
signature
());
// i
sAssignableFrom check above guarantees non-null
// i
nvoker is supposed to be non-null under normal circumstances
invokedClass
=
(
ClassTypeImpl
)
invoker
.
declaringType
();
}
/* The above code is left over from previous versions.
...
...
@@ -332,6 +342,17 @@ public class ObjectReferenceImpl extends ValueImpl
*/
}
void
validateIfaceMethodInvocation
(
Method
method
,
int
options
)
throws
InvalidTypeException
,
InvocationException
{
/*
* Only default methods allowed for nonvirtual invokes
*/
if
(!
method
.
isDefault
())
{
throw
new
IllegalArgumentException
(
"Not a default method"
);
}
}
PacketStream
sendInvokeCommand
(
final
ThreadReferenceImpl
thread
,
final
ClassTypeImpl
refType
,
final
MethodImpl
method
,
...
...
@@ -370,7 +391,10 @@ public class ObjectReferenceImpl extends ValueImpl
ThreadReferenceImpl
thread
=
(
ThreadReferenceImpl
)
threadIntf
;
if
(
method
.
isStatic
())
{
if
(
referenceType
()
instanceof
ClassType
)
{
if
(
referenceType
()
instanceof
InterfaceType
)
{
InterfaceType
type
=
(
InterfaceType
)
referenceType
();
return
type
.
invokeMethod
(
thread
,
method
,
origArguments
,
options
);
}
else
if
(
referenceType
()
instanceof
ClassType
)
{
ClassType
type
=
(
ClassType
)
referenceType
();
return
type
.
invokeMethod
(
thread
,
method
,
origArguments
,
options
);
}
else
{
...
...
src/share/classes/com/sun/tools/jdi/ReferenceTypeImpl.java
浏览文件 @
8255fd7b
...
...
@@ -511,7 +511,7 @@ implements ReferenceType {
methodMap
.
put
(
method
.
name
().
concat
(
method
.
signature
()),
method
);
}
abstract
void
addVisibleMethods
(
Map
<
String
,
Method
>
methodMap
);
abstract
void
addVisibleMethods
(
Map
<
String
,
Method
>
methodMap
,
Set
<
InterfaceType
>
seenInterfaces
);
public
List
<
Method
>
visibleMethods
()
{
/*
...
...
@@ -520,7 +520,7 @@ implements ReferenceType {
* concatenation of name and signature.
*/
Map
<
String
,
Method
>
map
=
new
HashMap
<
String
,
Method
>();
addVisibleMethods
(
map
);
addVisibleMethods
(
map
,
new
HashSet
<
InterfaceType
>()
);
/*
* ... but the hash map destroys order. Methods should be
...
...
src/share/classes/com/sun/tools/jdi/VirtualMachineManagerImpl.java
浏览文件 @
8255fd7b
...
...
@@ -48,7 +48,7 @@ public class VirtualMachineManagerImpl implements VirtualMachineManagerService {
private
ResourceBundle
messages
=
null
;
private
int
vmSequenceNumber
=
0
;
private
static
final
int
majorVersion
=
1
;
private
static
final
int
minorVersion
=
6
;
private
static
final
int
minorVersion
=
8
;
private
static
final
Object
lock
=
new
Object
();
private
static
VirtualMachineManagerImpl
vmm
;
...
...
src/share/classes/java/lang/invoke/InvokerBytecodeGenerator.java
浏览文件 @
8255fd7b
...
...
@@ -62,7 +62,7 @@ class InvokerBytecodeGenerator {
private
static
final
String
CLL_SIG
=
"(L"
+
CLS
+
";L"
+
OBJ
+
";)L"
+
OBJ
+
";"
;
/** Name of its super class*/
private
static
final
String
superName
=
LF
;
private
static
final
String
superName
=
OBJ
;
/** Name of new class */
private
final
String
className
;
...
...
@@ -97,7 +97,7 @@ class InvokerBytecodeGenerator {
if
(
DUMP_CLASS_FILES
)
{
className
=
makeDumpableClassName
(
className
);
}
this
.
className
=
superName
+
"$"
+
className
;
this
.
className
=
LF
+
"$"
+
className
;
this
.
sourceFile
=
"LambdaForm$"
+
className
;
this
.
lambdaForm
=
lambdaForm
;
this
.
invokerName
=
invokerName
;
...
...
src/share/classes/java/net/URLClassLoader.java
浏览文件 @
8255fd7b
...
...
@@ -354,10 +354,11 @@ public class URLClassLoader extends SecureClassLoader implements Closeable {
* @exception NullPointerException if {@code name} is {@code null}.
*/
protected
Class
<?>
findClass
(
final
String
name
)
throws
ClassNotFoundException
throws
ClassNotFoundException
{
final
Class
<?>
result
;
try
{
re
turn
AccessController
.
doPrivileged
(
re
sult
=
AccessController
.
doPrivileged
(
new
PrivilegedExceptionAction
<
Class
<?>>()
{
public
Class
<?>
run
()
throws
ClassNotFoundException
{
String
path
=
name
.
replace
(
'.'
,
'/'
).
concat
(
".class"
);
...
...
@@ -369,13 +370,17 @@ public class URLClassLoader extends SecureClassLoader implements Closeable {
throw
new
ClassNotFoundException
(
name
,
e
);
}
}
else
{
throw
new
ClassNotFoundException
(
name
)
;
return
null
;
}
}
},
acc
);
}
catch
(
java
.
security
.
PrivilegedActionException
pae
)
{
throw
(
ClassNotFoundException
)
pae
.
getException
();
}
if
(
result
==
null
)
{
throw
new
ClassNotFoundException
(
name
);
}
return
result
;
}
/*
...
...
src/share/classes/java/security/KeyPairGenerator.java
浏览文件 @
8255fd7b
/*
* Copyright (c) 1997, 201
3
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1997, 201
4
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
...
...
@@ -33,6 +33,7 @@ import java.security.Provider.Service;
import
sun.security.jca.*
;
import
sun.security.jca.GetInstance.Instance
;
import
sun.security.util.Debug
;
/**
* The KeyPairGenerator class is used to generate pairs of
...
...
@@ -126,6 +127,11 @@ import sun.security.jca.GetInstance.Instance;
public
abstract
class
KeyPairGenerator
extends
KeyPairGeneratorSpi
{
private
static
final
Debug
pdebug
=
Debug
.
getInstance
(
"provider"
,
"Provider"
);
private
static
final
boolean
skipDebug
=
Debug
.
isOn
(
"engine="
)
&&
!
Debug
.
isOn
(
"keypairgenerator"
);
private
final
String
algorithm
;
// The provider
...
...
@@ -167,6 +173,12 @@ public abstract class KeyPairGenerator extends KeyPairGeneratorSpi {
kpg
=
new
Delegate
(
spi
,
algorithm
);
}
kpg
.
provider
=
instance
.
provider
;
if
(!
skipDebug
&&
pdebug
!=
null
)
{
pdebug
.
println
(
"KeyPairGenerator."
+
algorithm
+
" algorithm from: "
+
kpg
.
provider
.
getName
());
}
return
kpg
;
}
...
...
@@ -557,6 +569,11 @@ public abstract class KeyPairGenerator extends KeyPairGeneratorSpi {
provider
=
instance
.
provider
;
this
.
serviceIterator
=
serviceIterator
;
initType
=
I_NONE
;
if
(!
skipDebug
&&
pdebug
!=
null
)
{
pdebug
.
println
(
"KeyPairGenerator."
+
algorithm
+
" algorithm from: "
+
provider
.
getName
());
}
}
/**
...
...
src/share/classes/java/security/KeyStore.java
浏览文件 @
8255fd7b
...
...
@@ -37,6 +37,8 @@ import javax.crypto.SecretKey;
import
javax.security.auth.DestroyFailedException
;
import
javax.security.auth.callback.*
;
import
sun.security.util.Debug
;
/**
* This class represents a storage facility for cryptographic
* keys and certificates.
...
...
@@ -177,6 +179,11 @@ import javax.security.auth.callback.*;
public
class
KeyStore
{
private
static
final
Debug
pdebug
=
Debug
.
getInstance
(
"provider"
,
"Provider"
);
private
static
final
boolean
skipDebug
=
Debug
.
isOn
(
"engine="
)
&&
!
Debug
.
isOn
(
"keystore"
);
/*
* Constant to lookup in the Security properties file to determine
* the default keystore type.
...
...
@@ -801,6 +808,11 @@ public class KeyStore {
this
.
keyStoreSpi
=
keyStoreSpi
;
this
.
provider
=
provider
;
this
.
type
=
type
;
if
(!
skipDebug
&&
pdebug
!=
null
)
{
pdebug
.
println
(
"KeyStore."
+
type
.
toUpperCase
()
+
" type from: "
+
this
.
provider
.
getName
());
}
}
/**
...
...
src/share/classes/java/security/MessageDigest.java
浏览文件 @
8255fd7b
...
...
@@ -35,6 +35,8 @@ import java.io.ByteArrayInputStream;
import
java.nio.ByteBuffer
;
import
sun.security.util.Debug
;
/**
* This MessageDigest class provides applications the functionality of a
* message digest algorithm, such as SHA-1 or SHA-256.
...
...
@@ -103,6 +105,11 @@ import java.nio.ByteBuffer;
public
abstract
class
MessageDigest
extends
MessageDigestSpi
{
private
static
final
Debug
pdebug
=
Debug
.
getInstance
(
"provider"
,
"Provider"
);
private
static
final
boolean
skipDebug
=
Debug
.
isOn
(
"engine="
)
&&
!
Debug
.
isOn
(
"messagedigest"
);
private
String
algorithm
;
// The state of this digest
...
...
@@ -156,18 +163,23 @@ public abstract class MessageDigest extends MessageDigestSpi {
public
static
MessageDigest
getInstance
(
String
algorithm
)
throws
NoSuchAlgorithmException
{
try
{
MessageDigest
md
;
Object
[]
objs
=
Security
.
getImpl
(
algorithm
,
"MessageDigest"
,
(
String
)
null
);
if
(
objs
[
0
]
instanceof
MessageDigest
)
{
MessageDigest
md
=
(
MessageDigest
)
objs
[
0
];
md
.
provider
=
(
Provider
)
objs
[
1
];
return
md
;
md
=
(
MessageDigest
)
objs
[
0
];
}
else
{
MessageDigest
delegate
=
new
Delegate
((
MessageDigestSpi
)
objs
[
0
],
algorithm
);
delegate
.
provider
=
(
Provider
)
objs
[
1
];
return
delegate
;
md
=
new
Delegate
((
MessageDigestSpi
)
objs
[
0
],
algorithm
);
}
md
.
provider
=
(
Provider
)
objs
[
1
];
if
(!
skipDebug
&&
pdebug
!=
null
)
{
pdebug
.
println
(
"MessageDigest."
+
algorithm
+
" algorithm from: "
+
md
.
provider
.
getName
());
}
return
md
;
}
catch
(
NoSuchProviderException
e
)
{
throw
new
NoSuchAlgorithmException
(
algorithm
+
" not found"
);
}
...
...
src/share/classes/java/security/SecureRandom.java
浏览文件 @
8255fd7b
...
...
@@ -32,6 +32,7 @@ import java.security.Provider.Service;
import
sun.security.jca.*
;
import
sun.security.jca.GetInstance.Instance
;
import
sun.security.util.Debug
;
/**
* This class provides a cryptographically strong random number
...
...
@@ -92,6 +93,11 @@ import sun.security.jca.GetInstance.Instance;
public
class
SecureRandom
extends
java
.
util
.
Random
{
private
static
final
Debug
pdebug
=
Debug
.
getInstance
(
"provider"
,
"Provider"
);
private
static
final
boolean
skipDebug
=
Debug
.
isOn
(
"engine="
)
&&
!
Debug
.
isOn
(
"securerandom"
);
/**
* The provider.
*
...
...
@@ -234,6 +240,11 @@ public class SecureRandom extends java.util.Random {
this
.
secureRandomSpi
=
secureRandomSpi
;
this
.
provider
=
provider
;
this
.
algorithm
=
algorithm
;
if
(!
skipDebug
&&
pdebug
!=
null
)
{
pdebug
.
println
(
"SecureRandom."
+
algorithm
+
" algorithm from: "
+
this
.
provider
.
getName
());
}
}
/**
...
...
src/share/classes/java/security/Signature.java
浏览文件 @
8255fd7b
/*
* Copyright (c) 1996, 201
3
, 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.
*
* This code is free software; you can redistribute it and/or modify it
...
...
@@ -121,6 +121,11 @@ public abstract class Signature extends SignatureSpi {
private
static
final
Debug
debug
=
Debug
.
getInstance
(
"jca"
,
"Signature"
);
private
static
final
Debug
pdebug
=
Debug
.
getInstance
(
"provider"
,
"Provider"
);
private
static
final
boolean
skipDebug
=
Debug
.
isOn
(
"engine="
)
&&
!
Debug
.
isOn
(
"signature"
);
/*
* The algorithm for this signature object.
* This value is used to map an OID to the particular algorithm.
...
...
@@ -451,6 +456,11 @@ public abstract class Signature extends SignatureSpi {
throws
InvalidKeyException
{
engineInitVerify
(
publicKey
);
state
=
VERIFY
;
if
(!
skipDebug
&&
pdebug
!=
null
)
{
pdebug
.
println
(
"Signature."
+
algorithm
+
" verification algorithm from: "
+
this
.
provider
.
getName
());
}
}
/**
...
...
@@ -495,6 +505,11 @@ public abstract class Signature extends SignatureSpi {
PublicKey
publicKey
=
certificate
.
getPublicKey
();
engineInitVerify
(
publicKey
);
state
=
VERIFY
;
if
(!
skipDebug
&&
pdebug
!=
null
)
{
pdebug
.
println
(
"Signature."
+
algorithm
+
" verification algorithm from: "
+
this
.
provider
.
getName
());
}
}
/**
...
...
@@ -511,6 +526,11 @@ public abstract class Signature extends SignatureSpi {
throws
InvalidKeyException
{
engineInitSign
(
privateKey
);
state
=
SIGN
;
if
(!
skipDebug
&&
pdebug
!=
null
)
{
pdebug
.
println
(
"Signature."
+
algorithm
+
" signing algorithm from: "
+
this
.
provider
.
getName
());
}
}
/**
...
...
@@ -529,6 +549,11 @@ public abstract class Signature extends SignatureSpi {
throws
InvalidKeyException
{
engineInitSign
(
privateKey
,
random
);
state
=
SIGN
;
if
(!
skipDebug
&&
pdebug
!=
null
)
{
pdebug
.
println
(
"Signature."
+
algorithm
+
" signing algorithm from: "
+
this
.
provider
.
getName
());
}
}
/**
...
...
src/share/classes/java/util/concurrent/ForkJoinPool.java
浏览文件 @
8255fd7b
此差异已折叠。
点击以展开。
src/share/classes/java/util/concurrent/ForkJoinTask.java
浏览文件 @
8255fd7b
...
...
@@ -297,15 +297,22 @@ public abstract class ForkJoinTask<V> implements Future<V>, Serializable {
}
/**
* Tries to set SIGNAL status unless already completed. Used by
* ForkJoinPool. Other variants are directly incorporated into
* externalAwaitDone etc.
* If not done, sets SIGNAL status and performs Object.wait(timeout).
* This task may or may not be done on exit. Ignores interrupts.
*
* @
return true if successful
* @
param timeout using Object.wait conventions.
*/
final
boolean
trySetSignal
()
{
int
s
=
status
;
return
s
>=
0
&&
U
.
compareAndSwapInt
(
this
,
STATUS
,
s
,
s
|
SIGNAL
);
final
void
internalWait
(
long
timeout
)
{
int
s
;
if
((
s
=
status
)
>=
0
&&
// force completer to issue notify
U
.
compareAndSwapInt
(
this
,
STATUS
,
s
,
s
|
SIGNAL
))
{
synchronized
(
this
)
{
if
(
status
>=
0
)
try
{
wait
(
timeout
);
}
catch
(
InterruptedException
ie
)
{
}
else
notifyAll
();
}
}
}
/**
...
...
@@ -313,35 +320,29 @@ public abstract class ForkJoinTask<V> implements Future<V>, Serializable {
* @return status upon completion
*/
private
int
externalAwaitDone
()
{
int
s
;
ForkJoinPool
cp
=
ForkJoinPool
.
common
;
if
((
s
=
status
)
>=
0
)
{
if
(
cp
!=
null
)
{
if
(
this
instanceof
CountedCompleter
)
s
=
cp
.
externalHelpComplete
((
CountedCompleter
<?>)
this
,
Integer
.
MAX_VALUE
);
else
if
(
cp
.
tryExternalUnpush
(
this
))
s
=
doExec
();
}
if
(
s
>=
0
&&
(
s
=
status
)
>=
0
)
{
boolean
interrupted
=
false
;
do
{
if
(
U
.
compareAndSwapInt
(
this
,
STATUS
,
s
,
s
|
SIGNAL
))
{
synchronized
(
this
)
{
if
(
status
>=
0
)
{
try
{
wait
();
}
catch
(
InterruptedException
ie
)
{
interrupted
=
true
;
}
int
s
=
((
this
instanceof
CountedCompleter
)
?
// try helping
ForkJoinPool
.
common
.
externalHelpComplete
(
(
CountedCompleter
<?>)
this
,
0
)
:
ForkJoinPool
.
common
.
tryExternalUnpush
(
this
)
?
doExec
()
:
0
);
if
(
s
>=
0
&&
(
s
=
status
)
>=
0
)
{
boolean
interrupted
=
false
;
do
{
if
(
U
.
compareAndSwapInt
(
this
,
STATUS
,
s
,
s
|
SIGNAL
))
{
synchronized
(
this
)
{
if
(
status
>=
0
)
{
try
{
wait
(
0L
);
}
catch
(
InterruptedException
ie
)
{
interrupted
=
true
;
}
else
notifyAll
();
}
else
notifyAll
();
}
}
while
((
s
=
status
)
>=
0
);
if
(
interrupted
)
Thread
.
currentThread
().
interrupt
();
}
}
}
while
((
s
=
status
)
>=
0
);
if
(
interrupted
)
Thread
.
currentThread
().
interrupt
();
}
return
s
;
}
...
...
@@ -351,22 +352,22 @@ public abstract class ForkJoinTask<V> implements Future<V>, Serializable {
*/
private
int
externalInterruptibleAwaitDone
()
throws
InterruptedException
{
int
s
;
ForkJoinPool
cp
=
ForkJoinPool
.
common
;
if
(
Thread
.
interrupted
())
throw
new
InterruptedException
();
if
((
s
=
status
)
>=
0
&&
cp
!=
null
)
{
if
(
this
instanceof
CountedCompleter
)
cp
.
externalHelpComplete
((
CountedCompleter
<?>)
this
,
Integer
.
MAX_VALUE
);
else
if
(
cp
.
tryExternalUnpush
(
this
))
doExec
();
}
while
((
s
=
status
)
>=
0
)
{
if
(
U
.
compareAndSwapInt
(
this
,
STATUS
,
s
,
s
|
SIGNAL
))
{
synchronized
(
this
)
{
if
(
status
>=
0
)
wait
();
else
notifyAll
();
if
((
s
=
status
)
>=
0
&&
(
s
=
((
this
instanceof
CountedCompleter
)
?
ForkJoinPool
.
common
.
externalHelpComplete
(
(
CountedCompleter
<?>)
this
,
0
)
:
ForkJoinPool
.
common
.
tryExternalUnpush
(
this
)
?
doExec
()
:
0
))
>=
0
)
{
while
((
s
=
status
)
>=
0
)
{
if
(
U
.
compareAndSwapInt
(
this
,
STATUS
,
s
,
s
|
SIGNAL
))
{
synchronized
(
this
)
{
if
(
status
>=
0
)
wait
(
0L
);
else
notifyAll
();
}
}
}
}
...
...
@@ -386,7 +387,7 @@ public abstract class ForkJoinTask<V> implements Future<V>, Serializable {
((
t
=
Thread
.
currentThread
())
instanceof
ForkJoinWorkerThread
)
?
(
w
=
(
wt
=
(
ForkJoinWorkerThread
)
t
).
workQueue
).
tryUnpush
(
this
)
&&
(
s
=
doExec
())
<
0
?
s
:
wt
.
pool
.
awaitJoin
(
w
,
this
)
:
wt
.
pool
.
awaitJoin
(
w
,
this
,
0L
)
:
externalAwaitDone
();
}
...
...
@@ -399,7 +400,8 @@ public abstract class ForkJoinTask<V> implements Future<V>, Serializable {
int
s
;
Thread
t
;
ForkJoinWorkerThread
wt
;
return
(
s
=
doExec
())
<
0
?
s
:
((
t
=
Thread
.
currentThread
())
instanceof
ForkJoinWorkerThread
)
?
(
wt
=
(
ForkJoinWorkerThread
)
t
).
pool
.
awaitJoin
(
wt
.
workQueue
,
this
)
:
(
wt
=
(
ForkJoinWorkerThread
)
t
).
pool
.
awaitJoin
(
wt
.
workQueue
,
this
,
0L
)
:
externalAwaitDone
();
}
...
...
@@ -577,7 +579,7 @@ public abstract class ForkJoinTask<V> implements Future<V>, Serializable {
Throwable
ex
;
if
(
e
==
null
||
(
ex
=
e
.
ex
)
==
null
)
return
null
;
if
(
false
&&
e
.
thrower
!=
Thread
.
currentThread
().
getId
())
{
if
(
e
.
thrower
!=
Thread
.
currentThread
().
getId
())
{
Class
<?
extends
Throwable
>
ec
=
ex
.
getClass
();
try
{
Constructor
<?>
noArgCtor
=
null
;
...
...
@@ -587,13 +589,17 @@ public abstract class ForkJoinTask<V> implements Future<V>, Serializable {
Class
<?>[]
ps
=
c
.
getParameterTypes
();
if
(
ps
.
length
==
0
)
noArgCtor
=
c
;
else
if
(
ps
.
length
==
1
&&
ps
[
0
]
==
Throwable
.
class
)
return
(
Throwable
)(
c
.
newInstance
(
ex
));
else
if
(
ps
.
length
==
1
&&
ps
[
0
]
==
Throwable
.
class
)
{
Throwable
wx
=
(
Throwable
)
c
.
newInstance
(
ex
);
return
(
wx
==
null
)
?
ex
:
wx
;
}
}
if
(
noArgCtor
!=
null
)
{
Throwable
wx
=
(
Throwable
)(
noArgCtor
.
newInstance
());
wx
.
initCause
(
ex
);
return
wx
;
if
(
wx
!=
null
)
{
wx
.
initCause
(
ex
);
return
wx
;
}
}
}
catch
(
Exception
ignore
)
{
}
...
...
@@ -1017,67 +1023,40 @@ public abstract class ForkJoinTask<V> implements Future<V>, Serializable {
*/
public
final
V
get
(
long
timeout
,
TimeUnit
unit
)
throws
InterruptedException
,
ExecutionException
,
TimeoutException
{
int
s
;
long
nanos
=
unit
.
toNanos
(
timeout
);
if
(
Thread
.
interrupted
())
throw
new
InterruptedException
();
// Messy in part because we measure in nanosecs, but wait in millisecs
int
s
;
long
ms
;
long
ns
=
unit
.
toNanos
(
timeout
);
ForkJoinPool
cp
;
if
((
s
=
status
)
>=
0
&&
ns
>
0L
)
{
long
deadline
=
System
.
nanoTime
()
+
ns
;
ForkJoinPool
p
=
null
;
ForkJoinPool
.
WorkQueue
w
=
null
;
if
((
s
=
status
)
>=
0
&&
nanos
>
0L
)
{
long
d
=
System
.
nanoTime
()
+
nanos
;
long
deadline
=
(
d
==
0L
)
?
1L
:
d
;
// avoid 0
Thread
t
=
Thread
.
currentThread
();
if
(
t
instanceof
ForkJoinWorkerThread
)
{
ForkJoinWorkerThread
wt
=
(
ForkJoinWorkerThread
)
t
;
p
=
wt
.
pool
;
w
=
wt
.
workQueue
;
p
.
helpJoinOnce
(
w
,
this
);
// no retries on failure
}
else
if
((
cp
=
ForkJoinPool
.
common
)
!=
null
)
{
if
(
this
instanceof
CountedCompleter
)
cp
.
externalHelpComplete
((
CountedCompleter
<?>)
this
,
Integer
.
MAX_VALUE
);
else
if
(
cp
.
tryExternalUnpush
(
this
))
doExec
();
s
=
wt
.
pool
.
awaitJoin
(
wt
.
workQueue
,
this
,
deadline
);
}
boolean
canBlock
=
false
;
boolean
interrupted
=
false
;
try
{
while
((
s
=
status
)
>=
0
)
{
if
(
w
!=
null
&&
w
.
qlock
<
0
)
cancelIgnoringExceptions
(
this
);
else
if
(!
canBlock
)
{
if
(
p
==
null
||
p
.
tryCompensate
(
p
.
ctl
))
canBlock
=
true
;
}
else
{
if
((
ms
=
TimeUnit
.
NANOSECONDS
.
toMillis
(
ns
))
>
0L
&&
U
.
compareAndSwapInt
(
this
,
STATUS
,
s
,
s
|
SIGNAL
))
{
synchronized
(
this
)
{
if
(
status
>=
0
)
{
try
{
wait
(
ms
);
}
catch
(
InterruptedException
ie
)
{
if
(
p
==
null
)
interrupted
=
true
;
}
}
else
notifyAll
();
}
else
if
((
s
=
((
this
instanceof
CountedCompleter
)
?
ForkJoinPool
.
common
.
externalHelpComplete
(
(
CountedCompleter
<?>)
this
,
0
)
:
ForkJoinPool
.
common
.
tryExternalUnpush
(
this
)
?
doExec
()
:
0
))
>=
0
)
{
long
ns
,
ms
;
// measure in nanosecs, but wait in millisecs
while
((
s
=
status
)
>=
0
&&
(
ns
=
deadline
-
System
.
nanoTime
())
>
0L
)
{
if
((
ms
=
TimeUnit
.
NANOSECONDS
.
toMillis
(
ns
))
>
0L
&&
U
.
compareAndSwapInt
(
this
,
STATUS
,
s
,
s
|
SIGNAL
))
{
synchronized
(
this
)
{
if
(
status
>=
0
)
wait
(
ms
);
// OK to throw InterruptedException
else
notifyAll
();
}
if
((
s
=
status
)
<
0
||
interrupted
||
(
ns
=
deadline
-
System
.
nanoTime
())
<=
0L
)
break
;
}
}
}
finally
{
if
(
p
!=
null
&&
canBlock
)
p
.
incrementActiveCount
();
}
if
(
interrupted
)
throw
new
InterruptedException
();
}
if
(
s
>=
0
)
s
=
status
;
if
((
s
&=
DONE_MASK
)
!=
NORMAL
)
{
Throwable
ex
;
if
(
s
==
CANCELLED
)
...
...
src/share/classes/java/util/concurrent/ForkJoinWorkerThread.java
浏览文件 @
8255fd7b
...
...
@@ -66,7 +66,7 @@ public class ForkJoinWorkerThread extends Thread {
* owning thread.
*
* Support for (non-public) subclass InnocuousForkJoinWorkerThread
* requires that we break quite a lot of encapulation (via Unsafe)
* requires that we break quite a lot of encap
s
ulation (via Unsafe)
* both here and in the subclass to access and set Thread fields.
*/
...
...
@@ -118,7 +118,7 @@ public class ForkJoinWorkerThread extends Thread {
* @return the index number
*/
public
int
getPoolIndex
()
{
return
workQueue
.
poolIndex
>>>
1
;
// ignore odd/even tag bit
return
workQueue
.
getPoolIndex
();
}
/**
...
...
@@ -171,7 +171,7 @@ public class ForkJoinWorkerThread extends Thread {
}
/**
* Erases ThreadLocals by nulling out Thread maps
* Erases ThreadLocals by nulling out Thread maps
.
*/
final
void
eraseThreadLocals
()
{
U
.
putObject
(
this
,
THREADLOCALS
,
null
);
...
...
@@ -246,8 +246,8 @@ public class ForkJoinWorkerThread extends Thread {
/**
* Returns a new group with the system ThreadGroup (the
* topmost, parentless group) as parent. Uses Unsafe to
* traverse Thread
group and ThreadGroup
parent fields.
* topmost, parent
-
less group) as parent. Uses Unsafe to
* traverse Thread
.group and ThreadGroup.
parent fields.
*/
private
static
ThreadGroup
createThreadGroup
()
{
try
{
...
...
@@ -274,4 +274,3 @@ public class ForkJoinWorkerThread extends Thread {
}
}
src/share/classes/java/util/logging/FileHandler.java
浏览文件 @
8255fd7b
...
...
@@ -402,6 +402,14 @@ public class FileHandler extends StreamHandler {
openFiles
();
}
private
boolean
isParentWritable
(
Path
path
)
{
Path
parent
=
path
.
getParent
();
if
(
parent
==
null
)
{
parent
=
path
.
toAbsolutePath
().
getParent
();
}
return
parent
!=
null
&&
Files
.
isWritable
(
parent
);
}
/**
* Open the set of output files, based on the configured
* instance variables.
...
...
@@ -458,7 +466,7 @@ public class FileHandler extends StreamHandler {
// Note that this is a situation that may happen,
// but not too frequently.
if
(
Files
.
isRegularFile
(
lockFilePath
,
LinkOption
.
NOFOLLOW_LINKS
)
&&
Files
.
isWritable
(
lockFilePath
.
getParent
()
))
{
&&
isParentWritable
(
lockFilePath
))
{
try
{
channel
=
FileChannel
.
open
(
lockFilePath
,
WRITE
,
APPEND
);
...
...
src/share/classes/javax/crypto/Cipher.java
浏览文件 @
8255fd7b
/*
* Copyright (c) 1997, 201
3
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1997, 201
4
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
...
...
@@ -167,6 +167,11 @@ public class Cipher {
private
static
final
Debug
debug
=
Debug
.
getInstance
(
"jca"
,
"Cipher"
);
private
static
final
Debug
pdebug
=
Debug
.
getInstance
(
"provider"
,
"Provider"
);
private
static
final
boolean
skipDebug
=
Debug
.
isOn
(
"engine="
)
&&
!
Debug
.
isOn
(
"cipher"
);
/**
* Constant used to initialize cipher to encryption mode.
*/
...
...
@@ -1110,6 +1115,21 @@ public class Cipher {
}
}
private
static
String
getOpmodeString
(
int
opmode
)
{
switch
(
opmode
)
{
case
ENCRYPT_MODE:
return
"encryption"
;
case
DECRYPT_MODE:
return
"decryption"
;
case
WRAP_MODE:
return
"key wrapping"
;
case
UNWRAP_MODE:
return
"key unwrapping"
;
default
:
return
""
;
}
}
/**
* Initializes this cipher with a key.
*
...
...
@@ -1235,6 +1255,12 @@ public class Cipher {
initialized
=
true
;
this
.
opmode
=
opmode
;
if
(!
skipDebug
&&
pdebug
!=
null
)
{
pdebug
.
println
(
"Cipher."
+
transformation
+
" "
+
getOpmodeString
(
opmode
)
+
" algorithm from: "
+
this
.
provider
.
getName
());
}
}
/**
...
...
@@ -1372,6 +1398,12 @@ public class Cipher {
initialized
=
true
;
this
.
opmode
=
opmode
;
if
(!
skipDebug
&&
pdebug
!=
null
)
{
pdebug
.
println
(
"Cipher."
+
transformation
+
" "
+
getOpmodeString
(
opmode
)
+
" algorithm from: "
+
this
.
provider
.
getName
());
}
}
/**
...
...
@@ -1509,6 +1541,12 @@ public class Cipher {
initialized
=
true
;
this
.
opmode
=
opmode
;
if
(!
skipDebug
&&
pdebug
!=
null
)
{
pdebug
.
println
(
"Cipher."
+
transformation
+
" "
+
getOpmodeString
(
opmode
)
+
" algorithm from: "
+
this
.
provider
.
getName
());
}
}
/**
...
...
@@ -1693,6 +1731,12 @@ public class Cipher {
initialized
=
true
;
this
.
opmode
=
opmode
;
if
(!
skipDebug
&&
pdebug
!=
null
)
{
pdebug
.
println
(
"Cipher."
+
transformation
+
" "
+
getOpmodeString
(
opmode
)
+
" algorithm from: "
+
this
.
provider
.
getName
());
}
}
/**
...
...
src/share/classes/javax/crypto/KeyAgreement.java
浏览文件 @
8255fd7b
/*
* Copyright (c) 1997, 201
3
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1997, 201
4
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
...
...
@@ -78,6 +78,11 @@ public class KeyAgreement {
private
static
final
Debug
debug
=
Debug
.
getInstance
(
"jca"
,
"KeyAgreement"
);
private
static
final
Debug
pdebug
=
Debug
.
getInstance
(
"provider"
,
"Provider"
);
private
static
final
boolean
skipDebug
=
Debug
.
isOn
(
"engine="
)
&&
!
Debug
.
isOn
(
"keyagreement"
);
// The provider
private
Provider
provider
;
...
...
@@ -468,6 +473,11 @@ public class KeyAgreement {
throw
new
InvalidKeyException
(
e
);
}
}
if
(!
skipDebug
&&
pdebug
!=
null
)
{
pdebug
.
println
(
"KeyAgreement."
+
algorithm
+
" algorithm from: "
+
this
.
provider
.
getName
());
}
}
/**
...
...
@@ -524,6 +534,11 @@ public class KeyAgreement {
}
else
{
chooseProvider
(
I_PARAMS
,
key
,
params
,
random
);
}
if
(!
skipDebug
&&
pdebug
!=
null
)
{
pdebug
.
println
(
"KeyAgreement."
+
algorithm
+
" algorithm from: "
+
this
.
provider
.
getName
());
}
}
/**
...
...
src/share/classes/javax/crypto/KeyGenerator.java
浏览文件 @
8255fd7b
/*
* Copyright (c) 1997, 201
3
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1997, 201
4
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
...
...
@@ -33,6 +33,7 @@ import java.security.spec.*;
import
sun.security.jca.*
;
import
sun.security.jca.GetInstance.Instance
;
import
sun.security.util.Debug
;
/**
* This class provides the functionality of a secret (symmetric) key generator.
...
...
@@ -108,6 +109,11 @@ import sun.security.jca.GetInstance.Instance;
public
class
KeyGenerator
{
private
static
final
Debug
pdebug
=
Debug
.
getInstance
(
"provider"
,
"Provider"
);
private
static
final
boolean
skipDebug
=
Debug
.
isOn
(
"engine="
)
&&
!
Debug
.
isOn
(
"keygenerator"
);
// see java.security.KeyPairGenerator for failover notes
private
final
static
int
I_NONE
=
1
;
...
...
@@ -145,6 +151,11 @@ public class KeyGenerator {
this
.
spi
=
keyGenSpi
;
this
.
provider
=
provider
;
this
.
algorithm
=
algorithm
;
if
(!
skipDebug
&&
pdebug
!=
null
)
{
pdebug
.
println
(
"KeyGenerator."
+
algorithm
+
" algorithm from: "
+
this
.
provider
.
getName
());
}
}
private
KeyGenerator
(
String
algorithm
)
throws
NoSuchAlgorithmException
{
...
...
@@ -158,6 +169,11 @@ public class KeyGenerator {
throw
new
NoSuchAlgorithmException
(
algorithm
+
" KeyGenerator not available"
);
}
if
(!
skipDebug
&&
pdebug
!=
null
)
{
pdebug
.
println
(
"KeyGenerator."
+
algorithm
+
" algorithm from: "
+
this
.
provider
.
getName
());
}
}
/**
...
...
src/share/classes/javax/crypto/Mac.java
浏览文件 @
8255fd7b
/*
* Copyright (c) 1998, 201
1
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1998, 201
4
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
...
...
@@ -77,6 +77,11 @@ public class Mac implements Cloneable {
private
static
final
Debug
debug
=
Debug
.
getInstance
(
"jca"
,
"Mac"
);
private
static
final
Debug
pdebug
=
Debug
.
getInstance
(
"provider"
,
"Provider"
);
private
static
final
boolean
skipDebug
=
Debug
.
isOn
(
"engine="
)
&&
!
Debug
.
isOn
(
"mac"
);
// The provider
private
Provider
provider
;
...
...
@@ -413,6 +418,11 @@ public class Mac implements Cloneable {
throw
new
InvalidKeyException
(
"init() failed"
,
e
);
}
initialized
=
true
;
if
(!
skipDebug
&&
pdebug
!=
null
)
{
pdebug
.
println
(
"Mac."
+
algorithm
+
" algorithm from: "
+
this
.
provider
.
getName
());
}
}
/**
...
...
@@ -435,6 +445,11 @@ public class Mac implements Cloneable {
chooseProvider
(
key
,
params
);
}
initialized
=
true
;
if
(!
skipDebug
&&
pdebug
!=
null
)
{
pdebug
.
println
(
"Mac."
+
algorithm
+
" algorithm from: "
+
this
.
provider
.
getName
());
}
}
/**
...
...
src/share/classes/sun/awt/datatransfer/DataTransferer.java
浏览文件 @
8255fd7b
...
...
@@ -2895,6 +2895,14 @@ search:
return
comp
;
}
if
(
flavor1
.
isFlavorTextType
())
{
return
1
;
}
if
(
flavor2
.
isFlavorTextType
())
{
return
-
1
;
}
// Next, look for application/x-java-* types. Prefer unknown
// MIME types because if the user provides his own data flavor,
// it will likely be the most descriptive one.
...
...
src/share/classes/sun/security/jgss/spnego/SpNegoContext.java
浏览文件 @
8255fd7b
...
...
@@ -523,13 +523,6 @@ public class SpNegoContext implements GSSContextSpi {
valid
=
false
;
}
// get the mechanism token
byte
[]
mechToken
=
initToken
.
getMechToken
();
if
(
mechToken
==
null
)
{
throw
new
GSSException
(
GSSException
.
FAILURE
,
-
1
,
"mechToken is missing"
);
}
/*
* Select the best match between the list of mechs
* that the initiator requested and the list that
...
...
@@ -545,7 +538,19 @@ public class SpNegoContext implements GSSContextSpi {
internal_mech
=
mech_wanted
;
// get the token for mechanism
byte
[]
accept_token
=
GSS_acceptSecContext
(
mechToken
);
byte
[]
accept_token
;
if
(
mechList
[
0
].
equals
(
mech_wanted
))
{
// get the mechanism token
byte
[]
mechToken
=
initToken
.
getMechToken
();
if
(
mechToken
==
null
)
{
throw
new
GSSException
(
GSSException
.
FAILURE
,
-
1
,
"mechToken is missing"
);
}
accept_token
=
GSS_acceptSecContext
(
mechToken
);
}
else
{
accept_token
=
null
;
}
// verify MIC
if
(!
GSSUtil
.
useMSInterop
()
&&
valid
)
{
...
...
@@ -594,9 +599,27 @@ public class SpNegoContext implements GSSContextSpi {
retVal
=
targToken
.
getEncoded
();
}
else
if
(
state
==
STATE_IN_PROCESS
)
{
// read data
byte
[]
token
=
new
byte
[
is
.
available
()];
SpNegoToken
.
readFully
(
is
,
token
);
if
(
DEBUG
)
{
System
.
out
.
println
(
"SpNegoContext.acceptSecContext: "
+
"receiving token = "
+
SpNegoToken
.
getHexBytes
(
token
));
}
// read the SPNEGO token
// token will be validated when parsing
NegTokenTarg
inputToken
=
new
NegTokenTarg
(
token
);
if
(
DEBUG
)
{
System
.
out
.
println
(
"SpNegoContext.acceptSecContext: "
+
"received token of type = "
+
SpNegoToken
.
getTokenName
(
inputToken
.
getType
()));
}
// read the token
byte
[]
client_token
=
new
byte
[
is
.
available
()];
SpNegoToken
.
readFully
(
is
,
client_token
);
byte
[]
client_token
=
inputToken
.
getResponseToken
();
byte
[]
accept_token
=
GSS_acceptSecContext
(
client_token
);
if
(
accept_token
==
null
)
{
valid
=
false
;
...
...
@@ -1055,7 +1078,7 @@ public class SpNegoContext implements GSSContextSpi {
* This is only valid on the acceptor side of the context.
* @return GSSCredentialSpi object for the delegated credential
* @exception GSSException
* @see GSSContext#get
DelegCred
State
* @see GSSContext#get
CredDeleg
State
*/
public
final
GSSCredentialSpi
getDelegCred
()
throws
GSSException
{
if
(
state
!=
STATE_IN_PROCESS
&&
state
!=
STATE_DONE
)
...
...
src/share/classes/sun/security/tools/keytool/Resources.java
浏览文件 @
8255fd7b
...
...
@@ -336,7 +336,7 @@ public class Resources extends java.util.ListResourceBundle {
{
"New.prompt."
,
"New {0}: "
},
{
"Passwords.must.differ"
,
"Passwords must differ"
},
{
"Re.enter.new.prompt."
,
"Re-enter new {0}: "
},
{
"Re.enter.pass
p
word."
,
"Re-enter password: "
},
{
"Re.enter.password."
,
"Re-enter password: "
},
{
"Re.enter.new.password."
,
"Re-enter new password: "
},
{
"They.don.t.match.Try.again"
,
"They don't match. Try again"
},
{
"Enter.prompt.alias.name."
,
"Enter {0} alias name: "
},
...
...
src/share/classes/sun/security/tools/keytool/Resources_de.java
浏览文件 @
8255fd7b
...
...
@@ -336,7 +336,7 @@ public class Resources_de extends java.util.ListResourceBundle {
{
"New.prompt."
,
"Neues {0}: "
},
{
"Passwords.must.differ"
,
"Kennw\u00F6rter m\u00FCssen sich unterscheiden"
},
{
"Re.enter.new.prompt."
,
"Neues {0} erneut eingeben: "
},
{
"Re.enter.pass
p
word."
,
"Geben Sie das Kennwort erneut ein: "
},
{
"Re.enter.password."
,
"Geben Sie das Kennwort erneut ein: "
},
{
"Re.enter.new.password."
,
"Neues Kennwort erneut eingeben: "
},
{
"They.don.t.match.Try.again"
,
"Keine \u00DCbereinstimmung. Wiederholen Sie den Vorgang"
},
{
"Enter.prompt.alias.name."
,
"{0}-Aliasnamen eingeben: "
},
...
...
src/share/classes/sun/security/tools/keytool/Resources_es.java
浏览文件 @
8255fd7b
/*
* Copyright (c) 2000, 201
3
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2000, 201
4
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
...
...
@@ -336,7 +336,7 @@ public class Resources_es extends java.util.ListResourceBundle {
{
"New.prompt."
,
"Nuevo {0}: "
},
{
"Passwords.must.differ"
,
"Las contrase\u00F1as deben ser distintas"
},
{
"Re.enter.new.prompt."
,
"Vuelva a escribir el nuevo {0}: "
},
{
"Re.enter.pass
p
word."
,
"Vuelva a introducir la contrase\u00F1a: "
},
{
"Re.enter.password."
,
"Vuelva a introducir la contrase\u00F1a: "
},
{
"Re.enter.new.password."
,
"Volver a escribir la contrase\u00F1a nueva: "
},
{
"They.don.t.match.Try.again"
,
"No coinciden. Int\u00E9ntelo de nuevo"
},
{
"Enter.prompt.alias.name."
,
"Escriba el nombre de alias de {0}: "
},
...
...
src/share/classes/sun/security/tools/keytool/Resources_fr.java
浏览文件 @
8255fd7b
/*
* Copyright (c) 2000, 201
3
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2000, 201
4
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
...
...
@@ -336,7 +336,7 @@ public class Resources_fr extends java.util.ListResourceBundle {
{
"New.prompt."
,
"Nouveau {0} : "
},
{
"Passwords.must.differ"
,
"Les mots de passe doivent diff\u00E9rer"
},
{
"Re.enter.new.prompt."
,
"Indiquez encore le nouveau {0} : "
},
{
"Re.enter.pass
p
word."
,
"R\u00E9p\u00E9tez le mot de passe : "
},
{
"Re.enter.password."
,
"R\u00E9p\u00E9tez le mot de passe : "
},
{
"Re.enter.new.password."
,
"Ressaisissez le nouveau mot de passe : "
},
{
"They.don.t.match.Try.again"
,
"Ils sont diff\u00E9rents. R\u00E9essayez."
},
{
"Enter.prompt.alias.name."
,
"Indiquez le nom d''alias {0} : "
},
...
...
src/share/classes/sun/security/tools/keytool/Resources_it.java
浏览文件 @
8255fd7b
/*
* Copyright (c) 2000, 201
3
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2000, 201
4
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
...
...
@@ -336,7 +336,7 @@ public class Resources_it extends java.util.ListResourceBundle {
{
"New.prompt."
,
"Nuova {0}: "
},
{
"Passwords.must.differ"
,
"Le password non devono coincidere"
},
{
"Re.enter.new.prompt."
,
"Reimmettere un nuovo valore per {0}: "
},
{
"Re.enter.pass
p
word."
,
"Reimmettere la password: "
},
{
"Re.enter.password."
,
"Reimmettere la password: "
},
{
"Re.enter.new.password."
,
"Immettere nuovamente la nuova password: "
},
{
"They.don.t.match.Try.again"
,
"Non corrispondono. Riprovare."
},
{
"Enter.prompt.alias.name."
,
"Immettere nome alias {0}: "
},
...
...
src/share/classes/sun/security/tools/keytool/Resources_ja.java
浏览文件 @
8255fd7b
...
...
@@ -248,7 +248,7 @@ public class Resources_ja extends java.util.ListResourceBundle {
"\u65E2\u5B58\u306E\u30A8\u30F3\u30C8\u30EA\u306E\u5225\u540D{0}\u304C\u5B58\u5728\u3057\u3066\u3044\u307E\u3059\u3002\u4E0A\u66F8\u304D\u3057\u307E\u3059\u304B\u3002[\u3044\u3044\u3048]: "
},
{
"Too.many.failures.try.later"
,
"\u969C\u5BB3\u304C\u591A\u3059\u304E\u307E\u3059 - \u5F8C\u3067\u5B9F\u884C\u3057\u3066\u304F\u3060\u3055\u3044"
},
{
"Certification.request.stored.in.file.filename."
,
"\u8A
3C\u660E\u66F8
\u30EA\u30AF\u30A8\u30B9\u30C8\u304C\u30D5\u30A1\u30A4\u30EB<{0}>\u306B\u4FDD\u5B58\u3055\u308C\u307E\u3057\u305F"
},
"\u8A
8D\u8A3C
\u30EA\u30AF\u30A8\u30B9\u30C8\u304C\u30D5\u30A1\u30A4\u30EB<{0}>\u306B\u4FDD\u5B58\u3055\u308C\u307E\u3057\u305F"
},
{
"Submit.this.to.your.CA"
,
"\u3053\u308C\u3092CA\u306B\u63D0\u51FA\u3057\u3066\u304F\u3060\u3055\u3044"
},
{
"if.alias.not.specified.destalias.and.srckeypass.must.not.be.specified"
,
"\u5225\u540D\u3092\u6307\u5B9A\u3057\u306A\u3044\u5834\u5408\u3001\u51FA\u529B\u5148\u30AD\u30FC\u30B9\u30C8\u30A2\u306E\u5225\u540D\u304A\u3088\u3073\u30BD\u30FC\u30B9\u30FB\u30AD\u30FC\u30B9\u30C8\u30A2\u306E\u30D1\u30B9\u30EF\u30FC\u30C9\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093"
},
...
...
@@ -336,7 +336,7 @@ public class Resources_ja extends java.util.ListResourceBundle {
{
"New.prompt."
,
"\u65B0\u898F{0}: "
},
{
"Passwords.must.differ"
,
"\u30D1\u30B9\u30EF\u30FC\u30C9\u306F\u7570\u306A\u3063\u3066\u3044\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059"
},
{
"Re.enter.new.prompt."
,
"\u65B0\u898F{0}\u3092\u518D\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044: "
},
{
"Re.enter.pass
p
word."
,
"\u30D1\u30B9\u30EF\u30FC\u30C9\u3092\u518D\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044: "
},
{
"Re.enter.password."
,
"\u30D1\u30B9\u30EF\u30FC\u30C9\u3092\u518D\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044: "
},
{
"Re.enter.new.password."
,
"\u65B0\u898F\u30D1\u30B9\u30EF\u30FC\u30C9\u3092\u518D\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044: "
},
{
"They.don.t.match.Try.again"
,
"\u4E00\u81F4\u3057\u307E\u305B\u3093\u3002\u3082\u3046\u4E00\u5EA6\u5B9F\u884C\u3057\u3066\u304F\u3060\u3055\u3044"
},
{
"Enter.prompt.alias.name."
,
"{0}\u306E\u5225\u540D\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044: "
},
...
...
src/share/classes/sun/security/tools/keytool/Resources_ko.java
浏览文件 @
8255fd7b
/*
* Copyright (c) 2000, 201
3
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2000, 201
4
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
...
...
@@ -336,7 +336,7 @@ public class Resources_ko extends java.util.ListResourceBundle {
{
"New.prompt."
,
"\uC0C8 {0}: "
},
{
"Passwords.must.differ"
,
"\uBE44\uBC00\uBC88\uD638\uB294 \uB2EC\uB77C\uC57C \uD569\uB2C8\uB2E4."
},
{
"Re.enter.new.prompt."
,
"\uC0C8 {0} \uB2E4\uC2DC \uC785\uB825: "
},
{
"Re.enter.pass
p
word."
,
"\uBE44\uBC00\uBC88\uD638 \uB2E4\uC2DC \uC785\uB825: "
},
{
"Re.enter.password."
,
"\uBE44\uBC00\uBC88\uD638 \uB2E4\uC2DC \uC785\uB825: "
},
{
"Re.enter.new.password."
,
"\uC0C8 \uBE44\uBC00\uBC88\uD638 \uB2E4\uC2DC \uC785\uB825: "
},
{
"They.don.t.match.Try.again"
,
"\uC77C\uCE58\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4. \uB2E4\uC2DC \uC2DC\uB3C4\uD558\uC2ED\uC2DC\uC624."
},
{
"Enter.prompt.alias.name."
,
"{0} \uBCC4\uCE6D \uC774\uB984 \uC785\uB825: "
},
...
...
src/share/classes/sun/security/tools/keytool/Resources_pt_BR.java
浏览文件 @
8255fd7b
...
...
@@ -336,7 +336,7 @@ public class Resources_pt_BR extends java.util.ListResourceBundle {
{
"New.prompt."
,
"Nova {0}: "
},
{
"Passwords.must.differ"
,
"As senhas devem ser diferentes"
},
{
"Re.enter.new.prompt."
,
"Informe novamente a nova {0}: "
},
{
"Re.enter.pass
p
word."
,
"Redigite a senha: "
},
{
"Re.enter.password."
,
"Redigite a senha: "
},
{
"Re.enter.new.password."
,
"Informe novamente a nova senha: "
},
{
"They.don.t.match.Try.again"
,
"Elas n\u00E3o correspondem. Tente novamente"
},
{
"Enter.prompt.alias.name."
,
"Informe o nome do alias {0}: "
},
...
...
src/share/classes/sun/security/tools/keytool/Resources_sv.java
浏览文件 @
8255fd7b
/*
* Copyright (c) 2000, 201
3
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2000, 201
4
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
...
...
@@ -336,7 +336,7 @@ public class Resources_sv extends java.util.ListResourceBundle {
{
"New.prompt."
,
"Nytt {0}: "
},
{
"Passwords.must.differ"
,
"L\u00F6senorden m\u00E5ste vara olika"
},
{
"Re.enter.new.prompt."
,
"Ange nytt {0} igen: "
},
{
"Re.enter.pass
p
word."
,
"Ange l\u00F6senord igen: "
},
{
"Re.enter.password."
,
"Ange l\u00F6senord igen: "
},
{
"Re.enter.new.password."
,
"Ange det nya l\u00F6senordet igen: "
},
{
"They.don.t.match.Try.again"
,
"De matchar inte. F\u00F6rs\u00F6k igen"
},
{
"Enter.prompt.alias.name."
,
"Ange aliasnamn f\u00F6r {0}: "
},
...
...
src/share/classes/sun/security/tools/keytool/Resources_zh_CN.java
浏览文件 @
8255fd7b
/*
* Copyright (c) 2000, 201
3
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2000, 201
4
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
...
...
@@ -336,7 +336,7 @@ public class Resources_zh_CN extends java.util.ListResourceBundle {
{
"New.prompt."
,
"\u65B0{0}: "
},
{
"Passwords.must.differ"
,
"\u53E3\u4EE4\u4E0D\u80FD\u76F8\u540C"
},
{
"Re.enter.new.prompt."
,
"\u91CD\u65B0\u8F93\u5165\u65B0{0}: "
},
{
"Re.enter.pass
p
word."
,
"\u518D\u6B21\u8F93\u5165\u53E3\u4EE4: "
},
{
"Re.enter.password."
,
"\u518D\u6B21\u8F93\u5165\u53E3\u4EE4: "
},
{
"Re.enter.new.password."
,
"\u518D\u6B21\u8F93\u5165\u65B0\u53E3\u4EE4: "
},
{
"They.don.t.match.Try.again"
,
"\u5B83\u4EEC\u4E0D\u5339\u914D\u3002\u8BF7\u91CD\u8BD5"
},
{
"Enter.prompt.alias.name."
,
"\u8F93\u5165{0}\u522B\u540D: "
},
...
...
src/share/classes/sun/security/tools/keytool/Resources_zh_TW.java
浏览文件 @
8255fd7b
/*
* Copyright (c) 2000, 201
3
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2000, 201
4
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
...
...
@@ -336,7 +336,7 @@ public class Resources_zh_TW extends java.util.ListResourceBundle {
{
"New.prompt."
,
"\u65B0 {0}: "
},
{
"Passwords.must.differ"
,
"\u5FC5\u9808\u662F\u4E0D\u540C\u7684\u5BC6\u78BC"
},
{
"Re.enter.new.prompt."
,
"\u91CD\u65B0\u8F38\u5165\u65B0 {0}: "
},
{
"Re.enter.pass
p
word."
,
"\u91CD\u65B0\u8F38\u5165\u5BC6\u78BC:"
},
{
"Re.enter.password."
,
"\u91CD\u65B0\u8F38\u5165\u5BC6\u78BC:"
},
{
"Re.enter.new.password."
,
"\u91CD\u65B0\u8F38\u5165\u65B0\u5BC6\u78BC: "
},
{
"They.don.t.match.Try.again"
,
"\u5B83\u5011\u4E0D\u76F8\u7B26\u3002\u8ACB\u91CD\u8A66"
},
{
"Enter.prompt.alias.name."
,
"\u8F38\u5165 {0} \u5225\u540D\u540D\u7A31: "
},
...
...
src/share/classes/sun/security/util/Debug.java
浏览文件 @
8255fd7b
/*
* Copyright (c) 1998, 201
2
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1998, 201
4
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
...
...
@@ -104,7 +104,15 @@ public class Debug {
System
.
err
.
println
(
"codebase=<URL>"
);
System
.
err
.
println
(
" only dump output if specified codebase"
);
System
.
err
.
println
(
" is being checked"
);
System
.
err
.
println
();
System
.
err
.
println
(
"The following can be used with provider:"
);
System
.
err
.
println
();
System
.
err
.
println
(
"engine=<engines>"
);
System
.
err
.
println
(
" only dump output for the specified list"
);
System
.
err
.
println
(
" of JCA engines. Supported values:"
);
System
.
err
.
println
(
" Cipher, KeyAgreement, KeyGenerator,"
);
System
.
err
.
println
(
" KeyPairGenerator, KeyStore, Mac,"
);
System
.
err
.
println
(
" MessageDigest, SecureRandom, Signature."
);
System
.
err
.
println
();
System
.
err
.
println
(
"Note: Separate multiple options with a comma"
);
System
.
exit
(
0
);
...
...
src/share/classes/sun/text/resources/FormatData.java
浏览文件 @
8255fd7b
/*
* Copyright (c) 1996, 201
3
, 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.
*
* This code is free software; you can redistribute it and/or modify it
...
...
@@ -154,18 +154,18 @@ public class FormatData extends ParallelListResourceBundle {
},
{
"MonthNarrows"
,
new
String
[]
{
"
J
"
,
"
F
"
,
"
M
"
,
"
A
"
,
"
M
"
,
"
J
"
,
"
J
"
,
"
A
"
,
"
S
"
,
"
O
"
,
"
N
"
,
"
D
"
,
"
1
"
,
"
2
"
,
"
3
"
,
"
4
"
,
"
5
"
,
"
6
"
,
"
7
"
,
"
8
"
,
"
9
"
,
"
10
"
,
"
11
"
,
"
12
"
,
""
,
}
},
...
...
src/share/classes/sun/text/resources/en/FormatData_en.java
浏览文件 @
8255fd7b
/*
* Copyright (c) 1997, 201
3
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1997, 201
4
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
...
...
@@ -53,6 +53,23 @@ public class FormatData_en extends ParallelListResourceBundle {
// define this method as follows:
// return new Object[][] { };
return
new
Object
[][]
{
{
"MonthNarrows"
,
new
String
[]
{
"J"
,
"F"
,
"M"
,
"A"
,
"M"
,
"J"
,
"J"
,
"A"
,
"S"
,
"O"
,
"N"
,
"D"
,
""
,
}
},
{
"NumberPatterns"
,
new
String
[]
{
"#,##0.###;-#,##0.###"
,
// decimal pattern
...
...
src/share/classes/sun/tools/jconsole/resources/messages_ja.properties
浏览文件 @
8255fd7b
...
...
@@ -103,7 +103,7 @@ HELP_ABOUT_DIALOG_JCONSOLE_VERSION=JConsole\u30D0\u30FC\u30B8\u30E7\u30F3:<br>{0
HELP_ABOUT_DIALOG_JAVA_VERSION
=
Java VM
\u
30D0
\u
30FC
\u
30B8
\u
30E7
\u
30F3:<br>{0}
HELP_ABOUT_DIALOG_MASTHEAD_ACCESSIBLE_NAME
=
\u
30DE
\u
30B9
\u
30C8
\u
30D8
\u
30C3
\u
30C9
\u
56F3
\u
5F62
HELP_ABOUT_DIALOG_MASTHEAD_TITLE
=
JConsole
\u
306B
\u3064\u3044\u3066
HELP_ABOUT_DIALOG_TITLE
=
JConsole:
\u
8A73
\u
7D30
HELP_ABOUT_DIALOG_TITLE
=
JConsole:
\u
60C5
\u5831
HELP_ABOUT_DIALOG_USER_GUIDE_LINK_URL
=
http://docs.oracle.com/javase/{0}/docs/technotes/guides/management/jconsole.html
HELP_MENU_ABOUT_TITLE
=
JConsole
\u
306B
\u3064\u3044\u3066
(&A)
HELP_MENU_USER_GUIDE_TITLE
=
\u
30AA
\u
30F3
\u
30E9
\u
30A4
\u
30F3
\u
30FB
\u
30E6
\u
30FC
\u
30B6
\u
30FC
\u
30FB
\u
30AC
\u
30A4
\u
30C9(&U)
...
...
src/share/native/sun/security/ec/ECC_JNI.cpp
浏览文件 @
8255fd7b
...
...
@@ -41,7 +41,9 @@ extern "C" {
void
ThrowException
(
JNIEnv
*
env
,
const
char
*
exceptionName
)
{
jclass
exceptionClazz
=
env
->
FindClass
(
exceptionName
);
env
->
ThrowNew
(
exceptionClazz
,
NULL
);
if
(
exceptionClazz
!=
NULL
)
{
env
->
ThrowNew
(
exceptionClazz
,
NULL
);
}
}
/*
...
...
@@ -80,7 +82,6 @@ jbyteArray getEncodedBytes(JNIEnv *env, SECItem *hSECItem)
return
jEncodedBytes
;
}
/*
* Class: sun_security_ec_ECKeyPairGenerator
* Method: generateECKeyPair
...
...
@@ -103,6 +104,9 @@ JNICALL Java_sun_security_ec_ECKeyPairGenerator_generateECKeyPair
params_item
.
len
=
env
->
GetArrayLength
(
encodedParams
);
params_item
.
data
=
(
unsigned
char
*
)
env
->
GetByteArrayElements
(
encodedParams
,
0
);
if
(
params_item
.
data
==
NULL
)
{
goto
cleanup
;
}
// Fill a new ECParams using the supplied OID
if
(
EC_DecodeParams
(
&
params_item
,
&
ecparams
,
0
)
!=
SECSuccess
)
{
...
...
@@ -170,6 +174,7 @@ cleanup:
SECITEM_FreeItem
(
&
privKey
->
publicValue
,
B_FALSE
);
free
(
privKey
);
}
if
(
pSeedBuffer
)
{
delete
[]
pSeedBuffer
;
}
...
...
@@ -206,6 +211,7 @@ JNICALL Java_sun_security_ec_ECDSASignature_signDigest
digest_item
.
len
=
jDigestLength
;
ECPrivateKey
privKey
;
privKey
.
privateValue
.
data
=
NULL
;
// Initialize the ECParams struct
ECParams
*
ecparams
=
NULL
;
...
...
@@ -213,6 +219,9 @@ JNICALL Java_sun_security_ec_ECDSASignature_signDigest
params_item
.
len
=
env
->
GetArrayLength
(
encodedParams
);
params_item
.
data
=
(
unsigned
char
*
)
env
->
GetByteArrayElements
(
encodedParams
,
0
);
if
(
params_item
.
data
==
NULL
)
{
goto
cleanup
;
}
// Fill a new ECParams using the supplied OID
if
(
EC_DecodeParams
(
&
params_item
,
&
ecparams
,
0
)
!=
SECSuccess
)
{
...
...
@@ -226,6 +235,9 @@ JNICALL Java_sun_security_ec_ECDSASignature_signDigest
privKey
.
privateValue
.
len
=
env
->
GetArrayLength
(
privateKey
);
privKey
.
privateValue
.
data
=
(
unsigned
char
*
)
env
->
GetByteArrayElements
(
privateKey
,
0
);
if
(
privKey
.
privateValue
.
data
==
NULL
)
{
goto
cleanup
;
}
// Prepare a buffer for the signature (twice the key length)
pSignedDigestBuffer
=
new
jbyte
[
ecparams
->
order
.
len
*
2
];
...
...
@@ -245,6 +257,9 @@ JNICALL Java_sun_security_ec_ECDSASignature_signDigest
// Create new byte array
temp
=
env
->
NewByteArray
(
signature_item
.
len
);
if
(
temp
==
NULL
)
{
goto
cleanup
;
}
// Copy data from native buffer
env
->
SetByteArrayRegion
(
temp
,
0
,
signature_item
.
len
,
pSignedDigestBuffer
);
...
...
@@ -317,6 +332,9 @@ JNICALL Java_sun_security_ec_ECDSASignature_verifySignedDigest
params_item
.
len
=
env
->
GetArrayLength
(
encodedParams
);
params_item
.
data
=
(
unsigned
char
*
)
env
->
GetByteArrayElements
(
encodedParams
,
0
);
if
(
params_item
.
data
==
NULL
)
{
goto
cleanup
;
}
// Fill a new ECParams using the supplied OID
if
(
EC_DecodeParams
(
&
params_item
,
&
ecparams
,
0
)
!=
SECSuccess
)
{
...
...
@@ -369,25 +387,37 @@ JNICALL Java_sun_security_ec_ECDHKeyAgreement_deriveKey
(
JNIEnv
*
env
,
jclass
clazz
,
jbyteArray
privateKey
,
jbyteArray
publicKey
,
jbyteArray
encodedParams
)
{
jbyteArray
jSecret
=
NULL
;
ECParams
*
ecparams
=
NULL
;
SECItem
privateValue_item
;
privateValue_item
.
data
=
NULL
;
SECItem
publicValue_item
;
publicValue_item
.
data
=
NULL
;
SECKEYECParams
params_item
;
params_item
.
data
=
NULL
;
// Extract private key value
SECItem
privateValue_item
;
privateValue_item
.
len
=
env
->
GetArrayLength
(
privateKey
);
privateValue_item
.
data
=
(
unsigned
char
*
)
env
->
GetByteArrayElements
(
privateKey
,
0
);
if
(
privateValue_item
.
data
==
NULL
)
{
goto
cleanup
;
}
// Extract public key value
SECItem
publicValue_item
;
publicValue_item
.
len
=
env
->
GetArrayLength
(
publicKey
);
publicValue_item
.
data
=
(
unsigned
char
*
)
env
->
GetByteArrayElements
(
publicKey
,
0
);
if
(
publicValue_item
.
data
==
NULL
)
{
goto
cleanup
;
}
// Initialize the ECParams struct
ECParams
*
ecparams
=
NULL
;
SECKEYECParams
params_item
;
params_item
.
len
=
env
->
GetArrayLength
(
encodedParams
);
params_item
.
data
=
(
unsigned
char
*
)
env
->
GetByteArrayElements
(
encodedParams
,
0
);
if
(
params_item
.
data
==
NULL
)
{
goto
cleanup
;
}
// Fill a new ECParams using the supplied OID
if
(
EC_DecodeParams
(
&
params_item
,
&
ecparams
,
0
)
!=
SECSuccess
)
{
...
...
@@ -409,6 +439,9 @@ JNICALL Java_sun_security_ec_ECDHKeyAgreement_deriveKey
// Create new byte array
jSecret
=
env
->
NewByteArray
(
secret_item
.
len
);
if
(
jSecret
==
NULL
)
{
goto
cleanup
;
}
// Copy bytes from the SECItem buffer to a Java byte array
env
->
SetByteArrayRegion
(
jSecret
,
0
,
secret_item
.
len
,
...
...
src/solaris/classes/sun/awt/X11/XRootWindow.java
浏览文件 @
8255fd7b
/*
* Copyright (c) 2003, 20
05
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2003, 20
14
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
...
...
@@ -46,7 +46,8 @@ class XRootWindow extends XBaseWindow {
}
private
XRootWindow
()
{
super
(
new
XCreateWindowParams
(
new
Object
[]
{
DELAYED
,
Boolean
.
TRUE
}));
super
(
new
XCreateWindowParams
(
new
Object
[]
{
DELAYED
,
Boolean
.
TRUE
,
EVENT_MASK
,
XConstants
.
StructureNotifyMask
}));
}
public
void
postInit
(
XCreateWindowParams
params
){
...
...
src/solaris/classes/sun/awt/X11/XToolkit.java
浏览文件 @
8255fd7b
...
...
@@ -2354,9 +2354,7 @@ public final class XToolkit extends UNIXToolkit implements Runnable {
private
static
XEventDispatcher
oops_waiter
;
private
static
boolean
oops_updated
;
private
static
boolean
oops_failed
;
private
XAtom
oops
;
private
static
final
long
WORKAROUND_SLEEP
=
100
;
private
static
boolean
oops_move
;
/**
* @inheritDoc
...
...
@@ -2367,52 +2365,33 @@ public final class XToolkit extends UNIXToolkit implements Runnable {
if
(
oops_waiter
==
null
)
{
oops_waiter
=
new
XEventDispatcher
()
{
public
void
dispatchEvent
(
XEvent
e
)
{
if
(
e
.
get_type
()
==
XConstants
.
SelectionNotify
)
{
XSelectionEvent
pe
=
e
.
get_xselection
();
if
(
pe
.
get_property
()
==
oops
.
getAtom
())
{
oops_updated
=
true
;
awtLockNotifyAll
();
}
else
if
(
pe
.
get_selection
()
==
XAtom
.
get
(
"WM_S0"
).
getAtom
()
&&
pe
.
get_target
()
==
XAtom
.
get
(
"VERSION"
).
getAtom
()
&&
pe
.
get_property
()
==
0
&&
XlibWrapper
.
XGetSelectionOwner
(
getDisplay
(),
XAtom
.
get
(
"WM_S0"
).
getAtom
())
==
0
)
{
// WM forgot to acquire selection or there is no WM
oops_failed
=
true
;
awtLockNotifyAll
();
}
if
(
e
.
get_type
()
==
XConstants
.
ConfigureNotify
)
{
// OOPS ConfigureNotify event catched
oops_updated
=
true
;
awtLockNotifyAll
();
}
}
};
}
if
(
oops
==
null
)
{
oops
=
XAtom
.
get
(
"OOPS"
);
}
awtLock
();
try
{
addEventDispatcher
(
win
.
getWindow
(),
oops_waiter
);
oops_updated
=
false
;
oops_failed
=
false
;
// Wait for selection notify for oops on win
long
event_number
=
getEventNumber
();
XAtom
atom
=
XAtom
.
get
(
"WM_S0"
);
if
(
eventLog
.
isLoggable
(
PlatformLogger
.
Level
.
FINER
))
{
eventLog
.
finer
(
"WM_S0 selection owner {0}"
,
XlibWrapper
.
XGetSelectionOwner
(
getDisplay
(),
atom
.
getAtom
()));
}
XlibWrapper
.
XConvertSelection
(
getDisplay
(),
atom
.
getAtom
(),
XAtom
.
get
(
"VERSION"
).
getAtom
(),
oops
.
getAtom
(),
win
.
getWindow
(),
XConstants
.
CurrentTime
);
// Generate OOPS ConfigureNotify event
XlibWrapper
.
XMoveWindow
(
getDisplay
(),
win
.
getWindow
(),
oops_move
?
0
:
1
,
0
);
// Change win position each time to avoid system optimization
oops_move
=
!
oops_move
;
XSync
();
eventLog
.
finer
(
"
Requested OOPS
"
);
eventLog
.
finer
(
"
Generated OOPS ConfigureNotify event
"
);
long
start
=
System
.
currentTimeMillis
();
while
(!
oops_updated
&&
!
oops_failed
)
{
while
(!
oops_updated
)
{
try
{
// Wait for OOPS ConfigureNotify event
awtLockWait
(
timeout
);
}
catch
(
InterruptedException
e
)
{
throw
new
RuntimeException
(
e
);
...
...
@@ -2423,20 +2402,8 @@ public final class XToolkit extends UNIXToolkit implements Runnable {
throw
new
OperationTimedOut
(
Long
.
toString
(
System
.
currentTimeMillis
()
-
start
));
}
}
if
(
oops_failed
&&
getEventNumber
()
-
event_number
==
1
)
{
// If selection update failed we can simply wait some time
// hoping some events will arrive
awtUnlock
();
eventLog
.
finest
(
"Emergency sleep"
);
try
{
Thread
.
sleep
(
WORKAROUND_SLEEP
);
}
catch
(
InterruptedException
ie
)
{
throw
new
RuntimeException
(
ie
);
}
finally
{
awtLock
();
}
}
return
getEventNumber
()
-
event_number
>
2
;
// Don't take into account OOPS ConfigureNotify event
return
getEventNumber
()
-
event_number
>
1
;
}
finally
{
removeEventDispatcher
(
win
.
getWindow
(),
oops_waiter
);
eventLog
.
finer
(
"Exiting syncNativeQueue"
);
...
...
src/solaris/native/sun/awt/awt_util.h
浏览文件 @
8255fd7b
...
...
@@ -52,6 +52,8 @@
*/
extern
XErrorHandler
current_native_xerror_handler
;
Window
get_xawt_root_shell
(
JNIEnv
*
env
);
#endif
/* !HEADLESS */
#ifndef INTERSECTS
...
...
src/solaris/native/sun/xawt/XlibWrapper.c
浏览文件 @
8255fd7b
...
...
@@ -2011,10 +2011,14 @@ static Bool exitSecondaryLoop = True;
* Toolkit thread to process PropertyNotify or SelectionNotify events.
*/
static
Bool
secondary_loop_event
(
Display
*
dpy
,
XEvent
*
event
,
char
*
arg
)
{
return
(
event
->
type
==
SelectionNotify
||
event
->
type
==
SelectionClear
||
event
->
type
==
PropertyNotify
)
?
True
:
False
;
secondary_loop_event
(
Display
*
dpy
,
XEvent
*
event
,
XPointer
xawt_root_window
)
{
return
(
event
->
type
==
SelectionNotify
||
event
->
type
==
SelectionClear
||
event
->
type
==
PropertyNotify
||
(
event
->
type
==
ConfigureNotify
&&
event
->
xany
.
window
==
*
(
Window
*
)
xawt_root_window
)
)
?
True
:
False
;
}
...
...
@@ -2025,8 +2029,11 @@ Java_sun_awt_X11_XlibWrapper_XNextSecondaryLoopEvent(JNIEnv *env, jclass clazz,
AWT_CHECK_HAVE_LOCK_RETURN
(
JNI_FALSE
);
exitSecondaryLoop
=
False
;
Window
xawt_root_window
=
get_xawt_root_shell
(
env
);
while
(
!
exitSecondaryLoop
)
{
if
(
XCheckIfEvent
((
Display
*
)
jlong_to_ptr
(
display
),
(
XEvent
*
)
jlong_to_ptr
(
ptr
),
secondary_loop_event
,
NULL
))
{
if
(
XCheckIfEvent
((
Display
*
)
jlong_to_ptr
(
display
),
(
XEvent
*
)
jlong_to_ptr
(
ptr
),
secondary_loop_event
,
(
XPointer
)
&
xawt_root_window
))
{
return
JNI_TRUE
;
}
timeout
=
(
timeout
<
AWT_SECONDARY_LOOP_TIMEOUT
)
?
(
timeout
<<
1
)
:
AWT_SECONDARY_LOOP_TIMEOUT
;
...
...
src/windows/native/sun/java2d/windows/GDIRenderer.cpp
浏览文件 @
8255fd7b
...
...
@@ -670,7 +670,7 @@ Java_sun_java2d_windows_GDIRenderer_doFillPoly
if
(
ypoints
!=
NULL
)
{
pPoints
=
TransformPoly
(
xpoints
,
ypoints
,
transx
,
transy
,
tmpPts
,
&
npoints
,
FALSE
,
FALSE
);
env
->
ReleasePrimitiveArrayCritical
(
ypointsarray
,
x
points
,
JNI_ABORT
);
env
->
ReleasePrimitiveArrayCritical
(
ypointsarray
,
y
points
,
JNI_ABORT
);
}
env
->
ReleasePrimitiveArrayCritical
(
xpointsarray
,
xpoints
,
JNI_ABORT
);
}
...
...
src/windows/native/sun/security/mscapi/security.cpp
浏览文件 @
8255fd7b
/*
* Copyright (c) 2005, 201
1
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2005, 201
4
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
...
...
@@ -74,7 +74,10 @@ ALG_ID MapHashAlgorithm(JNIEnv *env, jstring jHashAlgorithm) {
const
char
*
pszHashAlgorithm
=
NULL
;
ALG_ID
algId
=
0
;
pszHashAlgorithm
=
env
->
GetStringUTFChars
(
jHashAlgorithm
,
NULL
);
if
((
pszHashAlgorithm
=
env
->
GetStringUTFChars
(
jHashAlgorithm
,
NULL
))
==
NULL
)
{
return
algId
;
}
if
((
strcmp
(
"SHA"
,
pszHashAlgorithm
)
==
0
)
||
(
strcmp
(
"SHA1"
,
pszHashAlgorithm
)
==
0
)
||
...
...
@@ -179,7 +182,9 @@ JNIEXPORT jbyteArray JNICALL Java_sun_security_mscapi_PRNG_generateSeed
*/
if
(
length
<
0
)
{
length
=
env
->
GetArrayLength
(
seed
);
reseedBytes
=
env
->
GetByteArrayElements
(
seed
,
0
);
if
((
reseedBytes
=
env
->
GetByteArrayElements
(
seed
,
0
))
==
NULL
)
{
__leave
;
}
if
(
::
CryptGenRandom
(
hCryptProv
,
...
...
@@ -211,7 +216,9 @@ JNIEXPORT jbyteArray JNICALL Java_sun_security_mscapi_PRNG_generateSeed
}
else
{
// length == 0
length
=
env
->
GetArrayLength
(
seed
);
seedBytes
=
env
->
GetByteArrayElements
(
seed
,
0
);
if
((
seedBytes
=
env
->
GetByteArrayElements
(
seed
,
0
))
==
NULL
)
{
__leave
;
}
if
(
::
CryptGenRandom
(
hCryptProv
,
...
...
@@ -275,7 +282,10 @@ JNIEXPORT void JNICALL Java_sun_security_mscapi_KeyStore_loadKeysOrCertificateCh
__try
{
// Open a system certificate store.
pszCertStoreName
=
env
->
GetStringUTFChars
(
jCertStoreName
,
NULL
);
if
((
pszCertStoreName
=
env
->
GetStringUTFChars
(
jCertStoreName
,
NULL
))
==
NULL
)
{
__leave
;
}
if
((
hCertStore
=
::
CertOpenSystemStore
(
NULL
,
pszCertStoreName
))
==
NULL
)
{
...
...
@@ -710,7 +720,10 @@ JNIEXPORT jobject JNICALL Java_sun_security_mscapi_RSAKeyPairGenerator_generateR
__try
{
pszKeyContainerName
=
env
->
GetStringUTFChars
(
keyContainerName
,
NULL
);
if
((
pszKeyContainerName
=
env
->
GetStringUTFChars
(
keyContainerName
,
NULL
))
==
NULL
)
{
__leave
;
}
// Acquire a CSP context (create a new key container).
// Prefer a PROV_RSA_AES CSP, when available, due to its support
...
...
@@ -847,7 +860,10 @@ JNIEXPORT void JNICALL Java_sun_security_mscapi_KeyStore_storeCertificate
__try
{
// Open a system certificate store.
pszCertStoreName
=
env
->
GetStringUTFChars
(
jCertStoreName
,
NULL
);
if
((
pszCertStoreName
=
env
->
GetStringUTFChars
(
jCertStoreName
,
NULL
))
==
NULL
)
{
__leave
;
}
if
((
hCertStore
=
::
CertOpenSystemStore
(
NULL
,
pszCertStoreName
))
==
NULL
)
{
ThrowException
(
env
,
KEYSTORE_EXCEPTION
,
GetLastError
());
__leave
;
...
...
@@ -1086,7 +1102,10 @@ JNIEXPORT void JNICALL Java_sun_security_mscapi_KeyStore_removeCertificate
__try
{
// Open a system certificate store.
pszCertStoreName
=
env
->
GetStringUTFChars
(
jCertStoreName
,
NULL
);
if
((
pszCertStoreName
=
env
->
GetStringUTFChars
(
jCertStoreName
,
NULL
))
==
NULL
)
{
__leave
;
}
if
((
hCertStore
=
::
CertOpenSystemStore
(
NULL
,
pszCertStoreName
))
==
NULL
)
{
ThrowException
(
env
,
KEYSTORE_EXCEPTION
,
GetLastError
());
__leave
;
...
...
@@ -1123,7 +1142,10 @@ JNIEXPORT void JNICALL Java_sun_security_mscapi_KeyStore_removeCertificate
cchNameString
);
// Compare the certificate's friendly name with supplied alias name
pszCertAliasName
=
env
->
GetStringUTFChars
(
jCertAliasName
,
NULL
);
if
((
pszCertAliasName
=
env
->
GetStringUTFChars
(
jCertAliasName
,
NULL
))
==
NULL
)
{
__leave
;
}
if
(
strcmp
(
pszCertAliasName
,
pszNameString
)
==
0
)
{
// Only delete the certificate if the alias names matches
...
...
@@ -1181,7 +1203,10 @@ JNIEXPORT void JNICALL Java_sun_security_mscapi_KeyStore_destroyKeyContainer
__try
{
pszKeyContainerName
=
env
->
GetStringUTFChars
(
keyContainerName
,
NULL
);
if
((
pszKeyContainerName
=
env
->
GetStringUTFChars
(
keyContainerName
,
NULL
))
==
NULL
)
{
__leave
;
}
// Destroying the default key container is not permitted
// (because it may contain more one keypair).
...
...
@@ -1234,8 +1259,14 @@ JNIEXPORT jlong JNICALL Java_sun_security_mscapi_RSACipher_findCertificateUsingA
__try
{
pszCertStoreName
=
env
->
GetStringUTFChars
(
jCertStoreName
,
NULL
);
pszCertAliasName
=
env
->
GetStringUTFChars
(
jCertAliasName
,
NULL
);
if
((
pszCertStoreName
=
env
->
GetStringUTFChars
(
jCertStoreName
,
NULL
))
==
NULL
)
{
__leave
;
}
if
((
pszCertAliasName
=
env
->
GetStringUTFChars
(
jCertAliasName
,
NULL
))
==
NULL
)
{
__leave
;
}
// Open a system certificate store.
if
((
hCertStore
=
::
CertOpenSystemStore
(
NULL
,
pszCertStoreName
))
==
NULL
)
{
...
...
@@ -1530,7 +1561,9 @@ JNIEXPORT jbyteArray JNICALL Java_sun_security_mscapi_RSAPublicKey_getExponent
__try
{
jsize
length
=
env
->
GetArrayLength
(
jKeyBlob
);
keyBlob
=
env
->
GetByteArrayElements
(
jKeyBlob
,
0
);
if
((
keyBlob
=
env
->
GetByteArrayElements
(
jKeyBlob
,
0
))
==
NULL
)
{
__leave
;
}
PUBLICKEYSTRUC
*
pPublicKeyStruc
=
(
PUBLICKEYSTRUC
*
)
keyBlob
;
...
...
@@ -1580,7 +1613,9 @@ JNIEXPORT jbyteArray JNICALL Java_sun_security_mscapi_RSAPublicKey_getModulus
__try
{
jsize
length
=
env
->
GetArrayLength
(
jKeyBlob
);
keyBlob
=
env
->
GetByteArrayElements
(
jKeyBlob
,
0
);
if
((
keyBlob
=
env
->
GetByteArrayElements
(
jKeyBlob
,
0
))
==
NULL
)
{
__leave
;
}
PUBLICKEYSTRUC
*
pPublicKeyStruc
=
(
PUBLICKEYSTRUC
*
)
keyBlob
;
...
...
@@ -1632,6 +1667,9 @@ int convertToLittleEndian(JNIEnv *env, jbyteArray source, jbyte* destination,
}
jbyte
*
sourceBytes
=
env
->
GetByteArrayElements
(
source
,
0
);
if
(
sourceBytes
==
NULL
)
{
return
-
1
;
}
// Copy bytes from the end of the source array to the beginning of the
// destination array (until the destination array is full).
...
...
@@ -1740,45 +1778,61 @@ jbyteArray generateKeyBlob(
}
// The length argument must be the smaller of jPublicExponentLength
// and sizeof(pRsaPubKey->pubkey)
convertToLittleEndian
(
env
,
jPublicExponent
,
(
jbyte
*
)
&
(
pRsaPubKey
->
pubexp
),
jPublicExponentLength
);
if
((
jElementLength
=
convertToLittleEndian
(
env
,
jPublicExponent
,
(
jbyte
*
)
&
(
pRsaPubKey
->
pubexp
),
jPublicExponentLength
))
<
0
)
{
__leave
;
}
// Modulus n
jBlobElement
=
(
jbyte
*
)
(
jBlobBytes
+
sizeof
(
PUBLICKEYSTRUC
)
+
sizeof
(
RSAPUBKEY
));
jElementLength
=
convertToLittleEndian
(
env
,
jModulus
,
jBlobElement
,
jKeyByteLength
);
if
((
jElementLength
=
convertToLittleEndian
(
env
,
jModulus
,
jBlobElement
,
jKeyByteLength
))
<
0
)
{
__leave
;
}
if
(
bGeneratePrivateKeyBlob
)
{
// Prime p
jBlobElement
+=
jElementLength
;
jElementLength
=
convertToLittleEndian
(
env
,
jPrimeP
,
jBlobElement
,
jKeyByteLength
/
2
);
if
((
jElementLength
=
convertToLittleEndian
(
env
,
jPrimeP
,
jBlobElement
,
jKeyByteLength
/
2
))
<
0
)
{
__leave
;
}
// Prime q
jBlobElement
+=
jElementLength
;
jElementLength
=
convertToLittleEndian
(
env
,
jPrimeQ
,
jBlobElement
,
jKeyByteLength
/
2
);
if
((
jElementLength
=
convertToLittleEndian
(
env
,
jPrimeQ
,
jBlobElement
,
jKeyByteLength
/
2
))
<
0
)
{
__leave
;
}
// Prime exponent p
jBlobElement
+=
jElementLength
;
jElementLength
=
convertToLittleEndian
(
env
,
jExponentP
,
jBlobElement
,
jKeyByteLength
/
2
);
if
((
jElementLength
=
convertToLittleEndian
(
env
,
jExponentP
,
jBlobElement
,
jKeyByteLength
/
2
))
<
0
)
{
__leave
;
}
// Prime exponent q
jBlobElement
+=
jElementLength
;
jElementLength
=
convertToLittleEndian
(
env
,
jExponentQ
,
jBlobElement
,
jKeyByteLength
/
2
);
if
((
jElementLength
=
convertToLittleEndian
(
env
,
jExponentQ
,
jBlobElement
,
jKeyByteLength
/
2
))
<
0
)
{
__leave
;
}
// CRT coefficient
jBlobElement
+=
jElementLength
;
jElementLength
=
convertToLittleEndian
(
env
,
jCrtCoefficient
,
jBlobElement
,
jKeyByteLength
/
2
);
if
((
jElementLength
=
convertToLittleEndian
(
env
,
jCrtCoefficient
,
jBlobElement
,
jKeyByteLength
/
2
))
<
0
)
{
__leave
;
}
// Private exponent
jBlobElement
+=
jElementLength
;
convertToLittleEndian
(
env
,
jPrivateExponent
,
jBlobElement
,
jKeyByteLength
);
if
((
jElementLength
=
convertToLittleEndian
(
env
,
jPrivateExponent
,
jBlobElement
,
jKeyByteLength
))
<
0
)
{
__leave
;
}
}
jBlob
=
env
->
NewByteArray
(
jBlobLength
);
...
...
@@ -1849,9 +1903,15 @@ JNIEXPORT jobject JNICALL Java_sun_security_mscapi_KeyStore_storePrivateKey
__try
{
pszKeyContainerName
=
env
->
GetStringUTFChars
(
keyContainerName
,
NULL
);
if
((
pszKeyContainerName
=
env
->
GetStringUTFChars
(
keyContainerName
,
NULL
))
==
NULL
)
{
__leave
;
}
dwBlobLen
=
env
->
GetArrayLength
(
keyBlob
);
pbKeyBlob
=
(
BYTE
*
)
env
->
GetByteArrayElements
(
keyBlob
,
0
);
if
((
pbKeyBlob
=
(
BYTE
*
)
env
->
GetByteArrayElements
(
keyBlob
,
0
))
==
NULL
)
{
__leave
;
}
// Acquire a CSP context (create a new key container).
if
(
::
CryptAcquireContext
(
...
...
@@ -1923,7 +1983,10 @@ JNIEXPORT jobject JNICALL Java_sun_security_mscapi_RSASignature_importPublicKey
__try
{
dwBlobLen
=
env
->
GetArrayLength
(
keyBlob
);
pbKeyBlob
=
(
BYTE
*
)
env
->
GetByteArrayElements
(
keyBlob
,
0
);
if
((
pbKeyBlob
=
(
BYTE
*
)
env
->
GetByteArrayElements
(
keyBlob
,
0
))
==
NULL
)
{
__leave
;
}
// Acquire a CSP context (create a new key container).
// Prefer a PROV_RSA_AES CSP, when available, due to its support
...
...
src/windows/native/sun/windows/awt_Component.cpp
浏览文件 @
8255fd7b
...
...
@@ -3955,7 +3955,6 @@ void AwtComponent::SendInputMethodEvent(jint id, jstring text,
DASSERT
(
stringCls
);
CHECK_NULL
(
stringCls
);
clauseReading
=
env
->
NewObjectArray
(
cClause
,
stringCls
,
NULL
);
env
->
DeleteLocalRef
(
stringCls
);
DASSERT
(
clauseReading
);
CHECK_NULL
(
clauseReading
);
for
(
int
i
=
0
;
i
<
cClause
;
i
++
)
env
->
SetObjectArrayElement
(
clauseReading
,
i
,
rgClauseReading
[
i
]);
...
...
src/windows/native/sun/windows/awt_TextArea.cpp
浏览文件 @
8255fd7b
...
...
@@ -47,16 +47,12 @@ struct ReplaceTextStruct {
jfieldID
AwtTextArea
::
scrollbarVisibilityID
;
WNDPROC
AwtTextArea
::
sm_pDefWindowProc
=
NULL
;
/************************************************************************
* AwtTextArea methods
*/
AwtTextArea
::
AwtTextArea
()
{
m_bIgnoreEnChange
=
FALSE
;
m_bCanUndo
=
FALSE
;
m_hEditCtrl
=
NULL
;
m_lHDeltaAccum
=
0
;
m_lVDeltaAccum
=
0
;
}
...
...
@@ -67,10 +63,6 @@ AwtTextArea::~AwtTextArea()
void
AwtTextArea
::
Dispose
()
{
if
(
m_hEditCtrl
!=
NULL
)
{
VERIFY
(
::
DestroyWindow
(
m_hEditCtrl
));
m_hEditCtrl
=
NULL
;
}
AwtTextComponent
::
Dispose
();
}
...
...
@@ -91,10 +83,6 @@ void AwtTextArea::EditSetSel(CHARRANGE &cr) {
}
}
void
AwtTextArea
::
EditGetSel
(
CHARRANGE
&
cr
)
{
SendMessage
(
EM_EXGETSEL
,
0
,
reinterpret_cast
<
LPARAM
>
(
&
cr
));
}
/* Count how many '\n's are there in jStr */
size_t
AwtTextArea
::
CountNewLines
(
JNIEnv
*
env
,
jstring
jStr
,
size_t
maxlen
)
{
...
...
@@ -149,159 +137,6 @@ AwtTextArea::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) {
return
retValue
;
}
/*
* This routine is a window procedure for the subclass of the standard edit control
* used to generate context menu. RichEdit controls don't have built-in context menu.
* To implement this functionality we have to create an invisible edit control and
* forward WM_CONTEXTMENU messages from a RichEdit control to this helper edit control.
* While the edit control context menu is active we intercept the message generated in
* response to particular item selection and forward it back to the RichEdit control.
* (See AwtTextArea::WmContextMenu for more details).
*/
LRESULT
AwtTextArea
::
EditProc
(
HWND
hWnd
,
UINT
message
,
WPARAM
wParam
,
LPARAM
lParam
)
{
static
BOOL
bContextMenuActive
=
FALSE
;
LRESULT
retValue
=
0
;
MsgRouting
mr
=
mrDoDefault
;
DASSERT
(
::
IsWindow
(
::
GetParent
(
hWnd
)));
switch
(
message
)
{
case
WM_UNDO
:
case
WM_CUT
:
case
WM_COPY
:
case
WM_PASTE
:
case
WM_CLEAR
:
case
EM_SETSEL
:
if
(
bContextMenuActive
)
{
::
SendMessage
(
::
GetParent
(
hWnd
),
message
,
wParam
,
lParam
);
mr
=
mrConsume
;
}
break
;
case
WM_CONTEXTMENU
:
bContextMenuActive
=
TRUE
;
break
;
}
if
(
mr
==
mrDoDefault
)
{
DASSERT
(
sm_pDefWindowProc
!=
NULL
);
retValue
=
::
CallWindowProc
(
sm_pDefWindowProc
,
hWnd
,
message
,
wParam
,
lParam
);
}
if
(
message
==
WM_CONTEXTMENU
)
{
bContextMenuActive
=
FALSE
;
}
return
retValue
;
}
MsgRouting
AwtTextArea
::
WmContextMenu
(
HWND
hCtrl
,
UINT
xPos
,
UINT
yPos
)
{
/* Use the system provided edit control class to generate context menu. */
if
(
m_hEditCtrl
==
NULL
)
{
DWORD
dwStyle
=
WS_CHILD
;
DWORD
dwExStyle
=
0
;
m_hEditCtrl
=
::
CreateWindowEx
(
dwExStyle
,
L"EDIT"
,
L"TEXT"
,
dwStyle
,
0
,
0
,
0
,
0
,
GetHWnd
(),
reinterpret_cast
<
HMENU
>
(
static_cast
<
INT_PTR
>
(
CreateControlID
())),
AwtToolkit
::
GetInstance
().
GetModuleHandle
(),
NULL
);
DASSERT
(
m_hEditCtrl
!=
NULL
);
if
(
sm_pDefWindowProc
==
NULL
)
{
sm_pDefWindowProc
=
(
WNDPROC
)
::
GetWindowLongPtr
(
m_hEditCtrl
,
GWLP_WNDPROC
);
}
::
SetLastError
(
0
);
INT_PTR
ret
=
::
SetWindowLongPtr
(
m_hEditCtrl
,
GWLP_WNDPROC
,
(
INT_PTR
)
AwtTextArea
::
EditProc
);
DASSERT
(
ret
!=
0
||
::
GetLastError
()
==
0
);
}
/*
* Tricks on the edit control to ensure that its context menu has
* the correct set of enabled items according to the RichEdit state.
*/
::
SetWindowText
(
m_hEditCtrl
,
TEXT
(
"TEXT"
));
if
(
m_bCanUndo
==
TRUE
&&
SendMessage
(
EM_CANUNDO
))
{
/* Enable 'Undo' item. */
::
SendMessage
(
m_hEditCtrl
,
WM_CHAR
,
'A'
,
0
);
}
{
/*
* Initial selection for the edit control - (0,1).
* This enables 'Cut', 'Copy' and 'Delete' and 'Select All'.
*/
INT
nStart
=
0
;
INT
nEnd
=
1
;
if
(
SendMessage
(
EM_SELECTIONTYPE
)
==
SEL_EMPTY
)
{
/*
* RichEdit selection is empty - clear selection of the edit control.
* This disables 'Cut', 'Copy' and 'Delete'.
*/
nStart
=
-
1
;
nEnd
=
0
;
}
else
{
CHARRANGE
cr
;
EditGetSel
(
cr
);
/* Check if all the text is selected. */
if
(
cr
.
cpMin
==
0
)
{
int
len
=
::
GetWindowTextLength
(
GetHWnd
());
if
(
cr
.
cpMin
==
0
&&
cr
.
cpMax
>=
len
)
{
/*
* All the text is selected in RichEdit - select all the
* text in the edit control. This disables 'Select All'.
*/
nStart
=
0
;
nEnd
=
-
1
;
}
}
}
::
SendMessage
(
m_hEditCtrl
,
EM_SETSEL
,
(
WPARAM
)
nStart
,
(
LPARAM
)
nEnd
);
}
/* Disable 'Paste' item if the RichEdit control is read-only. */
::
SendMessage
(
m_hEditCtrl
,
EM_SETREADONLY
,
GetStyle
()
&
ES_READONLY
?
TRUE
:
FALSE
,
0
);
POINT
p
;
p
.
x
=
xPos
;
p
.
y
=
yPos
;
/*
* If the context menu is requested with SHIFT+F10 or VK_APPS key,
* we position its top left corner to the center of the RichEdit
* client rect.
*/
if
(
p
.
x
==
-
1
&&
p
.
y
==
-
1
)
{
RECT
r
;
VERIFY
(
::
GetClientRect
(
GetHWnd
(),
&
r
));
p
.
x
=
(
r
.
left
+
r
.
right
)
/
2
;
p
.
y
=
(
r
.
top
+
r
.
bottom
)
/
2
;
VERIFY
(
::
ClientToScreen
(
GetHWnd
(),
&
p
));
}
// The context menu steals focus from the proxy.
// So, set the focus-restore flag up.
SetRestoreFocus
(
TRUE
);
::
SendMessage
(
m_hEditCtrl
,
WM_CONTEXTMENU
,
(
WPARAM
)
m_hEditCtrl
,
MAKELPARAM
(
p
.
x
,
p
.
y
));
SetRestoreFocus
(
FALSE
);
return
mrConsume
;
}
MsgRouting
AwtTextArea
::
WmNcHitTest
(
UINT
x
,
UINT
y
,
LRESULT
&
retVal
)
{
...
...
@@ -313,28 +148,9 @@ AwtTextArea::WmNcHitTest(UINT x, UINT y, LRESULT& retVal)
}
MsgRouting
AwtTextArea
::
WmNotify
(
UINT
notifyCode
)
{
if
(
notifyCode
==
EN_CHANGE
)
{
/*
* Ignore notifications if the text hasn't been changed.
* EN_CHANGE sent on character formatting changes as well.
*/
if
(
m_bIgnoreEnChange
==
FALSE
)
{
m_bCanUndo
=
TRUE
;
DoCallback
(
"valueChanged"
,
"()V"
);
}
else
{
m_bCanUndo
=
FALSE
;
}
}
return
mrDoDefault
;
}
MsgRouting
AwtTextArea
::
HandleEvent
(
MSG
*
msg
,
BOOL
synthetic
)
{
MsgRouting
returnVal
;
/*
* RichEdit 1.0 control starts internal message loop if the
* left mouse button is pressed while the cursor is not over
...
...
@@ -486,26 +302,6 @@ AwtTextArea::HandleEvent(MSG *msg, BOOL synthetic)
}
delete
msg
;
return
mrConsume
;
}
else
if
(
msg
->
message
==
WM_RBUTTONUP
||
(
msg
->
message
==
WM_SYSKEYDOWN
&&
msg
->
wParam
==
VK_F10
&&
HIBYTE
(
::
GetKeyState
(
VK_SHIFT
))))
{
POINT
p
;
if
(
msg
->
message
==
WM_RBUTTONUP
)
{
VERIFY
(
::
GetCursorPos
(
&
p
));
}
else
{
p
.
x
=
-
1
;
p
.
y
=
-
1
;
}
if
(
!::
PostMessage
(
GetHWnd
(),
WM_CONTEXTMENU
,
(
WPARAM
)
GetHWnd
(),
MAKELPARAM
(
p
.
x
,
p
.
y
)))
{
JNIEnv
*
env
=
(
JNIEnv
*
)
JNU_GetEnv
(
jvm
,
JNI_VERSION_1_2
);
JNU_ThrowInternalError
(
env
,
"Message not posted, native event queue may be full."
);
env
->
ExceptionDescribe
();
env
->
ExceptionClear
();
}
delete
msg
;
return
mrConsume
;
}
else
if
(
msg
->
message
==
WM_MOUSEWHEEL
)
{
// 4417236: If there is an old version of RichEd32.dll which
// does not provide the mouse wheel scrolling we have to
...
...
@@ -596,15 +392,7 @@ AwtTextArea::HandleEvent(MSG *msg, BOOL synthetic)
// 4417236: end of fix
}
/*
* Store the 'synthetic' parameter so that the WM_PASTE security check
* happens only for synthetic events.
*/
m_synthetic
=
synthetic
;
returnVal
=
AwtComponent
::
HandleEvent
(
msg
,
synthetic
);
m_synthetic
=
FALSE
;
return
returnVal
;
return
AwtTextComponent
::
HandleEvent
(
msg
,
synthetic
);
}
...
...
src/windows/native/sun/windows/awt_TextArea.h
浏览文件 @
8255fd7b
...
...
@@ -57,17 +57,11 @@ public:
static
size_t
GetALength
(
JNIEnv
*
env
,
jstring
jStr
,
size_t
maxlen
);
LRESULT
WindowProc
(
UINT
message
,
WPARAM
wParam
,
LPARAM
lParam
);
static
LRESULT
CALLBACK
EditProc
(
HWND
hWnd
,
UINT
message
,
WPARAM
wParam
,
LPARAM
lParam
);
MsgRouting
WmEnable
(
BOOL
fEnabled
);
MsgRouting
WmContextMenu
(
HWND
hCtrl
,
UINT
xPos
,
UINT
yPos
);
MsgRouting
WmNotify
(
UINT
notifyCode
);
MsgRouting
WmNcHitTest
(
UINT
x
,
UINT
y
,
LRESULT
&
retVal
);
MsgRouting
HandleEvent
(
MSG
*
msg
,
BOOL
synthetic
);
INLINE
void
SetIgnoreEnChange
(
BOOL
b
)
{
m_bIgnoreEnChange
=
b
;
}
virtual
BOOL
InheritsNativeMouseWheelBehavior
();
virtual
void
Reshape
(
int
x
,
int
y
,
int
w
,
int
h
);
...
...
@@ -81,22 +75,7 @@ public:
protected:
void
EditSetSel
(
CHARRANGE
&
cr
);
void
EditGetSel
(
CHARRANGE
&
cr
);
private:
// RichEdit 1.0 control generates EN_CHANGE notifications not only
// on text changes, but also on any character formatting change.
// This flag is true when the latter case is detected.
BOOL
m_bIgnoreEnChange
;
// RichEdit 1.0 control undoes a character formatting change
// if it is the latest. We don't create our own undo buffer,
// but just prohibit undo in case if the latest operation
// is a formatting change.
BOOL
m_bCanUndo
;
HWND
m_hEditCtrl
;
static
WNDPROC
sm_pDefWindowProc
;
LONG
m_lHDeltaAccum
;
LONG
m_lVDeltaAccum
;
...
...
src/windows/native/sun/windows/awt_TextComponent.cpp
浏览文件 @
8255fd7b
...
...
@@ -66,6 +66,8 @@ AwtTextComponent::AwtTextComponent() {
m_lLastPos
=
-
1
;
m_isLFonly
=
FALSE
;
m_EOLchecked
=
FALSE
;
m_hEditCtrl
=
NULL
;
m_bIgnoreEnChange
=
FALSE
;
// javaEventsMask = 0; // accessibility support
}
...
...
@@ -213,6 +215,16 @@ done:
return
c
;
}
void
AwtTextComponent
::
Dispose
()
{
if
(
m_hEditCtrl
!=
NULL
)
{
VERIFY
(
::
DestroyWindow
(
m_hEditCtrl
));
m_hEditCtrl
=
NULL
;
}
AwtComponent
::
Dispose
();
}
LRESULT
AwtTextComponent
::
WindowProc
(
UINT
message
,
WPARAM
wParam
,
LPARAM
lParam
)
{
...
...
@@ -322,7 +334,16 @@ MsgRouting
AwtTextComponent
::
WmNotify
(
UINT
notifyCode
)
{
if
(
notifyCode
==
EN_CHANGE
)
{
DoCallback
(
"valueChanged"
,
"()V"
);
/*
* Ignore notifications if the text hasn't been changed.
* EN_CHANGE sent on character formatting changes as well.
*/
if
(
m_bIgnoreEnChange
==
FALSE
)
{
m_bCanUndo
=
TRUE
;
DoCallback
(
"valueChanged"
,
"()V"
);
}
else
{
m_bCanUndo
=
FALSE
;
}
}
return
mrDoDefault
;
}
...
...
@@ -337,6 +358,28 @@ AwtTextComponent::HandleEvent(MSG *msg, BOOL synthetic)
{
MsgRouting
returnVal
;
if
(
msg
->
message
==
WM_RBUTTONUP
||
(
msg
->
message
==
WM_SYSKEYDOWN
&&
msg
->
wParam
==
VK_F10
&&
HIBYTE
(
::
GetKeyState
(
VK_SHIFT
))))
{
POINT
p
;
if
(
msg
->
message
==
WM_RBUTTONUP
)
{
VERIFY
(
::
GetCursorPos
(
&
p
));
}
else
{
p
.
x
=
-
1
;
p
.
y
=
-
1
;
}
if
(
!::
PostMessage
(
GetHWnd
(),
WM_CONTEXTMENU
,
(
WPARAM
)
GetHWnd
(),
MAKELPARAM
(
p
.
x
,
p
.
y
)))
{
JNIEnv
*
env
=
(
JNIEnv
*
)
JNU_GetEnv
(
jvm
,
JNI_VERSION_1_2
);
JNU_ThrowInternalError
(
env
,
"Message not posted, native event queue may be full."
);
env
->
ExceptionDescribe
();
env
->
ExceptionClear
();
}
delete
msg
;
return
mrConsume
;
}
/*
* Store the 'synthetic' parameter so that the WM_PASTE security check
* happens only for synthetic events.
...
...
@@ -701,6 +744,10 @@ void AwtTextComponent::SetBackgroundColor(COLORREF c) {
SendMessage
(
EM_SETBKGNDCOLOR
,
(
WPARAM
)
FALSE
,
(
LPARAM
)
GetBackgroundColor
());
}
void
AwtTextComponent
::
EditGetSel
(
CHARRANGE
&
cr
)
{
SendMessage
(
EM_EXGETSEL
,
0
,
reinterpret_cast
<
LPARAM
>
(
&
cr
));
}
/************************************************************************
* WTextComponentPeer native methods
...
...
@@ -983,6 +1030,161 @@ AwtTextComponent::OleCallback::GetContextMenu(WORD seltype,
}
/*
* This routine is a window procedure for the subclass of the standard edit control
* used to generate context menu. RichEdit controls don't have built-in context menu.
* To implement this functionality we have to create an invisible edit control and
* forward WM_CONTEXTMENU messages from a RichEdit control to this helper edit control.
* While the edit control context menu is active we intercept the message generated in
* response to particular item selection and forward it back to the RichEdit control.
* (See AwtTextArea::WmContextMenu for more details).
*/
WNDPROC
AwtTextComponent
::
sm_pDefWindowProc
=
NULL
;
LRESULT
AwtTextComponent
::
EditProc
(
HWND
hWnd
,
UINT
message
,
WPARAM
wParam
,
LPARAM
lParam
)
{
static
BOOL
bContextMenuActive
=
FALSE
;
LRESULT
retValue
=
0
;
MsgRouting
mr
=
mrDoDefault
;
DASSERT
(
::
IsWindow
(
::
GetParent
(
hWnd
)));
switch
(
message
)
{
case
WM_UNDO
:
case
WM_CUT
:
case
WM_COPY
:
case
WM_PASTE
:
case
WM_CLEAR
:
case
EM_SETSEL
:
if
(
bContextMenuActive
)
{
::
SendMessage
(
::
GetParent
(
hWnd
),
message
,
wParam
,
lParam
);
mr
=
mrConsume
;
}
break
;
case
WM_CONTEXTMENU
:
bContextMenuActive
=
TRUE
;
break
;
}
if
(
mr
==
mrDoDefault
)
{
DASSERT
(
sm_pDefWindowProc
!=
NULL
);
retValue
=
::
CallWindowProc
(
sm_pDefWindowProc
,
hWnd
,
message
,
wParam
,
lParam
);
}
if
(
message
==
WM_CONTEXTMENU
)
{
bContextMenuActive
=
FALSE
;
}
return
retValue
;
}
MsgRouting
AwtTextComponent
::
WmContextMenu
(
HWND
hCtrl
,
UINT
xPos
,
UINT
yPos
)
{
/* Use the system provided edit control class to generate context menu. */
if
(
m_hEditCtrl
==
NULL
)
{
DWORD
dwStyle
=
WS_CHILD
;
DWORD
dwExStyle
=
0
;
m_hEditCtrl
=
::
CreateWindowEx
(
dwExStyle
,
L"EDIT"
,
L"TEXT"
,
dwStyle
,
0
,
0
,
0
,
0
,
GetHWnd
(),
reinterpret_cast
<
HMENU
>
(
static_cast
<
INT_PTR
>
(
CreateControlID
())),
AwtToolkit
::
GetInstance
().
GetModuleHandle
(),
NULL
);
DASSERT
(
m_hEditCtrl
!=
NULL
);
if
(
sm_pDefWindowProc
==
NULL
)
{
sm_pDefWindowProc
=
(
WNDPROC
)
::
GetWindowLongPtr
(
m_hEditCtrl
,
GWLP_WNDPROC
);
}
::
SetLastError
(
0
);
INT_PTR
ret
=
::
SetWindowLongPtr
(
m_hEditCtrl
,
GWLP_WNDPROC
,
(
INT_PTR
)
AwtTextArea
::
EditProc
);
DASSERT
(
ret
!=
0
||
::
GetLastError
()
==
0
);
}
/*
* Tricks on the edit control to ensure that its context menu has
* the correct set of enabled items according to the RichEdit state.
*/
::
SetWindowText
(
m_hEditCtrl
,
TEXT
(
"TEXT"
));
if
(
m_bCanUndo
==
TRUE
&&
SendMessage
(
EM_CANUNDO
))
{
/* Enable 'Undo' item. */
::
SendMessage
(
m_hEditCtrl
,
WM_CHAR
,
'A'
,
0
);
}
{
/*
* Initial selection for the edit control - (0,1).
* This enables 'Cut', 'Copy' and 'Delete' and 'Select All'.
*/
INT
nStart
=
0
;
INT
nEnd
=
1
;
if
(
SendMessage
(
EM_SELECTIONTYPE
)
==
SEL_EMPTY
)
{
/*
* RichEdit selection is empty - clear selection of the edit control.
* This disables 'Cut', 'Copy' and 'Delete'.
*/
nStart
=
-
1
;
nEnd
=
0
;
}
else
{
CHARRANGE
cr
;
EditGetSel
(
cr
);
/* Check if all the text is selected. */
if
(
cr
.
cpMin
==
0
)
{
int
len
=
::
GetWindowTextLength
(
GetHWnd
());
if
(
cr
.
cpMin
==
0
&&
cr
.
cpMax
>=
len
)
{
/*
* All the text is selected in RichEdit - select all the
* text in the edit control. This disables 'Select All'.
*/
nStart
=
0
;
nEnd
=
-
1
;
}
}
}
::
SendMessage
(
m_hEditCtrl
,
EM_SETSEL
,
(
WPARAM
)
nStart
,
(
LPARAM
)
nEnd
);
}
/* Disable 'Paste' item if the RichEdit control is read-only. */
::
SendMessage
(
m_hEditCtrl
,
EM_SETREADONLY
,
GetStyle
()
&
ES_READONLY
?
TRUE
:
FALSE
,
0
);
POINT
p
;
p
.
x
=
xPos
;
p
.
y
=
yPos
;
/*
* If the context menu is requested with SHIFT+F10 or VK_APPS key,
* we position its top left corner to the center of the RichEdit
* client rect.
*/
if
(
p
.
x
==
-
1
&&
p
.
y
==
-
1
)
{
RECT
r
;
VERIFY
(
::
GetClientRect
(
GetHWnd
(),
&
r
));
p
.
x
=
(
r
.
left
+
r
.
right
)
/
2
;
p
.
y
=
(
r
.
top
+
r
.
bottom
)
/
2
;
VERIFY
(
::
ClientToScreen
(
GetHWnd
(),
&
p
));
}
// The context menu steals focus from the proxy.
// So, set the focus-restore flag up.
SetRestoreFocus
(
TRUE
);
::
SendMessage
(
m_hEditCtrl
,
WM_CONTEXTMENU
,
(
WPARAM
)
m_hEditCtrl
,
MAKELPARAM
(
p
.
x
,
p
.
y
));
SetRestoreFocus
(
FALSE
);
return
mrConsume
;
}
//
// Accessibility support
...
...
src/windows/native/sun/windows/awt_TextComponent.h
浏览文件 @
8255fd7b
...
...
@@ -47,6 +47,8 @@ public:
static
AwtTextComponent
*
Create
(
jobject
self
,
jobject
parent
,
BOOL
isMultiline
);
virtual
void
Dispose
();
virtual
LPCTSTR
GetClassName
();
LRESULT
WindowProc
(
UINT
message
,
WPARAM
wParam
,
LPARAM
lParam
);
...
...
@@ -83,6 +85,8 @@ public:
MsgRouting
HandleEvent
(
MSG
*
msg
,
BOOL
synthetic
);
MsgRouting
WmPaste
();
INLINE
void
SetIgnoreEnChange
(
BOOL
b
)
{
m_bIgnoreEnChange
=
b
;
}
virtual
BOOL
IsFocusingMouseMessage
(
MSG
*
pMsg
);
/* To be fully implemented in a future release
...
...
@@ -115,11 +119,24 @@ public:
INLINE
VOID
SetEndSelectionPos
(
LONG
lPos
)
{
m_lEndPos
=
lPos
;
}
INLINE
VOID
SetLastSelectionPos
(
LONG
lPos
)
{
m_lLastPos
=
lPos
;
}
void
EditGetSel
(
CHARRANGE
&
cr
);
// Used to prevent untrusted code from synthesizing a WM_PASTE message
// by posting a <CTRL>-V KeyEvent
BOOL
m_synthetic
;
LONG
EditGetCharFromPos
(
POINT
&
pt
);
// RichEdit 1.0 control generates EN_CHANGE notifications not only
// on text changes, but also on any character formatting change.
// This flag is true when the latter case is detected.
BOOL
m_bIgnoreEnChange
;
// RichEdit 1.0 control undoes a character formatting change
// if it is the latest. We don't create our own undo buffer,
// but just prohibit undo in case if the latest operation
// is a formatting change.
BOOL
m_bCanUndo
;
/*****************************************************************
* Inner class OleCallback declaration.
*/
...
...
@@ -166,6 +183,13 @@ private:
static
OleCallback
sm_oleCallback
;
static
WNDPROC
sm_pDefWindowProc
;
HWND
m_hEditCtrl
;
static
LRESULT
CALLBACK
EditProc
(
HWND
hWnd
,
UINT
message
,
WPARAM
wParam
,
LPARAM
lParam
);
MsgRouting
WmContextMenu
(
HWND
hCtrl
,
UINT
xPos
,
UINT
yPos
);
//
// Accessibility support
//
...
...
src/windows/native/sun/windows/awt_TextField.cpp
浏览文件 @
8255fd7b
...
...
@@ -249,13 +249,7 @@ AwtTextField::HandleEvent(MSG *msg, BOOL synthetic)
}
}
/*
* Store the 'synthetic' parameter so that the WM_PASTE security check
* happens only for synthetic events.
*/
m_synthetic
=
synthetic
;
returnVal
=
AwtComponent
::
HandleEvent
(
msg
,
synthetic
);
m_synthetic
=
FALSE
;
returnVal
=
AwtTextComponent
::
HandleEvent
(
msg
,
synthetic
);
if
(
systemBeeperEnabled
){
SystemParametersInfo
(
SPI_SETBEEP
,
1
,
NULL
,
0
);
...
...
test/com/sun/jdi/EvalInterfaceStatic.sh
0 → 100644
浏览文件 @
8255fd7b
#!/bin/sh
#
# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.com if you need additional information or have any
# questions.
#
# @test
# @bug 8031195
# @summary JDB allows evaluation of calls to static interface methods
# @author Jaroslav Bachorik
#
# @run shell/timeout=300 EvalInterfaceStatic.sh
# The test exercises the ability to invoke static methods on interfaces.
# Static interface methods are a new feature added in JDK8.
#
# The test makes sure that it is, at all, possible to invoke an interface
# static method and that the static methods are not inherited by extending
# interfaces.
classname
=
EvalStaticInterfaces
createJavaFile
()
{
cat
<<
EOF
>
$classname
.java.1
public interface
$classname
{
static String staticMethod1() {
return "base:staticMethod1";
}
static String staticMethod2() {
return "base:staticMethod2";
}
public static void main(String[] args) {
// prove that these work
System.out.println("base staticMethod1(): " +
$classname
.staticMethod1());
System.out.println("base staticMethod2(): " +
$classname
.staticMethod2());
System.out.println("overridden staticMethod2(): " + Extended
$classname
.staticMethod2());
System.out.println("base staticMethod3(): " + Extended
$classname
.staticMethod3());
gus();
}
static void gus() {
int x = 0; // @1 breakpoint
}
}
interface Extended
$classname
extends
$classname
{
static String staticMethod2() {
return "extended:staticMethod2";
}
static String staticMethod3() {
return "extended:staticMethod3";
}
}
EOF
}
# drive jdb by sending cmds to it and examining its output
dojdbCmds
()
{
setBkpts @1
runToBkpt @1
cmd
eval
"
$classname
.staticMethod1()"
jdbFailIfNotPresent
"base:staticMethod1"
2
cmd
eval
"
$classname
.staticMethod2()"
jdbFailIfNotPresent
"base:staticMethod2"
2
cmd
eval
"Extended
$classname
.staticMethod1()"
jdbFailIfPresent
"base:staticMethod1"
2
cmd
eval
"Extended
$classname
.staticMethod2()"
jdbFailIfNotPresent
"extended:staticMethod2"
2
cmd
eval
"Extended
$classname
.staticMethod3()"
jdbFailIfNotPresent
"extended:staticMethod3"
2
}
mysetup
()
{
if
[
-z
"
$TESTSRC
"
]
;
then
TESTSRC
=
.
fi
for
ii
in
.
$TESTSRC
$TESTSRC
/..
;
do
if
[
-r
"
$ii
/ShellScaffold.sh"
]
;
then
.
$ii
/ShellScaffold.sh
break
fi
done
}
# You could replace this next line with the contents
# of ShellScaffold.sh and this script will run just the same.
mysetup
runit
pass
test/com/sun/jdi/InterfaceMethodsTest.java
0 → 100644
浏览文件 @
8255fd7b
/*
* Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/**
* @test
* @bug 8031195
* @summary JDI: Add support for static and default methods in interfaces
*
* @run build TestScaffold VMConnection TargetListener TargetAdapter
* @run build InterfaceMethodsTest
* @run main InterfaceMethodsTest
*/
import
com.sun.jdi.*
;
import
com.sun.jdi.event.*
;
import
java.util.Collections
;
public
class
InterfaceMethodsTest
extends
TestScaffold
{
private
static
final
int
RESULT_A
=
1
;
private
static
final
int
RESULT_B
=
1
;
private
static
final
int
RESULT_TARGET
=
1
;
static
interface
InterfaceA
{
static
int
staticMethodA
()
{
System
.
out
.
println
(
"-InterfaceA: static interface method A-"
);
return
RESULT_A
;
}
static
int
staticMethodB
()
{
System
.
out
.
println
(
"-InterfaceA: static interface method B-"
);
return
RESULT_A
;
}
default
int
defaultMethodA
()
{
System
.
out
.
println
(
"-InterfaceA: default interface method A-"
);
return
RESULT_A
;
}
default
int
defaultMethodB
()
{
System
.
out
.
println
(
"-InterfaceA: default interface method B-"
);
return
RESULT_A
;
}
default
int
defaultMethodC
()
{
System
.
out
.
println
(
"-InterfaceA: default interface method C-"
);
return
RESULT_A
;
}
int
implementedMethod
();
}
static
interface
InterfaceB
extends
InterfaceA
{
@Override
default
int
defaultMethodC
()
{
System
.
out
.
println
(
"-InterfaceB: overridden default interface method C-"
);
return
RESULT_B
;
}
default
int
defaultMethodD
()
{
System
.
out
.
println
(
"-InterfaceB: default interface method D-"
);
return
RESULT_B
;
}
static
int
staticMethodB
()
{
System
.
out
.
println
(
"-InterfaceB: overridden static interface method B-"
);
return
RESULT_B
;
}
static
int
staticMethodC
()
{
System
.
out
.
println
(
"-InterfaceB: static interface method C-"
);
return
RESULT_B
;
}
}
final
static
class
TargetClass
implements
InterfaceB
{
public
int
classMethod
()
{
System
.
out
.
println
(
"-TargetClass: class only method-"
);
return
RESULT_TARGET
;
}
@Override
public
int
implementedMethod
()
{
System
.
out
.
println
(
"-TargetClass: implemented non-default interface method-"
);
return
RESULT_TARGET
;
}
@Override
public
int
defaultMethodB
()
{
System
.
out
.
println
(
"-TargetClass: overridden default interface method D"
);
return
RESULT_TARGET
;
}
public
static
void
main
(
String
[]
args
)
{
TargetClass
tc
=
new
TargetClass
();
tc
.
doTests
(
tc
);
}
private
void
doTests
(
TargetClass
ref
)
{
// break
}
}
public
InterfaceMethodsTest
(
String
[]
args
)
{
super
(
args
);
}
public
static
void
main
(
String
[]
args
)
throws
Exception
{
new
InterfaceMethodsTest
(
args
).
startTests
();
}
private
static
final
String
TEST_CLASS_NAME
=
InterfaceMethodsTest
.
class
.
getName
().
replace
(
'.'
,
'/'
);
private
static
final
String
TARGET_CLASS_NAME
=
TargetClass
.
class
.
getName
().
replace
(
'.'
,
'/'
);
private
static
final
String
INTERFACEA_NAME
=
InterfaceA
.
class
.
getName
().
replace
(
'.'
,
'/'
);
private
static
final
String
INTERFACEB_NAME
=
InterfaceB
.
class
.
getName
().
replace
(
'.'
,
'/'
);
protected
void
runTests
()
throws
Exception
{
/*
* Get to the top of main()
* to determine targetClass and mainThread
*/
BreakpointEvent
bpe
=
startToMain
(
TARGET_CLASS_NAME
);
bpe
=
resumeTo
(
TARGET_CLASS_NAME
,
"doTests"
,
"(L"
+
TARGET_CLASS_NAME
+
";)V"
);
mainThread
=
bpe
.
thread
();
StackFrame
frame
=
mainThread
.
frame
(
0
);
ObjectReference
thisObject
=
frame
.
thisObject
();
ObjectReference
ref
=
(
ObjectReference
)
frame
.
getArgumentValues
().
get
(
0
);
ReferenceType
targetClass
=
bpe
.
location
().
declaringType
();
testImplementationClass
(
targetClass
,
thisObject
);
testInterfaceA
(
ref
);
testInterfaceB
(
ref
);
/*
* resume the target listening for events
*/
listenUntilVMDisconnect
();
/*
* deal with results of test
* if anything has called failure("foo") testFailed will be true
*/
if
(!
testFailed
)
{
println
(
"InterfaceMethodsTest: passed"
);
}
else
{
throw
new
Exception
(
"InterfaceMethodsTest: failed"
);
}
}
private
void
testInterfaceA
(
ObjectReference
ref
)
{
// Test non-virtual calls on InterfaceA
ReferenceType
ifaceClass
=
(
ReferenceType
)
vm
().
classesByName
(
INTERFACEA_NAME
).
get
(
0
);
/* Default method calls */
// invoke the InterfaceA's "defaultMethodA"
testInvokePos
(
ifaceClass
,
ref
,
"defaultMethodA"
,
"()I"
,
vm
().
mirrorOf
(
RESULT_A
));
// invoke the InterfaceA's "defaultMethodB"
testInvokePos
(
ifaceClass
,
ref
,
"defaultMethodB"
,
"()I"
,
vm
().
mirrorOf
(
RESULT_A
));
// invoke the InterfaceA's "defaultMethodC"
testInvokePos
(
ifaceClass
,
ref
,
"defaultMethodC"
,
"()I"
,
vm
().
mirrorOf
(
RESULT_A
));
// "defaultMethodD" from InterfaceB is not accessible from here
testInvokeNeg
(
ifaceClass
,
ref
,
"defaultMethodD"
,
"()I"
,
vm
().
mirrorOf
(
RESULT_B
),
"Attempted to invoke non-existing method"
);
// trying to invoke the asbtract method "implementedMethod"
testInvokeNeg
(
ifaceClass
,
ref
,
"implementedMethod"
,
"()I"
,
vm
().
mirrorOf
(
TARGET_CLASS_NAME
),
"Invocation of non-default methods is not supported"
);
/* Static method calls */
// invoke interface static method A
testInvokePos
(
ifaceClass
,
null
,
"staticMethodA"
,
"()I"
,
vm
().
mirrorOf
(
RESULT_A
));
// try to invoke static method A on the instance
testInvokePos
(
ifaceClass
,
ref
,
"staticMethodA"
,
"()I"
,
vm
().
mirrorOf
(
RESULT_A
));
// invoke interface static method B
testInvokePos
(
ifaceClass
,
null
,
"staticMethodB"
,
"()I"
,
vm
().
mirrorOf
(
RESULT_A
));
// try to invoke static method B on the instance
testInvokePos
(
ifaceClass
,
ref
,
"staticMethodB"
,
"()I"
,
vm
().
mirrorOf
(
RESULT_A
));
}
private
void
testInterfaceB
(
ObjectReference
ref
)
{
// Test non-virtual calls on InterfaceB
ReferenceType
ifaceClass
=
(
ReferenceType
)
vm
().
classesByName
(
INTERFACEB_NAME
).
get
(
0
);
/* Default method calls */
// invoke the inherited "defaultMethodA"
testInvokePos
(
ifaceClass
,
ref
,
"defaultMethodA"
,
"()I"
,
vm
().
mirrorOf
(
RESULT_A
));
// invoke the inherited "defaultMethodB"
testInvokePos
(
ifaceClass
,
ref
,
"defaultMethodB"
,
"()I"
,
vm
().
mirrorOf
(
RESULT_A
));
// invoke the inherited and overridden "defaultMethodC"
testInvokePos
(
ifaceClass
,
ref
,
"defaultMethodC"
,
"()I"
,
vm
().
mirrorOf
(
RESULT_B
));
// invoke InterfaceB only "defaultMethodD"
testInvokePos
(
ifaceClass
,
ref
,
"defaultMethodD"
,
"()I"
,
vm
().
mirrorOf
(
RESULT_B
));
// "implementedMethod" is not present in InterfaceB
testInvokeNeg
(
ifaceClass
,
ref
,
"implementedMethod"
,
"()I"
,
vm
().
mirrorOf
(
RESULT_TARGET
),
"Invocation of non-default methods is not supported"
);
/* Static method calls*/
// "staticMethodA" must not be inherited by InterfaceB
testInvokeNeg
(
ifaceClass
,
null
,
"staticMethodA"
,
"()I"
,
vm
().
mirrorOf
(
RESULT_A
),
"Static interface methods are not inheritable"
);
// however it is possible to call "staticMethodA" on the actual instance
testInvokeNeg
(
ifaceClass
,
ref
,
"staticMethodA"
,
"()I"
,
vm
().
mirrorOf
(
RESULT_A
),
"Static interface methods are not inheritable"
);
// "staticMethodB" is overridden in InterfaceB
testInvokePos
(
ifaceClass
,
null
,
"staticMethodB"
,
"()I"
,
vm
().
mirrorOf
(
RESULT_B
));
// the instance invokes the overriden form of "staticMethodB" from InterfaceB
testInvokePos
(
ifaceClass
,
ref
,
"staticMethodB"
,
"()I"
,
vm
().
mirrorOf
(
RESULT_B
));
// "staticMethodC" is present only in InterfaceB
testInvokePos
(
ifaceClass
,
null
,
"staticMethodC"
,
"()I"
,
vm
().
mirrorOf
(
RESULT_B
));
// "staticMethodC" should be reachable from the instance too
testInvokePos
(
ifaceClass
,
ref
,
"staticMethodC"
,
"()I"
,
vm
().
mirrorOf
(
RESULT_B
));
}
private
void
testImplementationClass
(
ReferenceType
targetClass
,
ObjectReference
thisObject
)
{
// Test invocations on the implementation object
/* Default method calls */
// "defaultMethodA" is accessible and not overridden
testInvokePos
(
targetClass
,
thisObject
,
"defaultMethodA"
,
"()I"
,
vm
().
mirrorOf
(
RESULT_TARGET
));
// "defaultMethodB" is accessible and overridden in TargetClass
testInvokePos
(
targetClass
,
thisObject
,
"defaultMethodB"
,
"()I"
,
vm
().
mirrorOf
(
RESULT_TARGET
));
// "defaultMethodC" is accessible and overridden in InterfaceB
testInvokePos
(
targetClass
,
thisObject
,
"defaultMethodC"
,
"()I"
,
vm
().
mirrorOf
(
RESULT_TARGET
));
// "defaultMethodD" is accessible
testInvokePos
(
targetClass
,
thisObject
,
"defaultMethodD"
,
"()I"
,
vm
().
mirrorOf
(
RESULT_TARGET
));
/* Non-default instance method calls */
// "classMethod" declared in TargetClass is accessible
testInvokePos
(
targetClass
,
thisObject
,
"classMethod"
,
"()I"
,
vm
().
mirrorOf
(
RESULT_TARGET
));
// the abstract "implementedMethod" has been implemented in TargetClass
testInvokePos
(
targetClass
,
thisObject
,
"implementedMethod"
,
"()I"
,
vm
().
mirrorOf
(
RESULT_TARGET
));
/* Static method calls */
// All the static methods declared by the interfaces are not reachable from the instance of the implementor class
testInvokeNeg
(
targetClass
,
thisObject
,
"staticMethodA"
,
"()I"
,
vm
().
mirrorOf
(
RESULT_A
),
"Static interface methods are not inheritable"
);
testInvokeNeg
(
targetClass
,
thisObject
,
"staticMethodB"
,
"()I"
,
vm
().
mirrorOf
(
RESULT_B
),
"Static interface methods are not inheritable"
);
testInvokeNeg
(
targetClass
,
thisObject
,
"staticMethodC"
,
"()I"
,
vm
().
mirrorOf
(
RESULT_B
),
"Static interface methods are not inheritable"
);
// All the static methods declared by the interfaces are not reachable through the implementor class
testInvokeNeg
(
targetClass
,
null
,
"staticMethodA"
,
"()I"
,
vm
().
mirrorOf
(
RESULT_A
),
"Static interface methods are not inheritable"
);
testInvokeNeg
(
targetClass
,
null
,
"staticMethodB"
,
"()I"
,
vm
().
mirrorOf
(
RESULT_B
),
"Static interface methods are not inheritable"
);
testInvokeNeg
(
targetClass
,
null
,
"staticMethodC"
,
"()I"
,
vm
().
mirrorOf
(
RESULT_B
),
"Static interface methods are not inheritable"
);
}
private
void
testInvokePos
(
ReferenceType
targetClass
,
ObjectReference
ref
,
String
methodName
,
String
methodSig
,
Value
value
)
{
logInvocation
(
ref
,
methodName
,
methodSig
,
targetClass
);
try
{
invoke
(
targetClass
,
ref
,
methodName
,
methodSig
,
value
);
System
.
err
.
println
(
"--- PASSED"
);
}
catch
(
Exception
e
)
{
System
.
err
.
println
(
"--- FAILED"
);
failure
(
"FAILED: Invocation failed with error message "
+
e
.
getLocalizedMessage
());
}
}
private
void
testInvokeNeg
(
ReferenceType
targetClass
,
ObjectReference
ref
,
String
methodName
,
String
methodSig
,
Value
value
,
String
msg
)
{
logInvocation
(
ref
,
methodName
,
methodSig
,
targetClass
);
try
{
invoke
(
targetClass
,
ref
,
methodName
,
methodSig
,
value
);
System
.
err
.
println
(
"--- FAILED"
);
failure
(
"FAILED: "
+
msg
);
}
catch
(
Exception
e
)
{
System
.
err
.
println
(
"--- PASSED"
);
}
}
private
void
invoke
(
ReferenceType
targetClass
,
ObjectReference
ref
,
String
methodName
,
String
methodSig
,
Value
value
)
throws
Exception
{
Method
method
=
getMethod
(
targetClass
,
methodName
,
methodSig
);
if
(
method
==
null
)
{
throw
new
Exception
(
"Can't find method: "
+
methodName
+
" for class = "
+
targetClass
);
}
println
(
"Invoking "
+
(
method
.
isAbstract
()
?
"abstract "
:
" "
)
+
"method: "
+
method
);
Value
returnValue
=
null
;
if
(
ref
!=
null
)
{
returnValue
=
invokeInstance
(
ref
,
method
);
}
else
{
returnValue
=
invokeStatic
(
targetClass
,
method
);
}
println
(
" return val = "
+
returnValue
);
// It has to be the same value as what we passed in!
if
(
returnValue
.
equals
(
value
))
{
println
(
" "
+
method
.
name
()
+
" return value matches: "
+
value
);
}
else
{
if
(
value
!=
null
)
{
throw
new
Exception
(
method
.
name
()
+
" returned: "
+
returnValue
+
" expected: "
+
value
);
}
else
{
println
(
" "
+
method
.
name
()
+
" return value : "
+
returnValue
);
}
}
}
private
Value
invokeInstance
(
ObjectReference
ref
,
Method
method
)
throws
Exception
{
return
ref
.
invokeMethod
(
mainThread
,
method
,
Collections
.
emptyList
(),
ObjectReference
.
INVOKE_NONVIRTUAL
);
}
private
Value
invokeStatic
(
ReferenceType
refType
,
Method
method
)
throws
Exception
{
if
(
refType
instanceof
ClassType
)
{
return
((
ClassType
)
refType
).
invokeMethod
(
mainThread
,
method
,
Collections
.
emptyList
(),
ObjectReference
.
INVOKE_NONVIRTUAL
);
}
else
{
return
((
InterfaceType
)
refType
).
invokeMethod
(
mainThread
,
method
,
Collections
.
emptyList
(),
ObjectReference
.
INVOKE_NONVIRTUAL
);
}
}
private
Method
getMethod
(
ReferenceType
rt
,
String
name
,
String
signature
)
{
if
(
rt
==
null
)
return
null
;
Method
m
=
findMethod
(
rt
,
name
,
signature
);
if
(
m
==
null
)
{
if
(
rt
instanceof
ClassType
)
{
for
(
Object
ifc
:
((
ClassType
)
rt
).
interfaces
())
{
m
=
getMethod
((
ReferenceType
)
ifc
,
name
,
signature
);
if
(
m
!=
null
)
{
break
;
}
}
if
(
m
==
null
)
{
m
=
getMethod
(((
ClassType
)
rt
).
superclass
(),
name
,
signature
);
}
else
{
if
(
m
.
isStatic
())
{
// interface static methods are not inherited
m
=
null
;
}
}
}
else
if
(
rt
instanceof
InterfaceType
)
{
for
(
Object
ifc
:
((
InterfaceType
)
rt
).
superinterfaces
())
{
m
=
getMethod
((
ReferenceType
)
ifc
,
name
,
signature
);
if
(
m
!=
null
)
{
if
(
m
.
isStatic
())
{
// interface static methods are not inherited
m
=
null
;
}
break
;
}
}
}
}
return
m
;
}
private
void
logInvocation
(
ObjectReference
ref
,
String
methodName
,
String
methodSig
,
ReferenceType
targetClass
)
{
if
(
ref
!=
null
)
{
System
.
err
.
println
(
"Invoking: "
+
ref
.
referenceType
().
name
()
+
"."
+
methodName
+
methodSig
+
" with target of type "
+
targetClass
.
name
());
}
else
{
System
.
err
.
println
(
"Invoking static : "
+
targetClass
.
name
()
+
"."
+
methodName
+
methodSig
);
}
}
}
test/com/sun/jdi/VisibleMethods.java
0 → 100644
浏览文件 @
8255fd7b
/*
* Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/**
* @test
* @summary Test ReferenceType.visibleMethods
* @bug 8028430
*
* @author Staffan Larsen
*
* @run build TestScaffold VMConnection TargetListener TargetAdapter
* @run compile -g VisibleMethods.java
* @run main VisibleMethods
*/
import
com.sun.jdi.Method
;
import
com.sun.jdi.ReferenceType
;
import
com.sun.jdi.StackFrame
;
import
com.sun.jdi.StringReference
;
import
com.sun.jdi.ThreadReference
;
import
com.sun.jdi.event.BreakpointEvent
;
import
java.util.Arrays
;
import
java.util.List
;
import
java.util.stream.Collectors
;
/********** target program **********/
interface
Super
{
public
void
m
(
Object
o
);
// This method should not be visible in AC
public
void
m
(
String
s
);
// This method should not be visible in AC
}
interface
One
extends
Super
{
public
void
m
(
Object
o
);
public
void
m1
();
// Either this method or Two.m1 should be visible in AC
}
interface
Two
extends
Super
{
public
void
m
(
String
s
);
public
void
m1
();
// Either this method or One.m1 should be visible in AC
}
abstract
class
AC
implements
One
,
Two
{
}
class
CC
extends
AC
{
public
void
m
(
Object
o
)
{
}
public
void
m
(
String
s
)
{
}
public
void
m1
()
{
}
public
static
void
main
(
String
[]
args
)
{
System
.
out
.
println
(
"Goodbye from VisibleMethods!"
);
}
}
/********** test program **********/
public
class
VisibleMethods
extends
TestScaffold
{
ReferenceType
targetClass
;
ThreadReference
mainThread
;
VisibleMethods
(
String
args
[])
{
super
(
args
);
}
public
static
void
main
(
String
[]
args
)
throws
Exception
{
new
VisibleMethods
(
args
).
startTests
();
}
/********** test core **********/
protected
void
runTests
()
throws
Exception
{
/*
* Run to String.<init>
*/
startToMain
(
"CC"
);
ReferenceType
ac
=
findReferenceType
(
"AC"
);
List
<
String
>
visible
=
ac
.
visibleMethods
().
stream
().
map
(
Method:
:
toString
).
collect
(
Collectors
.
toList
());
System
.
out
.
println
(
"visibleMethods(): "
+
visible
);
verifyContains
(
visible
,
1
,
"Two.m(java.lang.String)"
);
verifyContains
(
visible
,
1
,
"One.m(java.lang.Object)"
);
verifyContains
(
visible
,
0
,
"Super.m(java.lang.Object)"
);
verifyContains
(
visible
,
0
,
"Super.m(java.lang.String)"
);
verifyContains
(
visible
,
1
,
"Two.m1()"
,
"One.m1()"
);
/*
* resume the target listening for events
*/
listenUntilVMDisconnect
();
}
private
void
verifyContains
(
List
<
String
>
methods
,
int
matches
,
String
...
sigs
)
throws
Exception
{
if
(
countMatches
(
methods
,
sigs
)
!=
matches
)
{
throw
new
Exception
(
"visibleMethods() should have contained "
+
matches
+
" entry/entries from "
+
Arrays
.
toString
(
sigs
));
}
}
private
int
countMatches
(
List
<
String
>
list1
,
String
[]
list2
)
{
int
count
=
0
;
for
(
String
s1
:
list1
)
{
for
(
String
s2
:
list2
)
{
if
(
s1
.
equals
(
s2
))
{
count
++;
}
}
}
return
count
;
}
}
test/java/awt/Focus/SortingFPT/JDK8048887.java
浏览文件 @
8255fd7b
...
...
@@ -26,7 +26,7 @@
@bug 8048887
@summary Tests SortingFTP for an exception caused by the tim-sort algo.
@author anton.tarasov: area=awt.focus
@run main JDK804
0632
@run main JDK804
8887
*/
import
javax.swing.JFrame
;
...
...
test/java/net/InetAddress/IPv4Formats.java
浏览文件 @
8255fd7b
...
...
@@ -27,6 +27,7 @@
* @summary InetAddress.getByName behaves differently on windows
*/
import
java.net.*
;
import
java.util.UUID
;
public
class
IPv4Formats
{
public
static
void
main
(
String
[]
args
)
{
...
...
@@ -36,7 +37,7 @@ public class IPv4Formats {
{
"126.1"
,
"126.0.0.1"
},
{
"128.50.65534"
,
"128.50.255.254"
},
{
"192.168.1.2"
,
"192.168.1.2"
},
{
"
hello.foo.bar
"
,
null
},
{
"
invalidhost.invalid
"
,
null
},
{
"1024.1.2.3"
,
null
},
{
"128.14.66000"
,
null
}
};
...
...
test/java/util/logging/FileHandlerPath.java
0 → 100644
浏览文件 @
8255fd7b
/*
* Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
import
java.io.ByteArrayInputStream
;
import
java.io.ByteArrayOutputStream
;
import
java.io.File
;
import
java.io.FilePermission
;
import
java.io.IOException
;
import
java.nio.channels.FileChannel
;
import
java.nio.file.Files
;
import
java.nio.file.Paths
;
import
static
java
.
nio
.
file
.
StandardOpenOption
.
CREATE_NEW
;
import
static
java
.
nio
.
file
.
StandardOpenOption
.
WRITE
;
import
java.security.CodeSource
;
import
java.security.Permission
;
import
java.security.PermissionCollection
;
import
java.security.Permissions
;
import
java.security.Policy
;
import
java.security.ProtectionDomain
;
import
java.util.Arrays
;
import
java.util.Collections
;
import
java.util.Enumeration
;
import
java.util.List
;
import
java.util.Properties
;
import
java.util.PropertyPermission
;
import
java.util.UUID
;
import
java.util.concurrent.atomic.AtomicBoolean
;
import
java.util.logging.FileHandler
;
import
java.util.logging.LogManager
;
import
java.util.logging.LoggingPermission
;
/**
* @test
* @bug 8059269
* @summary tests that using a simple (non composite) pattern does not lead
* to NPE when the lock file already exists.
* @run main/othervm FileHandlerPath UNSECURE
* @run main/othervm FileHandlerPath SECURE
* @author danielfuchs
*/
public
class
FileHandlerPath
{
/**
* We will test the simple pattern in two configurations.
* UNSECURE: No security manager.
* SECURE: With the security manager present - and the required
* permissions granted.
*/
public
static
enum
TestCase
{
UNSECURE
,
SECURE
;
public
void
run
(
Properties
propertyFile
)
throws
Exception
{
System
.
out
.
println
(
"Running test case: "
+
name
());
Configure
.
setUp
(
this
,
propertyFile
);
test
(
this
.
name
()
+
" "
+
propertyFile
.
getProperty
(
"test.name"
),
propertyFile
);
}
}
// Use a random name provided by UUID to avoid collision with other tests
final
static
String
logFile
=
FileHandlerPath
.
class
.
getSimpleName
()
+
"_"
+
UUID
.
randomUUID
().
toString
()
+
".log"
;
final
static
String
tmpLogFile
;
final
static
String
userDir
=
System
.
getProperty
(
"user.dir"
);
final
static
String
tmpDir
=
System
.
getProperty
(
"java.io.tmpdir"
);
private
static
final
List
<
Properties
>
properties
;
static
{
tmpLogFile
=
new
File
(
tmpDir
,
logFile
).
toString
();
Properties
props1
=
new
Properties
();
Properties
props2
=
new
Properties
();
props1
.
setProperty
(
"test.name"
,
"relative file"
);
props1
.
setProperty
(
"test.file.name"
,
logFile
);
props1
.
setProperty
(
FileHandler
.
class
.
getName
()
+
".pattern"
,
logFile
);
props1
.
setProperty
(
FileHandler
.
class
.
getName
()
+
".count"
,
"1"
);
props2
.
setProperty
(
"test.name"
,
"absoluste file"
);
props2
.
setProperty
(
"test.file.name"
,
tmpLogFile
);
props2
.
setProperty
(
FileHandler
.
class
.
getName
()
+
".pattern"
,
"%t/"
+
logFile
);
props2
.
setProperty
(
FileHandler
.
class
.
getName
()
+
".count"
,
"1"
);
properties
=
Collections
.
unmodifiableList
(
Arrays
.
asList
(
props1
,
props2
));
}
public
static
void
main
(
String
...
args
)
throws
Exception
{
if
(
args
==
null
||
args
.
length
==
0
)
{
args
=
new
String
[]
{
TestCase
.
UNSECURE
.
name
(),
TestCase
.
SECURE
.
name
(),
};
}
// Sanity checks
if
(!
Files
.
isWritable
(
Paths
.
get
(
userDir
)))
{
throw
new
RuntimeException
(
userDir
+
": user.dir is not writable - can't run test."
);
}
if
(!
Files
.
isWritable
(
Paths
.
get
(
tmpDir
)))
{
throw
new
RuntimeException
(
tmpDir
+
": java.io.tmpdir is not writable - can't run test."
);
}
File
[]
files
=
{
new
File
(
logFile
),
new
File
(
tmpLogFile
),
new
File
(
logFile
+
".1"
),
new
File
(
tmpLogFile
+
".1"
),
new
File
(
logFile
+
".lck"
),
new
File
(
tmpLogFile
+
".lck"
),
new
File
(
logFile
+
".1.lck"
),
new
File
(
tmpLogFile
+
".1.lck"
)
};
for
(
File
log
:
files
)
{
if
(
log
.
exists
())
{
throw
new
Exception
(
log
+
": file already exists - can't run test."
);
}
}
// Now start the real test
try
{
for
(
String
testName
:
args
)
{
for
(
Properties
propertyFile
:
properties
)
{
TestCase
test
=
TestCase
.
valueOf
(
testName
);
test
.
run
(
propertyFile
);
}
}
}
finally
{
// Cleanup...
Configure
.
doPrivileged
(()
->
{
for
(
File
log
:
files
)
{
try
{
final
boolean
isLockFile
=
log
.
getName
().
endsWith
(
".lck"
);
// lock file should already be deleted, except if the
// test failed in exception.
// log file should all be present, except if the test
// failed in exception.
if
(
log
.
exists
())
{
if
(!
isLockFile
)
{
System
.
out
.
println
(
"deleting "
+
log
.
toString
());
}
else
{
System
.
err
.
println
(
"deleting lock file "
+
log
.
toString
());
}
log
.
delete
();
}
else
{
if
(!
isLockFile
)
{
System
.
err
.
println
(
log
.
toString
()
+
": not found."
);
}
}
}
catch
(
Throwable
t
)
{
// should not happen
t
.
printStackTrace
();
}
}
});
}
}
static
class
Configure
{
static
Policy
policy
=
null
;
static
final
AtomicBoolean
allowAll
=
new
AtomicBoolean
(
false
);
static
void
setUp
(
TestCase
test
,
Properties
propertyFile
)
{
switch
(
test
)
{
case
SECURE:
if
(
policy
==
null
&&
System
.
getSecurityManager
()
!=
null
)
{
throw
new
IllegalStateException
(
"SecurityManager already set"
);
}
else
if
(
policy
==
null
)
{
policy
=
new
SimplePolicy
(
TestCase
.
SECURE
,
allowAll
);
Policy
.
setPolicy
(
policy
);
System
.
setSecurityManager
(
new
SecurityManager
());
}
if
(
System
.
getSecurityManager
()
==
null
)
{
throw
new
IllegalStateException
(
"No SecurityManager."
);
}
if
(
policy
==
null
)
{
throw
new
IllegalStateException
(
"policy not configured"
);
}
break
;
case
UNSECURE:
if
(
System
.
getSecurityManager
()
!=
null
)
{
throw
new
IllegalStateException
(
"SecurityManager already set"
);
}
break
;
default
:
new
InternalError
(
"No such testcase: "
+
test
);
}
doPrivileged
(()
->
{
try
{
ByteArrayOutputStream
bytes
=
new
ByteArrayOutputStream
();
propertyFile
.
store
(
bytes
,
propertyFile
.
getProperty
(
"test.name"
));
ByteArrayInputStream
bais
=
new
ByteArrayInputStream
(
bytes
.
toByteArray
());
LogManager
.
getLogManager
().
readConfiguration
(
bais
);
}
catch
(
IOException
ex
)
{
throw
new
RuntimeException
(
ex
);
}
});
}
static
void
doPrivileged
(
Runnable
run
)
{
allowAll
.
set
(
true
);
try
{
run
.
run
();
}
finally
{
allowAll
.
set
(
false
);
}
}
}
public
static
void
test
(
String
name
,
Properties
props
)
throws
Exception
{
System
.
out
.
println
(
"Testing: "
+
name
);
String
file
=
props
.
getProperty
(
"test.file.name"
);
// create the lock files first - in order to take the path that
// used to trigger the NPE
Files
.
createFile
(
Paths
.
get
(
file
+
".lck"
));
Files
.
createFile
(
Paths
.
get
(
file
+
".1.lck"
));
final
FileHandler
f1
=
new
FileHandler
();
final
FileHandler
f2
=
new
FileHandler
();
f1
.
close
();
f2
.
close
();
System
.
out
.
println
(
"Success for "
+
name
);
}
final
static
class
PermissionsBuilder
{
final
Permissions
perms
;
public
PermissionsBuilder
()
{
this
(
new
Permissions
());
}
public
PermissionsBuilder
(
Permissions
perms
)
{
this
.
perms
=
perms
;
}
public
PermissionsBuilder
add
(
Permission
p
)
{
perms
.
add
(
p
);
return
this
;
}
public
PermissionsBuilder
addAll
(
PermissionCollection
col
)
{
if
(
col
!=
null
)
{
for
(
Enumeration
<
Permission
>
e
=
col
.
elements
();
e
.
hasMoreElements
();
)
{
perms
.
add
(
e
.
nextElement
());
}
}
return
this
;
}
public
Permissions
toPermissions
()
{
final
PermissionsBuilder
builder
=
new
PermissionsBuilder
();
builder
.
addAll
(
perms
);
return
builder
.
perms
;
}
}
public
static
class
SimplePolicy
extends
Policy
{
final
Permissions
permissions
;
final
Permissions
allPermissions
;
final
AtomicBoolean
allowAll
;
public
SimplePolicy
(
TestCase
test
,
AtomicBoolean
allowAll
)
{
this
.
allowAll
=
allowAll
;
permissions
=
new
Permissions
();
permissions
.
add
(
new
LoggingPermission
(
"control"
,
null
));
// needed by new FileHandler()
permissions
.
add
(
new
FilePermission
(
"<<ALL FILES>>"
,
"read"
));
// needed by new FileHandler()
permissions
.
add
(
new
FilePermission
(
logFile
,
"write,delete"
));
// needed by new FileHandler()
permissions
.
add
(
new
FilePermission
(
logFile
+
".lck"
,
"write,delete"
));
// needed by FileHandler.close()
permissions
.
add
(
new
FilePermission
(
logFile
+
".1"
,
"write,delete"
));
// needed by new FileHandler()
permissions
.
add
(
new
FilePermission
(
logFile
+
".1.lck"
,
"write,delete"
));
// needed by FileHandler.close()
permissions
.
add
(
new
FilePermission
(
tmpLogFile
,
"write,delete"
));
// needed by new FileHandler()
permissions
.
add
(
new
FilePermission
(
tmpLogFile
+
".lck"
,
"write,delete"
));
// needed by FileHandler.close()
permissions
.
add
(
new
FilePermission
(
tmpLogFile
+
".1"
,
"write,delete"
));
// needed by new FileHandler()
permissions
.
add
(
new
FilePermission
(
tmpLogFile
+
".1.lck"
,
"write,delete"
));
// needed by FileHandler.close()
permissions
.
add
(
new
FilePermission
(
userDir
,
"write"
));
// needed by new FileHandler()
permissions
.
add
(
new
FilePermission
(
tmpDir
,
"write"
));
// needed by new FileHandler()
permissions
.
add
(
new
PropertyPermission
(
"user.dir"
,
"read"
));
permissions
.
add
(
new
PropertyPermission
(
"java.io.tmpdir"
,
"read"
));
allPermissions
=
new
Permissions
();
allPermissions
.
add
(
new
java
.
security
.
AllPermission
());
}
@Override
public
boolean
implies
(
ProtectionDomain
domain
,
Permission
permission
)
{
if
(
allowAll
.
get
())
return
allPermissions
.
implies
(
permission
);
return
permissions
.
implies
(
permission
);
}
@Override
public
PermissionCollection
getPermissions
(
CodeSource
codesource
)
{
return
new
PermissionsBuilder
().
addAll
(
allowAll
.
get
()
?
allPermissions
:
permissions
).
toPermissions
();
}
@Override
public
PermissionCollection
getPermissions
(
ProtectionDomain
domain
)
{
return
new
PermissionsBuilder
().
addAll
(
allowAll
.
get
()
?
allPermissions
:
permissions
).
toPermissions
();
}
}
}
test/javax/xml/ws/xsanymixed/CopyingResponse.java
0 → 100644
浏览文件 @
8255fd7b
/*
* Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
import
org.somewhere.ws.EchoRequest
;
import
org.somewhere.ws.EchoResponse
;
public
class
CopyingResponse
extends
EchoResponse
{
public
CopyingResponse
()
{}
public
CopyingResponse
(
EchoRequest
request
)
{
content
=
request
.
getContent
();
}
}
test/javax/xml/ws/xsanymixed/ServiceImpl.java
0 → 100644
浏览文件 @
8255fd7b
/*
* Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
import
org.somewhere.ws.EchoRequest
;
import
org.somewhere.ws.EchoResponse
;
import
org.somewhere.ws.TestPort
;
import
javax.jws.WebService
;
import
javax.xml.namespace.QName
;
/**
* Simple Webservice implementation just copying xml part as is
* from incoming request into outgoing response
*/
@WebService
(
endpointInterface
=
"org.somewhere.ws.TestPort"
,
targetNamespace
=
"http://ws.somewhere.org/"
,
serviceName
=
"TestService"
,
portName
=
"TestPort"
)
public
class
ServiceImpl
implements
TestPort
{
public
static
final
QName
PORT_NAME
=
new
QName
(
"http://ws.somewhere.org/"
,
"TestPort"
);
public
static
final
QName
SERVICE_NAME
=
new
QName
(
"http://ws.somewhere.org/"
,
"TestService"
);
@Override
public
EchoResponse
echo
(
EchoRequest
request
)
{
return
new
CopyingResponse
(
request
);
}
}
test/javax/xml/ws/xsanymixed/Test.java
0 → 100644
浏览文件 @
8255fd7b
此差异已折叠。
点击以展开。
test/javax/xml/ws/xsanymixed/compile-wsdl.sh
0 → 100644
浏览文件 @
8255fd7b
#! /bin/sh
#
# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.com if you need additional information or have any
# questions.
#
#
if
[
"x
$TESTJAVA
"
=
x
]
;
then
TESTJAVA
=
$1
;
shift
TESTCLASSES
=
.
fi
echo
"compiling [test-service.wsdl] wsdl ..."
$TESTJAVA
/bin/wsimport
-keep
-d
${
TESTCLASSES
}
${
TESTSRC
}
/service.wsdl
echo
"WSDL compiled. Main test class Test.java can be compiled now."
test/javax/xml/ws/xsanymixed/service.wsdl
0 → 100644
浏览文件 @
8255fd7b
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!--
Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
This code is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License version 2 only, as
published by the Free Software Foundation.
This code is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
version 2 for more details (a copy is included in the LICENSE file that
accompanied this code).
You should have received a copy of the GNU General Public License version
2 along with this work; if not, write to the Free Software Foundation,
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
or visit www.oracle.com if you need additional information or have any
questions.
-->
<definitions
xmlns=
"http://schemas.xmlsoap.org/wsdl/"
xmlns:soap=
"http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:tns=
"http://ws.somewhere.org/"
xmlns:xsd=
"http://www.w3.org/2001/XMLSchema"
xmlns:wsam=
"http://www.w3.org/2007/05/addressing/metadata"
name=
"TestService"
targetNamespace=
"http://ws.somewhere.org/"
>
<types>
<xsd:schema
targetNamespace=
"http://ws.somewhere.org/"
version=
"1.0"
xmlns:xsd=
"http://www.w3.org/2001/XMLSchema"
xmlns:tns=
"http://ws.somewhere.org/"
>
<xsd:element
type=
"tns:echoRequest"
name=
"echoRequest"
/>
<xsd:element
type=
"tns:echoResponse"
name=
"echoResponse"
/>
<xsd:complexType
name=
"echoRequest"
mixed=
"true"
>
<xsd:sequence>
<xsd:any
namespace=
"##any"
processContents=
"skip"
minOccurs=
"1"
maxOccurs=
"10"
/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType
name=
"echoResponse"
mixed=
"true"
>
<xsd:sequence>
<xsd:any
namespace=
"##any"
processContents=
"skip"
minOccurs=
"1"
maxOccurs=
"10"
/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
</types>
<message
name=
"echoRequest"
>
<part
element=
"tns:echoRequest"
name=
"parameters"
/>
</message>
<message
name=
"echoResponse"
>
<part
element=
"tns:echoResponse"
name=
"parameters"
/>
</message>
<portType
name=
"TestPort"
>
<operation
name=
"echo"
>
<input
message=
"tns:echoRequest"
wsam:Action=
"http://ws.somewhere.org/tester/echoRequest"
/>
<output
message=
"tns:echoResponse"
wsam:Action=
"http://ws.somewhere.org/tester/echoResponse"
/>
</operation>
</portType>
<binding
name=
"TestServicePortBinding"
type=
"tns:TestPort"
>
<soap:binding
style=
"document"
transport=
"http://schemas.xmlsoap.org/soap/http"
/>
<operation
name=
"echo"
>
<soap:operation
soapAction=
""
/>
<input>
<soap:body
use=
"literal"
/>
</input>
<output>
<soap:body
use=
"literal"
/>
</output>
</operation>
</binding>
<service
name=
"TestService"
>
<port
binding=
"tns:TestServicePortBinding"
name=
"TestPort"
>
<soap:address
location=
"http://localhost/ws/tester"
/>
</port>
</service>
</definitions>
test/sun/awt/datatransfer/DataFlavorComparatorTest1.java
0 → 100644
浏览文件 @
8255fd7b
此差异已折叠。
点击以展开。
test/sun/security/jgss/spnego/NotPreferredMech.java
0 → 100644
浏览文件 @
8255fd7b
此差异已折叠。
点击以展开。
test/sun/text/resources/LocaleData
浏览文件 @
8255fd7b
此差异已折叠。
点击以展开。
test/sun/text/resources/LocaleDataTest.java
浏览文件 @
8255fd7b
...
...
@@ -36,7 +36,7 @@
* 6919624 6998391 7019267 7020960 7025837 7020583 7036905 7066203 7101495
* 7003124 7085757 7028073 7171028 7189611 8000983 7195759 8004489 8006509
* 7114053 7074882 7040556 8013836 8021121 6192407 6931564 8027695 7090826
* 8017142 8037343 8055222
* 8017142 8037343 8055222
8042126
* @summary Verify locale data
*
*/
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录