Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_jdk
提交
edcc5df8
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看板
提交
edcc5df8
编写于
8月 28, 2014
作者:
D
dwanvik
浏览文件
操作
浏览文件
下载
差异文件
Merge
上级
40b705b2
12b2cd75
变更
11
隐藏空白更改
内联
并排
Showing
11 changed file
with
178 addition
and
49 deletion
+178
-49
.hgtags
.hgtags
+2
-0
src/share/classes/java/lang/reflect/Constructor.java
src/share/classes/java/lang/reflect/Constructor.java
+23
-5
src/share/classes/java/lang/reflect/Executable.java
src/share/classes/java/lang/reflect/Executable.java
+13
-10
src/share/classes/sun/awt/ComponentFactory.java
src/share/classes/sun/awt/ComponentFactory.java
+4
-0
src/share/classes/sun/awt/HeadlessToolkit.java
src/share/classes/sun/awt/HeadlessToolkit.java
+7
-0
src/share/classes/sun/awt/SunToolkit.java
src/share/classes/sun/awt/SunToolkit.java
+0
-2
src/share/classes/sun/awt/datatransfer/DataTransferer.java
src/share/classes/sun/awt/datatransfer/DataTransferer.java
+2
-1
src/solaris/native/sun/nio/fs/UnixNativeDispatcher.c
src/solaris/native/sun/nio/fs/UnixNativeDispatcher.c
+8
-9
test/java/lang/annotation/typeAnnotations/ConstructorReceiverTest.java
...g/annotation/typeAnnotations/ConstructorReceiverTest.java
+31
-7
test/java/lang/annotation/typeAnnotations/GetAnnotatedReceiverType.java
.../annotation/typeAnnotations/GetAnnotatedReceiverType.java
+88
-13
test/java/lang/annotation/typeAnnotations/TestExecutableGetAnnotatedType.java
...ation/typeAnnotations/TestExecutableGetAnnotatedType.java
+0
-2
未找到文件。
.hgtags
浏览文件 @
edcc5df8
...
...
@@ -313,3 +313,5 @@ dfb9f24d56b51e5a2ca26e77fc69a2464d51a4d3 jdk8u20-b24
dfb9f24d56b51e5a2ca26e77fc69a2464d51a4d3 jdk8u20-b25
dd229c5f57bff4e75a70908294a13072b9a48385 jdk8u20-b26
e6ed015afbbf3459ba3297e270b4f3170e989c80 jdk8u40-b00
6e223d48080ef40f4ec11ecbcd19b4a20813b9eb jdk8u40-b01
4797cd0713b44b009525f1276d571ade7e24f3f5 jdk8u40-b02
src/share/classes/java/lang/reflect/Constructor.java
浏览文件 @
edcc5df8
...
...
@@ -543,15 +543,33 @@ public final class Constructor<T> extends Executable {
*/
@Override
public
AnnotatedType
getAnnotatedReceiverType
()
{
if
(
getDeclaringClass
().
getEnclosingClass
()
==
null
)
return
super
.
getAnnotatedReceiverType
();
Class
<?>
thisDeclClass
=
getDeclaringClass
();
Class
<?>
enclosingClass
=
thisDeclClass
.
getEnclosingClass
();
if
(
enclosingClass
==
null
)
{
// A Constructor for a top-level class
return
null
;
}
Class
<?>
outerDeclaringClass
=
thisDeclClass
.
getDeclaringClass
();
if
(
outerDeclaringClass
==
null
)
{
// A constructor for a local or anonymous class
return
null
;
}
// Either static nested or inner class
if
(
Modifier
.
isStatic
(
thisDeclClass
.
getModifiers
()))
{
// static nested
return
null
;
}
// A Constructor for an inner class
return
TypeAnnotationParser
.
buildAnnotatedType
(
getTypeAnnotationBytes0
(),
sun
.
misc
.
SharedSecrets
.
getJavaLangAccess
().
getConstantPool
(
getDeclaringClass
()
),
getConstantPool
(
thisDeclClass
),
this
,
getDeclaringClass
()
,
getDeclaringClass
().
getEnclosingClass
()
,
thisDeclClass
,
enclosingClass
,
TypeAnnotation
.
TypeAnnotationTarget
.
METHOD_RECEIVER
);
}
}
src/share/classes/java/lang/reflect/Executable.java
浏览文件 @
edcc5df8
...
...
@@ -592,21 +592,24 @@ public abstract class Executable extends AccessibleObject
/**
* Returns an {@code AnnotatedType} object that represents the use of a
* type to specify the receiver type of the method/constructor represented
* by this Executable object. The receiver type of a method/constructor is
* available only if the method/constructor has a <em>receiver
* parameter</em> (JLS 8.4.1).
* by this {@code Executable} object.
*
* If this {@code Executable} object represents a constructor or instance
* method that does not have a receiver parameter, or has a receiver
* parameter with no annotations on its type, then the return value is an
* {@code AnnotatedType} object representing an element with no
* The receiver type of a method/constructor is available only if the
* method/constructor has a receiver parameter (JLS 8.4.1). If this {@code
* Executable} object <em>represents an instance method or represents a
* constructor of an inner member class</em>, and the
* method/constructor <em>either</em> has no receiver parameter or has a
* receiver parameter with no annotations on its type, then the return
* value is an {@code AnnotatedType} object representing an element with no
* annotations.
*
* If this {@code Executable} object represents a static method, then the
* return value is null.
* If this {@code Executable} object represents a static method or
* represents a constructor of a top level, static member, local, or
* anoymous class, then the return value is null.
*
* @return an object representing the receiver type of the method or
* constructor represented by this {@code Executable}
* constructor represented by this {@code Executable} or {@code null} if
* this {@code Executable} can not have a receiver parameter
*
* @since 1.8
*/
...
...
src/share/classes/sun/awt/ComponentFactory.java
浏览文件 @
edcc5df8
...
...
@@ -25,6 +25,8 @@
package
sun.awt
;
import
sun.awt.datatransfer.DataTransferer
;
import
java.awt.*
;
import
java.awt.dnd.*
;
import
java.awt.dnd.peer.DragSourceContextPeer
;
...
...
@@ -93,4 +95,6 @@ public interface ComponentFactory {
RobotPeer
createRobot
(
Robot
target
,
GraphicsDevice
screen
)
throws
AWTException
,
HeadlessException
;
DataTransferer
getDataTransferer
();
}
src/share/classes/sun/awt/HeadlessToolkit.java
浏览文件 @
edcc5df8
...
...
@@ -25,6 +25,8 @@
package
sun.awt
;
import
sun.awt.datatransfer.DataTransferer
;
import
java.awt.*
;
import
java.awt.dnd.*
;
import
java.awt.dnd.peer.DragSourceContextPeer
;
...
...
@@ -401,6 +403,11 @@ public class HeadlessToolkit extends Toolkit
return
null
;
}
@Override
public
DataTransferer
getDataTransferer
()
{
return
null
;
}
@SuppressWarnings
(
"deprecation"
)
public
FontMetrics
getFontMetrics
(
Font
font
)
{
return
tk
.
getFontMetrics
(
font
);
...
...
src/share/classes/sun/awt/SunToolkit.java
浏览文件 @
edcc5df8
...
...
@@ -205,8 +205,6 @@ public abstract class SunToolkit extends Toolkit
public
abstract
boolean
isTraySupported
();
public
abstract
DataTransferer
getDataTransferer
();
@SuppressWarnings
(
"deprecation"
)
public
abstract
FontPeer
getFontPeer
(
String
name
,
int
style
);
...
...
src/share/classes/sun/awt/datatransfer/DataTransferer.java
浏览文件 @
edcc5df8
...
...
@@ -86,6 +86,7 @@ import java.util.Stack;
import
java.util.TreeMap
;
import
java.util.TreeSet
;
import
sun.awt.ComponentFactory
;
import
sun.util.logging.PlatformLogger
;
import
sun.awt.AppContext
;
...
...
@@ -272,7 +273,7 @@ public abstract class DataTransferer {
* instead, null will be returned.
*/
public
static
synchronized
DataTransferer
getInstance
()
{
return
((
SunToolkit
)
Toolkit
.
getDefaultToolkit
()).
getDataTransferer
();
return
((
ComponentFactory
)
Toolkit
.
getDefaultToolkit
()).
getDataTransferer
();
}
/**
...
...
src/solaris/native/sun/nio/fs/UnixNativeDispatcher.c
浏览文件 @
edcc5df8
...
...
@@ -315,7 +315,7 @@ Java_sun_nio_fs_UnixNativeDispatcher_dup(JNIEnv* env, jclass this, jint fd) {
int
res
=
-
1
;
RESTARTABLE
(
dup
((
int
)
fd
),
res
);
if
(
fd
==
-
1
)
{
if
(
res
==
-
1
)
{
throwUnixException
(
env
,
errno
);
}
return
(
jint
)
res
;
...
...
@@ -343,13 +343,14 @@ Java_sun_nio_fs_UnixNativeDispatcher_fopen0(JNIEnv* env, jclass this,
JNIEXPORT
void
JNICALL
Java_sun_nio_fs_UnixNativeDispatcher_fclose
(
JNIEnv
*
env
,
jclass
this
,
jlong
stream
)
{
int
res
;
FILE
*
fp
=
jlong_to_ptr
(
stream
);
do
{
res
=
fclose
(
fp
);
}
while
(
res
==
EOF
&&
errno
==
EINTR
);
if
(
res
==
EOF
)
{
/* NOTE: fclose() wrapper is only used with read-only streams.
* If it ever is used with write streams, it might be better to add
* RESTARTABLE(fflush(fp)) before closing, to make sure the stream
* is completely written even if fclose() failed.
*/
if
(
fclose
(
fp
)
==
EOF
&&
errno
!=
EINTR
)
{
throwUnixException
(
env
,
errno
);
}
}
...
...
@@ -657,11 +658,9 @@ Java_sun_nio_fs_UnixNativeDispatcher_fdopendir(JNIEnv* env, jclass this, int dfd
JNIEXPORT
void
JNICALL
Java_sun_nio_fs_UnixNativeDispatcher_closedir
(
JNIEnv
*
env
,
jclass
this
,
jlong
dir
)
{
int
err
;
DIR
*
dirp
=
jlong_to_ptr
(
dir
);
RESTARTABLE
(
closedir
(
dirp
),
err
);
if
(
errno
==
-
1
)
{
if
(
closedir
(
dirp
)
==
-
1
&&
errno
!=
EINTR
)
{
throwUnixException
(
env
,
errno
);
}
}
...
...
test/java/lang/annotation/typeAnnotations/ConstructorReceiverTest.java
浏览文件 @
edcc5df8
...
...
@@ -23,7 +23,7 @@
/*
* @test
* @bug 8023651
* @bug 8023651
8044629
* @summary Test that the receiver annotations and the return annotations of
* constructors behave correctly.
* @run testng ConstructorReceiverTest
...
...
@@ -38,11 +38,16 @@ import org.testng.annotations.Test;
import
static
org
.
testng
.
Assert
.*;
public
class
ConstructorReceiverTest
{
public
static
final
Integer
EMPTY_ANNOTATED_TYPE
=
Integer
.
valueOf
(-
1
);
// Format is {
// { Class to get ctor for,
// ctor param class,
// value of anno of return type,
// value of anno for receiver or null if there should be no receiver anno
// value of anno for receiver,
// or null if there should be no receiver,
// or EMPTY_ANNOTATED_TYPE of there should be a receiver but
// no annotation
// },
// ...
// }
...
...
@@ -51,13 +56,15 @@ public class ConstructorReceiverTest {
{
ConstructorReceiverTest
.
Middle
.
class
,
ConstructorReceiverTest
.
class
,
Integer
.
valueOf
(
10
),
Integer
.
valueOf
(
15
)
},
{
ConstructorReceiverTest
.
Middle
.
Inner
.
class
,
ConstructorReceiverTest
.
Middle
.
class
,
Integer
.
valueOf
(
100
),
Integer
.
valueOf
(
150
)
},
{
ConstructorReceiverTest
.
Middle
.
Inner
.
Innermost
.
class
,
ConstructorReceiverTest
.
Middle
.
Inner
.
class
,
Integer
.
valueOf
(
1000
),
Integer
.
valueOf
(
1500
)
},
{
ConstructorReceiverTest
.
Middle
.
InnerNoReceiver
.
class
,
ConstructorReceiverTest
.
Middle
.
class
,
Integer
.
valueOf
(
300
),
null
},
{
ConstructorReceiverTest
.
Middle
.
InnerNoReceiver
.
class
,
ConstructorReceiverTest
.
Middle
.
class
,
Integer
.
valueOf
(
300
),
EMPTY_ANNOTATED_TYPE
},
{
ConstructorReceiverTest
.
Nested
.
class
,
null
,
Integer
.
valueOf
(
20
),
null
},
{
ConstructorReceiverTest
.
Nested
.
NestedMiddle
.
class
,
ConstructorReceiverTest
.
Nested
.
class
,
Integer
.
valueOf
(
200
),
Integer
.
valueOf
(
250
)},
{
ConstructorReceiverTest
.
Nested
.
NestedMiddle
.
NestedInner
.
class
,
ConstructorReceiverTest
.
Nested
.
NestedMiddle
.
class
,
Integer
.
valueOf
(
2000
),
Integer
.
valueOf
(
2500
)},
{
ConstructorReceiverTest
.
Nested
.
NestedMiddle
.
NestedInnerNoReceiver
.
class
,
ConstructorReceiverTest
.
Nested
.
NestedMiddle
.
class
,
Integer
.
valueOf
(
4000
),
null
},
{
ConstructorReceiverTest
.
Nested
.
NestedMiddle
.
NestedInnerNoReceiver
.
class
,
ConstructorReceiverTest
.
Nested
.
NestedMiddle
.
class
,
Integer
.
valueOf
(
4000
),
EMPTY_ANNOTATED_TYPE
},
{
ConstructorReceiverTest
.
Nested
.
NestedMiddle
.
SecondNestedInnerNoReceiver
.
class
,
ConstructorReceiverTest
.
Nested
.
NestedMiddle
.
class
,
Integer
.
valueOf
(
5000
),
EMPTY_ANNOTATED_TYPE
},
};
@DataProvider
public
Object
[][]
data
()
{
return
TESTS
;
}
...
...
@@ -71,14 +78,27 @@ public class ConstructorReceiverTest {
c
=
toTest
.
getDeclaredConstructor
(
ctorParamType
);
AnnotatedType
annotatedReceiverType
=
c
.
getAnnotatedReceiverType
();
Annotation
[]
receiverAnnotations
=
annotatedReceiverType
.
getAnnotations
();
// Some Constructors doesn't conceptually have a receiver, they should return null
if
(
receiverVal
==
null
)
{
assertEquals
(
receiverAnnotations
.
length
,
0
,
Arrays
.
asList
(
receiverAnnotations
).
toString
()
+
" should be empty. Looking at 'length': "
);
assertNull
(
annotatedReceiverType
,
"getAnnotatedReciverType should return null for Constructor: "
+
c
);
return
;
}
// check that getType() matches the receiver
assertEquals
(
annotatedReceiverType
.
getType
(),
ctorParamType
,
"getType() doesn't match receiver type: "
+
ctorParamType
);
Annotation
[]
receiverAnnotations
=
annotatedReceiverType
.
getAnnotations
();
// Some Constructors have no annotations on but in theory can have a receiver
if
(
receiverVal
.
equals
(
EMPTY_ANNOTATED_TYPE
))
{
assertEquals
(
receiverAnnotations
.
length
,
0
,
"expecting an empty annotated type for: "
+
c
);
return
;
}
// The rest should have annotations
assertEquals
(
receiverAnnotations
.
length
,
1
,
"expecting a 1 element array. Looking at 'length': "
);
assertEquals
(((
Annot
)
receiverAnnotations
[
0
]).
value
(),
receiverVal
.
intValue
(),
" wrong annotation found. Found "
+
receiverAnnotations
[
0
]
+
...
...
@@ -136,6 +156,10 @@ public class ConstructorReceiverTest {
class
NestedInnerNoReceiver
{
@Annot
(
4000
)
public
NestedInnerNoReceiver
()
{}
}
class
SecondNestedInnerNoReceiver
{
@Annot
(
5000
)
public
SecondNestedInnerNoReceiver
(
NestedMiddle
NestedMiddle
.
this
)
{}
}
}
}
...
...
test/java/lang/annotation/typeAnnotations/GetAnnotatedReceiverType.java
浏览文件 @
edcc5df8
/*
* Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2013,
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
...
...
@@ -23,10 +23,11 @@
/*
* @test
* @bug 8024915
* @bug 8024915
8044629
*/
import
java.lang.reflect.AnnotatedType
;
import
java.lang.reflect.Executable
;
import
java.util.Arrays
;
public
class
GetAnnotatedReceiverType
{
...
...
@@ -42,41 +43,115 @@ public class GetAnnotatedReceiverType {
public
Inner1
(
GetAnnotatedReceiverType
GetAnnotatedReceiverType
.
this
)
{}
}
public
static
class
Nested
{
public
Nested
()
{}
public
class
NestedInner
{
public
NestedInner
()
{
}
public
Class
<?>
getLocalClass
()
{
class
NestedInnerLocal
{
public
NestedInnerLocal
()
{}
}
return
NestedInnerLocal
.
class
;
}
public
Class
<?>
getAnonymousClass
()
{
return
new
Object
()
{}.
getClass
();
}
}
}
public
class
Inner2
{
public
Inner2
()
{
}
public
class
Inner3
{
public
Inner3
()
{
}
public
Class
<?>
getLocalClass
()
{
class
InnerLocal
{
public
InnerLocal
()
{}
}
return
InnerLocal
.
class
;
}
public
Class
<?>
getAnonymousClass
()
{
return
new
Object
()
{}.
getClass
();
}
}
public
Class
<?>
getLocalClass
()
{
class
InnerLocal
{
public
InnerLocal
()
{}
}
return
InnerLocal
.
class
;
}
public
Class
<?>
getAnonymousClass
()
{
return
new
Object
()
{}.
getClass
();
}
}
private
static
int
failures
=
0
;
private
static
int
tests
=
0
;
public
static
void
main
(
String
[]
args
)
throws
NoSuchMethodException
{
checkEmptyAT
(
GetAnnotatedReceiverType
.
class
.
getMethod
(
"method"
)
.
getAnnotatedReceiverType
()
,
checkEmptyAT
(
GetAnnotatedReceiverType
.
class
.
getMethod
(
"method"
),
"getAnnotatedReceiverType for \"method\" should return an empty AnnotatedType"
);
checkEmptyAT
(
Inner0
.
class
.
getConstructor
(
GetAnnotatedReceiverType
.
class
)
.
getAnnotatedReceiverType
()
,
checkEmptyAT
(
Inner0
.
class
.
getConstructor
(
GetAnnotatedReceiverType
.
class
),
"getAnnotatedReceiverType for a ctor without a \"this\" should return an empty AnnotatedType"
);
checkEmptyAT
(
GetAnnotatedReceiverType
.
class
.
getMethod
(
"method0"
)
.
getAnnotatedReceiverType
()
,
checkEmptyAT
(
GetAnnotatedReceiverType
.
class
.
getMethod
(
"method0"
),
"getAnnotatedReceiverType for \"method0\" should return an empty AnnotatedType"
);
checkEmptyAT
(
Inner1
.
class
.
getConstructor
(
GetAnnotatedReceiverType
.
class
)
.
getAnnotatedReceiverType
()
,
checkEmptyAT
(
Inner1
.
class
.
getConstructor
(
GetAnnotatedReceiverType
.
class
),
"getAnnotatedReceiverType for a ctor with a \"this\" should return an empty AnnotatedType"
);
checkNull
(
GetAnnotatedReceiverType
.
class
.
getMethod
(
"method4"
)
.
getAnnotatedReceiverType
()
,
checkNull
(
GetAnnotatedReceiverType
.
class
.
getMethod
(
"method4"
),
"getAnnotatedReceiverType() on a static method should return null"
);
// More nested, inner, local and anonymous classes
Nested
nested
=
new
Nested
();
Nested
.
NestedInner
instance
=
nested
.
new
NestedInner
();
checkNull
(
nested
.
getClass
().
getConstructors
()[
0
],
"getAnnotatedReceiverType() on a constructor for a static class should return null"
);
checkEmptyAT
(
instance
.
getClass
().
getConstructors
()[
0
],
"getAnnotatedReceiverType for a ctor without a \"this\" should return an empty AnnotatedType"
);
checkNull
(
instance
.
getLocalClass
().
getConstructors
()[
0
],
"getAnnotatedReceiverType() on a constructor for a local class should return null"
);
checkNull
(
instance
.
getAnonymousClass
().
getDeclaredConstructors
()[
0
],
"getAnnotatedReceiverType() on a constructor for an anonymous class should return null"
);
GetAnnotatedReceiverType
outer
=
new
GetAnnotatedReceiverType
();
Inner2
instance2
=
outer
.
new
Inner2
();
checkEmptyAT
(
instance2
.
getClass
().
getConstructors
()[
0
],
"getAnnotatedReceiverType for a ctor without a \"this\" should return an empty AnnotatedType"
);
checkNull
(
instance2
.
getLocalClass
().
getConstructors
()[
0
],
"getAnnotatedReceiverType() on a constructor for a local class should return null"
);
checkNull
(
instance2
.
getAnonymousClass
().
getDeclaredConstructors
()[
0
],
"getAnnotatedReceiverType() on a constructor for an anonymous class should return null"
);
Inner2
.
Inner3
instance3
=
instance2
.
new
Inner3
();
checkEmptyAT
(
instance3
.
getClass
().
getConstructors
()[
0
],
"getAnnotatedReceiverType for a ctor without a \"this\" should return an empty AnnotatedType"
);
checkNull
(
instance3
.
getLocalClass
().
getConstructors
()[
0
],
"getAnnotatedReceiverType() on a constructor for a local class should return null"
);
checkNull
(
instance3
.
getAnonymousClass
().
getDeclaredConstructors
()[
0
],
"getAnnotatedReceiverType() on a constructor for an anonymous class should return null"
);
if
(
failures
!=
0
)
throw
new
RuntimeException
(
"Test failed, see log for details"
);
else
if
(
tests
!=
5
)
else
if
(
tests
!=
1
5
)
throw
new
RuntimeException
(
"Not all cases ran, failing"
);
}
private
static
void
checkNull
(
Object
o
,
String
msg
)
{
if
(
o
!=
null
)
{
private
static
void
checkNull
(
Executable
e
,
String
msg
)
{
AnnotatedType
a
=
e
.
getAnnotatedReceiverType
();
if
(
a
!=
null
)
{
failures
++;
System
.
err
.
println
(
msg
);
System
.
err
.
println
(
msg
+
": "
+
e
);
}
tests
++;
}
private
static
void
checkEmptyAT
(
AnnotatedType
a
,
String
msg
)
{
private
static
void
checkEmptyAT
(
Executable
e
,
String
msg
)
{
AnnotatedType
a
=
e
.
getAnnotatedReceiverType
();
if
(
a
.
getAnnotations
().
length
!=
0
)
{
failures
++;
System
.
err
.
print
(
msg
);
System
.
err
.
print
(
msg
+
": "
+
e
);
}
tests
++;
}
...
...
test/java/lang/annotation/typeAnnotations/TestExecutableGetAnnotatedType.java
浏览文件 @
edcc5df8
...
...
@@ -73,13 +73,11 @@ public class TestExecutableGetAnnotatedType {
testParameters
(
e
.
getParameters
());
}
// should test constructors as well, see JDK-8044629
@Test
(
dataProvider
=
"genericMethodData"
)
public
void
testGenericReceiverType
(
Executable
e
)
throws
Exception
{
testReceiverType0
(
e
);
}
// should test constructors as well, see JDK-8044629
@Test
(
dataProvider
=
"methodData"
)
public
void
testReceiverType
(
Executable
e
)
throws
Exception
{
testReceiverType0
(
e
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录