Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_langtools
提交
c05cf39b
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看板
提交
c05cf39b
编写于
9月 23, 2008
作者:
J
jjg
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
6420151: need to improve byfile compile policy to eliminate footprint issues
Reviewed-by: mcimadamore
上级
fadf51e9
变更
25
隐藏空白更改
内联
并排
Showing
25 changed file
with
533 addition
and
50 deletion
+533
-50
src/share/classes/com/sun/tools/javac/api/JavacTaskImpl.java
src/share/classes/com/sun/tools/javac/api/JavacTaskImpl.java
+6
-7
src/share/classes/com/sun/tools/javac/comp/Todo.java
src/share/classes/com/sun/tools/javac/comp/Todo.java
+120
-2
src/share/classes/com/sun/tools/javac/main/JavaCompiler.java
src/share/classes/com/sun/tools/javac/main/JavaCompiler.java
+42
-27
src/share/classes/com/sun/tools/javadoc/JavadocTodo.java
src/share/classes/com/sun/tools/javadoc/JavadocTodo.java
+7
-2
src/share/classes/javax/tools/FileObject.java
src/share/classes/javax/tools/FileObject.java
+0
-2
test/tools/javac/6734819/T6734819b.out
test/tools/javac/6734819/T6734819b.out
+1
-1
test/tools/javac/policy/test1/A.java
test/tools/javac/policy/test1/A.java
+0
-0
test/tools/javac/policy/test1/B.java
test/tools/javac/policy/test1/B.java
+0
-0
test/tools/javac/policy/test1/C.java
test/tools/javac/policy/test1/C.java
+0
-0
test/tools/javac/policy/test1/D.java
test/tools/javac/policy/test1/D.java
+0
-0
test/tools/javac/policy/test1/Test1a.java
test/tools/javac/policy/test1/Test1a.java
+8
-0
test/tools/javac/policy/test1/Test1b.java
test/tools/javac/policy/test1/Test1b.java
+156
-0
test/tools/javac/policy/test1/byfile.ABD.out
test/tools/javac/policy/test1/byfile.ABD.out
+9
-3
test/tools/javac/policy/test1/byfile.ACD.out
test/tools/javac/policy/test1/byfile.ACD.out
+9
-6
test/tools/javac/policy/test1/bytodo.ABD.out
test/tools/javac/policy/test1/bytodo.ABD.out
+0
-0
test/tools/javac/policy/test1/bytodo.ACD.out
test/tools/javac/policy/test1/bytodo.ACD.out
+0
-0
test/tools/javac/policy/test1/simple.ABD.out
test/tools/javac/policy/test1/simple.ABD.out
+0
-0
test/tools/javac/policy/test1/simple.ACD.out
test/tools/javac/policy/test1/simple.ACD.out
+0
-0
test/tools/javac/policy/test2/A.java
test/tools/javac/policy/test2/A.java
+46
-0
test/tools/javac/policy/test2/B.java
test/tools/javac/policy/test2/B.java
+27
-0
test/tools/javac/policy/test2/Test.java
test/tools/javac/policy/test2/Test.java
+42
-0
test/tools/javac/policy/test2/byfile.AB.out
test/tools/javac/policy/test2/byfile.AB.out
+15
-0
test/tools/javac/policy/test2/byfile.BA.out
test/tools/javac/policy/test2/byfile.BA.out
+15
-0
test/tools/javac/policy/test2/bytodo.AB.out
test/tools/javac/policy/test2/bytodo.AB.out
+15
-0
test/tools/javac/policy/test2/bytodo.BA.out
test/tools/javac/policy/test2/bytodo.BA.out
+15
-0
未找到文件。
src/share/classes/com/sun/tools/javac/api/JavacTaskImpl.java
浏览文件 @
c05cf39b
...
@@ -474,23 +474,22 @@ public class JavacTaskImpl extends JavacTask {
...
@@ -474,23 +474,22 @@ public class JavacTaskImpl extends JavacTask {
}
}
abstract
class
Filter
{
abstract
class
Filter
{
void
run
(
ListBuffer
<
Env
<
AttrContext
>>
list
,
Iterable
<?
extends
TypeElement
>
classes
)
{
void
run
(
Queue
<
Env
<
AttrContext
>>
list
,
Iterable
<?
extends
TypeElement
>
classes
)
{
Set
<
TypeElement
>
set
=
new
HashSet
<
TypeElement
>();
Set
<
TypeElement
>
set
=
new
HashSet
<
TypeElement
>();
for
(
TypeElement
item:
classes
)
for
(
TypeElement
item:
classes
)
set
.
add
(
item
);
set
.
add
(
item
);
List
<
Env
<
AttrContext
>>
defer
=
List
.<
Env
<
AttrContext
>>
nil
();
List
Buffer
<
Env
<
AttrContext
>>
defer
=
ListBuffer
.<
Env
<
AttrContext
>>
lb
();
while
(
list
.
nonEmpty
()
)
{
while
(
list
.
peek
()
!=
null
)
{
Env
<
AttrContext
>
env
=
list
.
next
();
Env
<
AttrContext
>
env
=
list
.
remove
();
ClassSymbol
csym
=
env
.
enclClass
.
sym
;
ClassSymbol
csym
=
env
.
enclClass
.
sym
;
if
(
csym
!=
null
&&
set
.
contains
(
csym
.
outermostClass
()))
if
(
csym
!=
null
&&
set
.
contains
(
csym
.
outermostClass
()))
process
(
env
);
process
(
env
);
else
else
defer
=
defer
.
pre
pend
(
env
);
defer
=
defer
.
ap
pend
(
env
);
}
}
for
(
List
<
Env
<
AttrContext
>>
l
=
defer
;
l
.
nonEmpty
();
l
=
l
.
tail
)
list
.
addAll
(
defer
);
list
.
prepend
(
l
.
head
);
}
}
abstract
void
process
(
Env
<
AttrContext
>
env
);
abstract
void
process
(
Env
<
AttrContext
>
env
);
...
...
src/share/classes/com/sun/tools/javac/comp/Todo.java
浏览文件 @
c05cf39b
...
@@ -25,7 +25,14 @@
...
@@ -25,7 +25,14 @@
package
com.sun.tools.javac.comp
;
package
com.sun.tools.javac.comp
;
import
com.sun.tools.javac.util.*
;
import
java.util.AbstractQueue
;
import
com.sun.tools.javac.util.Context
;
import
java.util.HashMap
;
import
java.util.Iterator
;
import
java.util.LinkedList
;
import
java.util.Map
;
import
java.util.Queue
;
import
javax.tools.JavaFileObject
;
/** A queue of all as yet unattributed classes.
/** A queue of all as yet unattributed classes.
*
*
...
@@ -34,7 +41,7 @@ import com.sun.tools.javac.util.*;
...
@@ -34,7 +41,7 @@ import com.sun.tools.javac.util.*;
* This code and its internal interfaces are subject to change or
* This code and its internal interfaces are subject to change or
* deletion without notice.</b>
* deletion without notice.</b>
*/
*/
public
class
Todo
extends
ListBuffer
<
Env
<
AttrContext
>>
{
public
class
Todo
extends
AbstractQueue
<
Env
<
AttrContext
>>
{
/** The context key for the todo list. */
/** The context key for the todo list. */
protected
static
final
Context
.
Key
<
Todo
>
todoKey
=
protected
static
final
Context
.
Key
<
Todo
>
todoKey
=
new
Context
.
Key
<
Todo
>();
new
Context
.
Key
<
Todo
>();
...
@@ -51,4 +58,115 @@ public class Todo extends ListBuffer<Env<AttrContext>> {
...
@@ -51,4 +58,115 @@ public class Todo extends ListBuffer<Env<AttrContext>> {
protected
Todo
(
Context
context
)
{
protected
Todo
(
Context
context
)
{
context
.
put
(
todoKey
,
this
);
context
.
put
(
todoKey
,
this
);
}
}
public
void
append
(
Env
<
AttrContext
>
env
)
{
add
(
env
);
}
@Override
public
Iterator
<
Env
<
AttrContext
>>
iterator
()
{
return
contents
.
iterator
();
}
@Override
public
int
size
()
{
return
contents
.
size
();
}
public
boolean
offer
(
Env
<
AttrContext
>
e
)
{
if
(
contents
.
add
(
e
))
{
if
(
contentsByFile
!=
null
)
addByFile
(
e
);
return
true
;
}
else
{
return
false
;
}
}
public
Env
<
AttrContext
>
poll
()
{
if
(
size
()
==
0
)
return
null
;
Env
<
AttrContext
>
env
=
contents
.
remove
(
0
);
if
(
contentsByFile
!=
null
)
removeByFile
(
env
);
return
env
;
}
public
Env
<
AttrContext
>
peek
()
{
return
(
size
()
==
0
?
null
:
contents
.
get
(
0
));
}
public
Queue
<
Queue
<
Env
<
AttrContext
>>>
groupByFile
()
{
if
(
contentsByFile
==
null
)
{
contentsByFile
=
new
LinkedList
<
Queue
<
Env
<
AttrContext
>>>();
for
(
Env
<
AttrContext
>
env:
contents
)
{
addByFile
(
env
);
}
}
return
contentsByFile
;
}
private
void
addByFile
(
Env
<
AttrContext
>
env
)
{
JavaFileObject
file
=
env
.
toplevel
.
sourcefile
;
if
(
fileMap
==
null
)
fileMap
=
new
HashMap
<
JavaFileObject
,
FileQueue
>();
FileQueue
fq
=
fileMap
.
get
(
file
);
if
(
fq
==
null
)
{
fq
=
new
FileQueue
();
fileMap
.
put
(
file
,
fq
);
contentsByFile
.
add
(
fq
);
}
fq
.
fileContents
.
add
(
env
);
}
private
void
removeByFile
(
Env
<
AttrContext
>
env
)
{
JavaFileObject
file
=
env
.
toplevel
.
sourcefile
;
FileQueue
fq
=
fileMap
.
get
(
file
);
if
(
fq
==
null
)
return
;
if
(
fq
.
fileContents
.
remove
(
env
))
{
if
(
fq
.
isEmpty
())
{
fileMap
.
remove
(
file
);
contentsByFile
.
remove
(
fq
);
}
}
}
LinkedList
<
Env
<
AttrContext
>>
contents
=
new
LinkedList
<
Env
<
AttrContext
>>();
LinkedList
<
Queue
<
Env
<
AttrContext
>>>
contentsByFile
;
Map
<
JavaFileObject
,
FileQueue
>
fileMap
;
class
FileQueue
extends
AbstractQueue
<
Env
<
AttrContext
>>
{
@Override
public
Iterator
<
Env
<
AttrContext
>>
iterator
()
{
return
fileContents
.
iterator
();
}
@Override
public
int
size
()
{
return
fileContents
.
size
();
}
public
boolean
offer
(
Env
<
AttrContext
>
e
)
{
if
(
fileContents
.
offer
(
e
))
{
contents
.
add
(
e
);
return
true
;
}
return
false
;
}
public
Env
<
AttrContext
>
poll
()
{
if
(
fileContents
.
size
()
==
0
)
return
null
;
Env
<
AttrContext
>
env
=
fileContents
.
remove
(
0
);
contents
.
remove
(
env
);
return
env
;
}
public
Env
<
AttrContext
>
peek
()
{
return
(
fileContents
.
size
()
==
0
?
null
:
fileContents
.
get
(
0
));
}
LinkedList
<
Env
<
AttrContext
>>
fileContents
=
new
LinkedList
<
Env
<
AttrContext
>>();
}
}
}
src/share/classes/com/sun/tools/javac/main/JavaCompiler.java
浏览文件 @
c05cf39b
...
@@ -122,35 +122,47 @@ public class JavaCompiler implements ClassReader.SourceCompleter {
...
@@ -122,35 +122,47 @@ public class JavaCompiler implements ClassReader.SourceCompleter {
}
}
}
}
private
static
enum
CompilePolicy
{
/**
/*
* Control how the compiler's latter phases (attr, flow, desugar, generate)
* Just attribute the parse trees
* are connected. Each individual file is processed by each phase in turn,
* but with different compile policies, you can control the order in which
* each class is processed through its next phase.
*
* <p>Generally speaking, the compiler will "fail fast" in the face of
* errors, although not aggressively so. flow, desugar, etc become no-ops
* once any errors have occurred. No attempt is currently made to determine
* if it might be safe to process a class through its next phase because
* it does not depend on any unrelated errors that might have occurred.
*/
protected
static
enum
CompilePolicy
{
/**
* Just attribute the parse trees.
*/
*/
ATTR_ONLY
,
ATTR_ONLY
,
/*
/*
*
* Just attribute and do flow analysis on the parse trees.
* Just attribute and do flow analysis on the parse trees.
* This should catch most user errors.
* This should catch most user errors.
*/
*/
CHECK_ONLY
,
CHECK_ONLY
,
/*
/*
*
* Attribute everything, then do flow analysis for everything,
* Attribute everything, then do flow analysis for everything,
* then desugar everything, and only then generate output.
* then desugar everything, and only then generate output.
* Means nothing is generated if there are any errors in any classes.
* This means no output will be generated if there are any
* errors in any classes.
*/
*/
SIMPLE
,
SIMPLE
,
/*
/**
* After attributing everything and doing flow analysis,
* Groups the classes for each source file together, then process
* group the work by compilation unit.
* each group in a manner equivalent to the {@code SIMPLE} policy.
* Then, process the work for each compilation unit together.
* This means no output will be generated if there are any
* Means nothing is generated for a compilation unit if the are any errors
* errors in any of the classes in a source file.
* in the compilation unit (or in any preceding compilation unit.)
*/
*/
BY_FILE
,
BY_FILE
,
/*
/*
*
* Completely process each entry on the todo list in turn.
* Completely process each entry on the todo list in turn.
* -- this is the same for 1.5.
* -- this is the same for 1.5.
* Means output might be generated for some classes in a compilation unit
* Means output might be generated for some classes in a compilation unit
...
@@ -178,7 +190,7 @@ public class JavaCompiler implements ClassReader.SourceCompleter {
...
@@ -178,7 +190,7 @@ public class JavaCompiler implements ClassReader.SourceCompleter {
private
static
CompilePolicy
DEFAULT_COMPILE_POLICY
=
CompilePolicy
.
BY_TODO
;
private
static
CompilePolicy
DEFAULT_COMPILE_POLICY
=
CompilePolicy
.
BY_TODO
;
pr
ivate
static
enum
ImplicitSourcePolicy
{
pr
otected
static
enum
ImplicitSourcePolicy
{
/** Don't generate or process implicitly read source files. */
/** Don't generate or process implicitly read source files. */
NONE
,
NONE
,
/** Generate classes for implicitly read source files. */
/** Generate classes for implicitly read source files. */
...
@@ -252,11 +264,11 @@ public class JavaCompiler implements ClassReader.SourceCompleter {
...
@@ -252,11 +264,11 @@ public class JavaCompiler implements ClassReader.SourceCompleter {
/** The type eraser.
/** The type eraser.
*/
*/
TransTypes
transTypes
;
protected
TransTypes
transTypes
;
/** The syntactic sugar desweetener.
/** The syntactic sugar desweetener.
*/
*/
Lower
lower
;
protected
Lower
lower
;
/** The annotation annotator.
/** The annotation annotator.
*/
*/
...
@@ -788,14 +800,17 @@ public class JavaCompiler implements ClassReader.SourceCompleter {
...
@@ -788,14 +800,17 @@ public class JavaCompiler implements ClassReader.SourceCompleter {
generate
(
desugar
(
flow
(
attribute
(
todo
))));
generate
(
desugar
(
flow
(
attribute
(
todo
))));
break
;
break
;
case
BY_FILE:
case
BY_FILE:
{
for
(
Queue
<
Env
<
AttrContext
>>
queue
:
groupByFile
(
flow
(
attribute
(
todo
))).
values
())
Queue
<
Queue
<
Env
<
AttrContext
>>>
q
=
todo
.
groupByFile
();
generate
(
desugar
(
queue
));
while
(!
q
.
isEmpty
()
&&
errorCount
()
==
0
)
{
generate
(
desugar
(
flow
(
attribute
(
q
.
remove
()))));
}
}
break
;
break
;
case
BY_TODO:
case
BY_TODO:
while
(
todo
.
non
Empty
())
while
(
!
todo
.
is
Empty
())
generate
(
desugar
(
flow
(
attribute
(
todo
.
next
()))));
generate
(
desugar
(
flow
(
attribute
(
todo
.
remove
()))));
break
;
break
;
default
:
default
:
...
@@ -1105,13 +1120,13 @@ public class JavaCompiler implements ClassReader.SourceCompleter {
...
@@ -1105,13 +1120,13 @@ public class JavaCompiler implements ClassReader.SourceCompleter {
/**
/**
* Perform dataflow checks on an attributed parse tree.
* Perform dataflow checks on an attributed parse tree.
*/
*/
protected
void
flow
(
Env
<
AttrContext
>
env
,
ListBuffer
<
Env
<
AttrContext
>>
results
)
{
protected
void
flow
(
Env
<
AttrContext
>
env
,
Queue
<
Env
<
AttrContext
>>
results
)
{
try
{
try
{
if
(
errorCount
()
>
0
)
if
(
errorCount
()
>
0
)
return
;
return
;
if
(
relax
||
compileStates
.
isDone
(
env
,
CompileState
.
FLOW
))
{
if
(
relax
||
compileStates
.
isDone
(
env
,
CompileState
.
FLOW
))
{
results
.
a
ppen
d
(
env
);
results
.
a
d
d
(
env
);
return
;
return
;
}
}
...
@@ -1130,7 +1145,7 @@ public class JavaCompiler implements ClassReader.SourceCompleter {
...
@@ -1130,7 +1145,7 @@ public class JavaCompiler implements ClassReader.SourceCompleter {
if
(
errorCount
()
>
0
)
if
(
errorCount
()
>
0
)
return
;
return
;
results
.
a
ppen
d
(
env
);
results
.
a
d
d
(
env
);
}
}
finally
{
finally
{
log
.
useSource
(
prev
);
log
.
useSource
(
prev
);
...
@@ -1284,7 +1299,7 @@ public class JavaCompiler implements ClassReader.SourceCompleter {
...
@@ -1284,7 +1299,7 @@ public class JavaCompiler implements ClassReader.SourceCompleter {
generate
(
queue
,
null
);
generate
(
queue
,
null
);
}
}
public
void
generate
(
Queue
<
Pair
<
Env
<
AttrContext
>,
JCClassDecl
>>
queue
,
ListBuffer
<
JavaFileObject
>
results
)
{
public
void
generate
(
Queue
<
Pair
<
Env
<
AttrContext
>,
JCClassDecl
>>
queue
,
Queue
<
JavaFileObject
>
results
)
{
boolean
usePrintSource
=
(
stubOutput
||
sourceOutput
||
printFlat
);
boolean
usePrintSource
=
(
stubOutput
||
sourceOutput
||
printFlat
);
for
(
Pair
<
Env
<
AttrContext
>,
JCClassDecl
>
x:
queue
)
{
for
(
Pair
<
Env
<
AttrContext
>,
JCClassDecl
>
x:
queue
)
{
...
@@ -1294,7 +1309,7 @@ public class JavaCompiler implements ClassReader.SourceCompleter {
...
@@ -1294,7 +1309,7 @@ public class JavaCompiler implements ClassReader.SourceCompleter {
if
(
verboseCompilePolicy
)
{
if
(
verboseCompilePolicy
)
{
log
.
printLines
(
log
.
noticeWriter
,
"[generate "
log
.
printLines
(
log
.
noticeWriter
,
"[generate "
+
(
usePrintSource
?
" source"
:
"code"
)
+
(
usePrintSource
?
" source"
:
"code"
)
+
" "
+
env
.
enclClass
.
sym
+
"]"
);
+
" "
+
cdef
.
sym
+
"]"
);
}
}
if
(
taskListener
!=
null
)
{
if
(
taskListener
!=
null
)
{
...
@@ -1312,7 +1327,7 @@ public class JavaCompiler implements ClassReader.SourceCompleter {
...
@@ -1312,7 +1327,7 @@ public class JavaCompiler implements ClassReader.SourceCompleter {
else
else
file
=
genCode
(
env
,
cdef
);
file
=
genCode
(
env
,
cdef
);
if
(
results
!=
null
&&
file
!=
null
)
if
(
results
!=
null
&&
file
!=
null
)
results
.
a
ppen
d
(
file
);
results
.
a
d
d
(
file
);
}
catch
(
IOException
ex
)
{
}
catch
(
IOException
ex
)
{
log
.
error
(
cdef
.
pos
(),
"class.cant.write"
,
log
.
error
(
cdef
.
pos
(),
"class.cant.write"
,
cdef
.
sym
,
ex
.
getMessage
());
cdef
.
sym
,
ex
.
getMessage
());
...
...
src/share/classes/com/sun/tools/javadoc/JavadocTodo.java
浏览文件 @
c05cf39b
...
@@ -46,8 +46,13 @@ public class JavadocTodo extends Todo {
...
@@ -46,8 +46,13 @@ public class JavadocTodo extends Todo {
super
(
context
);
super
(
context
);
}
}
public
ListBuffer
<
Env
<
AttrContext
>>
append
(
Env
<
AttrContext
>
e
)
{
@Override
public
void
append
(
Env
<
AttrContext
>
e
)
{
// do nothing; Javadoc doesn't perform attribution.
// do nothing; Javadoc doesn't perform attribution.
return
this
;
}
@Override
public
boolean
offer
(
Env
<
AttrContext
>
e
)
{
return
false
;
}
}
}
}
src/share/classes/javax/tools/FileObject.java
浏览文件 @
c05cf39b
...
@@ -26,12 +26,10 @@
...
@@ -26,12 +26,10 @@
package
javax.tools
;
package
javax.tools
;
import
java.io.IOException
;
import
java.io.IOException
;
import
java.io.CharConversionException
;
import
java.io.InputStream
;
import
java.io.InputStream
;
import
java.io.OutputStream
;
import
java.io.OutputStream
;
import
java.io.Reader
;
import
java.io.Reader
;
import
java.io.Writer
;
import
java.io.Writer
;
import
java.nio.CharBuffer
;
import
java.net.URI
;
import
java.net.URI
;
/**
/**
...
...
test/tools/javac/6734819/T6734819b.out
浏览文件 @
c05cf39b
...
@@ -5,5 +5,5 @@
...
@@ -5,5 +5,5 @@
[desugar A]
[desugar A]
[generate code A]
[generate code A]
[desugar B]
[desugar B]
[generate code B]
[generate code B
.C
]
[generate code B]
[generate code B]
test/tools/javac/policy/A.java
→
test/tools/javac/policy/
test1/
A.java
浏览文件 @
c05cf39b
文件已移动
test/tools/javac/policy/B.java
→
test/tools/javac/policy/
test1/
B.java
浏览文件 @
c05cf39b
文件已移动
test/tools/javac/policy/C.java
→
test/tools/javac/policy/
test1/
C.java
浏览文件 @
c05cf39b
文件已移动
test/tools/javac/policy/D.java
→
test/tools/javac/policy/
test1/
D.java
浏览文件 @
c05cf39b
文件已移动
test/tools/javac/policy/
Test
.java
→
test/tools/javac/policy/
test1/Test1a
.java
浏览文件 @
c05cf39b
...
@@ -21,6 +21,14 @@
...
@@ -21,6 +21,14 @@
* have any questions.
* have any questions.
*/
*/
// These tests exercise the various compile policies available via
// JavaCompiler.CompilePolicy. Like any golden file tests, they are
// somewhat fragile and susceptible to breakage, but like the canary
// in the mine, it is useful to know when something is not as it used
// to be. The golden files should not be taken as a guarantee of
// future behavior, and should be updated, with due care, if the
// behavior of the compile policy is deliberately changed.
/*
/*
* @test
* @test
* @bug 6260188 6290772
* @bug 6260188 6290772
...
...
test/tools/javac/policy/test1/Test1b.java
0 → 100644
浏览文件 @
c05cf39b
/*
* 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 6420151
* @summary Compile a group of files and validate the set of class files produced
* @run main Test1b -XDcompilePolicy=byfile A.java B.java D.java
*/
/*
* @test 6420151
* @summary Compile a group of files and validate the set of class files produced
* @run main Test1b -XDcompilePolicy=byfile A.java C.java D.java
*/
/*
* @test 6420151
* @summary Compile a group of files and validate the set of class files produced
* @run main Test1b -XDcompilePolicy=simple A.java B.java D.java
*/
/*
* @test 6420151
* @summary Compile a group of files and validate the set of class files produced
* @run main Test1b -XDcompilePolicy=simple A.java C.java D.java
*/
// These test cases should be uncommented when the default compile policy is
// changed to "byfile". While the default policy is "bytodo", the test cases fail
///*
// * @test 6420151
// * @summary Compile a group of files and validate the set of class files produced
// * @run main Test1b A.java B.java D.java
// */
//
///*
// * @test 6420151
// * @summary Compile a group of files and validate the set of class files produced
// * @run main Test1b A.java C.java D.java
// */
// These test cases are retained for debugging; if uncommented, they show that
// to bytodo mode fails the "all or none" class file test
///*
// * @test 6420151
// * @summary Compile a group of files and validate the set of class files produced
// * @run main Test1b -XDcompilePolicy=bytodo A.java B.java D.java
// */
//
///*
// * @test 6420151
// * @summary Compile a group of files and validate the set of class files produced
// * @run main Test1b -XDcompilePolicy=bytodo A.java C.java D.java
// */
import
java.io.File
;
import
java.io.PrintWriter
;
import
java.io.StringWriter
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.regex.Matcher
;
import
java.util.regex.Pattern
;
public
class
Test1b
{
public
static
void
main
(
String
...
args
)
throws
Exception
{
new
Test1b
().
run
(
args
);
}
void
run
(
String
...
args
)
throws
Exception
{
File
testSrcDir
=
new
File
(
System
.
getProperty
(
"test.src"
));
File
tmpClassDir
=
new
File
(
"."
);
List
<
String
>
l
=
new
ArrayList
<
String
>();
l
.
add
(
"-d"
);
l
.
add
(
tmpClassDir
.
getPath
());
for
(
String
a:
args
)
{
if
(
a
.
endsWith
(
".java"
))
l
.
add
(
new
File
(
testSrcDir
,
a
).
getPath
());
else
l
.
add
(
a
);
}
StringWriter
sw
=
new
StringWriter
();
int
rc
=
com
.
sun
.
tools
.
javac
.
Main
.
compile
(
l
.
toArray
(
new
String
[
l
.
size
()]),
new
PrintWriter
(
sw
));
System
.
err
.
println
(
sw
);
Pattern
p
=
Pattern
.
compile
(
"([A-Z]+).*"
);
for
(
String
name:
tmpClassDir
.
list
())
{
if
(
name
.
endsWith
(
".class"
))
{
Matcher
m
=
p
.
matcher
(
name
);
if
(
m
.
matches
())
{
found
(
m
.
group
(
1
),
name
);
}
}
}
// for all classes that might have been compiled, check that
// all the classes in the source file get generated, or none do.
check
(
"A"
,
3
);
check
(
"B"
,
3
);
check
(
"C"
,
3
);
check
(
"D"
,
3
);
if
(
errors
>
0
)
throw
new
Exception
(
errors
+
" errors"
);
}
void
check
(
String
prefix
,
int
expect
)
{
List
<
String
>
names
=
map
.
get
(
prefix
);
int
found
=
(
names
==
null
?
0
:
names
.
size
());
if
(
found
==
0
||
found
==
expect
)
{
System
.
err
.
println
(
"Found "
+
found
+
" files for "
+
prefix
+
": OK"
);
return
;
}
error
(
"Found "
+
found
+
" files for "
+
prefix
+
": expected 0 or "
+
expect
+
" "
+
names
);
}
void
found
(
String
prefix
,
String
name
)
{
List
<
String
>
names
=
map
.
get
(
prefix
);
if
(
names
==
null
)
{
names
=
new
ArrayList
<
String
>();
map
.
put
(
prefix
,
names
);
}
names
.
add
(
name
);
}
void
error
(
String
message
)
{
System
.
err
.
println
(
message
);
errors
++;
}
Map
<
String
,
List
<
String
>>
map
=
new
HashMap
<
String
,
List
<
String
>>();
int
errors
;
}
test/tools/javac/policy/byfile.ABD.out
→
test/tools/javac/policy/
test1/
byfile.ABD.out
浏览文件 @
c05cf39b
[attribute A]
[attribute A]
[attribute A1]
[attribute A1]
[attribute A2]
[attribute A2]
[flow A]
[flow A1]
[flow A2]
[desugar A]
[desugar A1]
[desugar A2]
[generate code A]
[generate code A1]
[generate code A2]
[attribute B]
[attribute B]
[attribute B1]
[attribute B1]
B.java:12:9: compiler.err.cant.resolve.location: kindname.variable, x, , , kindname.class, B1
B.java:12:9: compiler.err.cant.resolve.location: kindname.variable, x, , , kindname.class, B1
[attribute B2]
[attribute B2]
[attribute D]
[attribute D1]
[attribute D2]
1 error
1 error
test/tools/javac/policy/byfile.ACD.out
→
test/tools/javac/policy/
test1/
byfile.ACD.out
浏览文件 @
c05cf39b
[attribute A]
[attribute A]
[attribute A1]
[attribute A1]
[attribute A2]
[attribute A2]
[attribute C]
[attribute C1]
[attribute C2]
[attribute D]
[attribute D1]
[attribute D2]
[flow A]
[flow A]
[flow A1]
[flow A1]
[flow A2]
[flow A2]
[desugar A]
[desugar A1]
[desugar A2]
[generate code A]
[generate code A1]
[generate code A2]
[attribute C]
[attribute C1]
[attribute C2]
[flow C]
[flow C]
[flow C1]
[flow C1]
C.java:12:17: compiler.err.unreachable.stmt
C.java:12:17: compiler.err.unreachable.stmt
...
...
test/tools/javac/policy/bytodo.ABD.out
→
test/tools/javac/policy/
test1/
bytodo.ABD.out
浏览文件 @
c05cf39b
文件已移动
test/tools/javac/policy/bytodo.ACD.out
→
test/tools/javac/policy/
test1/
bytodo.ACD.out
浏览文件 @
c05cf39b
文件已移动
test/tools/javac/policy/simple.ABD.out
→
test/tools/javac/policy/
test1/
simple.ABD.out
浏览文件 @
c05cf39b
文件已移动
test/tools/javac/policy/simple.ACD.out
→
test/tools/javac/policy/
test1/
simple.ACD.out
浏览文件 @
c05cf39b
文件已移动
test/tools/javac/policy/test2/A.java
0 → 100644
浏览文件 @
c05cf39b
/*
* 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.
*/
class
A
{
class
A1
{
}
static
class
A2
extends
B
{
}
static
class
A3
extends
B
.
Inner
{
}
class
A4
{
void
m1
()
{
class
A3m1
{
}
}
void
m2
()
{
new
B
()
{
};
}
}
}
test/tools/javac/policy/test2/B.java
0 → 100644
浏览文件 @
c05cf39b
/*
* 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.
*/
class
B
{
static
class
Inner
{
}
}
test/tools/javac/policy/test2/Test.java
0 → 100644
浏览文件 @
c05cf39b
/*
* 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
* @compile/ref=byfile.AB.out -XDstdout -XDverboseCompilePolicy -XDcompile.policy=byfile A.java B.java
*/
/*
* @test
* @compile/ref=byfile.BA.out -XDstdout -XDverboseCompilePolicy -XDcompile.policy=byfile B.java A.java
*/
/*
* @test
* @compile/ref=bytodo.AB.out -XDstdout -XDverboseCompilePolicy -XDcompile.policy=bytodo A.java B.java
*/
/*
* @test
* @compile/ref=bytodo.BA.out -XDstdout -XDverboseCompilePolicy -XDcompile.policy=bytodo B.java A.java
*/
test/tools/javac/policy/test2/byfile.AB.out
0 → 100644
浏览文件 @
c05cf39b
[attribute A]
[flow A]
[attribute B]
[flow B]
[desugar A]
[generate code A.A1]
[generate code A.A2]
[generate code A.A3]
[generate code A3m1]
[generate code <anonymous A$A4$1>]
[generate code A.A4]
[generate code A]
[desugar B]
[generate code B.Inner]
[generate code B]
test/tools/javac/policy/test2/byfile.BA.out
0 → 100644
浏览文件 @
c05cf39b
[attribute B]
[flow B]
[desugar B]
[generate code B.Inner]
[generate code B]
[attribute A]
[flow A]
[desugar A]
[generate code A.A1]
[generate code A.A2]
[generate code A.A3]
[generate code A3m1]
[generate code <anonymous A$A4$1>]
[generate code A.A4]
[generate code A]
test/tools/javac/policy/test2/bytodo.AB.out
0 → 100644
浏览文件 @
c05cf39b
[attribute A]
[flow A]
[attribute B]
[flow B]
[desugar A]
[generate code A.A1]
[generate code A.A2]
[generate code A.A3]
[generate code A3m1]
[generate code <anonymous A$A4$1>]
[generate code A.A4]
[generate code A]
[desugar B]
[generate code B.Inner]
[generate code B]
test/tools/javac/policy/test2/bytodo.BA.out
0 → 100644
浏览文件 @
c05cf39b
[attribute B]
[flow B]
[desugar B]
[generate code B.Inner]
[generate code B]
[attribute A]
[flow A]
[desugar A]
[generate code A.A1]
[generate code A.A2]
[generate code A.A3]
[generate code A3m1]
[generate code <anonymous A$A4$1>]
[generate code A.A4]
[generate code A]
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录