Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_langtools
提交
70dfea74
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看板
提交
70dfea74
编写于
8月 20, 2013
作者:
J
jfranck
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
8019243: AnnotationTypeMismatchException instead of MirroredTypeException
Reviewed-by: jjg
上级
37314679
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
147 addition
and
3 deletion
+147
-3
src/share/classes/com/sun/tools/javac/code/Attribute.java
src/share/classes/com/sun/tools/javac/code/Attribute.java
+8
-0
src/share/classes/com/sun/tools/javac/comp/Annotate.java
src/share/classes/com/sun/tools/javac/comp/Annotate.java
+14
-2
src/share/classes/com/sun/tools/javac/model/AnnotationProxyMaker.java
...asses/com/sun/tools/javac/model/AnnotationProxyMaker.java
+4
-1
test/tools/javac/processing/errors/EnsureMirroredTypeException/Processor.java
...cessing/errors/EnsureMirroredTypeException/Processor.java
+100
-0
test/tools/javac/processing/errors/EnsureMirroredTypeException/Source.java
...processing/errors/EnsureMirroredTypeException/Source.java
+17
-0
test/tools/javac/processing/errors/EnsureMirroredTypeException/Source.out
.../processing/errors/EnsureMirroredTypeException/Source.out
+4
-0
未找到文件。
src/share/classes/com/sun/tools/javac/code/Attribute.java
浏览文件 @
70dfea74
...
@@ -340,6 +340,14 @@ public abstract class Attribute implements AnnotationValue {
...
@@ -340,6 +340,14 @@ public abstract class Attribute implements AnnotationValue {
}
}
}
}
public
static
class
UnresolvedClass
extends
Error
{
public
Type
classType
;
public
UnresolvedClass
(
Type
type
,
Type
classType
)
{
super
(
type
);
this
.
classType
=
classType
;
}
}
/** A visitor type for dynamic dispatch on the kind of attribute value. */
/** A visitor type for dynamic dispatch on the kind of attribute value. */
public
static
interface
Visitor
{
public
static
interface
Visitor
{
void
visitConstant
(
Attribute
.
Constant
value
);
void
visitConstant
(
Attribute
.
Constant
value
);
...
...
src/share/classes/com/sun/tools/javac/comp/Annotate.java
浏览文件 @
70dfea74
...
@@ -332,8 +332,20 @@ public class Annotate {
...
@@ -332,8 +332,20 @@ public class Annotate {
}
}
if
(
expected
.
tsym
==
syms
.
classType
.
tsym
)
{
if
(
expected
.
tsym
==
syms
.
classType
.
tsym
)
{
Type
result
=
attr
.
attribExpr
(
tree
,
env
,
expected
);
Type
result
=
attr
.
attribExpr
(
tree
,
env
,
expected
);
if
(
result
.
isErroneous
())
if
(
result
.
isErroneous
())
{
return
new
Attribute
.
Error
(
expected
);
// Does it look like a class literal?
if
(
TreeInfo
.
name
(
tree
)
==
names
.
_class
)
{
Name
n
=
(((
JCFieldAccess
)
tree
).
selected
).
type
.
tsym
.
flatName
();
return
new
Attribute
.
UnresolvedClass
(
expected
,
types
.
createErrorType
(
n
,
syms
.
unknownSymbol
,
syms
.
classType
));
}
else
{
return
new
Attribute
.
Error
(
expected
);
}
}
// Class literals look like field accesses of a field named class
// at the tree level
if
(
TreeInfo
.
name
(
tree
)
!=
names
.
_class
)
{
if
(
TreeInfo
.
name
(
tree
)
!=
names
.
_class
)
{
log
.
error
(
tree
.
pos
(),
"annotation.value.must.be.class.literal"
);
log
.
error
(
tree
.
pos
(),
"annotation.value.must.be.class.literal"
);
return
new
Attribute
.
Error
(
expected
);
return
new
Attribute
.
Error
(
expected
);
...
...
src/share/classes/com/sun/tools/javac/model/AnnotationProxyMaker.java
浏览文件 @
70dfea74
...
@@ -244,7 +244,10 @@ public class AnnotationProxyMaker {
...
@@ -244,7 +244,10 @@ public class AnnotationProxyMaker {
}
}
public
void
visitError
(
Attribute
.
Error
e
)
{
public
void
visitError
(
Attribute
.
Error
e
)
{
value
=
null
;
// indicates a type mismatch
if
(
e
instanceof
Attribute
.
UnresolvedClass
)
value
=
new
MirroredTypeExceptionProxy
(((
Attribute
.
UnresolvedClass
)
e
).
classType
);
else
value
=
null
;
// indicates a type mismatch
}
}
...
...
test/tools/javac/processing/errors/EnsureMirroredTypeException/Processor.java
0 → 100644
浏览文件 @
70dfea74
/*
* Copyright (c) 2013, 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.lang.annotation.*
;
import
java.util.*
;
import
javax.annotation.processing.*
;
import
javax.lang.model.element.*
;
import
javax.lang.model.type.DeclaredType
;
import
javax.lang.model.type.MirroredTypeException
;
import
javax.lang.model.type.TypeMirror
;
import
javax.lang.model.type.TypeKind
;
import
javax.tools.*
;
import
com.sun.tools.javac.util.Assert
;
import
com.sun.tools.javac.code.Symbol
;
import
static
com
.
sun
.
tools
.
javac
.
code
.
Symbol
.
TypeSymbol
;
public
class
Processor
extends
JavacTestingAbstractProcessor
{
@Override
public
boolean
process
(
Set
<?
extends
TypeElement
>
annotations
,
RoundEnvironment
roundEnv
)
{
for
(
Element
e
:
roundEnv
.
getElementsAnnotatedWith
(
A
.
class
))
{
A
rtg
=
e
.
getAnnotation
(
A
.
class
);
try
{
rtg
.
a
();
Assert
.
check
(
false
);
//Should not reach here
}
catch
(
MirroredTypeException
ex
)
{
TypeMirror
tm
=
ex
.
getTypeMirror
();
Assert
.
check
(
tm
.
getKind
()
==
TypeKind
.
ERROR
);
TypeElement
elm
=
(
TypeElement
)((
DeclaredType
)
tm
).
asElement
();
Assert
.
check
(
elm
.
getQualifiedName
().
toString
().
endsWith
(
"some.path.to.SomeUnknownClass$Inner"
));
TypeSymbol
sym
=
(
TypeSymbol
)
elm
;
Assert
.
check
(
sym
.
name
.
contentEquals
(
"some.path.to.SomeUnknownClass$Inner"
));
}
}
for
(
Element
e
:
roundEnv
.
getElementsAnnotatedWith
(
B
.
class
))
{
B
rtg
=
e
.
getAnnotation
(
B
.
class
);
try
{
rtg
.
a
();
Assert
.
check
(
false
);
//Should not reach here
}
catch
(
MirroredTypeException
ex
)
{
TypeMirror
tm
=
ex
.
getTypeMirror
();
Assert
.
check
(
tm
.
getKind
()
==
TypeKind
.
ERROR
);
TypeElement
elm
=
(
TypeElement
)((
DeclaredType
)
tm
).
asElement
();
Assert
.
check
(
elm
.
getQualifiedName
().
toString
().
endsWith
(
"SomeUnknownClass"
));
TypeSymbol
sym
=
(
TypeSymbol
)
elm
;
Assert
.
check
(
sym
.
name
.
contentEquals
(
"SomeUnknownClass"
));
}
}
for
(
Element
e
:
roundEnv
.
getElementsAnnotatedWith
(
C
.
class
))
{
C
rtg
=
e
.
getAnnotation
(
C
.
class
);
try
{
rtg
.
a
();
Assert
.
check
(
false
);
//Should not reach here
}
catch
(
AnnotationTypeMismatchException
ex
)
{
;
}
}
return
true
;
}
@interface
A
{
Class
<?>
a
();
}
@interface
B
{
Class
<?>
a
();
}
@interface
C
{
Class
<?>
a
();
}
}
test/tools/javac/processing/errors/EnsureMirroredTypeException/Source.java
0 → 100644
浏览文件 @
70dfea74
/*
* @test /nodynamiccopyright/
* @bug 8019243
* @summary AnnotationTypeMismatchException instead of MirroredTypeException
* @library /tools/javac/lib
* @build JavacTestingAbstractProcessor Processor
* @compile/fail/ref=Source.out -XDrawDiagnostics -processor Processor Source.java
*/
@Processor
.
A
(
a
=
some
.
path
.
to
.
SomeUnknownClass
$Inner
.
class
)
class
Source1
{}
@Processor
.
B
(
a
=
SomeUnknownClass
.
class
)
class
Source2
{}
@Processor
.
C
(
a
=
SomeUnknownClass
.
clas
)
// this is not a class literal
class
Source3
{}
test/tools/javac/processing/errors/EnsureMirroredTypeException/Source.out
0 → 100644
浏览文件 @
70dfea74
Source.java:10:28: compiler.err.doesnt.exist: some.path.to
Source.java:13:16: compiler.err.cant.resolve: kindname.class, SomeUnknownClass, ,
Source.java:16:16: compiler.err.cant.resolve: kindname.variable, SomeUnknownClass, ,
3 errors
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录