Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_langtools
提交
80ba8459
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看板
提交
80ba8459
编写于
1月 13, 2011
作者:
J
jjg
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
6430241: Hard to disable symbol file feature through API
Reviewed-by: mcimadamore
上级
cb4becd1
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
248 addition
and
9 deletion
+248
-9
src/share/classes/com/sun/tools/javac/file/JavacFileManager.java
...re/classes/com/sun/tools/javac/file/JavacFileManager.java
+2
-2
src/share/classes/com/sun/tools/javac/file/Paths.java
src/share/classes/com/sun/tools/javac/file/Paths.java
+9
-7
test/tools/javac/api/T6430241.java
test/tools/javac/api/T6430241.java
+237
-0
未找到文件。
src/share/classes/com/sun/tools/javac/file/JavacFileManager.java
浏览文件 @
80ba8459
/*
* Copyright (c) 2005, 201
0
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2005, 201
1
, 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
...
...
@@ -472,7 +472,7 @@ public class JavacFileManager extends BaseFileManager implements StandardJavaFil
*/
protected
Archive
openArchive
(
File
zipFileName
)
throws
IOException
{
File
origZipFileName
=
zipFileName
;
if
(!
ignoreSymbolFile
&&
paths
.
isBootClassPathRtJar
(
zipFileName
))
{
if
(!
ignoreSymbolFile
&&
paths
.
is
Default
BootClassPathRtJar
(
zipFileName
))
{
File
file
=
zipFileName
.
getParentFile
().
getParentFile
();
// ${java.home}
if
(
new
File
(
file
.
getName
()).
equals
(
new
File
(
"jre"
)))
file
=
file
.
getParentFile
();
...
...
src/share/classes/com/sun/tools/javac/file/Paths.java
浏览文件 @
80ba8459
/*
* Copyright (c) 2003, 201
0
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2003, 201
1
, 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
...
...
@@ -112,7 +112,7 @@ public class Paths {
* rt.jar as found on the default bootclass path. If the user specified a
* bootclasspath, null is used.
*/
private
File
b
ootClassPathRtJar
=
null
;
private
File
defaultB
ootClassPathRtJar
=
null
;
/**
* Is bootclasspath the default?
...
...
@@ -143,8 +143,10 @@ public class Paths {
// no defaults for other paths
p
=
null
;
}
else
{
if
(
location
==
PLATFORM_CLASS_PATH
)
if
(
location
==
PLATFORM_CLASS_PATH
)
{
defaultBootClassPathRtJar
=
null
;
isDefaultBootClassPath
=
false
;
}
p
=
new
Path
();
for
(
File
f:
path
)
p
.
addFile
(
f
,
warn
);
// TODO: is use of warn appropriate?
...
...
@@ -185,8 +187,8 @@ public class Paths {
:
Collections
.
unmodifiableCollection
(
p
);
}
boolean
isBootClassPathRtJar
(
File
file
)
{
return
file
.
equals
(
b
ootClassPathRtJar
);
boolean
is
Default
BootClassPathRtJar
(
File
file
)
{
return
file
.
equals
(
defaultB
ootClassPathRtJar
);
}
/**
...
...
@@ -355,7 +357,7 @@ public class Paths {
}
private
Path
computeBootClassPath
()
{
b
ootClassPathRtJar
=
null
;
defaultB
ootClassPathRtJar
=
null
;
Path
path
=
new
Path
();
String
bootclasspathOpt
=
options
.
get
(
BOOTCLASSPATH
);
...
...
@@ -380,7 +382,7 @@ public class Paths {
File
rt_jar
=
new
File
(
"rt.jar"
);
for
(
File
file
:
getPathEntries
(
files
))
{
if
(
new
File
(
file
.
getName
()).
equals
(
rt_jar
))
b
ootClassPathRtJar
=
file
;
defaultB
ootClassPathRtJar
=
file
;
}
}
...
...
test/tools/javac/api/T6430241.java
0 → 100644
浏览文件 @
80ba8459
/*
* Copyright (c) 2011, 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 6430241
* @summary Hard to disable symbol file feature through API
*/
import
java.io.*
;
import
java.util.*
;
import
javax.tools.*
;
import
com.sun.source.util.JavacTask
;
import
com.sun.tools.javac.api.JavacTool
;
public
class
T6430241
{
public
static
void
main
(
String
...
args
)
throws
Exception
{
new
T6430241
().
run
();
}
void
run
()
throws
Exception
{
setup
();
testCommandLine
();
testSimpleAPI
();
testTaskAPI
();
if
(
errors
>
0
)
throw
new
Exception
(
errors
+
" errors found"
);
}
void
setup
()
throws
Exception
{
classesDir
=
new
File
(
"classes"
);
classesDir
.
mkdirs
();
emptyDir
=
new
File
(
"empty"
);
emptyDir
.
mkdirs
();
bootClassPath
=
System
.
getProperty
(
"sun.boot.class.path"
);
File
srcDir
=
new
File
(
"src"
);
String
test
=
"import sun.misc.Unsafe; class Test { }"
;
testFile
=
writeFile
(
srcDir
,
"Test.java"
,
test
);
}
//----- tests for command line invocation
void
testCommandLine
()
throws
Exception
{
testCommandLine
(
true
);
testCommandLine
(
true
,
"-Xbootclasspath/p:"
+
emptyDir
);
testCommandLine
(
false
,
"-Xbootclasspath:"
+
bootClassPath
);
testCommandLine
(
true
,
"-Xbootclasspath/a:"
+
emptyDir
);
testCommandLine
(
false
,
"-XDignore.symbol.file"
);
System
.
err
.
println
();
}
void
testCommandLine
(
boolean
expectWarnings
,
String
...
opts
)
throws
Exception
{
System
.
err
.
println
(
"test command line: "
+
Arrays
.
asList
(
opts
));
String
[]
args
=
initArgs
(
opts
);
StringWriter
sw
=
new
StringWriter
();
PrintWriter
pw
=
new
PrintWriter
(
sw
);
int
rc
=
com
.
sun
.
tools
.
javac
.
Main
.
compile
(
args
,
pw
);
String
out
=
showOutput
(
sw
.
toString
());
checkCompilationOK
(
rc
);
checkOutput
(
out
,
expectWarnings
);
}
//----- tests for simple API invocation
void
testSimpleAPI
()
{
testSimpleAPI
(
true
);
testSimpleAPI
(
true
,
"-Xbootclasspath/p:"
+
emptyDir
);
testSimpleAPI
(
false
,
"-Xbootclasspath:"
+
bootClassPath
);
testSimpleAPI
(
true
,
"-Xbootclasspath/a:"
+
emptyDir
);
testSimpleAPI
(
false
,
"-XDignore.symbol.file"
);
System
.
err
.
println
();
}
void
testSimpleAPI
(
boolean
expectWarnings
,
String
...
opts
)
{
System
.
err
.
println
(
"test simple API: "
+
Arrays
.
asList
(
opts
));
String
[]
args
=
initArgs
(
opts
);
ByteArrayOutputStream
baos
=
new
ByteArrayOutputStream
();
PrintStream
ps
=
new
PrintStream
(
baos
);
JavacTool
tool
=
JavacTool
.
create
();
int
rc
=
tool
.
run
(
null
,
null
,
ps
,
args
);
String
out
=
showOutput
(
baos
.
toString
());
checkCompilationOK
(
rc
);
checkOutput
(
out
,
expectWarnings
);
}
//----- tests for CompilationTask API invocation
void
testTaskAPI
()
throws
Exception
{
List
<
File
>
bcp
=
new
ArrayList
<
File
>();
for
(
String
f:
bootClassPath
.
split
(
File
.
pathSeparator
))
{
if
(!
f
.
isEmpty
())
bcp
.
add
(
new
File
(
f
));
}
testTaskAPI
(
true
,
null
);
testTaskAPI
(
false
,
bcp
);
System
.
err
.
println
();
}
void
testTaskAPI
(
boolean
expectWarnings
,
Iterable
<?
extends
File
>
pcp
)
throws
Exception
{
System
.
err
.
println
(
"test task API: "
+
pcp
);
JavacTool
tool
=
JavacTool
.
create
();
StandardJavaFileManager
fm
=
tool
.
getStandardFileManager
(
null
,
null
,
null
);
if
(
pcp
!=
null
)
fm
.
setLocation
(
StandardLocation
.
PLATFORM_CLASS_PATH
,
pcp
);
Iterable
<?
extends
JavaFileObject
>
files
=
fm
.
getJavaFileObjects
(
testFile
);
StringWriter
sw
=
new
StringWriter
();
PrintWriter
pw
=
new
PrintWriter
(
sw
);
JavacTask
task
=
tool
.
getTask
(
pw
,
fm
,
null
,
null
,
null
,
files
);
boolean
ok
=
task
.
call
();
String
out
=
showOutput
(
sw
.
toString
());
checkCompilationOK
(
ok
);
checkOutput
(
out
,
expectWarnings
);
}
//----- utility methods
/**
* Create a file with given content.
*/
File
writeFile
(
File
dir
,
String
path
,
String
content
)
throws
IOException
{
File
f
=
new
File
(
dir
,
path
);
f
.
getParentFile
().
mkdirs
();
FileWriter
out
=
new
FileWriter
(
f
);
try
{
out
.
write
(
content
);
}
finally
{
out
.
close
();
}
return
f
;
}
/**
* Initialize args for compilation with given opts.
* @return opts -d classesDir testFile
*/
String
[]
initArgs
(
String
[]
opts
)
{
List
<
String
>
args
=
new
ArrayList
<
String
>();
args
.
addAll
(
Arrays
.
asList
(
opts
));
args
.
add
(
"-d"
);
args
.
add
(
classesDir
.
getPath
());
args
.
add
(
testFile
.
getPath
());
return
args
.
toArray
(
new
String
[
args
.
size
()]);
}
/**
* Show output from compilation if non empty.
*/
String
showOutput
(
String
out
)
{
if
(!
out
.
isEmpty
())
System
.
err
.
println
(
out
);
return
out
;
}
/**
* Verify compilation succeeeded.
*/
void
checkCompilationOK
(
boolean
ok
)
{
if
(!
ok
)
error
(
"compilation failed"
);
}
/**
* Verify compilation succeeeded.
*/
void
checkCompilationOK
(
int
rc
)
{
if
(
rc
!=
0
)
error
(
"compilation failed, rc: "
+
rc
);
}
/**
* Check whether output contains warnings if and only if warnings
* are expected.
*/
void
checkOutput
(
String
out
,
boolean
expectWarnings
)
{
boolean
foundWarnings
=
out
.
contains
(
"warning"
);
if
(
foundWarnings
)
{
if
(!
expectWarnings
)
error
(
"unexpected warnings found"
);
}
else
{
if
(
expectWarnings
)
error
(
"expected warnings not found"
);
}
}
/**
* Report an error.
*/
void
error
(
String
msg
)
{
System
.
err
.
println
(
"error: "
+
msg
);
errors
++;
}
String
bootClassPath
;
File
classesDir
;
File
emptyDir
;
File
testFile
;
int
errors
;
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录