Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_langtools
提交
e871a245
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看板
提交
e871a245
编写于
1月 24, 2011
作者:
J
jjg
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
6988106: javac report 'java.lang.IllegalMonitorStateException'
Reviewed-by: ksrini
上级
9d919669
变更
5
展开全部
隐藏空白更改
内联
并排
Showing
5 changed file
with
276 addition
and
329 deletion
+276
-329
src/share/classes/com/sun/tools/javac/file/CacheFSInfo.java
src/share/classes/com/sun/tools/javac/file/CacheFSInfo.java
+3
-3
src/share/classes/com/sun/tools/javac/file/JavacFileManager.java
...re/classes/com/sun/tools/javac/file/JavacFileManager.java
+10
-5
src/share/classes/com/sun/tools/javac/file/ZipFileIndex.java
src/share/classes/com/sun/tools/javac/file/ZipFileIndex.java
+110
-318
src/share/classes/com/sun/tools/javac/file/ZipFileIndexCache.java
...e/classes/com/sun/tools/javac/file/ZipFileIndexCache.java
+149
-0
test/tools/javac/T6725036.java
test/tools/javac/T6725036.java
+4
-3
未找到文件。
src/share/classes/com/sun/tools/javac/file/CacheFSInfo.java
浏览文件 @
e871a245
/*
/*
* Copyright (c) 2005, 20
08
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2005, 20
11
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
*
* This code is free software; you can redistribute it and/or modify it
* This code is free software; you can redistribute it and/or modify it
...
@@ -28,11 +28,11 @@ package com.sun.tools.javac.file;
...
@@ -28,11 +28,11 @@ package com.sun.tools.javac.file;
import
java.io.File
;
import
java.io.File
;
import
java.io.IOException
;
import
java.io.IOException
;
import
java.util.List
;
import
java.util.List
;
import
com.sun.tools.javac.util.Context
;
import
java.util.Map
;
import
java.util.Map
;
import
java.util.concurrent.ConcurrentHashMap
;
import
java.util.concurrent.ConcurrentHashMap
;
import
com.sun.tools.javac.util.Context
;
/**
/**
* Caching implementation of FSInfo.
* Caching implementation of FSInfo.
*
*
...
...
src/share/classes/com/sun/tools/javac/file/JavacFileManager.java
浏览文件 @
e871a245
...
@@ -76,8 +76,6 @@ import static com.sun.tools.javac.main.OptionName.*;
...
@@ -76,8 +76,6 @@ import static com.sun.tools.javac.main.OptionName.*;
*/
*/
public
class
JavacFileManager
extends
BaseFileManager
implements
StandardJavaFileManager
{
public
class
JavacFileManager
extends
BaseFileManager
implements
StandardJavaFileManager
{
boolean
useZipFileIndex
;
public
static
char
[]
toArray
(
CharBuffer
buffer
)
{
public
static
char
[]
toArray
(
CharBuffer
buffer
)
{
if
(
buffer
.
hasArray
())
if
(
buffer
.
hasArray
())
return
((
CharBuffer
)
buffer
.
compact
().
flip
()).
array
();
return
((
CharBuffer
)
buffer
.
compact
().
flip
()).
array
();
...
@@ -91,6 +89,9 @@ public class JavacFileManager extends BaseFileManager implements StandardJavaFil
...
@@ -91,6 +89,9 @@ public class JavacFileManager extends BaseFileManager implements StandardJavaFil
private
FSInfo
fsInfo
;
private
FSInfo
fsInfo
;
private
boolean
useZipFileIndex
;
private
ZipFileIndexCache
zipFileIndexCache
;
private
final
File
uninited
=
new
File
(
"U N I N I T E D"
);
private
final
File
uninited
=
new
File
(
"U N I N I T E D"
);
private
final
Set
<
JavaFileObject
.
Kind
>
sourceOrClass
=
private
final
Set
<
JavaFileObject
.
Kind
>
sourceOrClass
=
...
@@ -163,7 +164,11 @@ public class JavacFileManager extends BaseFileManager implements StandardJavaFil
...
@@ -163,7 +164,11 @@ public class JavacFileManager extends BaseFileManager implements StandardJavaFil
fsInfo
=
FSInfo
.
instance
(
context
);
fsInfo
=
FSInfo
.
instance
(
context
);
useZipFileIndex
=
System
.
getProperty
(
"useJavaUtilZip"
)
==
null
;
// TODO: options.get("useJavaUtilZip") == null;
// retain check for system property for compatibility
useZipFileIndex
=
options
.
isUnset
(
"useJavaUtilZip"
)
&&
System
.
getProperty
(
"useJavaUtilZip"
)
==
null
;
if
(
useZipFileIndex
)
zipFileIndexCache
=
ZipFileIndexCache
.
getSharedInstance
();
mmappedIO
=
options
.
isSet
(
"mmappedIO"
);
mmappedIO
=
options
.
isSet
(
"mmappedIO"
);
ignoreSymbolFile
=
options
.
isSet
(
"ignore.symbol.file"
);
ignoreSymbolFile
=
options
.
isSet
(
"ignore.symbol.file"
);
...
@@ -526,7 +531,7 @@ public class JavacFileManager extends BaseFileManager implements StandardJavaFil
...
@@ -526,7 +531,7 @@ public class JavacFileManager extends BaseFileManager implements StandardJavaFil
archive
=
new
ZipArchive
(
this
,
zdir
);
archive
=
new
ZipArchive
(
this
,
zdir
);
}
else
{
}
else
{
archive
=
new
ZipFileIndexArchive
(
this
,
archive
=
new
ZipFileIndexArchive
(
this
,
ZipFileIndex
.
getZipFileIndex
(
zipFileName
,
zipFileIndexCache
.
getZipFileIndex
(
zipFileName
,
null
,
null
,
usePreindexedCache
,
usePreindexedCache
,
preindexCacheLocation
,
preindexCacheLocation
,
...
@@ -538,7 +543,7 @@ public class JavacFileManager extends BaseFileManager implements StandardJavaFil
...
@@ -538,7 +543,7 @@ public class JavacFileManager extends BaseFileManager implements StandardJavaFil
}
}
else
{
else
{
archive
=
new
ZipFileIndexArchive
(
this
,
archive
=
new
ZipFileIndexArchive
(
this
,
ZipFileIndex
.
getZipFileIndex
(
zipFileName
,
zipFileIndexCache
.
getZipFileIndex
(
zipFileName
,
symbolFilePrefix
,
symbolFilePrefix
,
usePreindexedCache
,
usePreindexedCache
,
preindexCacheLocation
,
preindexCacheLocation
,
...
...
src/share/classes/com/sun/tools/javac/file/ZipFileIndex.java
浏览文件 @
e871a245
此差异已折叠。
点击以展开。
src/share/classes/com/sun/tools/javac/file/ZipFileIndexCache.java
0 → 100644
浏览文件 @
e871a245
/*
* Copyright (c) 2007, 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. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* 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.
*/
package
com.sun.tools.javac.file
;
import
com.sun.tools.javac.file.RelativePath.RelativeDirectory
;
import
com.sun.tools.javac.util.Context
;
import
java.io.File
;
import
java.io.IOException
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.Iterator
;
import
java.util.List
;
import
java.util.Map
;
/** A cache for ZipFileIndex objects. */
public
class
ZipFileIndexCache
{
private
final
Map
<
File
,
ZipFileIndex
>
map
=
new
HashMap
<
File
,
ZipFileIndex
>();
/** Get a shared instance of the cache. */
private
static
ZipFileIndexCache
sharedInstance
;
public
synchronized
static
ZipFileIndexCache
getSharedInstance
()
{
if
(
sharedInstance
==
null
)
sharedInstance
=
new
ZipFileIndexCache
();
return
sharedInstance
;
}
/** Get a context-specific instance of a cache. */
public
static
ZipFileIndexCache
instance
(
Context
context
)
{
ZipFileIndexCache
instance
=
context
.
get
(
ZipFileIndexCache
.
class
);
if
(
instance
==
null
)
context
.
put
(
ZipFileIndexCache
.
class
,
instance
=
new
ZipFileIndexCache
());
return
instance
;
}
/**
* Returns a list of all ZipFileIndex entries
*
* @return A list of ZipFileIndex entries, or an empty list
*/
public
List
<
ZipFileIndex
>
getZipFileIndexes
()
{
return
getZipFileIndexes
(
false
);
}
/**
* Returns a list of all ZipFileIndex entries
*
* @param openedOnly If true it returns a list of only opened ZipFileIndex entries, otherwise
* all ZipFileEntry(s) are included into the list.
* @return A list of ZipFileIndex entries, or an empty list
*/
public
synchronized
List
<
ZipFileIndex
>
getZipFileIndexes
(
boolean
openedOnly
)
{
List
<
ZipFileIndex
>
zipFileIndexes
=
new
ArrayList
<
ZipFileIndex
>();
zipFileIndexes
.
addAll
(
map
.
values
());
if
(
openedOnly
)
{
for
(
ZipFileIndex
elem
:
zipFileIndexes
)
{
if
(!
elem
.
isOpen
())
{
zipFileIndexes
.
remove
(
elem
);
}
}
}
return
zipFileIndexes
;
}
public
synchronized
ZipFileIndex
getZipFileIndex
(
File
zipFile
,
RelativeDirectory
symbolFilePrefix
,
boolean
useCache
,
String
cacheLocation
,
boolean
writeIndex
)
throws
IOException
{
ZipFileIndex
zi
=
getExistingZipIndex
(
zipFile
);
if
(
zi
==
null
||
(
zi
!=
null
&&
zipFile
.
lastModified
()
!=
zi
.
zipFileLastModified
))
{
zi
=
new
ZipFileIndex
(
zipFile
,
symbolFilePrefix
,
writeIndex
,
useCache
,
cacheLocation
);
map
.
put
(
zipFile
,
zi
);
}
return
zi
;
}
public
synchronized
ZipFileIndex
getExistingZipIndex
(
File
zipFile
)
{
return
map
.
get
(
zipFile
);
}
public
synchronized
void
clearCache
()
{
map
.
clear
();
}
public
synchronized
void
clearCache
(
long
timeNotUsed
)
{
Iterator
<
File
>
cachedFileIterator
=
map
.
keySet
().
iterator
();
while
(
cachedFileIterator
.
hasNext
())
{
File
cachedFile
=
cachedFileIterator
.
next
();
ZipFileIndex
cachedZipIndex
=
map
.
get
(
cachedFile
);
if
(
cachedZipIndex
!=
null
)
{
long
timeToTest
=
cachedZipIndex
.
lastReferenceTimeStamp
+
timeNotUsed
;
if
(
timeToTest
<
cachedZipIndex
.
lastReferenceTimeStamp
||
// Overflow...
System
.
currentTimeMillis
()
>
timeToTest
)
{
map
.
remove
(
cachedFile
);
}
}
}
}
public
synchronized
void
removeFromCache
(
File
file
)
{
map
.
remove
(
file
);
}
/** Sets already opened list of ZipFileIndexes from an outside client
* of the compiler. This functionality should be used in a non-batch clients of the compiler.
*/
public
synchronized
void
setOpenedIndexes
(
List
<
ZipFileIndex
>
indexes
)
throws
IllegalStateException
{
if
(
map
.
isEmpty
())
{
String
msg
=
"Setting opened indexes should be called only when the ZipFileCache is empty. "
+
"Call JavacFileManager.flush() before calling this method."
;
throw
new
IllegalStateException
(
msg
);
}
for
(
ZipFileIndex
zfi
:
indexes
)
{
map
.
put
(
zfi
.
zipFile
,
zfi
);
}
}
}
test/tools/javac/T6725036.java
浏览文件 @
e871a245
/*
/*
* Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2008,
2011,
Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
*
* This code is free software; you can redistribute it and/or modify it
* This code is free software; you can redistribute it and/or modify it
...
@@ -38,6 +38,7 @@ import com.sun.tools.javac.file.JavacFileManager;
...
@@ -38,6 +38,7 @@ import com.sun.tools.javac.file.JavacFileManager;
import
com.sun.tools.javac.file.RelativePath.RelativeFile
;
import
com.sun.tools.javac.file.RelativePath.RelativeFile
;
import
com.sun.tools.javac.file.ZipFileIndex
;
import
com.sun.tools.javac.file.ZipFileIndex
;
import
com.sun.tools.javac.file.ZipFileIndexArchive
;
import
com.sun.tools.javac.file.ZipFileIndexArchive
;
import
com.sun.tools.javac.file.ZipFileIndexCache
;
import
com.sun.tools.javac.util.Context
;
import
com.sun.tools.javac.util.Context
;
public
class
T6725036
{
public
class
T6725036
{
...
@@ -57,8 +58,8 @@ public class T6725036 {
...
@@ -57,8 +58,8 @@ public class T6725036 {
JarEntry
je
=
j
.
getJarEntry
(
TEST_ENTRY_NAME
.
getPath
());
JarEntry
je
=
j
.
getJarEntry
(
TEST_ENTRY_NAME
.
getPath
());
long
jarEntryTime
=
je
.
getTime
();
long
jarEntryTime
=
je
.
getTime
();
ZipFileIndex
zfi
=
ZipFileIndex
Cache
zfic
=
ZipFileIndexCache
.
getSharedInstance
();
ZipFileIndex
.
getZipFileIndex
(
rt_jar
,
null
,
false
,
null
,
false
);
ZipFileIndex
zfi
=
zfic
.
getZipFileIndex
(
rt_jar
,
null
,
false
,
null
,
false
);
long
zfiTime
=
zfi
.
getLastModified
(
TEST_ENTRY_NAME
);
long
zfiTime
=
zfi
.
getLastModified
(
TEST_ENTRY_NAME
);
check
(
je
,
jarEntryTime
,
zfi
+
":"
+
TEST_ENTRY_NAME
.
getPath
(),
zfiTime
);
check
(
je
,
jarEntryTime
,
zfi
+
":"
+
TEST_ENTRY_NAME
.
getPath
(),
zfiTime
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录