Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell11
提交
e064b2fa
D
dragonwell11
项目概览
openanolis
/
dragonwell11
通知
7
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
dragonwell11
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
e064b2fa
编写于
11月 01, 2016
作者:
V
vromero
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
8167431: javac takes too long time to resolve interface dependency
Reviewed-by: mcimadamore
上级
0c2e329e
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
52 addition
and
8 deletion
+52
-8
langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Types.java
...ompiler/share/classes/com/sun/tools/javac/code/Types.java
+49
-5
langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/util/Iterators.java
...ler/share/classes/com/sun/tools/javac/util/Iterators.java
+3
-3
未找到文件。
langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Types.java
浏览文件 @
e064b2fa
...
...
@@ -2850,20 +2850,64 @@ public class Types {
return
undef
;
}
public
class
CandidatesCache
{
public
Map
<
Entry
,
List
<
MethodSymbol
>>
cache
=
new
WeakHashMap
<>();
class
Entry
{
Type
site
;
MethodSymbol
msym
;
Entry
(
Type
site
,
MethodSymbol
msym
)
{
this
.
site
=
site
;
this
.
msym
=
msym
;
}
@Override
public
boolean
equals
(
Object
obj
)
{
if
(
obj
instanceof
Entry
)
{
Entry
e
=
(
Entry
)
obj
;
return
e
.
msym
==
msym
&&
isSameType
(
site
,
e
.
site
);
}
else
{
return
false
;
}
}
@Override
public
int
hashCode
()
{
return
Types
.
this
.
hashCode
(
site
)
&
~
msym
.
hashCode
();
}
}
public
List
<
MethodSymbol
>
get
(
Entry
e
)
{
return
cache
.
get
(
e
);
}
public
void
put
(
Entry
e
,
List
<
MethodSymbol
>
msymbols
)
{
cache
.
put
(
e
,
msymbols
);
}
}
public
CandidatesCache
candidatesCache
=
new
CandidatesCache
();
//where
public
List
<
MethodSymbol
>
interfaceCandidates
(
Type
site
,
MethodSymbol
ms
)
{
Filter
<
Symbol
>
filter
=
new
MethodFilter
(
ms
,
site
);
List
<
MethodSymbol
>
candidates
=
List
.
nil
();
CandidatesCache
.
Entry
e
=
candidatesCache
.
new
Entry
(
site
,
ms
);
List
<
MethodSymbol
>
candidates
=
candidatesCache
.
get
(
e
);
if
(
candidates
==
null
)
{
Filter
<
Symbol
>
filter
=
new
MethodFilter
(
ms
,
site
);
List
<
MethodSymbol
>
candidates2
=
List
.
nil
();
for
(
Symbol
s
:
membersClosure
(
site
,
false
).
getSymbols
(
filter
))
{
if
(!
site
.
tsym
.
isInterface
()
&&
!
s
.
owner
.
isInterface
())
{
return
List
.
of
((
MethodSymbol
)
s
);
}
else
if
(!
candidates
.
contains
(
s
))
{
candidates
=
candidates
.
prepend
((
MethodSymbol
)
s
);
}
else
if
(!
candidates
2
.
contains
(
s
))
{
candidates
2
=
candidates2
.
prepend
((
MethodSymbol
)
s
);
}
}
return
prune
(
candidates
);
candidates
=
prune
(
candidates2
);
candidatesCache
.
put
(
e
,
candidates
);
}
return
candidates
;
}
public
List
<
MethodSymbol
>
prune
(
List
<
MethodSymbol
>
methods
)
{
ListBuffer
<
MethodSymbol
>
methodsMin
=
new
ListBuffer
<>();
...
...
langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/util/Iterators.java
浏览文件 @
e064b2fa
/*
* Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2015,
2016,
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
...
...
@@ -62,9 +62,9 @@ public class Iterators {
}
public
O
next
()
{
if
(
!
hasNext
())
if
(
currentIterator
==
EMPTY
&&
!
hasNext
())
{
throw
new
NoSuchElementException
();
}
return
currentIterator
.
next
();
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录