Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_langtools
提交
64721fc5
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看板
提交
64721fc5
编写于
7月 10, 2008
作者:
J
jjg
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
6724551: Use Queues instead of Lists to link compiler phases
Reviewed-by: darcy
上级
6e6cf373
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
85 addition
and
64 deletion
+85
-64
src/share/classes/com/sun/tools/javac/api/JavacTaskImpl.java
src/share/classes/com/sun/tools/javac/api/JavacTaskImpl.java
+5
-5
src/share/classes/com/sun/tools/javac/comp/Enter.java
src/share/classes/com/sun/tools/javac/comp/Enter.java
+5
-2
src/share/classes/com/sun/tools/javac/main/JavaCompiler.java
src/share/classes/com/sun/tools/javac/main/JavaCompiler.java
+35
-44
src/share/classes/com/sun/tools/javac/util/ListBuffer.java
src/share/classes/com/sun/tools/javac/util/ListBuffer.java
+40
-13
未找到文件。
src/share/classes/com/sun/tools/javac/api/JavacTaskImpl.java
浏览文件 @
64721fc5
...
...
@@ -381,8 +381,8 @@ public class JavacTaskImpl extends JavacTask {
return
results
;
}
// where
private
void
handleFlowResults
(
List
<
Env
<
AttrContext
>>
list
,
ListBuffer
<
Element
>
elems
)
{
for
(
Env
<
AttrContext
>
env:
list
)
{
private
void
handleFlowResults
(
Queue
<
Env
<
AttrContext
>>
queue
,
ListBuffer
<
Element
>
elems
)
{
for
(
Env
<
AttrContext
>
env:
queue
)
{
switch
(
env
.
tree
.
getTag
())
{
case
JCTree
.
CLASSDEF
:
JCClassDecl
cdef
=
(
JCClassDecl
)
env
.
tree
;
...
...
@@ -396,7 +396,7 @@ public class JavacTaskImpl extends JavacTask {
break
;
}
}
genList
.
a
ppendList
(
list
);
genList
.
a
ddAll
(
queue
);
}
...
...
@@ -424,13 +424,13 @@ public class JavacTaskImpl extends JavacTask {
analyze
(
null
);
// ensure all classes have been parsed, entered, and analyzed
if
(
classes
==
null
)
{
compiler
.
generate
(
compiler
.
desugar
(
genList
.
toList
()
),
results
);
compiler
.
generate
(
compiler
.
desugar
(
genList
),
results
);
genList
.
clear
();
}
else
{
Filter
f
=
new
Filter
()
{
public
void
process
(
Env
<
AttrContext
>
env
)
{
compiler
.
generate
(
compiler
.
desugar
(
List
.
of
(
env
)),
results
);
compiler
.
generate
(
compiler
.
desugar
(
List
Buffer
.
of
(
env
)),
results
);
}
};
f
.
run
(
genList
,
classes
);
...
...
src/share/classes/com/sun/tools/javac/comp/Enter.java
浏览文件 @
64721fc5
...
...
@@ -260,8 +260,11 @@ public class Enter extends JCTree.Visitor {
*/
<
T
extends
JCTree
>
List
<
Type
>
classEnter
(
List
<
T
>
trees
,
Env
<
AttrContext
>
env
)
{
ListBuffer
<
Type
>
ts
=
new
ListBuffer
<
Type
>();
for
(
List
<
T
>
l
=
trees
;
l
.
nonEmpty
();
l
=
l
.
tail
)
ts
.
append
(
classEnter
(
l
.
head
,
env
));
for
(
List
<
T
>
l
=
trees
;
l
.
nonEmpty
();
l
=
l
.
tail
)
{
Type
t
=
classEnter
(
l
.
head
,
env
);
if
(
t
!=
null
)
ts
.
append
(
t
);
}
return
ts
.
toList
();
}
...
...
src/share/classes/com/sun/tools/javac/main/JavaCompiler.java
浏览文件 @
64721fc5
...
...
@@ -63,6 +63,7 @@ import static com.sun.tools.javac.util.ListBuffer.lb;
// TEMP, until we have a more efficient way to save doc comment info
import
com.sun.tools.javac.parser.DocCommentScanner
;
import
java.util.Queue
;
import
javax.lang.model.SourceVersion
;
/** This class could be the main entry point for GJC when GJC is used as a
...
...
@@ -460,11 +461,11 @@ public class JavaCompiler implements ClassReader.SourceCompleter {
return
log
.
nerrors
;
}
protected
final
<
T
>
List
<
T
>
stopIfError
(
ListBuffer
<
T
>
listBuffer
)
{
protected
final
<
T
>
Queue
<
T
>
stopIfError
(
Queue
<
T
>
queue
)
{
if
(
errorCount
()
==
0
)
return
listBuffer
.
toList
()
;
return
queue
;
else
return
List
.
nil
();
return
List
Buffer
.
lb
();
}
protected
final
<
T
>
List
<
T
>
stopIfError
(
List
<
T
>
list
)
{
...
...
@@ -776,8 +777,8 @@ public class JavaCompiler implements ClassReader.SourceCompleter {
break
;
case
BY_FILE:
for
(
List
<
Env
<
AttrContext
>>
list
:
groupByFile
(
flow
(
attribute
(
todo
))).
values
())
generate
(
desugar
(
list
));
for
(
Queue
<
Env
<
AttrContext
>>
queue
:
groupByFile
(
flow
(
attribute
(
todo
))).
values
())
generate
(
desugar
(
queue
));
break
;
case
BY_TODO:
...
...
@@ -794,7 +795,7 @@ public class JavaCompiler implements ClassReader.SourceCompleter {
}
if
(
verbose
)
{
elapsed_msec
=
elapsed
(
start_msec
);
;
elapsed_msec
=
elapsed
(
start_msec
);
printVerbose
(
"total"
,
Long
.
toString
(
elapsed_msec
));
}
...
...
@@ -1026,11 +1027,11 @@ public class JavaCompiler implements ClassReader.SourceCompleter {
* Attribution of the entries in the list does not stop if any errors occur.
* @returns a list of environments for attributd classes.
*/
public
List
<
Env
<
AttrContext
>>
attribute
(
ListBuffer
<
Env
<
AttrContext
>>
envs
)
{
public
Queue
<
Env
<
AttrContext
>>
attribute
(
Queue
<
Env
<
AttrContext
>>
envs
)
{
ListBuffer
<
Env
<
AttrContext
>>
results
=
lb
();
while
(
envs
.
non
Empty
())
results
.
append
(
attribute
(
envs
.
next
()));
return
results
.
toList
()
;
while
(
!
envs
.
is
Empty
())
results
.
append
(
attribute
(
envs
.
remove
()));
return
results
;
}
/**
...
...
@@ -1068,10 +1069,10 @@ public class JavaCompiler implements ClassReader.SourceCompleter {
* If any errors occur, an empty list will be returned.
* @returns the list of attributed parse trees
*/
public
List
<
Env
<
AttrContext
>>
flow
(
List
<
Env
<
AttrContext
>>
envs
)
{
public
Queue
<
Env
<
AttrContext
>>
flow
(
Queue
<
Env
<
AttrContext
>>
envs
)
{
ListBuffer
<
Env
<
AttrContext
>>
results
=
lb
();
for
(
List
<
Env
<
AttrContext
>>
l
=
envs
;
l
.
nonEmpty
();
l
=
l
.
tail
)
{
flow
(
l
.
head
,
results
);
for
(
Env
<
AttrContext
>
env:
envs
)
{
flow
(
env
,
results
);
}
return
stopIfError
(
results
);
}
...
...
@@ -1079,7 +1080,7 @@ public class JavaCompiler implements ClassReader.SourceCompleter {
/**
* Perform dataflow checks on an attributed parse tree.
*/
public
List
<
Env
<
AttrContext
>>
flow
(
Env
<
AttrContext
>
env
)
{
public
Queue
<
Env
<
AttrContext
>>
flow
(
Env
<
AttrContext
>
env
)
{
ListBuffer
<
Env
<
AttrContext
>>
results
=
lb
();
flow
(
env
,
results
);
return
stopIfError
(
results
);
...
...
@@ -1132,10 +1133,10 @@ public class JavaCompiler implements ClassReader.SourceCompleter {
* If any errors occur, an empty list will be returned.
* @returns a list containing the classes to be generated
*/
public
List
<
Pair
<
Env
<
AttrContext
>,
JCClassDecl
>>
desugar
(
List
<
Env
<
AttrContext
>>
envs
)
{
public
Queue
<
Pair
<
Env
<
AttrContext
>,
JCClassDecl
>>
desugar
(
Queue
<
Env
<
AttrContext
>>
envs
)
{
ListBuffer
<
Pair
<
Env
<
AttrContext
>,
JCClassDecl
>>
results
=
lb
();
for
(
List
<
Env
<
AttrContext
>>
l
=
envs
;
l
.
nonEmpty
();
l
=
l
.
tail
)
desugar
(
l
.
head
,
results
);
for
(
Env
<
AttrContext
>
env:
envs
)
desugar
(
env
,
results
);
return
stopIfError
(
results
);
}
...
...
@@ -1145,7 +1146,7 @@ public class JavaCompiler implements ClassReader.SourceCompleter {
* the current implicitSourcePolicy is taken into account.
* The preparation stops as soon as an error is found.
*/
protected
void
desugar
(
Env
<
AttrContext
>
env
,
ListBuffer
<
Pair
<
Env
<
AttrContext
>,
JCClassDecl
>>
results
)
{
protected
void
desugar
(
Env
<
AttrContext
>
env
,
Queue
<
Pair
<
Env
<
AttrContext
>,
JCClassDecl
>>
results
)
{
if
(
errorCount
()
>
0
)
return
;
...
...
@@ -1180,7 +1181,7 @@ public class JavaCompiler implements ClassReader.SourceCompleter {
List
<
JCTree
>
pdef
=
lower
.
translateTopLevelClass
(
env
,
env
.
tree
,
localMake
);
if
(
pdef
.
head
!=
null
)
{
assert
pdef
.
tail
.
isEmpty
();
results
.
a
ppen
d
(
new
Pair
<
Env
<
AttrContext
>,
JCClassDecl
>(
env
,
(
JCClassDecl
)
pdef
.
head
));
results
.
a
d
d
(
new
Pair
<
Env
<
AttrContext
>,
JCClassDecl
>(
env
,
(
JCClassDecl
)
pdef
.
head
));
}
}
return
;
...
...
@@ -1194,7 +1195,7 @@ public class JavaCompiler implements ClassReader.SourceCompleter {
rootClasses
.
contains
((
JCClassDecl
)
untranslated
)
&&
((
cdef
.
mods
.
flags
&
(
Flags
.
PROTECTED
|
Flags
.
PUBLIC
))
!=
0
||
cdef
.
sym
.
packge
().
getQualifiedName
()
==
names
.
java_lang
))
{
results
.
a
ppen
d
(
new
Pair
<
Env
<
AttrContext
>,
JCClassDecl
>(
env
,
removeMethodBodies
(
cdef
)));
results
.
a
d
d
(
new
Pair
<
Env
<
AttrContext
>,
JCClassDecl
>(
env
,
removeMethodBodies
(
cdef
)));
}
return
;
}
...
...
@@ -1210,7 +1211,7 @@ public class JavaCompiler implements ClassReader.SourceCompleter {
JCClassDecl
cdef
=
(
JCClassDecl
)
env
.
tree
;
if
(
untranslated
instanceof
JCClassDecl
&&
rootClasses
.
contains
((
JCClassDecl
)
untranslated
))
{
results
.
a
ppen
d
(
new
Pair
<
Env
<
AttrContext
>,
JCClassDecl
>(
env
,
cdef
));
results
.
a
d
d
(
new
Pair
<
Env
<
AttrContext
>,
JCClassDecl
>(
env
,
cdef
));
}
return
;
}
...
...
@@ -1224,7 +1225,7 @@ public class JavaCompiler implements ClassReader.SourceCompleter {
//generate code for each class
for
(
List
<
JCTree
>
l
=
cdefs
;
l
.
nonEmpty
();
l
=
l
.
tail
)
{
JCClassDecl
cdef
=
(
JCClassDecl
)
l
.
head
;
results
.
a
ppen
d
(
new
Pair
<
Env
<
AttrContext
>,
JCClassDecl
>(
env
,
cdef
));
results
.
a
d
d
(
new
Pair
<
Env
<
AttrContext
>,
JCClassDecl
>(
env
,
cdef
));
}
}
finally
{
...
...
@@ -1275,15 +1276,14 @@ public class JavaCompiler implements ClassReader.SourceCompleter {
* based upon the compiler's options.
* Generation stops if an error occurs while writing files.
*/
public
void
generate
(
List
<
Pair
<
Env
<
AttrContext
>,
JCClassDecl
>>
list
)
{
generate
(
list
,
null
);
public
void
generate
(
Queue
<
Pair
<
Env
<
AttrContext
>,
JCClassDecl
>>
queue
)
{
generate
(
queue
,
null
);
}
public
void
generate
(
List
<
Pair
<
Env
<
AttrContext
>,
JCClassDecl
>>
list
,
ListBuffer
<
JavaFileObject
>
results
)
{
public
void
generate
(
Queue
<
Pair
<
Env
<
AttrContext
>,
JCClassDecl
>>
queue
,
ListBuffer
<
JavaFileObject
>
results
)
{
boolean
usePrintSource
=
(
stubOutput
||
sourceOutput
||
printFlat
);
for
(
List
<
Pair
<
Env
<
AttrContext
>,
JCClassDecl
>>
l
=
list
;
l
.
nonEmpty
();
l
=
l
.
tail
)
{
Pair
<
Env
<
AttrContext
>,
JCClassDecl
>
x
=
l
.
head
;
for
(
Pair
<
Env
<
AttrContext
>,
JCClassDecl
>
x:
queue
)
{
Env
<
AttrContext
>
env
=
x
.
fst
;
JCClassDecl
cdef
=
x
.
snd
;
...
...
@@ -1325,26 +1325,17 @@ public class JavaCompiler implements ClassReader.SourceCompleter {
}
// where
Map
<
JCCompilationUnit
,
List
<
Env
<
AttrContext
>>>
groupByFile
(
List
<
Env
<
AttrContext
>>
list
)
{
Map
<
JCCompilationUnit
,
Queue
<
Env
<
AttrContext
>>>
groupByFile
(
Queue
<
Env
<
AttrContext
>>
envs
)
{
// use a LinkedHashMap to preserve the order of the original list as much as possible
Map
<
JCCompilationUnit
,
List
<
Env
<
AttrContext
>>>
map
=
new
LinkedHashMap
<
JCCompilationUnit
,
List
<
Env
<
AttrContext
>>>();
Set
<
JCCompilationUnit
>
fixupSet
=
new
HashSet
<
JCTree
.
JCCompilationUnit
>();
for
(
List
<
Env
<
AttrContext
>>
l
=
list
;
l
.
nonEmpty
();
l
=
l
.
tail
)
{
Env
<
AttrContext
>
env
=
l
.
head
;
List
<
Env
<
AttrContext
>>
sublist
=
map
.
get
(
env
.
toplevel
);
if
(
sublist
==
null
)
sublist
=
List
.
of
(
env
);
else
{
// this builds the list for the file in reverse order, so make a note
// to reverse the list before returning.
sublist
=
sublist
.
prepend
(
env
);
fixupSet
.
add
(
env
.
toplevel
);
Map
<
JCCompilationUnit
,
Queue
<
Env
<
AttrContext
>>>
map
=
new
LinkedHashMap
<
JCCompilationUnit
,
Queue
<
Env
<
AttrContext
>>>();
for
(
Env
<
AttrContext
>
env:
envs
)
{
Queue
<
Env
<
AttrContext
>>
sublist
=
map
.
get
(
env
.
toplevel
);
if
(
sublist
==
null
)
{
sublist
=
new
ListBuffer
<
Env
<
AttrContext
>>();
map
.
put
(
env
.
toplevel
,
sublist
);
}
map
.
put
(
env
.
toplevel
,
sublist
);
sublist
.
add
(
env
);
}
// fixup any lists that need reversing back to the correct order
for
(
JCTree
.
JCCompilationUnit
tree:
fixupSet
)
map
.
put
(
tree
,
map
.
get
(
tree
).
reverse
());
return
map
;
}
...
...
src/share/classes/com/sun/tools/javac/util/ListBuffer.java
浏览文件 @
64721fc5
...
...
@@ -25,6 +25,7 @@
package
com.sun.tools.javac.util
;
import
java.util.AbstractQueue
;
import
java.util.Collection
;
import
java.util.Iterator
;
import
java.util.NoSuchElementException
;
...
...
@@ -37,12 +38,18 @@ import java.util.NoSuchElementException;
* This code and its internal interfaces are subject to change or
* deletion without notice.</b>
*/
public
class
ListBuffer
<
A
>
implements
Collection
<
A
>
{
public
class
ListBuffer
<
A
>
extends
AbstractQueue
<
A
>
{
public
static
<
T
>
ListBuffer
<
T
>
lb
()
{
return
new
ListBuffer
<
T
>();
}
public
static
<
T
>
ListBuffer
<
T
>
of
(
T
x
)
{
ListBuffer
<
T
>
lb
=
new
ListBuffer
<
T
>();
lb
.
add
(
x
);
return
lb
;
}
/** The list of elements of this buffer.
*/
public
List
<
A
>
elems
;
...
...
@@ -119,6 +126,7 @@ public class ListBuffer<A> implements Collection<A> {
/** Append an element to buffer.
*/
public
ListBuffer
<
A
>
append
(
A
x
)
{
x
.
getClass
();
// null check
if
(
shared
)
copy
();
last
.
head
=
x
;
last
.
setTail
(
new
List
<
A
>(
null
,
null
));
...
...
@@ -180,20 +188,14 @@ public class ListBuffer<A> implements Collection<A> {
return
elems
.
head
;
}
/** Re
move the first element in this buffer.
/** Re
turn first element in this buffer and remove
*/
public
void
remove
()
{
public
A
next
()
{
A
x
=
elems
.
head
;
if
(
elems
!=
last
)
{
elems
=
elems
.
tail
;
count
--;
}
}
/** Return first element in this buffer and remove
*/
public
A
next
()
{
A
x
=
elems
.
head
;
remove
();
return
x
;
}
...
...
@@ -219,21 +221,46 @@ public class ListBuffer<A> implements Collection<A> {
}
public
boolean
add
(
A
a
)
{
throw
new
UnsupportedOperationException
();
append
(
a
);
return
true
;
}
public
boolean
remove
(
Object
o
)
{
throw
new
UnsupportedOperationException
();
}
public
boolean
containsAll
(
Collection
<?>
c
)
{
throw
new
UnsupportedOperationException
();
for
(
Object
x:
c
)
{
if
(!
contains
(
x
))
return
false
;
}
return
true
;
}
public
boolean
addAll
(
Collection
<?
extends
A
>
c
)
{
throw
new
UnsupportedOperationException
();
for
(
A
a:
c
)
append
(
a
);
return
true
;
}
public
boolean
removeAll
(
Collection
<?>
c
)
{
throw
new
UnsupportedOperationException
();
}
public
boolean
retainAll
(
Collection
<?>
c
)
{
throw
new
UnsupportedOperationException
();
}
public
boolean
offer
(
A
a
)
{
append
(
a
);
return
true
;
}
public
A
poll
()
{
return
next
();
}
public
A
peek
()
{
return
first
();
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录