Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_jdk
提交
bf6cc094
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看板
提交
bf6cc094
编写于
4月 05, 2013
作者:
D
darcy
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
8011590: More tests for core reflection modeling of default methods
Reviewed-by: mduigou
上级
8c5fa431
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
224 addition
and
0 deletion
+224
-0
test/java/lang/reflect/Method/DefaultMethodModeling.java
test/java/lang/reflect/Method/DefaultMethodModeling.java
+224
-0
未找到文件。
test/java/lang/reflect/Method/DefaultMethodModeling.java
0 → 100644
浏览文件 @
bf6cc094
/*
* 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
* @bug 8011590
* @summary Check modeling of default methods
* @author Joseph D. Darcy
*/
import
java.util.Objects
;
import
java.lang.reflect.*
;
import
java.lang.annotation.*
;
import
static
java
.
lang
.
reflect
.
Modifier
.*;
public
class
DefaultMethodModeling
{
public
static
void
main
(
String
...
args
)
{
int
failures
=
0
;
Class
<?>[]
classes
=
{
SuperC
.
class
,
SuperCchild
.
class
,
SuperI
.
class
,
SuperIchild
.
class
,
SuperIwithDefault
.
class
,
SuperIwithDefaultChild
.
class
,
Base
.
class
,
Combo1
.
class
,
Combo2
.
class
,
SonSuperIwithDefault
.
class
,
DaughterSuperIwithDefault
.
class
,
GrandchildSuperIwithDefault
.
class
,
D
.
class
,
B
.
class
,
C
.
class
};
for
(
Class
<?>
clazz
:
classes
)
{
System
.
err
.
println
(
clazz
.
toString
());
for
(
Method
m
:
clazz
.
getMethods
())
{
if
(
m
.
getDeclaringClass
()
!=
java
.
lang
.
Object
.
class
)
failures
+=
testMethod
(
m
);
}
}
if
(
failures
>
0
)
throw
new
RuntimeException
();
}
private
static
int
testMethod
(
Method
m
)
{
ExpectedModel
em
=
Objects
.
requireNonNull
(
m
.
getAnnotation
(
ExpectedModel
.
class
));
boolean
failed
=
false
;
if
(
m
.
getModifiers
()
!=
em
.
modifiers
())
{
failed
=
true
;
System
.
err
.
printf
(
"Unexpected modifiers %d; expected %d%n"
,
m
.
getModifiers
(),
em
.
modifiers
());
}
if
(
m
.
isDefault
()
!=
em
.
isDefault
())
{
failed
=
true
;
System
.
err
.
printf
(
"Unexpected isDefualt %b; expected b%n"
,
m
.
isDefault
(),
em
.
isDefault
());
}
if
(!
m
.
getDeclaringClass
().
equals
(
em
.
declaringClass
()))
{
failed
=
true
;
System
.
err
.
printf
(
"Unexpected isDefualt %s; expected %s%n"
,
m
.
getDeclaringClass
().
toString
(),
em
.
declaringClass
().
toString
());
}
return
(!
failed
)
?
0
:
1
;
}
}
@Retention
(
RetentionPolicy
.
RUNTIME
)
@interface
ExpectedModel
{
boolean
isDefault
()
default
false
;
int
modifiers
()
default
PUBLIC
;
Class
<?>
declaringClass
();
}
abstract
class
SuperC
{
@ExpectedModel
(
modifiers
=
PUBLIC
|
ABSTRACT
,
declaringClass
=
SuperC
.
class
)
public
abstract
void
foo
();
@ExpectedModel
(
declaringClass
=
SuperC
.
class
)
public
void
bar
()
{
;
}
}
class
SuperCchild
extends
SuperC
{
@ExpectedModel
(
declaringClass
=
SuperCchild
.
class
)
@Override
public
void
foo
()
{;}
}
// -=-=-=-
interface
SuperI
{
@ExpectedModel
(
modifiers
=
PUBLIC
|
ABSTRACT
,
declaringClass
=
SuperI
.
class
)
void
foo
();
@ExpectedModel
(
modifiers
=
PUBLIC
|
ABSTRACT
,
declaringClass
=
SuperI
.
class
)
void
bar
();
}
class
SuperIchild
implements
SuperI
{
@ExpectedModel
(
declaringClass
=
SuperIchild
.
class
)
public
void
foo
()
{;}
@ExpectedModel
(
declaringClass
=
SuperIchild
.
class
)
public
void
bar
()
{;}
}
// -=-=-=-
interface
SuperIwithDefault
{
@ExpectedModel
(
modifiers
=
PUBLIC
|
ABSTRACT
,
declaringClass
=
SuperIwithDefault
.
class
)
void
foo
();
@ExpectedModel
(
isDefault
=
true
,
declaringClass
=
SuperIwithDefault
.
class
)
default
void
bar
()
{
;
}
}
class
SuperIwithDefaultChild
implements
SuperIwithDefault
{
@ExpectedModel
(
declaringClass
=
SuperIwithDefaultChild
.
class
)
@Override
public
void
foo
()
{;}
}
// -=-=-=-
abstract
class
Base
{
@ExpectedModel
(
modifiers
=
PUBLIC
|
ABSTRACT
,
declaringClass
=
Base
.
class
)
abstract
public
void
baz
();
@ExpectedModel
(
declaringClass
=
Base
.
class
)
public
void
quux
()
{;}
}
abstract
class
Combo1
extends
Base
implements
SuperI
{
@ExpectedModel
(
declaringClass
=
Combo1
.
class
)
public
void
wombat
()
{}
}
abstract
class
Combo2
extends
Base
implements
SuperIwithDefault
{
@ExpectedModel
(
declaringClass
=
Combo2
.
class
)
public
void
wombat
()
{}
}
// -=-=-=-
interface
SonSuperIwithDefault
extends
SuperIwithDefault
{
@ExpectedModel
(
modifiers
=
PUBLIC
|
ABSTRACT
,
declaringClass
=
SonSuperIwithDefault
.
class
)
void
baz
();
@ExpectedModel
(
isDefault
=
true
,
declaringClass
=
SonSuperIwithDefault
.
class
)
default
void
bazD
()
{;}
}
interface
DaughterSuperIwithDefault
extends
SuperIwithDefault
{
@ExpectedModel
(
modifiers
=
PUBLIC
|
ABSTRACT
,
declaringClass
=
DaughterSuperIwithDefault
.
class
)
void
quux
();
@ExpectedModel
(
isDefault
=
true
,
declaringClass
=
DaughterSuperIwithDefault
.
class
)
default
void
quuxD
()
{;}
}
interface
GrandchildSuperIwithDefault
extends
SonSuperIwithDefault
,
DaughterSuperIwithDefault
{
@ExpectedModel
(
modifiers
=
PUBLIC
|
ABSTRACT
,
declaringClass
=
GrandchildSuperIwithDefault
.
class
)
void
wombat
();
@ExpectedModel
(
isDefault
=
true
,
declaringClass
=
GrandchildSuperIwithDefault
.
class
)
default
void
wombatD
()
{;}
}
class
D
implements
GrandchildSuperIwithDefault
{
@ExpectedModel
(
declaringClass
=
D
.
class
)
public
void
wombat
(){}
@ExpectedModel
(
declaringClass
=
D
.
class
)
public
void
baz
(){}
@ExpectedModel
(
declaringClass
=
D
.
class
)
public
void
foo
(){}
@ExpectedModel
(
declaringClass
=
D
.
class
)
public
void
quux
(){}
}
// -=-=-=-
// What does re-abstraction look like?
class
A
implements
SuperIwithDefault
{
@ExpectedModel
(
declaringClass
=
A
.
class
)
@Override
public
void
foo
(){;}
}
abstract
class
B
extends
A
{
@ExpectedModel
(
modifiers
=
PUBLIC
|
ABSTRACT
,
declaringClass
=
B
.
class
)
@Override
public
abstract
void
bar
();
}
class
C
extends
B
implements
SuperIwithDefault
{
@ExpectedModel
(
declaringClass
=
C
.
class
)
public
void
bar
(){}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录