Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_langtools
提交
0b08efa4
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看板
提交
0b08efa4
编写于
10月 26, 2010
作者:
L
lana
浏览文件
操作
浏览文件
下载
差异文件
Merge
上级
031c75a0
f8193e91
变更
28
显示空白变更内容
内联
并排
Showing
28 changed file
with
867 addition
and
160 deletion
+867
-160
src/share/classes/com/sun/tools/apt/mirror/declaration/AnnotationProxyMaker.java
...un/tools/apt/mirror/declaration/AnnotationProxyMaker.java
+8
-3
src/share/classes/com/sun/tools/javac/comp/Infer.java
src/share/classes/com/sun/tools/javac/comp/Infer.java
+16
-4
src/share/classes/com/sun/tools/javac/comp/MemberEnter.java
src/share/classes/com/sun/tools/javac/comp/MemberEnter.java
+2
-2
src/share/classes/com/sun/tools/javac/main/JavaCompiler.java
src/share/classes/com/sun/tools/javac/main/JavaCompiler.java
+1
-1
src/share/classes/com/sun/tools/javac/model/AnnotationProxyMaker.java
...asses/com/sun/tools/javac/model/AnnotationProxyMaker.java
+8
-3
src/share/classes/com/sun/tools/javac/model/JavacElements.java
...hare/classes/com/sun/tools/javac/model/JavacElements.java
+4
-10
src/share/classes/com/sun/tools/javac/model/JavacTypes.java
src/share/classes/com/sun/tools/javac/model/JavacTypes.java
+4
-10
src/share/classes/com/sun/tools/javac/processing/JavacProcessingEnvironment.java
...un/tools/javac/processing/JavacProcessingEnvironment.java
+8
-14
src/share/classes/com/sun/tools/javah/JNI.java
src/share/classes/com/sun/tools/javah/JNI.java
+65
-61
src/share/classes/com/sun/tools/javah/JavahTask.java
src/share/classes/com/sun/tools/javah/JavahTask.java
+50
-18
src/share/classes/com/sun/tools/javah/LLNI.java
src/share/classes/com/sun/tools/javah/LLNI.java
+20
-12
src/share/classes/com/sun/tools/javah/Mangle.java
src/share/classes/com/sun/tools/javah/Mangle.java
+1
-1
src/share/classes/com/sun/tools/javah/TypeSignature.java
src/share/classes/com/sun/tools/javah/TypeSignature.java
+13
-7
src/share/classes/com/sun/tools/javah/resources/l10n.properties
...are/classes/com/sun/tools/javah/resources/l10n.properties
+3
-1
test/tools/javac/T6705935.java
test/tools/javac/T6705935.java
+35
-1
test/tools/javac/api/6406133/Erroneous.java
test/tools/javac/api/6406133/Erroneous.java
+24
-2
test/tools/javac/diags/CheckExamples.java
test/tools/javac/diags/CheckExamples.java
+1
-1
test/tools/javac/diags/FileManager.java
test/tools/javac/diags/FileManager.java
+4
-2
test/tools/javac/meth/TestCP.java
test/tools/javac/meth/TestCP.java
+111
-0
test/tools/javac/processing/environment/round/TestContext.java
...tools/javac/processing/environment/round/TestContext.java
+96
-0
test/tools/javac/processing/errors/TestParseErrors/ParseErrors.java
.../javac/processing/errors/TestParseErrors/ParseErrors.java
+42
-0
test/tools/javac/processing/errors/TestParseErrors/TestParseErrors.java
...ac/processing/errors/TestParseErrors/TestParseErrors.java
+43
-0
test/tools/javac/processing/errors/TestParseErrors/TestParseErrors.out
...vac/processing/errors/TestParseErrors/TestParseErrors.out
+8
-0
test/tools/javadoc/T4994049/FileWithTabs.java
test/tools/javadoc/T4994049/FileWithTabs.java
+1
-1
test/tools/javadoc/T4994049/T4994049.java
test/tools/javadoc/T4994049/T4994049.java
+41
-6
test/tools/javah/4942232/ParamClassTest.java
test/tools/javah/4942232/ParamClassTest.java
+36
-0
test/tools/javah/4942232/Test.java
test/tools/javah/4942232/Test.java
+141
-0
test/tools/javah/TestHelpOpts.java
test/tools/javah/TestHelpOpts.java
+81
-0
未找到文件。
src/share/classes/com/sun/tools/apt/mirror/declaration/AnnotationProxyMaker.java
浏览文件 @
0b08efa4
...
...
@@ -250,9 +250,13 @@ class AnnotationProxyMaker {
/**
* Sets "value" to an ExceptionProxy indicating a type mismatch.
*/
private
void
typeMismatch
(
final
Method
method
,
final
Attribute
attr
)
{
value
=
new
ExceptionProxy
()
{
private
void
typeMismatch
(
Method
method
,
final
Attribute
attr
)
{
class
AnnotationTypeMismatchExceptionProxy
extends
ExceptionProxy
{
private
static
final
long
serialVersionUID
=
8473323277815075163L
;
transient
final
Method
method
;
AnnotationTypeMismatchExceptionProxy
(
Method
method
)
{
this
.
method
=
method
;
}
public
String
toString
()
{
return
"<error>"
;
// eg: @Anno(value=<error>)
}
...
...
@@ -260,7 +264,8 @@ class AnnotationProxyMaker {
return
new
AnnotationTypeMismatchException
(
method
,
attr
.
type
.
toString
());
}
};
}
value
=
new
AnnotationTypeMismatchExceptionProxy
(
method
);
}
}
...
...
src/share/classes/com/sun/tools/javac/comp/Infer.java
浏览文件 @
0b08efa4
...
...
@@ -553,12 +553,24 @@ public class Infer {
//the enclosing tree E, as follows: if E is a cast, then use the
//target type of the cast expression as a return type; if E is an
//expression statement, the return type is 'void' - otherwise the
//return type is simply 'Object'.
switch
(
env
.
outer
.
tree
.
getTag
())
{
//return type is simply 'Object'. A correctness check ensures that
//env.next refers to the lexically enclosing environment in which
//the polymorphic signature call environment is nested.
switch
(
env
.
next
.
tree
.
getTag
())
{
case
JCTree
.
TYPECAST
:
restype
=
((
JCTypeCast
)
env
.
outer
.
tree
).
clazz
.
type
;
break
;
JCTypeCast
castTree
=
(
JCTypeCast
)
env
.
next
.
tree
;
restype
=
(
castTree
.
expr
==
env
.
tree
)
?
castTree
.
clazz
.
type
:
syms
.
objectType
;
break
;
case
JCTree
.
EXEC
:
restype
=
syms
.
voidType
;
break
;
JCTree
.
JCExpressionStatement
execTree
=
(
JCTree
.
JCExpressionStatement
)
env
.
next
.
tree
;
restype
=
(
execTree
.
expr
==
env
.
tree
)
?
syms
.
voidType
:
syms
.
objectType
;
break
;
default
:
restype
=
syms
.
objectType
;
}
...
...
src/share/classes/com/sun/tools/javac/comp/MemberEnter.java
浏览文件 @
0b08efa4
...
...
@@ -668,8 +668,8 @@ public class MemberEnter extends JCTree.Visitor implements Completer {
public
void
visitTree
(
JCTree
tree
)
{
}
public
void
visitErroneous
(
JCErroneous
tree
)
{
if
(
tree
.
errs
!=
null
)
memberEnter
(
tree
.
errs
,
env
);
}
...
...
src/share/classes/com/sun/tools/javac/main/JavaCompiler.java
浏览文件 @
0b08efa4
...
...
@@ -511,7 +511,7 @@ public class JavaCompiler implements ClassReader.SourceCompleter {
protected
boolean
shouldStop
(
CompileState
cs
)
{
if
(
shouldStopPolicy
==
null
)
return
(
errorCount
()
>
0
);
return
(
errorCount
()
>
0
||
unrecoverableError
()
);
else
return
cs
.
ordinal
()
>
shouldStopPolicy
.
ordinal
();
}
...
...
src/share/classes/com/sun/tools/javac/model/AnnotationProxyMaker.java
浏览文件 @
0b08efa4
...
...
@@ -250,9 +250,13 @@ public class AnnotationProxyMaker {
/**
* Sets "value" to an ExceptionProxy indicating a type mismatch.
*/
private
void
typeMismatch
(
final
Method
method
,
final
Attribute
attr
)
{
value
=
new
ExceptionProxy
()
{
private
void
typeMismatch
(
Method
method
,
final
Attribute
attr
)
{
class
AnnotationTypeMismatchExceptionProxy
extends
ExceptionProxy
{
static
final
long
serialVersionUID
=
269
;
transient
final
Method
method
;
AnnotationTypeMismatchExceptionProxy
(
Method
method
)
{
this
.
method
=
method
;
}
public
String
toString
()
{
return
"<error>"
;
// eg: @Anno(value=<error>)
}
...
...
@@ -260,7 +264,8 @@ public class AnnotationProxyMaker {
return
new
AnnotationTypeMismatchException
(
method
,
attr
.
type
.
toString
());
}
};
}
value
=
new
AnnotationTypeMismatchExceptionProxy
(
method
);
}
}
...
...
src/share/classes/com/sun/tools/javac/model/JavacElements.java
浏览文件 @
0b08efa4
...
...
@@ -66,32 +66,26 @@ public class JavacElements implements Elements {
private
Types
types
;
private
Enter
enter
;
private
static
final
Context
.
Key
<
JavacElements
>
KEY
=
new
Context
.
Key
<
JavacElements
>();
public
static
JavacElements
instance
(
Context
context
)
{
JavacElements
instance
=
context
.
get
(
KEY
);
if
(
instance
==
null
)
{
JavacElements
instance
=
context
.
get
(
JavacElements
.
class
);
if
(
instance
==
null
)
instance
=
new
JavacElements
(
context
);
context
.
put
(
KEY
,
instance
);
}
return
instance
;
}
/**
* Public for use only by JavacProcessingEnvironment
*/
// TODO JavacElements constructor should be protected
public
JavacElements
(
Context
context
)
{
protected
JavacElements
(
Context
context
)
{
setContext
(
context
);
}
/**
* Use a new context. May be called from outside to update
* internal state for a new annotation-processing round.
* This instance is *not* then registered with the new context.
*/
public
void
setContext
(
Context
context
)
{
context
.
put
(
JavacElements
.
class
,
this
);
javaCompiler
=
JavaCompiler
.
instance
(
context
);
syms
=
Symtab
.
instance
(
context
);
names
=
Names
.
instance
(
context
);
...
...
src/share/classes/com/sun/tools/javac/model/JavacTypes.java
浏览文件 @
0b08efa4
...
...
@@ -47,32 +47,26 @@ public class JavacTypes implements javax.lang.model.util.Types {
private
Symtab
syms
;
private
Types
types
;
private
static
final
Context
.
Key
<
JavacTypes
>
KEY
=
new
Context
.
Key
<
JavacTypes
>();
public
static
JavacTypes
instance
(
Context
context
)
{
JavacTypes
instance
=
context
.
get
(
KEY
);
if
(
instance
==
null
)
{
JavacTypes
instance
=
context
.
get
(
JavacTypes
.
class
);
if
(
instance
==
null
)
instance
=
new
JavacTypes
(
context
);
context
.
put
(
KEY
,
instance
);
}
return
instance
;
}
/**
* Public for use only by JavacProcessingEnvironment
*/
// TODO JavacTypes constructor should be protected
public
JavacTypes
(
Context
context
)
{
protected
JavacTypes
(
Context
context
)
{
setContext
(
context
);
}
/**
* Use a new context. May be called from outside to update
* internal state for a new annotation-processing round.
* This instance is *not* then registered with the new context.
*/
public
void
setContext
(
Context
context
)
{
context
.
put
(
JavacTypes
.
class
,
this
);
syms
=
Symtab
.
instance
(
context
);
types
=
Types
.
instance
(
context
);
}
...
...
src/share/classes/com/sun/tools/javac/processing/JavacProcessingEnvironment.java
浏览文件 @
0b08efa4
...
...
@@ -173,12 +173,12 @@ public class JavacProcessingEnvironment implements ProcessingEnvironment, Closea
platformAnnotations
=
initPlatformAnnotations
();
foundTypeProcessors
=
false
;
// Initialize services before any processors are initial
zi
ed
// Initialize services before any processors are initial
iz
ed
// in case processors use them.
filer
=
new
JavacFiler
(
context
);
messager
=
new
JavacMessager
(
context
,
this
);
elementUtils
=
new
JavacElements
(
context
);
typeUtils
=
new
JavacTypes
(
context
);
elementUtils
=
JavacElements
.
instance
(
context
);
typeUtils
=
JavacTypes
.
instance
(
context
);
processorOptions
=
initProcessorOptions
(
context
);
unmatchedProcessorOptions
=
initUnmatchedProcessorOptions
();
messages
=
JavacMessages
.
instance
(
context
);
...
...
@@ -865,8 +865,6 @@ public class JavacProcessingEnvironment implements ProcessingEnvironment, Closea
this
(
prev
.
nextContext
(),
prev
.
number
+
1
,
prev
.
compiler
.
log
.
nwarnings
);
this
.
genClassFiles
=
prev
.
genClassFiles
;
updateProcessingState
();
List
<
JCCompilationUnit
>
parsedFiles
=
compiler
.
parseFiles
(
newSourceFiles
);
roots
=
cleanTrees
(
prev
.
roots
).
appendList
(
parsedFiles
);
...
...
@@ -1029,15 +1027,6 @@ public class JavacProcessingEnvironment implements ProcessingEnvironment, Closea
log
.
reportDeferredDiagnostics
(
kinds
);
}
/** Update the processing state for the current context. */
private
void
updateProcessingState
()
{
filer
.
newRound
(
context
);
messager
.
newRound
(
context
);
elementUtils
.
setContext
(
context
);
typeUtils
.
setContext
(
context
);
}
/** Print info about this round. */
private
void
printRoundInfo
(
boolean
lastRound
)
{
if
(
printRounds
||
verbose
)
{
...
...
@@ -1100,6 +1089,11 @@ public class JavacProcessingEnvironment implements ProcessingEnvironment, Closea
JavaCompiler
nextCompiler
=
JavaCompiler
.
instance
(
next
);
nextCompiler
.
initRound
(
oldCompiler
);
filer
.
newRound
(
next
);
messager
.
newRound
(
next
);
elementUtils
.
setContext
(
next
);
typeUtils
.
setContext
(
next
);
JavacTaskImpl
task
=
context
.
get
(
JavacTaskImpl
.
class
);
if
(
task
!=
null
)
{
next
.
put
(
JavacTaskImpl
.
class
,
task
);
...
...
src/share/classes/com/sun/tools/javah/JNI.java
浏览文件 @
0b08efa4
...
...
@@ -59,6 +59,7 @@ public class JNI extends Gen {
}
public
void
write
(
OutputStream
o
,
TypeElement
clazz
)
throws
Util
.
Exit
{
try
{
String
cname
=
mangler
.
mangle
(
clazz
.
getQualifiedName
(),
Mangle
.
Type
.
CLASS
);
PrintWriter
pw
=
wrapWriter
(
o
);
pw
.
println
(
guardBegin
(
cname
));
...
...
@@ -125,6 +126,9 @@ public class JNI extends Gen {
}
pw
.
println
(
cppGuardEnd
());
pw
.
println
(
guardEnd
(
cname
));
}
catch
(
TypeSignature
.
SignatureException
e
)
{
util
.
error
(
"jni.sigerror"
,
e
.
getMessage
());
}
}
...
...
src/share/classes/com/sun/tools/javah/JavahTask.java
浏览文件 @
0b08efa4
...
...
@@ -46,9 +46,9 @@ import java.util.Set;
import
javax.annotation.processing.AbstractProcessor
;
import
javax.annotation.processing.Messager
;
import
javax.annotation.processing.ProcessingEnvironment
;
import
javax.annotation.processing.RoundEnvironment
;
import
javax.annotation.processing.SupportedAnnotationTypes
;
import
javax.annotation.processing.SupportedSourceVersion
;
import
javax.lang.model.SourceVersion
;
import
javax.lang.model.element.ExecutableElement
;
...
...
@@ -71,6 +71,9 @@ import javax.tools.JavaFileObject;
import
javax.tools.StandardJavaFileManager
;
import
javax.tools.StandardLocation
;
import
javax.tools.ToolProvider
;
import
static
javax
.
tools
.
Diagnostic
.
Kind
.*;
import
com.sun.tools.javac.code.Symbol.CompletionFailure
;
/**
* Javah generates support files for native methods.
...
...
@@ -173,7 +176,7 @@ public class JavahTask implements NativeHeaderTool.NativeHeaderTask {
}
},
new
Option
(
false
,
"-help"
,
"--help"
,
"-?"
)
{
new
Option
(
false
,
"-h
"
,
"-h
elp"
,
"--help"
,
"-?"
)
{
void
process
(
JavahTask
task
,
String
opt
,
String
arg
)
{
task
.
help
=
true
;
}
...
...
@@ -233,6 +236,15 @@ public class JavahTask implements NativeHeaderTool.NativeHeaderTask {
task
.
doubleAlign
=
true
;
}
},
new
HiddenOption
(
false
)
{
boolean
matches
(
String
opt
)
{
return
opt
.
startsWith
(
"-XD"
);
}
void
process
(
JavahTask
task
,
String
opt
,
String
arg
)
{
task
.
javac_extras
.
add
(
opt
);
}
},
};
JavahTask
()
{
...
...
@@ -326,6 +338,8 @@ public class JavahTask implements NativeHeaderTool.NativeHeaderTask {
}
catch
(
InternalError
e
)
{
diagnosticListener
.
report
(
createDiagnostic
(
"err.internal.error"
,
e
.
getMessage
()));
return
1
;
}
catch
(
Util
.
Exit
e
)
{
return
e
.
exitValue
;
}
finally
{
log
.
flush
();
}
...
...
@@ -475,7 +489,9 @@ public class JavahTask implements NativeHeaderTool.NativeHeaderTask {
((
JavahFileManager
)
fileManager
).
setIgnoreSymbolFile
(
true
);
JavaCompiler
c
=
ToolProvider
.
getSystemJavaCompiler
();
List
<
String
>
opts
=
Arrays
.
asList
(
"-proc:only"
);
List
<
String
>
opts
=
new
ArrayList
<
String
>();
opts
.
add
(
"-proc:only"
);
opts
.
addAll
(
javac_extras
);
CompilationTask
t
=
c
.
getTask
(
log
,
fileManager
,
diagnosticListener
,
opts
,
internalize
(
classes
),
null
);
JavahProcessor
p
=
new
JavahProcessor
(
g
);
t
.
setProcessors
(
Collections
.
singleton
(
p
));
...
...
@@ -642,6 +658,7 @@ public class JavahTask implements NativeHeaderTool.NativeHeaderTask {
boolean
doubleAlign
;
boolean
force
;
boolean
old
;
Set
<
String
>
javac_extras
=
new
LinkedHashSet
<
String
>();
PrintWriter
log
;
JavaFileManager
fileManager
;
...
...
@@ -652,30 +669,45 @@ public class JavahTask implements NativeHeaderTool.NativeHeaderTask {
private
static
final
String
progname
=
"javah"
;
@SupportedAnnotationTypes
(
"*"
)
@SupportedSourceVersion
(
SourceVersion
.
RELEASE_7
)
class
JavahProcessor
extends
AbstractProcessor
{
private
Messager
messager
;
JavahProcessor
(
Gen
g
)
{
this
.
g
=
g
;
}
@Override
public
SourceVersion
getSupportedSourceVersion
()
{
// since this is co-bundled with javac, we can assume it supports
// the latest source version
return
SourceVersion
.
latest
();
}
@Override
public
void
init
(
ProcessingEnvironment
pEnv
)
{
super
.
init
(
pEnv
);
messager
=
processingEnv
.
getMessager
();
}
public
boolean
process
(
Set
<?
extends
TypeElement
>
annotations
,
RoundEnvironment
roundEnv
)
{
Messager
messager
=
processingEnv
.
getMessager
();
try
{
Set
<
TypeElement
>
classes
=
getAllClasses
(
ElementFilter
.
typesIn
(
roundEnv
.
getRootElements
()));
if
(
classes
.
size
()
>
0
)
{
checkMethodParameters
(
classes
);
g
.
setProcessingEnvironment
(
processingEnv
);
g
.
setClasses
(
classes
);
try
{
g
.
run
();
}
}
catch
(
CompletionFailure
cf
)
{
messager
.
printMessage
(
ERROR
,
getMessage
(
"class.not.found"
,
cf
.
sym
.
getQualifiedName
().
toString
()));
}
catch
(
ClassNotFoundException
cnfe
)
{
messager
.
printMessage
(
Diagnostic
.
Kind
.
ERROR
,
getMessage
(
"class.not.found"
,
cnfe
.
getMessage
()));
messager
.
printMessage
(
ERROR
,
getMessage
(
"class.not.found"
,
cnfe
.
getMessage
()));
}
catch
(
IOException
ioe
)
{
messager
.
printMessage
(
Diagnostic
.
Kind
.
ERROR
,
getMessage
(
"io.exception"
,
ioe
.
getMessage
()));
messager
.
printMessage
(
ERROR
,
getMessage
(
"io.exception"
,
ioe
.
getMessage
()));
}
catch
(
Util
.
Exit
e
)
{
exit
=
e
;
}
}
return
true
;
}
...
...
src/share/classes/com/sun/tools/javah/LLNI.java
浏览文件 @
0b08efa4
...
...
@@ -74,16 +74,21 @@ public class LLNI extends Gen {
}
protected
void
write
(
OutputStream
o
,
TypeElement
clazz
)
throws
Util
.
Exit
{
try
{
String
cname
=
mangleClassName
(
clazz
.
getQualifiedName
().
toString
());
PrintWriter
pw
=
wrapWriter
(
o
);
fields
=
ElementFilter
.
fieldsIn
(
clazz
.
getEnclosedElements
());
methods
=
ElementFilter
.
methodsIn
(
clazz
.
getEnclosedElements
());
generateDeclsForClass
(
pw
,
clazz
,
cname
);
// FIXME check if errors occurred on the PrintWriter and throw exception if so
}
catch
(
TypeSignature
.
SignatureException
e
)
{
util
.
error
(
"llni.sigerror"
,
e
.
getMessage
());
}
}
protected
void
generateDeclsForClass
(
PrintWriter
pw
,
TypeElement
clazz
,
String
cname
)
throws
Util
.
Exit
{
TypeElement
clazz
,
String
cname
)
throws
TypeSignature
.
SignatureException
,
Util
.
Exit
{
doneHandleTypes
=
new
HashSet
<
String
>();
/* The following handle types are predefined in "typedefs.h". Suppress
inclusion in the output by generating them "into the blue" here. */
...
...
@@ -127,7 +132,8 @@ public class LLNI extends Gen {
.
replace
(
innerDelim
,
'_'
);
}
protected
void
forwardDecls
(
PrintWriter
pw
,
TypeElement
clazz
)
{
protected
void
forwardDecls
(
PrintWriter
pw
,
TypeElement
clazz
)
throws
TypeSignature
.
SignatureException
{
TypeElement
object
=
elems
.
getTypeElement
(
"java.lang.Object"
);
if
(
clazz
.
equals
(
object
))
return
;
...
...
@@ -403,7 +409,7 @@ public class LLNI extends Gen {
protected
void
methodSectionForClass
(
PrintWriter
pw
,
TypeElement
clazz
,
String
cname
)
throws
Util
.
Exit
{
throws
TypeSignature
.
SignatureException
,
Util
.
Exit
{
String
methods
=
methodDecls
(
clazz
,
cname
);
if
(
methods
.
length
()
!=
0
)
{
...
...
@@ -418,7 +424,8 @@ public class LLNI extends Gen {
}
}
protected
String
methodDecls
(
TypeElement
clazz
,
String
cname
)
throws
Util
.
Exit
{
protected
String
methodDecls
(
TypeElement
clazz
,
String
cname
)
throws
TypeSignature
.
SignatureException
,
Util
.
Exit
{
String
res
=
""
;
for
(
ExecutableElement
method:
methods
)
{
...
...
@@ -430,7 +437,7 @@ public class LLNI extends Gen {
protected
String
methodDecl
(
ExecutableElement
method
,
TypeElement
clazz
,
String
cname
)
throws
Util
.
Exit
{
throws
TypeSignature
.
SignatureException
,
Util
.
Exit
{
String
res
=
null
;
TypeMirror
retType
=
types
.
erasure
(
method
.
getReturnType
());
...
...
@@ -474,7 +481,8 @@ public class LLNI extends Gen {
}
protected
final
String
jniMethodName
(
ExecutableElement
method
,
String
cname
,
boolean
longName
)
{
boolean
longName
)
throws
TypeSignature
.
SignatureException
{
String
res
=
"Java_"
+
cname
+
"_"
+
method
.
getSimpleName
();
if
(
longName
)
{
...
...
src/share/classes/com/sun/tools/javah/Mangle.java
浏览文件 @
0b08efa4
...
...
@@ -114,7 +114,7 @@ public class Mangle {
}
public
String
mangleMethod
(
ExecutableElement
method
,
TypeElement
clazz
,
int
mtype
)
{
int
mtype
)
throws
TypeSignature
.
SignatureException
{
StringBuffer
result
=
new
StringBuffer
(
100
);
result
.
append
(
"Java_"
);
...
...
src/share/classes/com/sun/tools/javah/TypeSignature.java
浏览文件 @
0b08efa4
...
...
@@ -51,7 +51,13 @@ import javax.lang.model.util.SimpleTypeVisitor7;
* @author Sucheta Dambalkar
*/
public
class
TypeSignature
{
public
class
TypeSignature
{
static
class
SignatureException
extends
Exception
{
private
static
final
long
serialVersionUID
=
1L
;
SignatureException
(
String
reason
)
{
super
(
reason
);
}
}
Elements
elems
;
...
...
@@ -78,14 +84,15 @@ public class TypeSignature{
/*
* Returns the type signature of a field according to JVM specs
*/
public
String
getTypeSignature
(
String
javasignature
){
public
String
getTypeSignature
(
String
javasignature
)
throws
SignatureException
{
return
getParamJVMSignature
(
javasignature
);
}
/*
* Returns the type signature of a method according to JVM specs
*/
public
String
getTypeSignature
(
String
javasignature
,
TypeMirror
returnType
){
public
String
getTypeSignature
(
String
javasignature
,
TypeMirror
returnType
)
throws
SignatureException
{
String
signature
=
null
;
//Java type signature.
String
typeSignature
=
null
;
//Internal type signature.
List
<
String
>
params
=
new
ArrayList
<
String
>();
//List of parameters.
...
...
@@ -166,7 +173,7 @@ public class TypeSignature{
/*
* Returns internal signature of a parameter.
*/
private
String
getParamJVMSignature
(
String
paramsig
)
{
private
String
getParamJVMSignature
(
String
paramsig
)
throws
SignatureException
{
String
paramJVMSig
=
""
;
String
componentType
=
""
;
...
...
@@ -197,7 +204,7 @@ public class TypeSignature{
/*
* Returns internal signature of a component.
*/
private
String
getComponentType
(
String
componentType
){
private
String
getComponentType
(
String
componentType
)
throws
SignatureException
{
String
JVMSig
=
""
;
...
...
@@ -216,8 +223,7 @@ public class TypeSignature{
TypeElement
classNameDoc
=
elems
.
getTypeElement
(
componentType
);
if
(
classNameDoc
==
null
){
System
.
out
.
println
(
"Invalid class type for "
+
componentType
);
new
Exception
().
printStackTrace
();
throw
new
SignatureException
(
componentType
);
}
else
{
String
classname
=
classNameDoc
.
getQualifiedName
().
toString
();
String
newclassname
=
classname
.
replace
(
'.'
,
'/'
);
...
...
src/share/classes/com/sun/tools/javah/resources/l10n.properties
浏览文件 @
0b08efa4
...
...
@@ -45,6 +45,8 @@ jni.llni.mixed=\
Can''t mix options -jni and -llni. Try -help.
jni.no.stubs
=
\
JNI does not require stubs, please refer to the JNI documentation.
jni.sigerror
=
\
Cannot determine signature for {0}
dir.file.mixed
=
\
Can''t mix options -d and -o. Try -help.
no.classes.specified
=
\
...
...
@@ -94,7 +96,7 @@ main.opt.d=\
\
-d <dir> Output directory
main.opt.v
=
\
\
-v -verbose Enable verbose output
main.opt.h
elp
=
\
main.opt.h
=
\
\
-h --help -? Print this message
main.opt.version
=
\
\
-version Print version information
...
...
test/tools/javac/T6705935.java
浏览文件 @
0b08efa4
...
...
@@ -31,6 +31,8 @@ import java.io.*;
import
java.util.*
;
import
javax.tools.*
;
import
com.sun.tools.javac.file.*
;
import
com.sun.tools.javac.file.ZipArchive.ZipFileObject
;
import
com.sun.tools.javac.file.ZipFileIndexArchive.ZipFileIndexFileObject
;
public
class
T6705935
{
public
static
void
main
(
String
...
args
)
throws
Exception
{
...
...
@@ -43,11 +45,22 @@ public class T6705935 {
java_home
=
java_home
.
getParentFile
();
JavaCompiler
c
=
ToolProvider
.
getSystemJavaCompiler
();
JavaFileManager
fm
=
c
.
getStandardFileManager
(
null
,
null
,
null
);
StandardJavaFileManager
fm
=
c
.
getStandardFileManager
(
null
,
null
,
null
);
//System.err.println("platform class path: " + asList(fm.getLocation(StandardLocation.PLATFORM_CLASS_PATH)));
for
(
JavaFileObject
fo:
fm
.
list
(
StandardLocation
.
PLATFORM_CLASS_PATH
,
"java.lang"
,
Collections
.
singleton
(
JavaFileObject
.
Kind
.
CLASS
),
false
))
{
test
++;
if
(!(
fo
instanceof
ZipFileObject
||
fo
instanceof
ZipFileIndexFileObject
))
{
System
.
out
.
println
(
"Skip "
+
fo
.
getClass
().
getSimpleName
()
+
" "
+
fo
.
getName
());
skip
++;
continue
;
}
//System.err.println(fo.getName());
String
p
=
fo
.
getName
();
int
bra
=
p
.
indexOf
(
"("
);
int
ket
=
p
.
indexOf
(
")"
);
...
...
@@ -61,5 +74,26 @@ public class T6705935 {
throw
new
Exception
(
"bad path: "
+
p
);
}
if
(
test
==
0
)
throw
new
Exception
(
"no files found"
);
if
(
skip
==
0
)
System
.
out
.
println
(
test
+
" files found"
);
else
System
.
out
.
println
(
test
+
" files found, "
+
skip
+
" files skipped"
);
if
(
test
==
skip
)
System
.
out
.
println
(
"Warning: all files skipped; no platform classes found in zip files."
);
}
private
<
T
>
List
<
T
>
asList
(
Iterable
<?
extends
T
>
items
)
{
List
<
T
>
list
=
new
ArrayList
<
T
>();
for
(
T
item:
items
)
list
.
add
(
item
);
return
list
;
}
private
int
skip
;
private
int
test
;
}
test/tools/javac/api/6406133/Erroneous.java
浏览文件 @
0b08efa4
/*
* Copyright (c) 2008, 2010, 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.
*/
@Deprecated
class
A
{
class
A
{}
class
A
extends
Missing
{
}
test/tools/javac/diags/CheckExamples.java
浏览文件 @
0b08efa4
...
...
@@ -40,7 +40,7 @@ import java.util.*;
* compiler.properties bundle. A list of exceptions may be given in the
* not-yet.txt file. Entries on the not-yet.txt list should not be
* covered by examples.
* When new keys are added to the resource bun
c
le, it is strongly recommended
* When new keys are added to the resource bun
d
le, it is strongly recommended
* that corresponding new examples be added here, if at all practical, instead
* of simply and lazily being added to the not-yet.txt list.
*/
...
...
test/tools/javac/diags/FileManager.java
浏览文件 @
0b08efa4
...
...
@@ -177,12 +177,14 @@ public class FileManager
}
void
checkRead
()
throws
IOException
{
if
(
cantRead
!=
null
&&
cantRead
.
matcher
(
getName
()).
matches
())
String
canonName
=
getName
().
replace
(
File
.
separatorChar
,
'/'
);
if
(
cantRead
!=
null
&&
cantRead
.
matcher
(
canonName
).
matches
())
throw
new
IOException
(
"FileManager: Can't read"
);
}
void
checkWrite
()
throws
IOException
{
if
(
cantWrite
!=
null
&&
cantWrite
.
matcher
(
getName
()).
matches
())
String
canonName
=
getName
().
replace
(
File
.
separatorChar
,
'/'
);
if
(
cantWrite
!=
null
&&
cantWrite
.
matcher
(
canonName
).
matches
())
throw
new
IOException
(
"FileManager: Can't write"
);
}
...
...
test/tools/javac/meth/TestCP.java
0 → 100644
浏览文件 @
0b08efa4
/*
* Copyright (c) 2010, 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 6991980
* @summary polymorphic signature calls don't share the same CP entries
* @run main TestCP
*/
import
com.sun.tools.classfile.Instruction
;
import
com.sun.tools.classfile.Attribute
;
import
com.sun.tools.classfile.ClassFile
;
import
com.sun.tools.classfile.Code_attribute
;
import
com.sun.tools.classfile.ConstantPool.*
;
import
com.sun.tools.classfile.Method
;
import
java.dyn.*
;
import
java.io.*
;
public
class
TestCP
{
static
class
TestClass
{
void
test
(
MethodHandle
mh
)
throws
Throwable
{
Number
n
=
mh
.<
Number
>
invokeExact
(
"daddy"
,
1
,
'n'
);
n
=
(
Number
)
mh
.
invokeExact
(
"bunny"
,
1
,
'd'
);
}
}
static
final
String
PS_TYPE
=
"(Ljava/lang/String;IC)Ljava/lang/Number;"
;
static
final
int
PS_CALLS_COUNT
=
2
;
static
final
String
SUBTEST_NAME
=
TestClass
.
class
.
getName
()
+
".class"
;
static
final
String
TEST_METHOD_NAME
=
"test"
;
public
static
void
main
(
String
...
args
)
throws
Exception
{
new
TestCP
().
run
();
}
public
void
run
()
throws
Exception
{
String
workDir
=
System
.
getProperty
(
"test.classes"
);
File
compiledTest
=
new
File
(
workDir
,
SUBTEST_NAME
);
verifyMethodHandleInvocationDescriptors
(
compiledTest
);
}
void
verifyMethodHandleInvocationDescriptors
(
File
f
)
{
System
.
err
.
println
(
"verify: "
+
f
);
try
{
int
count
=
0
;
ClassFile
cf
=
ClassFile
.
read
(
f
);
Method
testMethod
=
null
;
for
(
Method
m
:
cf
.
methods
)
{
if
(
m
.
getName
(
cf
.
constant_pool
).
equals
(
TEST_METHOD_NAME
))
{
testMethod
=
m
;
break
;
}
}
if
(
testMethod
==
null
)
{
throw
new
Error
(
"Test method not found"
);
}
Code_attribute
ea
=
(
Code_attribute
)
testMethod
.
attributes
.
get
(
Attribute
.
Code
);
if
(
testMethod
==
null
)
{
throw
new
Error
(
"Code attribute for test() method not found"
);
}
int
instr_count
=
0
;
int
cp_entry
=
-
1
;
for
(
Instruction
i
:
ea
.
getInstructions
())
{
if
(
i
.
getMnemonic
().
equals
(
"invokevirtual"
))
{
instr_count
++;
if
(
cp_entry
==
-
1
)
{
cp_entry
=
i
.
getUnsignedShort
(
1
);
}
else
if
(
cp_entry
!=
i
.
getUnsignedShort
(
1
))
{
throw
new
Error
(
"Unexpected CP entry in polymorphic signature call"
);
}
CONSTANT_Methodref_info
methRef
=
(
CONSTANT_Methodref_info
)
cf
.
constant_pool
.
get
(
cp_entry
);
String
type
=
methRef
.
getNameAndTypeInfo
().
getType
();
if
(!
type
.
equals
(
PS_TYPE
))
{
throw
new
Error
(
"Unexpected type in polymorphic signature call: "
+
type
);
}
}
}
if
(
instr_count
!=
PS_CALLS_COUNT
)
{
throw
new
Error
(
"Wrong number of polymorphic signature call found: "
+
instr_count
);
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
throw
new
Error
(
"error reading "
+
f
+
": "
+
e
);
}
}
}
test/tools/javac/processing/environment/round/TestContext.java
0 → 100644
浏览文件 @
0b08efa4
/*
* Copyright (c) 2010, 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 6988836
* @summary A new JavacElements is created for each round of annotation processing
* @library ../../../lib
* @build JavacTestingAbstractProcessor TestContext
* @compile/process -processor TestContext -XprintRounds TestContext
*/
import
java.io.*
;
import
java.util.*
;
import
javax.annotation.processing.*
;
import
javax.lang.model.element.*
;
import
javax.tools.*
;
import
static
javax
.
tools
.
Diagnostic
.
Kind
.*;
import
com.sun.source.util.Trees
;
import
com.sun.tools.javac.api.JavacTrees
;
import
com.sun.tools.javac.model.JavacElements
;
import
com.sun.tools.javac.model.JavacTypes
;
import
com.sun.tools.javac.processing.JavacProcessingEnvironment
;
import
com.sun.tools.javac.util.Context
;
public
class
TestContext
extends
JavacTestingAbstractProcessor
{
Trees
treeUtils
;
int
round
=
0
;
@Override
public
void
init
(
ProcessingEnvironment
pEnv
)
{
super
.
init
(
pEnv
);
treeUtils
=
Trees
.
instance
(
processingEnv
);
}
@Override
public
boolean
process
(
Set
<?
extends
TypeElement
>
annotations
,
RoundEnvironment
roundEnv
)
{
round
++;
JavacProcessingEnvironment
jpe
=
(
JavacProcessingEnvironment
)
processingEnv
;
Context
c
=
jpe
.
getContext
();
check
(
c
.
get
(
JavacElements
.
class
),
eltUtils
);
check
(
c
.
get
(
JavacTypes
.
class
),
typeUtils
);
check
(
c
.
get
(
JavacTrees
.
class
),
treeUtils
);
final
int
MAXROUNDS
=
3
;
if
(
round
<
MAXROUNDS
)
generateSource
(
"Gen"
+
round
);
return
true
;
}
<
T
>
void
check
(
T
actual
,
T
expected
)
{
// messager.printMessage(NOTE, "expect: " + expected);
// messager.printMessage(NOTE, "actual: " + actual);
if
(
actual
!=
expected
)
{
messager
.
printMessage
(
ERROR
,
"round "
+
round
+
" unexpected value for "
+
expected
.
getClass
().
getName
()
+
": "
+
actual
);
}
}
void
generateSource
(
String
name
)
{
String
text
=
"class "
+
name
+
" { }\n"
;
try
(
Writer
out
=
filer
.
createSourceFile
(
name
).
openWriter
())
{
out
.
write
(
text
);
}
catch
(
IOException
e
)
{
throw
new
Error
(
e
);
}
}
}
test/tools/javac/processing/errors/TestParseErrors/ParseErrors.java
0 → 100644
浏览文件 @
0b08efa4
/*
* Copyright (c) 2010, 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.
*/
import
java.util.List
;
import
java.util.Vector
;
class
test
{
public
String
m
(
List
<?
extends
String
>
v
,
String
s
)
{
return
null
;
}
public
String
m2
(
Vector
<
String
>
vs
,
String
s
)
{
return
null
;
}
public
void
m3
(
testclass
<
String
>,
}
class
testclass
<
T
>
{
T
t
;
}
test/tools/javac/processing/errors/TestParseErrors/TestParseErrors.java
0 → 100644
浏览文件 @
0b08efa4
/*
* Copyright (c) 2010, 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 6988407
* @summary javac crashes running processor on errant code; it used to print error message
* @library ../../../lib
* @build JavacTestingAbstractProcessor TestParseErrors
* @compile/fail/ref=TestParseErrors.out -XDrawDiagnostics -proc:only -processor TestParseErrors ParseErrors.java
*/
import
java.util.*
;
import
javax.annotation.processing.*
;
import
javax.lang.model.element.*
;
public
class
TestParseErrors
extends
JavacTestingAbstractProcessor
{
public
boolean
process
(
Set
<?
extends
TypeElement
>
annotations
,
RoundEnvironment
roundEnvironment
)
{
throw
new
Error
(
"Should not be called"
);
}
}
test/tools/javac/processing/errors/TestParseErrors/TestParseErrors.out
0 → 100644
浏览文件 @
0b08efa4
ParseErrors.java:37:37: compiler.err.expected: token.identifier
ParseErrors.java:38:1: compiler.err.illegal.start.of.type
ParseErrors.java:38:2: compiler.err.expected: ')'
ParseErrors.java:40:6: compiler.err.expected: ';'
ParseErrors.java:40:20: compiler.err.illegal.start.of.type
ParseErrors.java:41:5: compiler.err.expected: '('
ParseErrors.java:41:8: compiler.err.expected: token.identifier
7 errors
test/tools/javadoc/T4994049/FileWithTabs.java
浏览文件 @
0b08efa4
...
...
@@ -22,5 +22,5 @@
*/
public
class
FileWithTabs
{
public
void
tabbedMethod
()
{}
\
t
public
void
tabbedMethod
()
{}
}
test/tools/javadoc/T4994049/T4994049.java
浏览文件 @
0b08efa4
...
...
@@ -30,7 +30,7 @@
*/
import
com.sun.javadoc.*
;
import
java.io.
File
;
import
java.io.
*
;
import
static
com
.
sun
.
tools
.
javadoc
.
Main
.
execute
;
public
class
T4994049
extends
Doclet
{
...
...
@@ -52,12 +52,47 @@ public class T4994049 extends Doclet {
return
false
;
}
public
static
void
main
(
String
...
args
)
{
public
static
void
main
(
String
...
args
)
throws
Exception
{
File
testSrc
=
new
File
(
System
.
getProperty
(
"test.src"
));
File
tmpSrc
=
new
File
(
"tmpSrc"
);
initTabs
(
testSrc
,
tmpSrc
);
for
(
String
file
:
args
)
{
File
source
=
new
File
(
System
.
getProperty
(
"test.src"
,
"."
),
file
);
if
(
execute
(
"javadoc"
,
"T4994049"
,
T4994049
.
class
.
getClassLoader
(),
new
String
[]{
source
.
getPath
()}
)
!=
0
)
throw
new
Error
();
File
source
=
new
File
(
tmpSrc
,
file
);
int
rc
=
execute
(
"javadoc"
,
"T4994049"
,
T4994049
.
class
.
getClassLoader
(),
new
String
[]{
source
.
getPath
()
}
);
if
(
rc
!=
0
)
throw
new
Error
(
"Unexpected return code from javadoc: "
+
rc
);
}
}
static
void
initTabs
(
File
from
,
File
to
)
throws
IOException
{
for
(
File
f:
from
.
listFiles
())
{
File
t
=
new
File
(
to
,
f
.
getName
());
if
(
f
.
isDirectory
())
{
initTabs
(
f
,
t
);
}
else
if
(
f
.
getName
().
endsWith
(
".java"
))
{
write
(
t
,
read
(
f
).
replace
(
"\\t"
,
"\t"
));
}
}
}
static
String
read
(
File
f
)
throws
IOException
{
StringBuilder
sb
=
new
StringBuilder
();
try
(
BufferedReader
in
=
new
BufferedReader
(
new
FileReader
(
f
)))
{
String
line
;
while
((
line
=
in
.
readLine
())
!=
null
)
{
sb
.
append
(
line
);
sb
.
append
(
"\n"
);
}
}
return
sb
.
toString
();
}
static
void
write
(
File
f
,
String
s
)
throws
IOException
{
f
.
getParentFile
().
mkdirs
();
try
(
Writer
out
=
new
FileWriter
(
f
))
{
out
.
write
(
s
);
}
}
...
...
test/tools/javah/4942232/ParamClassTest.java
0 → 100644
浏览文件 @
0b08efa4
/*
* Copyright (c) 2010, 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.
*/
public
class
ParamClassTest
{
static
{
System
.
loadLibrary
(
"Test"
);
}
public
native
void
method
(
Param
s
);
public
static
void
main
(
String
[]
a
)
{
}
}
class
Param
{
}
test/tools/javah/4942232/Test.java
0 → 100644
浏览文件 @
0b08efa4
/*
* Copyright (c) 2010, 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 4942232
* @summary missing param class processes without error
* @build ParamClassTest Test
* @run main Test
*/
import
java.io.*
;
import
java.util.*
;
public
class
Test
{
public
static
void
main
(
String
...
args
)
throws
Exception
{
new
Test
().
run
();
}
void
run
()
throws
Exception
{
File
testSrc
=
new
File
(
System
.
getProperty
(
"test.src"
));
File
testClasses
=
new
File
(
System
.
getProperty
(
"test.classes"
));
// standard use of javah on valid class file
String
[]
test1Args
=
{
"-d"
,
mkdir
(
"test1/out"
).
getPath
(),
"-classpath"
,
testClasses
.
getPath
(),
"ParamClassTest"
};
test
(
test1Args
,
0
);
// extended use of javah on valid source file
String
[]
test2Args
=
{
"-d"
,
mkdir
(
"test2/out"
).
getPath
(),
"-classpath"
,
testSrc
.
getPath
(),
"ParamClassTest"
};
test
(
test2Args
,
0
);
// javah on class file with missing referents
File
test3Classes
=
mkdir
(
"test3/classes"
);
copy
(
new
File
(
testClasses
,
"ParamClassTest.class"
),
test3Classes
);
String
[]
test3Args
=
{
"-d"
,
mkdir
(
"test3/out"
).
getPath
(),
"-classpath"
,
test3Classes
.
getPath
(),
"ParamClassTest"
};
test
(
test3Args
,
1
);
// javah on source file with missing referents
File
test4Src
=
mkdir
(
"test4/src"
);
String
paramClassTestSrc
=
readFile
(
new
File
(
testSrc
,
"ParamClassTest.java"
));
writeFile
(
new
File
(
test4Src
,
"ParamClassTest.java"
),
paramClassTestSrc
.
replaceAll
(
"class Param \\{\\s+\\}"
,
""
));
String
[]
test4Args
=
{
"-d"
,
mkdir
(
"test4/out"
).
getPath
(),
"-classpath"
,
test4Src
.
getPath
(),
"ParamClassTest"
};
test
(
test4Args
,
15
);
if
(
errors
>
0
)
throw
new
Exception
(
errors
+
" errors occurred"
);
}
void
test
(
String
[]
args
,
int
expect
)
{
System
.
err
.
println
(
"test: "
+
Arrays
.
asList
(
args
));
int
rc
=
javah
(
args
);
if
(
rc
!=
expect
)
error
(
"Unexpected return code: "
+
rc
+
"; expected: "
+
expect
);
}
int
javah
(
String
...
args
)
{
StringWriter
sw
=
new
StringWriter
();
PrintWriter
pw
=
new
PrintWriter
(
sw
);
int
rc
=
com
.
sun
.
tools
.
javah
.
Main
.
run
(
args
,
pw
);
pw
.
close
();
String
out
=
sw
.
toString
();
if
(!
out
.
isEmpty
())
System
.
err
.
println
(
out
);
return
rc
;
}
File
mkdir
(
String
path
)
{
File
f
=
new
File
(
path
);
f
.
mkdirs
();
return
f
;
}
void
copy
(
File
from
,
File
to
)
throws
IOException
{
if
(
to
.
isDirectory
())
to
=
new
File
(
to
,
from
.
getName
());
try
(
DataInputStream
in
=
new
DataInputStream
(
new
FileInputStream
(
from
));
FileOutputStream
out
=
new
FileOutputStream
(
to
))
{
byte
[]
buf
=
new
byte
[(
int
)
from
.
length
()];
in
.
readFully
(
buf
);
out
.
write
(
buf
);
}
}
String
readFile
(
File
f
)
throws
IOException
{
try
(
DataInputStream
in
=
new
DataInputStream
(
new
FileInputStream
(
f
)))
{
byte
[]
buf
=
new
byte
[(
int
)
f
.
length
()];
in
.
readFully
(
buf
);
return
new
String
(
buf
);
}
}
void
writeFile
(
File
f
,
String
body
)
throws
IOException
{
try
(
FileWriter
out
=
new
FileWriter
(
f
))
{
out
.
write
(
body
);
}
}
void
error
(
String
msg
)
{
System
.
err
.
println
(
msg
);
errors
++;
}
int
errors
;
}
test/tools/javah/TestHelpOpts.java
0 → 100644
浏览文件 @
0b08efa4
/*
* Copyright (c) 2010, 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 6893932 6990390
* @summary javah help screen lists -h and -? but does not accept them
*/
import
java.io.*
;
import
java.util.*
;
public
class
TestHelpOpts
{
public
static
void
main
(
String
...
args
)
throws
Exception
{
new
TestHelpOpts
().
run
();
}
void
run
()
throws
Exception
{
Locale
prev
=
Locale
.
getDefault
();
try
{
Locale
.
setDefault
(
Locale
.
ENGLISH
);
String
[]
opts
=
{
"-h"
,
"-help"
,
"-?"
,
"--help"
};
for
(
String
opt:
opts
)
test
(
opt
);
}
finally
{
Locale
.
setDefault
(
prev
);
}
if
(
errors
>
0
)
throw
new
Exception
(
errors
+
" errors occurred"
);
}
void
test
(
String
opt
)
{
System
.
err
.
println
(
"test "
+
opt
);
String
[]
args
=
{
opt
};
StringWriter
sw
=
new
StringWriter
();
PrintWriter
pw
=
new
PrintWriter
(
sw
);
int
rc
=
com
.
sun
.
tools
.
javah
.
Main
.
run
(
args
,
pw
);
pw
.
close
();
String
out
=
sw
.
toString
();
if
(!
out
.
isEmpty
())
System
.
err
.
println
(
out
);
if
(
rc
!=
0
)
error
(
"Unexpected exit: rc="
+
rc
);
String
flat
=
out
.
replaceAll
(
"\\s+"
,
" "
);
// canonicalize whitespace
if
(!
flat
.
contains
(
"Usage: javah [options] <classes> where [options] include:"
))
error
(
"expected text not found"
);
if
(
flat
.
contains
(
"main.opt"
))
error
(
"key not found in resource bundle: "
+
flat
.
replaceAll
(
".*(main.opt.[^ ]*).*"
,
"$1"
));
}
void
error
(
String
msg
)
{
System
.
err
.
println
(
msg
);
errors
++;
}
int
errors
;
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录