Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_langtools
提交
20872320
D
dragonwell8_langtools
项目概览
openanolis
/
dragonwell8_langtools
通知
0
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
dragonwell8_langtools
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
20872320
编写于
10月 22, 2013
作者:
V
vromero
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
8025290: javac implicit versus explicit lambda compilation error
Reviewed-by: jjg, dlsmith
上级
e2481f35
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
111 addition
and
19 deletion
+111
-19
src/share/classes/com/sun/tools/javac/comp/Attr.java
src/share/classes/com/sun/tools/javac/comp/Attr.java
+17
-0
src/share/classes/com/sun/tools/javac/comp/Check.java
src/share/classes/com/sun/tools/javac/comp/Check.java
+1
-1
src/share/classes/com/sun/tools/javac/comp/Infer.java
src/share/classes/com/sun/tools/javac/comp/Infer.java
+5
-3
src/share/classes/com/sun/tools/javac/util/JavacMessages.java
...share/classes/com/sun/tools/javac/util/JavacMessages.java
+15
-15
test/tools/javac/lambda/T8025290/ExplicitVSImplicitLambdaTest.java
...s/javac/lambda/T8025290/ExplicitVSImplicitLambdaTest.java
+73
-0
未找到文件。
src/share/classes/com/sun/tools/javac/comp/Attr.java
浏览文件 @
20872320
...
...
@@ -250,6 +250,14 @@ public class Attr extends JCTree.Visitor {
Type
owntype
=
found
;
if
(!
owntype
.
hasTag
(
ERROR
)
&&
!
resultInfo
.
pt
.
hasTag
(
METHOD
)
&&
!
resultInfo
.
pt
.
hasTag
(
FORALL
))
{
if
(
allowPoly
&&
inferenceContext
.
free
(
found
))
{
if
((
ownkind
&
~
resultInfo
.
pkind
)
==
0
)
{
owntype
=
resultInfo
.
check
(
tree
,
inferenceContext
.
asFree
(
owntype
));
}
else
{
log
.
error
(
tree
.
pos
(),
"unexpected.type"
,
kindNames
(
resultInfo
.
pkind
),
kindName
(
ownkind
));
owntype
=
types
.
createErrorType
(
owntype
);
}
inferenceContext
.
addFreeTypeListener
(
List
.
of
(
found
,
resultInfo
.
pt
),
new
FreeTypeListener
()
{
@Override
public
void
typesInferred
(
InferenceContext
inferenceContext
)
{
...
...
@@ -511,6 +519,15 @@ public class Attr extends JCTree.Visitor {
protected
ResultInfo
dup
(
CheckContext
newContext
)
{
return
new
ResultInfo
(
pkind
,
pt
,
newContext
);
}
@Override
public
String
toString
()
{
if
(
pt
!=
null
)
{
return
pt
.
toString
();
}
else
{
return
""
;
}
}
}
class
RecoveryInfo
extends
ResultInfo
{
...
...
src/share/classes/com/sun/tools/javac/comp/Check.java
浏览文件 @
20872320
...
...
@@ -528,7 +528,7 @@ public class Check {
inferenceContext
.
addFreeTypeListener
(
List
.
of
(
req
),
new
FreeTypeListener
()
{
@Override
public
void
typesInferred
(
InferenceContext
inferenceContext
)
{
checkType
(
pos
,
found
,
inferenceContext
.
asInstType
(
req
),
checkContext
);
checkType
(
pos
,
inferenceContext
.
asInstType
(
found
)
,
inferenceContext
.
asInstType
(
req
),
checkContext
);
}
});
}
...
...
src/share/classes/com/sun/tools/javac/comp/Infer.java
浏览文件 @
20872320
...
...
@@ -1768,9 +1768,11 @@ public class Infer {
public
Type
apply
(
Type
t
)
{
if
(
t
.
hasTag
(
TYPEVAR
))
{
TypeVar
tv
=
(
TypeVar
)
t
;
return
tv
.
isCaptured
()
?
new
CapturedUndetVar
((
CapturedType
)
tv
,
types
)
:
new
UndetVar
(
tv
,
types
);
if
(
tv
.
isCaptured
())
{
return
new
CapturedUndetVar
((
CapturedType
)
tv
,
types
);
}
else
{
return
new
UndetVar
(
tv
,
types
);
}
}
else
{
return
t
.
map
(
this
);
}
...
...
src/share/classes/com/sun/tools/javac/util/JavacMessages.java
浏览文件 @
20872320
/*
* Copyright (c) 2005, 201
1
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2005, 201
3
, 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
...
...
@@ -184,19 +184,19 @@ public class JavacMessages implements Messages {
String
key
,
Object
...
args
)
{
String
msg
=
null
;
for
(
List
<
ResourceBundle
>
l
=
bundles
;
l
.
nonEmpty
()
&&
msg
==
null
;
l
=
l
.
tail
)
{
ResourceBundle
rb
=
l
.
head
;
try
{
msg
=
rb
.
getString
(
key
);
}
catch
(
MissingResourceException
e
)
{
// ignore, try other bundles in list
}
}
if
(
msg
==
null
)
{
msg
=
"compiler message file broken: key="
+
key
+
" arguments={0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}"
;
}
return
MessageFormat
.
format
(
msg
,
args
);
for
(
List
<
ResourceBundle
>
l
=
bundles
;
l
.
nonEmpty
()
&&
msg
==
null
;
l
=
l
.
tail
)
{
ResourceBundle
rb
=
l
.
head
;
try
{
msg
=
rb
.
getString
(
key
);
}
catch
(
MissingResourceException
e
)
{
// ignore, try other bundles in list
}
}
if
(
msg
==
null
)
{
msg
=
"compiler message file broken: key="
+
key
+
" arguments={0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}"
;
}
return
MessageFormat
.
format
(
msg
,
args
);
}
}
test/tools/javac/lambda/T8025290/ExplicitVSImplicitLambdaTest.java
0 → 100644
浏览文件 @
20872320
/*
* 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 8025290
* @summary javac implicit versus explicit lambda compilation error
* @compile ExplicitVSImplicitLambdaTest.java
*/
import
java.util.function.*
;
public
class
ExplicitVSImplicitLambdaTest
{
private
void
test
()
{
/* in the explicit case "e" is inferred to String so we can use a String
* only method.
*/
MyComparator
.
mycomparing1
((
String
e
)
->
e
.
concat
(
""
));
MyComparator
.
mycomparing2
((
String
e
)
->
e
.
concat
(
""
));
MyComparator
.
mycomparing3
((
String
e
)
->
e
.
concat
(
""
));
MyComparator
.
mycomparing4
((
String
e
)
->
e
.
concat
(
""
));
/* in the implicit case "e" is inferred to Object so toString() is OK.
*/
MyComparator
.
mycomparing1
((
e
)
->
e
.
toString
());
MyComparator
.
mycomparing2
((
e
)
->
e
.
toString
());
MyComparator
.
mycomparing3
((
e
)
->
e
.
toString
());
MyComparator
.
mycomparing4
((
e
)
->
e
.
toString
());
}
}
interface
MyComparator
<
T
>
{
public
static
<
T
,
U
extends
Comparable
<?
super
U
>>
MyComparator
<
T
>
mycomparing1
(
Function
<?
super
T
,
?
extends
U
>
keyExtractor
)
{
return
null
;
}
public
static
<
T
,
U
extends
Comparable
<?
super
U
>>
MyComparator
<
T
>
mycomparing2
(
Function
<?
super
T
,
?
super
U
>
keyExtractor
)
{
return
null
;
}
public
static
<
T
,
U
extends
Comparable
<?
super
U
>>
MyComparator
<
T
>
mycomparing3
(
Function
<?
extends
T
,
?
extends
U
>
keyExtractor
)
{
return
null
;
}
public
static
<
T
,
U
extends
Comparable
<?
super
U
>>
MyComparator
<
T
>
mycomparing4
(
Function
<?
extends
T
,
?
super
U
>
keyExtractor
)
{
return
null
;
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录