Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_langtools
提交
1436e7c4
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看板
提交
1436e7c4
编写于
1月 30, 2009
作者:
T
tbell
浏览文件
操作
浏览文件
下载
差异文件
Merge
上级
0e0fd6c9
74211082
变更
11
隐藏空白更改
内联
并排
Showing
11 changed file
with
360 addition
and
40 deletion
+360
-40
src/share/classes/com/sun/tools/javac/code/Types.java
src/share/classes/com/sun/tools/javac/code/Types.java
+47
-11
src/share/classes/com/sun/tools/javac/comp/Infer.java
src/share/classes/com/sun/tools/javac/comp/Infer.java
+8
-26
src/share/classes/com/sun/tools/javadoc/DocletInvoker.java
src/share/classes/com/sun/tools/javadoc/DocletInvoker.java
+56
-1
test/tools/javac/cast/6557182/T6557182.java
test/tools/javac/cast/6557182/T6557182.java
+41
-0
test/tools/javac/cast/6557182/T6557182.out
test/tools/javac/cast/6557182/T6557182.out
+4
-0
test/tools/javac/generics/6729401/T6729401.java
test/tools/javac/generics/6729401/T6729401.java
+46
-0
test/tools/javac/generics/inference/6315770/T6315770.java
test/tools/javac/generics/inference/6315770/T6315770.java
+42
-0
test/tools/javac/generics/inference/6315770/T6315770.out
test/tools/javac/generics/inference/6315770/T6315770.out
+3
-0
test/tools/javac/processing/model/testgetallmembers/Main.java
.../tools/javac/processing/model/testgetallmembers/Main.java
+2
-2
test/tools/javadoc/6176978/T6176978.java
test/tools/javadoc/6176978/T6176978.java
+80
-0
test/tools/javadoc/6176978/X.java
test/tools/javadoc/6176978/X.java
+31
-0
未找到文件。
src/share/classes/com/sun/tools/javac/code/Types.java
浏览文件 @
1436e7c4
...
...
@@ -709,12 +709,31 @@ public class Types {
case
UNDETVAR:
if
(
s
.
tag
==
WILDCARD
)
{
UndetVar
undetvar
=
(
UndetVar
)
t
;
undetvar
.
inst
=
glb
(
upperBound
(
s
),
undetvar
.
inst
);
// We should check instantiated type against any of the
// undetvar's lower bounds.
for
(
Type
t2
:
undetvar
.
lobounds
)
{
if
(!
isSubtype
(
t2
,
undetvar
.
inst
))
return
false
;
WildcardType
wt
=
(
WildcardType
)
s
;
switch
(
wt
.
kind
)
{
case
UNBOUND:
//similar to ? extends Object
case
EXTENDS:
{
Type
bound
=
upperBound
(
s
);
// We should check the new upper bound against any of the
// undetvar's lower bounds.
for
(
Type
t2
:
undetvar
.
lobounds
)
{
if
(!
isSubtype
(
t2
,
bound
))
return
false
;
}
undetvar
.
hibounds
=
undetvar
.
hibounds
.
prepend
(
bound
);
break
;
}
case
SUPER:
{
Type
bound
=
lowerBound
(
s
);
// We should check the new lower bound against any of the
// undetvar's lower bounds.
for
(
Type
t2
:
undetvar
.
hibounds
)
{
if
(!
isSubtype
(
bound
,
t2
))
return
false
;
}
undetvar
.
lobounds
=
undetvar
.
lobounds
.
prepend
(
bound
);
break
;
}
}
return
true
;
}
else
{
...
...
@@ -930,12 +949,16 @@ public class Types {
}
if
(
t
.
isCompound
())
{
Warner
oldWarner
=
warnStack
.
head
;
warnStack
.
head
=
Warner
.
noWarnings
;
if
(!
visit
(
supertype
(
t
),
s
))
return
false
;
for
(
Type
intf
:
interfaces
(
t
))
{
if
(!
visit
(
intf
,
s
))
return
false
;
}
if
(
warnStack
.
head
.
unchecked
==
true
)
oldWarner
.
warnUnchecked
();
return
true
;
}
...
...
@@ -2108,9 +2131,6 @@ public class Types {
List
<
Type
>
to
)
{
if
(
tvars
.
isEmpty
())
return
tvars
;
if
(
tvars
.
tail
.
isEmpty
())
// fast common case
return
List
.<
Type
>
of
(
substBound
((
TypeVar
)
tvars
.
head
,
from
,
to
));
ListBuffer
<
Type
>
newBoundsBuf
=
lb
();
boolean
changed
=
false
;
// calculate new bounds
...
...
@@ -2150,8 +2170,14 @@ public class Types {
Type
bound1
=
subst
(
t
.
bound
,
from
,
to
);
if
(
bound1
==
t
.
bound
)
return
t
;
else
return
new
TypeVar
(
t
.
tsym
,
bound1
,
syms
.
botType
);
else
{
// create new type variable without bounds
TypeVar
tv
=
new
TypeVar
(
t
.
tsym
,
null
,
syms
.
botType
);
// the new bound should use the new type variable in place
// of the old
tv
.
bound
=
subst
(
bound1
,
List
.<
Type
>
of
(
t
),
List
.<
Type
>
of
(
tv
));
return
tv
;
}
}
// </editor-fold>
...
...
@@ -2825,6 +2851,16 @@ public class Types {
// </editor-fold>
// <editor-fold defaultstate="collapsed" desc="Greatest lower bound">
public
Type
glb
(
List
<
Type
>
ts
)
{
Type
t1
=
ts
.
head
;
for
(
Type
t2
:
ts
.
tail
)
{
if
(
t1
.
isErroneous
())
return
t1
;
t1
=
glb
(
t1
,
t2
);
}
return
t1
;
}
//where
public
Type
glb
(
Type
t
,
Type
s
)
{
if
(
s
==
null
)
return
t
;
...
...
src/share/classes/com/sun/tools/javac/comp/Infer.java
浏览文件 @
1436e7c4
...
...
@@ -154,33 +154,15 @@ public class Infer {
that
.
inst
=
syms
.
objectType
;
else
if
(
that
.
hibounds
.
tail
.
isEmpty
())
that
.
inst
=
that
.
hibounds
.
head
;
else
{
for
(
List
<
Type
>
bs
=
that
.
hibounds
;
bs
.
nonEmpty
()
&&
that
.
inst
==
null
;
bs
=
bs
.
tail
)
{
// System.out.println("hibounds = " + that.hibounds);//DEBUG
if
(
isSubClass
(
bs
.
head
,
that
.
hibounds
))
that
.
inst
=
types
.
fromUnknownFun
.
apply
(
bs
.
head
);
}
if
(
that
.
inst
==
null
)
{
int
classCount
=
0
,
interfaceCount
=
0
;
for
(
Type
t
:
that
.
hibounds
)
{
if
(
t
.
tag
==
CLASS
)
{
if
(
t
.
isInterface
())
interfaceCount
++;
else
classCount
++;
}
}
if
((
that
.
hibounds
.
size
()
==
classCount
+
interfaceCount
)
&&
classCount
==
1
)
that
.
inst
=
types
.
makeCompoundType
(
that
.
hibounds
);
}
if
(
that
.
inst
==
null
||
!
types
.
isSubtypeUnchecked
(
that
.
inst
,
that
.
hibounds
,
warn
))
throw
ambiguousNoInstanceException
.
setMessage
(
"no.unique.maximal.instance.exists"
,
that
.
qtype
,
that
.
hibounds
);
}
else
that
.
inst
=
types
.
glb
(
that
.
hibounds
);
}
if
(
that
.
inst
==
null
||
that
.
inst
.
isErroneous
()
||
!
types
.
isSubtypeUnchecked
(
that
.
inst
,
that
.
hibounds
,
warn
))
throw
ambiguousNoInstanceException
.
setMessage
(
"no.unique.maximal.instance.exists"
,
that
.
qtype
,
that
.
hibounds
);
}
//where
private
boolean
isSubClass
(
Type
t
,
final
List
<
Type
>
ts
)
{
...
...
src/share/classes/com/sun/tools/javadoc/DocletInvoker.java
浏览文件 @
1436e7c4
...
...
@@ -83,7 +83,7 @@ public class DocletInvoker {
cpString
=
appendPath
(
docletPath
,
cpString
);
URL
[]
urls
=
pathToURLs
(
cpString
);
if
(
docletParentClassLoader
==
null
)
appClassLoader
=
new
URLClassLoader
(
urls
);
appClassLoader
=
new
URLClassLoader
(
urls
,
getDelegationClassLoader
(
docletClassName
)
);
else
appClassLoader
=
new
URLClassLoader
(
urls
,
docletParentClassLoader
);
...
...
@@ -98,6 +98,57 @@ public class DocletInvoker {
docletClass
=
dc
;
}
/*
* Returns the delegation class loader to use when creating
* appClassLoader (used to load the doclet). The context class
* loader is the best choice, but legacy behavior was to use the
* default delegation class loader (aka system class loader).
*
* Here we favor using the context class loader. To ensure
* compatibility with existing apps, we revert to legacy
* behavior if either or both of the following conditions hold:
*
* 1) the doclet is loadable from the system class loader but not
* from the context class loader,
*
* 2) this.getClass() is loadable from the system class loader but not
* from the context class loader.
*/
private
ClassLoader
getDelegationClassLoader
(
String
docletClassName
)
{
ClassLoader
ctxCL
=
Thread
.
currentThread
().
getContextClassLoader
();
ClassLoader
sysCL
=
ClassLoader
.
getSystemClassLoader
();
if
(
sysCL
==
null
)
return
ctxCL
;
if
(
ctxCL
==
null
)
return
sysCL
;
// Condition 1.
try
{
sysCL
.
loadClass
(
docletClassName
);
try
{
ctxCL
.
loadClass
(
docletClassName
);
}
catch
(
ClassNotFoundException
e
)
{
return
sysCL
;
}
}
catch
(
ClassNotFoundException
e
)
{
}
// Condition 2.
try
{
if
(
getClass
()
==
sysCL
.
loadClass
(
getClass
().
getName
()))
{
try
{
if
(
getClass
()
!=
ctxCL
.
loadClass
(
getClass
().
getName
()))
return
sysCL
;
}
catch
(
ClassNotFoundException
e
)
{
return
sysCL
;
}
}
}
catch
(
ClassNotFoundException
e
)
{
}
return
ctxCL
;
}
/**
* Generate documentation here. Return true on success.
*/
...
...
@@ -231,6 +282,8 @@ public class DocletInvoker {
docletClassName
,
methodName
);
throw
new
DocletInvokeException
();
}
ClassLoader
savedCCL
=
Thread
.
currentThread
().
getContextClassLoader
();
try
{
Thread
.
currentThread
().
setContextClassLoader
(
appClassLoader
);
return
meth
.
invoke
(
null
,
params
);
...
...
@@ -256,6 +309,8 @@ public class DocletInvoker {
exc
.
getTargetException
().
printStackTrace
();
}
throw
new
DocletInvokeException
();
}
finally
{
Thread
.
currentThread
().
setContextClassLoader
(
savedCCL
);
}
}
...
...
test/tools/javac/cast/6557182/T6557182.java
0 → 100644
浏览文件 @
1436e7c4
/*
* Copyright 2009 Sun Microsystems, Inc. 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
/*
* @test
* @author Maurizio Cimadamore
* @bug 6557182
* @summary Unchecked warning *and* inconvertible types
* @compile/fail/ref=T6557182.out -XDrawDiagnostics -Xlint:unchecked T6557182.java
*/
class
T6557182
{
<
T
extends
Number
&
Comparable
<
String
>>
void
test1
(
T
t
)
{
Comparable
<
Integer
>
ci
=
(
Comparable
<
Integer
>)
t
;
}
<
T
extends
Number
&
Comparable
<?
extends
Number
>>
void
test2
(
T
t
)
{
Comparable
<
Integer
>
ci
=
(
Comparable
<
Integer
>)
t
;
}
}
test/tools/javac/cast/6557182/T6557182.out
0 → 100644
浏览文件 @
1436e7c4
T6557182.java:35:56: compiler.err.prob.found.req: (- compiler.misc.inconvertible.types), T, java.lang.Comparable<java.lang.Integer>
T6557182.java:39:56: compiler.warn.prob.found.req: (- compiler.misc.unchecked.cast.to.type), T, java.lang.Comparable<java.lang.Integer>
1 error
1 warning
test/tools/javac/generics/6729401/T6729401.java
0 → 100644
浏览文件 @
1436e7c4
/*
* Copyright 2008 Sun Microsystems, Inc. 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
/*
* @test
* @bug 6729401
*
* @summary Compiler error when using F-bounded generics with free type variables
* @author Maurizio Cimadamore
* @compile T6729401.java
*
*/
class
T6729401
{
interface
I
<
U
,
W
>
{
<
T
extends
I
<
U
,
T
>>
void
m
(
I
<
U
,
T
>
x
);
}
<
X
extends
I
<
Object
,
X
>,
Y
extends
I
<
Object
,
Y
>>
void
test
(
I
<
Object
,
X
>
x
,
I
<
Object
,
Y
>
y
)
{
x
.<
Y
>
m
(
y
);
x
.
m
(
y
);
y
.<
X
>
m
(
x
);
y
.
m
(
x
);
}
}
test/tools/javac/generics/inference/6315770/T6315770.java
0 → 100644
浏览文件 @
1436e7c4
/*
* Copyright 2009 Sun Microsystems, Inc. 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
/**
* @test
* @bug 6315770
* @summary javac inference allows creation of strange types: Integer & Runnable
* @author Maurizio Cimadamore
*
* @compile/fail/ref=T6315770.out T6315770.java -XDrawDiagnostics
*/
class
T6315770
<
V
>
{
<
T
extends
Integer
&
Runnable
>
T6315770
<
T
>
m
()
{
return
null
;
}
void
test
()
{
T6315770
<?>
c1
=
m
();
T6315770
<?
extends
String
>
c2
=
m
();
T6315770
<?
super
String
>
c3
=
m
();
}
}
test/tools/javac/generics/inference/6315770/T6315770.out
0 → 100644
浏览文件 @
1436e7c4
T6315770.java:39:42: compiler.err.undetermined.type.1: <T>T6315770<T>, (- compiler.misc.no.unique.maximal.instance.exists: T, java.lang.String,java.lang.Integer,java.lang.Runnable)
T6315770.java:40:40: compiler.err.prob.found.req: (- compiler.misc.incompatible.types.1: (- compiler.misc.no.conforming.instance.exists: T, T6315770<T>, T6315770<? super java.lang.String>)), <T>T6315770<T>, T6315770<? super java.lang.String>
2 errors
test/tools/javac/processing/model/testgetallmembers/Main.java
浏览文件 @
1436e7c4
...
...
@@ -23,7 +23,7 @@
/**
* @test
* @bug 6374357 6308351
* @bug 6374357 6308351
6707027
* @summary PackageElement.getEnclosedElements() throws ClassReader$BadClassFileException
* @author Peter von der Ah\u00e9
* @run main/othervm -Xmx256m Main
...
...
@@ -118,7 +118,7 @@ public class Main {
packages
.
size
(),
classes
,
nestedClasses
);
if
(
classes
<
9000
)
throw
new
AssertionError
(
"Too few classes in PLATFORM_CLASS_PATH ;-)"
);
if
(
packages
.
size
()
<
5
45
)
if
(
packages
.
size
()
<
5
30
)
throw
new
AssertionError
(
"Too few packages in PLATFORM_CLASS_PATH ;-)"
);
if
(
nestedClasses
<
3000
)
throw
new
AssertionError
(
"Too few nested classes in PLATFORM_CLASS_PATH ;-)"
);
...
...
test/tools/javadoc/6176978/T6176978.java
0 → 100644
浏览文件 @
1436e7c4
/*
* Copyright 2008 Sun Microsystems, Inc. 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
/*
* @test
* @bug 6176978
* @summary current Javadoc's invocation and extension (Doclet) mechanisms are problematic
* @build T6176978
* @run main T6176978
*/
import
java.io.*
;
import
java.net.*
;
public
class
T6176978
{
public
static
void
main
(
String
[]
args
)
throws
Exception
{
// create and use a temp dir that will not be on jtreg's
// default class path
File
tmpDir
=
new
File
(
"tmp"
);
tmpDir
.
mkdirs
();
File
testSrc
=
new
File
(
System
.
getProperty
(
"test.src"
,
"."
));
String
[]
javac_args
=
{
"-d"
,
"tmp"
,
new
File
(
testSrc
,
"X.java"
).
getPath
()
};
int
rc
=
com
.
sun
.
tools
.
javac
.
Main
.
compile
(
javac_args
);
if
(
rc
!=
0
)
throw
new
Error
(
"javac exit code: "
+
rc
);
String
[]
jdoc_args
=
{
"-doclet"
,
"X"
,
new
File
(
testSrc
,
"T6176978.java"
).
getPath
()
};
rc
=
com
.
sun
.
tools
.
javadoc
.
Main
.
execute
(
jdoc_args
);
if
(
rc
==
0
)
throw
new
Error
(
"javadoc unexpectedly succeeded"
);
Thread
currThread
=
Thread
.
currentThread
();
ClassLoader
saveClassLoader
=
currThread
.
getContextClassLoader
();
URLClassLoader
urlCL
=
new
URLClassLoader
(
new
URL
[]
{
tmpDir
.
toURL
()
});
currThread
.
setContextClassLoader
(
urlCL
);
try
{
rc
=
com
.
sun
.
tools
.
javadoc
.
Main
.
execute
(
jdoc_args
);
if
(
rc
!=
0
)
throw
new
Error
(
"javadoc exit: "
+
rc
);
}
finally
{
currThread
.
setContextClassLoader
(
saveClassLoader
);
}
}
}
test/tools/javadoc/6176978/X.java
0 → 100644
浏览文件 @
1436e7c4
/*
* Copyright 2008 Sun Microsystems, Inc. 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
import
com.sun.javadoc.*
;
public
class
X
{
public
static
boolean
start
(
RootDoc
root
)
{
System
.
out
.
println
(
"X.start"
);
return
true
;
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录