Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_hotspot
提交
4315d18b
D
dragonwell8_hotspot
项目概览
openanolis
/
dragonwell8_hotspot
通知
2
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
dragonwell8_hotspot
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
4315d18b
编写于
12月 02, 2013
作者:
M
mgronlun
浏览文件
操作
浏览文件
下载
差异文件
Merge
上级
7e444a3c
842ffc72
变更
17
展开全部
显示空白变更内容
内联
并排
Showing
17 changed file
with
763 addition
and
63 deletion
+763
-63
.hgtags
.hgtags
+2
-0
make/hotspot_version
make/hotspot_version
+1
-1
src/share/vm/classfile/systemDictionary.hpp
src/share/vm/classfile/systemDictionary.hpp
+1
-0
src/share/vm/classfile/vmSymbols.hpp
src/share/vm/classfile/vmSymbols.hpp
+1
-0
src/share/vm/memory/universe.cpp
src/share/vm/memory/universe.cpp
+13
-0
src/share/vm/memory/universe.hpp
src/share/vm/memory/universe.hpp
+3
-0
src/share/vm/oops/klassVtable.cpp
src/share/vm/oops/klassVtable.cpp
+6
-1
src/share/vm/prims/jvmtiImpl.hpp
src/share/vm/prims/jvmtiImpl.hpp
+1
-1
test/compiler/jsr292/methodHandleExceptions/ByteClassLoader.java
...mpiler/jsr292/methodHandleExceptions/ByteClassLoader.java
+95
-8
test/compiler/jsr292/methodHandleExceptions/TestAMEnotNPE.java
...compiler/jsr292/methodHandleExceptions/TestAMEnotNPE.java
+400
-47
test/compiler/jsr292/methodHandleExceptions/p/C.java
test/compiler/jsr292/methodHandleExceptions/p/C.java
+5
-3
test/compiler/jsr292/methodHandleExceptions/p/Dok.java
test/compiler/jsr292/methodHandleExceptions/p/Dok.java
+6
-2
test/compiler/jsr292/methodHandleExceptions/p/E.java
test/compiler/jsr292/methodHandleExceptions/p/E.java
+38
-0
test/compiler/jsr292/methodHandleExceptions/p/F.java
test/compiler/jsr292/methodHandleExceptions/p/F.java
+41
-0
test/compiler/jsr292/methodHandleExceptions/p/I.java
test/compiler/jsr292/methodHandleExceptions/p/I.java
+37
-0
test/compiler/jsr292/methodHandleExceptions/p/Tdirect.java
test/compiler/jsr292/methodHandleExceptions/p/Tdirect.java
+47
-0
test/compiler/jsr292/methodHandleExceptions/p/Treflect.java
test/compiler/jsr292/methodHandleExceptions/p/Treflect.java
+66
-0
未找到文件。
.hgtags
浏览文件 @
4315d18b
...
@@ -397,3 +397,5 @@ e510dfdec6dd701410f3398ed86ebcdff0cca63a hs25-b58
...
@@ -397,3 +397,5 @@ e510dfdec6dd701410f3398ed86ebcdff0cca63a hs25-b58
c78d517c7ea47501b456e707afd4b78e7b5b202e hs25-b59
c78d517c7ea47501b456e707afd4b78e7b5b202e hs25-b59
f573d00213b7170c2ff856f9cd83cd148437f5b9 jdk8-b117
f573d00213b7170c2ff856f9cd83cd148437f5b9 jdk8-b117
abad3b2d905d9e1ad767c94baa94aba6ed5b207b hs25-b60
abad3b2d905d9e1ad767c94baa94aba6ed5b207b hs25-b60
c9f439732b18ea16f7e65815327d5ea7092cc258 jdk8-b118
b2426da30009cd3069d03de073f351e6432c7682 hs25-b61
make/hotspot_version
浏览文件 @
4315d18b
...
@@ -35,7 +35,7 @@ HOTSPOT_VM_COPYRIGHT=Copyright 2013
...
@@ -35,7 +35,7 @@ HOTSPOT_VM_COPYRIGHT=Copyright 2013
HS_MAJOR_VER=25
HS_MAJOR_VER=25
HS_MINOR_VER=0
HS_MINOR_VER=0
HS_BUILD_NUMBER=6
1
HS_BUILD_NUMBER=6
2
JDK_MAJOR_VER=1
JDK_MAJOR_VER=1
JDK_MINOR_VER=8
JDK_MINOR_VER=8
...
...
src/share/vm/classfile/systemDictionary.hpp
浏览文件 @
4315d18b
...
@@ -165,6 +165,7 @@ class Ticks;
...
@@ -165,6 +165,7 @@ class Ticks;
\
\
do_klass(StringBuffer_klass, java_lang_StringBuffer, Pre ) \
do_klass(StringBuffer_klass, java_lang_StringBuffer, Pre ) \
do_klass(StringBuilder_klass, java_lang_StringBuilder, Pre ) \
do_klass(StringBuilder_klass, java_lang_StringBuilder, Pre ) \
do_klass(misc_Unsafe_klass, sun_misc_Unsafe, Pre ) \
\
\
/* It's NULL in non-1.4 JDKs. */
\
/* It's NULL in non-1.4 JDKs. */
\
do_klass(StackTraceElement_klass, java_lang_StackTraceElement, Opt ) \
do_klass(StackTraceElement_klass, java_lang_StackTraceElement, Opt ) \
...
...
src/share/vm/classfile/vmSymbols.hpp
浏览文件 @
4315d18b
...
@@ -331,6 +331,7 @@
...
@@ -331,6 +331,7 @@
template(findNative_name, "findNative") \
template(findNative_name, "findNative") \
template(deadChild_name, "deadChild") \
template(deadChild_name, "deadChild") \
template(addClass_name, "addClass") \
template(addClass_name, "addClass") \
template(throwIllegalAccessError_name, "throwIllegalAccessError") \
template(getFromClass_name, "getFromClass") \
template(getFromClass_name, "getFromClass") \
template(dispatch_name, "dispatch") \
template(dispatch_name, "dispatch") \
template(getSystemClassLoader_name, "getSystemClassLoader") \
template(getSystemClassLoader_name, "getSystemClassLoader") \
...
...
src/share/vm/memory/universe.cpp
浏览文件 @
4315d18b
...
@@ -120,6 +120,7 @@ oop Universe::_null_ptr_exception_instance = NULL;
...
@@ -120,6 +120,7 @@ oop Universe::_null_ptr_exception_instance = NULL;
oop
Universe
::
_arithmetic_exception_instance
=
NULL
;
oop
Universe
::
_arithmetic_exception_instance
=
NULL
;
oop
Universe
::
_virtual_machine_error_instance
=
NULL
;
oop
Universe
::
_virtual_machine_error_instance
=
NULL
;
oop
Universe
::
_vm_exception
=
NULL
;
oop
Universe
::
_vm_exception
=
NULL
;
Method
*
Universe
::
_throw_illegal_access_error
=
NULL
;
Array
<
int
>*
Universe
::
_the_empty_int_array
=
NULL
;
Array
<
int
>*
Universe
::
_the_empty_int_array
=
NULL
;
Array
<
u2
>*
Universe
::
_the_empty_short_array
=
NULL
;
Array
<
u2
>*
Universe
::
_the_empty_short_array
=
NULL
;
Array
<
Klass
*>*
Universe
::
_the_empty_klass_array
=
NULL
;
Array
<
Klass
*>*
Universe
::
_the_empty_klass_array
=
NULL
;
...
@@ -1096,6 +1097,18 @@ bool universe_post_init() {
...
@@ -1096,6 +1097,18 @@ bool universe_post_init() {
Universe
::
_finalizer_register_cache
->
init
(
Universe
::
_finalizer_register_cache
->
init
(
SystemDictionary
::
Finalizer_klass
(),
m
);
SystemDictionary
::
Finalizer_klass
(),
m
);
InstanceKlass
::
cast
(
SystemDictionary
::
misc_Unsafe_klass
())
->
link_class
(
CHECK_false
);
m
=
InstanceKlass
::
cast
(
SystemDictionary
::
misc_Unsafe_klass
())
->
find_method
(
vmSymbols
::
throwIllegalAccessError_name
(),
vmSymbols
::
void_method_signature
());
if
(
m
!=
NULL
&&
!
m
->
is_static
())
{
// Note null is okay; this method is used in itables, and if it is null,
// then AbstractMethodError is thrown instead.
tty
->
print_cr
(
"Unable to link/verify Unsafe.throwIllegalAccessError method"
);
return
false
;
// initialization failed (cannot throw exception yet)
}
Universe
::
_throw_illegal_access_error
=
m
;
// Setup method for registering loaded classes in class loader vector
// Setup method for registering loaded classes in class loader vector
InstanceKlass
::
cast
(
SystemDictionary
::
ClassLoader_klass
())
->
link_class
(
CHECK_false
);
InstanceKlass
::
cast
(
SystemDictionary
::
ClassLoader_klass
())
->
link_class
(
CHECK_false
);
m
=
InstanceKlass
::
cast
(
SystemDictionary
::
ClassLoader_klass
())
->
find_method
(
vmSymbols
::
addClass_name
(),
vmSymbols
::
class_void_signature
());
m
=
InstanceKlass
::
cast
(
SystemDictionary
::
ClassLoader_klass
())
->
find_method
(
vmSymbols
::
addClass_name
(),
vmSymbols
::
class_void_signature
());
...
...
src/share/vm/memory/universe.hpp
浏览文件 @
4315d18b
...
@@ -149,6 +149,8 @@ class Universe: AllStatic {
...
@@ -149,6 +149,8 @@ class Universe: AllStatic {
static
LatestMethodCache
*
_loader_addClass_cache
;
// method for registering loaded classes in class loader vector
static
LatestMethodCache
*
_loader_addClass_cache
;
// method for registering loaded classes in class loader vector
static
LatestMethodCache
*
_pd_implies_cache
;
// method for checking protection domain attributes
static
LatestMethodCache
*
_pd_implies_cache
;
// method for checking protection domain attributes
static
Method
*
_throw_illegal_access_error
;
// preallocated error objects (no backtrace)
// preallocated error objects (no backtrace)
static
oop
_out_of_memory_error_java_heap
;
static
oop
_out_of_memory_error_java_heap
;
static
oop
_out_of_memory_error_metaspace
;
static
oop
_out_of_memory_error_metaspace
;
...
@@ -305,6 +307,7 @@ class Universe: AllStatic {
...
@@ -305,6 +307,7 @@ class Universe: AllStatic {
static
oop
arithmetic_exception_instance
()
{
return
_arithmetic_exception_instance
;
}
static
oop
arithmetic_exception_instance
()
{
return
_arithmetic_exception_instance
;
}
static
oop
virtual_machine_error_instance
()
{
return
_virtual_machine_error_instance
;
}
static
oop
virtual_machine_error_instance
()
{
return
_virtual_machine_error_instance
;
}
static
oop
vm_exception
()
{
return
_vm_exception
;
}
static
oop
vm_exception
()
{
return
_vm_exception
;
}
static
Method
*
throw_illegal_access_error
()
{
return
_throw_illegal_access_error
;
}
static
Array
<
int
>*
the_empty_int_array
()
{
return
_the_empty_int_array
;
}
static
Array
<
int
>*
the_empty_int_array
()
{
return
_the_empty_int_array
;
}
static
Array
<
u2
>*
the_empty_short_array
()
{
return
_the_empty_short_array
;
}
static
Array
<
u2
>*
the_empty_short_array
()
{
return
_the_empty_short_array
;
}
...
...
src/share/vm/oops/klassVtable.cpp
浏览文件 @
4315d18b
...
@@ -1076,7 +1076,12 @@ void klassItable::initialize_itable_for_interface(int method_table_offset, Klass
...
@@ -1076,7 +1076,12 @@ void klassItable::initialize_itable_for_interface(int method_table_offset, Klass
LinkResolver
::
lookup_instance_method_in_klasses
(
target
,
_klass
,
m
->
name
(),
m
->
signature
(),
CHECK
);
LinkResolver
::
lookup_instance_method_in_klasses
(
target
,
_klass
,
m
->
name
(),
m
->
signature
(),
CHECK
);
}
}
if
(
target
==
NULL
||
!
target
->
is_public
()
||
target
->
is_abstract
())
{
if
(
target
==
NULL
||
!
target
->
is_public
()
||
target
->
is_abstract
())
{
// Entry do not resolve. Leave it empty
// Entry does not resolve. Leave it empty for AbstractMethodError.
if
(
!
(
target
==
NULL
)
&&
!
target
->
is_public
())
{
// Stuff an IllegalAccessError throwing method in there instead.
itableOffsetEntry
::
method_entry
(
_klass
(),
method_table_offset
)[
m
->
itable_index
()].
initialize
(
Universe
::
throw_illegal_access_error
());
}
}
else
{
}
else
{
// Entry did resolve, check loader constraints before initializing
// Entry did resolve, check loader constraints before initializing
// if checkconstraints requested
// if checkconstraints requested
...
...
src/share/vm/prims/jvmtiImpl.hpp
浏览文件 @
4315d18b
...
@@ -299,7 +299,7 @@ public:
...
@@ -299,7 +299,7 @@ public:
static
inline
bool
is_breakpoint
(
address
bcp
);
static
inline
bool
is_breakpoint
(
address
bcp
);
static
void
oops_do
(
OopClosure
*
f
);
static
void
oops_do
(
OopClosure
*
f
);
static
void
metadata_do
(
void
f
(
Metadata
*
));
static
void
metadata_do
(
void
f
(
Metadata
*
))
NOT_JVMTI_RETURN
;
static
void
gc_epilogue
();
static
void
gc_epilogue
();
};
};
...
...
test/compiler/jsr292/methodHandleExceptions/ByteClassLoader.java
浏览文件 @
4315d18b
import
java.io.BufferedOutputStream
;
import
java.io.FileNotFoundException
;
import
java.io.FileOutputStream
;
import
java.io.IOException
;
import
java.net.URL
;
import
java.net.URLClassLoader
;
import
java.util.jar.JarEntry
;
import
java.util.jar.JarOutputStream
;
/*
/*
* Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
...
@@ -23,12 +32,63 @@
...
@@ -23,12 +32,63 @@
*/
*/
/**
/**
* A minimal classloader for loading bytecodes that could not result from
* A ByteClassLoader is used to define classes from collections of bytes, as
* properly compiled Java.
* well as loading classes in the usual way. It includes options to write the
* classes to files in a jar, or to read the classes from jars in a later or
* debugging run.
*
* If Boolean property byteclassloader.verbose is true, be chatty about jar
* file operations.
*
*
* @author dr2chase
*/
*/
public
class
ByteClassLoader
extends
ClassLoader
{
public
class
ByteClassLoader
extends
URLClassLoader
{
final
static
boolean
verbose
=
Boolean
.
getBoolean
(
"byteclassloader.verbose"
);
final
boolean
read
;
final
JarOutputStream
jos
;
final
String
jar_name
;
/**
* Make a new ByteClassLoader.
*
* @param jar_name Basename of jar file to be read/written by this classloader.
* @param read If true, read classes from jar file instead of from parameter.
* @param write If true, write classes to jar files for offline study/use.
*
* @throws FileNotFoundException
* @throws IOException
*/
public
ByteClassLoader
(
String
jar_name
,
boolean
read
,
boolean
write
)
throws
FileNotFoundException
,
IOException
{
super
(
read
?
new
URL
[]{
new
URL
(
"file:"
+
jar_name
+
".jar"
)}
:
new
URL
[
0
]);
this
.
read
=
read
;
this
.
jar_name
=
jar_name
;
this
.
jos
=
write
?
new
JarOutputStream
(
new
BufferedOutputStream
(
new
FileOutputStream
(
jar_name
+
".jar"
)))
:
null
;
if
(
read
&&
write
)
{
throw
new
Error
(
"At most one of read and write may be true."
);
}
}
private
static
void
writeJarredFile
(
JarOutputStream
jos
,
String
file
,
String
suffix
,
byte
[]
bytes
)
{
String
fileName
=
file
.
replace
(
"."
,
"/"
)
+
"."
+
suffix
;
JarEntry
ze
=
new
JarEntry
(
fileName
);
try
{
ze
.
setSize
(
bytes
.
length
);
jos
.
putNextEntry
(
ze
);
jos
.
write
(
bytes
);
jos
.
closeEntry
();
}
catch
(
IOException
e
)
{
throw
new
RuntimeException
(
e
);
}
}
/**
/**
* (pre)load class name using classData for the definition.
* (pre)load class name using classData for the definition.
*
*
...
@@ -36,9 +96,36 @@ public class ByteClassLoader extends ClassLoader {
...
@@ -36,9 +96,36 @@ public class ByteClassLoader extends ClassLoader {
* @param classData
* @param classData
* @return
* @return
*/
*/
public
Class
<?>
loadBytes
(
String
name
,
byte
[]
classData
)
{
public
Class
<?>
loadBytes
(
String
name
,
byte
[]
classData
)
throws
ClassNotFoundException
{
Class
<?>
clazz
=
defineClass
(
name
,
classData
,
0
,
classData
.
length
);
if
(
jos
!=
null
)
{
if
(
verbose
)
{
System
.
out
.
println
(
"ByteClassLoader: writing "
+
name
);
}
writeJarredFile
(
jos
,
name
,
"class"
,
classData
);
}
Class
<?>
clazz
=
null
;
if
(
read
)
{
if
(
verbose
)
{
System
.
out
.
println
(
"ByteClassLoader: reading "
+
name
+
" from "
+
jar_name
);
}
clazz
=
loadClass
(
name
);
}
else
{
clazz
=
defineClass
(
name
,
classData
,
0
,
classData
.
length
);
resolveClass
(
clazz
);
resolveClass
(
clazz
);
}
return
clazz
;
return
clazz
;
}
}
public
void
close
()
{
if
(
jos
!=
null
)
{
try
{
if
(
verbose
)
{
System
.
out
.
println
(
"ByteClassLoader: closing "
+
jar_name
);
}
jos
.
close
();
}
catch
(
IOException
ex
)
{
}
}
}
}
}
test/compiler/jsr292/methodHandleExceptions/TestAMEnotNPE.java
浏览文件 @
4315d18b
此差异已折叠。
点击以展开。
test/compiler/jsr292/methodHandleExceptions/C.java
→
test/compiler/jsr292/methodHandleExceptions/
p/
C.java
浏览文件 @
4315d18b
...
@@ -22,12 +22,14 @@
...
@@ -22,12 +22,14 @@
*
*
*/
*/
package
p
;
/**
/**
* Test class -- implements I, which provides default for m, but this class
* Test class -- implements I, which provides default for m, but this class
* declares it abstract which (should) hide the interface default, and throw
* declares it abstract which (should) hide the interface default, and throw
* an abstract method error if
it is called (calling it requires bytecode hacking
* an abstract method error if
called.
*
or inconsistent compilation).
*
*/
*/
public
abstract
class
C
implements
I
{
public
abstract
class
C
implements
p
.
I
{
public
abstract
int
m
();
public
abstract
int
m
();
}
}
test/compiler/jsr292/methodHandleExceptions/
I
.java
→
test/compiler/jsr292/methodHandleExceptions/
p/Dok
.java
浏览文件 @
4315d18b
...
@@ -21,7 +21,11 @@
...
@@ -21,7 +21,11 @@
* questions.
* questions.
*
*
*/
*/
package
p
;
/**
* Test class -- implements I, extends E, both define m, so all should be well.
*/
public
class
Dok
extends
p
.
E
{
public
interface
I
{
default
public
int
m
()
{
return
1
;
}
}
}
test/compiler/jsr292/methodHandleExceptions/p/E.java
0 → 100644
浏览文件 @
4315d18b
/*
* 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.
*
*/
package
p
;
/**
* Test class -- implements I, which provides default for m, but this class
* redeclares it so that all its non-overriding descendants should call its
* method instead (with no error, assuming no descendant monkey business, which
* of course is NOT usually the case in this test).
*
*/
public
abstract
class
E
implements
p
.
I
{
public
int
m
()
{
return
2
;
}
}
test/compiler/jsr292/methodHandleExceptions/p/F.java
0 → 100644
浏览文件 @
4315d18b
/*
* 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.
*
*/
package
p
;
/**
* Test class -- implements I, which provides default for m, but this class
* redeclares it so that all its non-overriding descendants should call its
* method instead (with no error, assuming no descendant monkey business, which
* of course is NOT usually the case in this test).
*
* Note that m is final -- one form of monkey business is attempting to redefine
* m.
*
*/
public
abstract
class
F
implements
p
.
I
{
final
public
int
m
()
{
return
2
;
}
}
test/compiler/jsr292/methodHandleExceptions/p/I.java
0 → 100644
浏览文件 @
4315d18b
/*
* 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.
*
*/
package
p
;
/**
* Test interface I, provides default implementations for m() and m(11args).
*/
public
interface
I
{
default
public
int
m
()
{
return
1
;
}
default
public
int
m
(
byte
b
,
char
c
,
short
s
,
int
i
,
long
l
,
Object
o1
,
Object
o2
,
Object
o3
,
Object
o4
,
Object
o5
,
Object
o6
)
{
return
2
;
}
}
test/compiler/jsr292/methodHandleExceptions/p/Tdirect.java
0 → 100644
浏览文件 @
4315d18b
/*
* 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.
*
*/
package
p
;
/**
* Invokes I.m directly using invokeInterface bytecodes.
*/
public
class
Tdirect
{
public
static
int
test
(
p
.
I
i
)
{
int
accum
=
0
;
for
(
int
j
=
0
;
j
<
100000
;
j
++)
{
accum
+=
i
.
m
();
}
return
accum
;
}
public
static
int
test
(
p
.
I
ii
,
byte
b
,
char
c
,
short
s
,
int
i
,
long
l
,
Object
o1
,
Object
o2
,
Object
o3
,
Object
o4
,
Object
o5
,
Object
o6
)
{
int
accum
=
0
;
for
(
int
j
=
0
;
j
<
100000
;
j
++)
{
accum
+=
ii
.
m
(
b
,
c
,
s
,
i
,
l
,
o1
,
o2
,
o3
,
o4
,
o5
,
o6
);
}
return
accum
;
}
}
test/compiler/jsr292/methodHandleExceptions/p/Treflect.java
0 → 100644
浏览文件 @
4315d18b
/*
* 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.
*
*/
package
p
;
import
java.lang.reflect.InvocationTargetException
;
import
java.lang.reflect.Method
;
/**
* Invokes I.m using reflection.
*/
public
class
Treflect
{
public
static
int
test
(
p
.
I
ii
)
throws
Throwable
{
int
accum
=
0
;
Method
m
=
p
.
I
.
class
.
getMethod
(
"m"
);
try
{
for
(
int
j
=
0
;
j
<
100000
;
j
++)
{
Object
o
=
m
.
invoke
(
ii
);
accum
+=
((
Integer
)
o
).
intValue
();
}
}
catch
(
InvocationTargetException
ite
)
{
throw
ite
.
getCause
();
}
return
accum
;
}
public
static
int
test
(
p
.
I
ii
,
byte
b
,
char
c
,
short
s
,
int
i
,
long
l
,
Object
o1
,
Object
o2
,
Object
o3
,
Object
o4
,
Object
o5
,
Object
o6
)
throws
Throwable
{
Method
m
=
p
.
I
.
class
.
getMethod
(
"m"
,
Byte
.
TYPE
,
Character
.
TYPE
,
Short
.
TYPE
,
Integer
.
TYPE
,
Long
.
TYPE
,
Object
.
class
,
Object
.
class
,
Object
.
class
,
Object
.
class
,
Object
.
class
,
Object
.
class
);
int
accum
=
0
;
try
{
for
(
int
j
=
0
;
j
<
100000
;
j
++)
{
Object
o
=
m
.
invoke
(
ii
,
b
,
c
,
s
,
i
,
l
,
o1
,
o2
,
o3
,
o4
,
o5
,
o6
);
accum
+=
((
Integer
)
o
).
intValue
();
}
}
catch
(
InvocationTargetException
ite
)
{
throw
ite
.
getCause
();
}
return
accum
;
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录