Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_langtools
提交
9f3f2aee
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看板
提交
9f3f2aee
编写于
1月 10, 2011
作者:
J
jjg
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
6992999: fully remove JSR 308 from langtools
Reviewed-by: mcimadamore
上级
c98db104
变更
40
展开全部
显示空白变更内容
内联
并排
Showing
40 changed file
with
44 addition
and
2440 deletion
+44
-2440
src/share/classes/com/sun/source/tree/MethodTree.java
src/share/classes/com/sun/source/tree/MethodTree.java
+1
-2
src/share/classes/com/sun/source/tree/Tree.java
src/share/classes/com/sun/source/tree/Tree.java
+1
-3
src/share/classes/com/sun/source/tree/TreeVisitor.java
src/share/classes/com/sun/source/tree/TreeVisitor.java
+1
-2
src/share/classes/com/sun/source/tree/TypeParameterTree.java
src/share/classes/com/sun/source/tree/TypeParameterTree.java
+1
-2
src/share/classes/com/sun/source/util/SimpleTreeVisitor.java
src/share/classes/com/sun/source/util/SimpleTreeVisitor.java
+1
-5
src/share/classes/com/sun/source/util/TreeScanner.java
src/share/classes/com/sun/source/util/TreeScanner.java
+1
-9
src/share/classes/com/sun/tools/classfile/Attribute.java
src/share/classes/com/sun/tools/classfile/Attribute.java
+1
-7
src/share/classes/com/sun/tools/classfile/ClassWriter.java
src/share/classes/com/sun/tools/classfile/ClassWriter.java
+1
-112
src/share/classes/com/sun/tools/classfile/ExtendedAnnotation.java
...e/classes/com/sun/tools/classfile/ExtendedAnnotation.java
+0
-612
src/share/classes/com/sun/tools/classfile/RuntimeInvisibleTypeAnnotations_attribute.java
.../classfile/RuntimeInvisibleTypeAnnotations_attribute.java
+0
-56
src/share/classes/com/sun/tools/classfile/RuntimeTypeAnnotations_attribute.java
...sun/tools/classfile/RuntimeTypeAnnotations_attribute.java
+0
-61
src/share/classes/com/sun/tools/classfile/RuntimeVisibleTypeAnnotations_attribute.java
...ls/classfile/RuntimeVisibleTypeAnnotations_attribute.java
+0
-56
src/share/classes/com/sun/tools/javac/code/Attribute.java
src/share/classes/com/sun/tools/javac/code/Attribute.java
+1
-16
src/share/classes/com/sun/tools/javac/code/Symbol.java
src/share/classes/com/sun/tools/javac/code/Symbol.java
+1
-13
src/share/classes/com/sun/tools/javac/code/TypeAnnotations.java
...are/classes/com/sun/tools/javac/code/TypeAnnotations.java
+0
-403
src/share/classes/com/sun/tools/javac/comp/Attr.java
src/share/classes/com/sun/tools/javac/comp/Attr.java
+1
-37
src/share/classes/com/sun/tools/javac/comp/Check.java
src/share/classes/com/sun/tools/javac/comp/Check.java
+1
-42
src/share/classes/com/sun/tools/javac/comp/Flow.java
src/share/classes/com/sun/tools/javac/comp/Flow.java
+1
-25
src/share/classes/com/sun/tools/javac/comp/Lower.java
src/share/classes/com/sun/tools/javac/comp/Lower.java
+1
-6
src/share/classes/com/sun/tools/javac/comp/MemberEnter.java
src/share/classes/com/sun/tools/javac/comp/MemberEnter.java
+1
-85
src/share/classes/com/sun/tools/javac/comp/TransTypes.java
src/share/classes/com/sun/tools/javac/comp/TransTypes.java
+1
-5
src/share/classes/com/sun/tools/javac/jvm/ClassReader.java
src/share/classes/com/sun/tools/javac/jvm/ClassReader.java
+1
-185
src/share/classes/com/sun/tools/javac/jvm/ClassWriter.java
src/share/classes/com/sun/tools/javac/jvm/ClassWriter.java
+1
-146
src/share/classes/com/sun/tools/javac/jvm/Code.java
src/share/classes/com/sun/tools/javac/jvm/Code.java
+1
-18
src/share/classes/com/sun/tools/javac/jvm/Gen.java
src/share/classes/com/sun/tools/javac/jvm/Gen.java
+1
-50
src/share/classes/com/sun/tools/javac/processing/JavacProcessingEnvironment.java
...un/tools/javac/processing/JavacProcessingEnvironment.java
+1
-3
src/share/classes/com/sun/tools/javac/resources/compiler.properties
...classes/com/sun/tools/javac/resources/compiler.properties
+1
-3
src/share/classes/com/sun/tools/javac/tree/JCTree.java
src/share/classes/com/sun/tools/javac/tree/JCTree.java
+2
-61
src/share/classes/com/sun/tools/javac/tree/Pretty.java
src/share/classes/com/sun/tools/javac/tree/Pretty.java
+6
-41
src/share/classes/com/sun/tools/javac/tree/TreeCopier.java
src/share/classes/com/sun/tools/javac/tree/TreeCopier.java
+3
-12
src/share/classes/com/sun/tools/javac/tree/TreeInfo.java
src/share/classes/com/sun/tools/javac/tree/TreeInfo.java
+1
-13
src/share/classes/com/sun/tools/javac/tree/TreeMaker.java
src/share/classes/com/sun/tools/javac/tree/TreeMaker.java
+2
-35
src/share/classes/com/sun/tools/javac/tree/TreeScanner.java
src/share/classes/com/sun/tools/javac/tree/TreeScanner.java
+1
-11
src/share/classes/com/sun/tools/javac/tree/TreeTranslator.java
...hare/classes/com/sun/tools/javac/tree/TreeTranslator.java
+1
-13
src/share/classes/com/sun/tools/javap/AnnotationWriter.java
src/share/classes/com/sun/tools/javap/AnnotationWriter.java
+1
-125
src/share/classes/com/sun/tools/javap/AttributeWriter.java
src/share/classes/com/sun/tools/javap/AttributeWriter.java
+1
-27
src/share/classes/com/sun/tools/javap/CodeWriter.java
src/share/classes/com/sun/tools/javap/CodeWriter.java
+1
-8
src/share/classes/com/sun/tools/javap/InstructionDetailWriter.java
.../classes/com/sun/tools/javap/InstructionDetailWriter.java
+3
-3
src/share/classes/com/sun/tools/javap/TypeAnnotationWriter.java
...are/classes/com/sun/tools/javap/TypeAnnotationWriter.java
+0
-126
test/tools/javac/diags/examples.not-yet.txt
test/tools/javac/diags/examples.not-yet.txt
+0
-1
未找到文件。
src/share/classes/com/sun/source/tree/MethodTree.java
浏览文件 @
9f3f2aee
/*
* Copyright (c) 2005, 201
0
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2005, 201
1
, 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
...
...
@@ -53,7 +53,6 @@ public interface MethodTree extends Tree {
Tree
getReturnType
();
List
<?
extends
TypeParameterTree
>
getTypeParameters
();
List
<?
extends
VariableTree
>
getParameters
();
//308 List<? extends AnnotationTree> getReceiverAnnotations();
List
<?
extends
ExpressionTree
>
getThrows
();
BlockTree
getBody
();
Tree
getDefaultValue
();
// for annotation types
...
...
src/share/classes/com/sun/source/tree/Tree.java
浏览文件 @
9f3f2aee
/*
* Copyright (c) 2005, 201
0
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2005, 201
1
, 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
...
...
@@ -46,8 +46,6 @@ public interface Tree {
*/
public
enum
Kind
{
//308 ANNOTATED_TYPE(AnnotatedTypeTree.class),
/**
* Used for instances of {@link AnnotationTree}.
*/
...
...
src/share/classes/com/sun/source/tree/TreeVisitor.java
浏览文件 @
9f3f2aee
/*
* Copyright (c) 2005, 201
0
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2005, 201
1
, 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
...
...
@@ -57,7 +57,6 @@ package com.sun.source.tree;
* @since 1.6
*/
public
interface
TreeVisitor
<
R
,
P
>
{
//308 R visitAnnotatedType(AnnotatedTypeTree node, P p);
R
visitAnnotation
(
AnnotationTree
node
,
P
p
);
R
visitMethodInvocation
(
MethodInvocationTree
node
,
P
p
);
R
visitAssert
(
AssertTree
node
,
P
p
);
...
...
src/share/classes/com/sun/source/tree/TypeParameterTree.java
浏览文件 @
9f3f2aee
/*
* Copyright (c) 2005, 201
0
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2005, 201
1
, 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
...
...
@@ -47,5 +47,4 @@ import javax.lang.model.element.Name;
public
interface
TypeParameterTree
extends
Tree
{
Name
getName
();
List
<?
extends
Tree
>
getBounds
();
//308 List<? extends AnnotationTree> getAnnotations();
}
src/share/classes/com/sun/source/util/SimpleTreeVisitor.java
浏览文件 @
9f3f2aee
/*
* Copyright (c) 2005, 201
0
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2005, 201
1
, 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
...
...
@@ -248,10 +248,6 @@ public class SimpleTreeVisitor <R,P> implements TreeVisitor<R,P> {
return
defaultAction
(
node
,
p
);
}
//308 public R visitAnnotatedType(AnnotatedTypeTree node, P p) {
//308 return defaultAction(node, p);
//308 }
public
R
visitErroneous
(
ErroneousTree
node
,
P
p
)
{
return
defaultAction
(
node
,
p
);
}
...
...
src/share/classes/com/sun/source/util/TreeScanner.java
浏览文件 @
9f3f2aee
/*
* Copyright (c) 2005, 201
0
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2005, 201
1
, 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
...
...
@@ -138,7 +138,6 @@ public class TreeScanner<R,P> implements TreeVisitor<R,P> {
r
=
scanAndReduce
(
node
.
getReturnType
(),
p
,
r
);
r
=
scanAndReduce
(
node
.
getTypeParameters
(),
p
,
r
);
r
=
scanAndReduce
(
node
.
getParameters
(),
p
,
r
);
//308 r = scanAndReduce(node.getReceiverAnnotations(), p, r);
r
=
scanAndReduce
(
node
.
getThrows
(),
p
,
r
);
r
=
scanAndReduce
(
node
.
getBody
(),
p
,
r
);
r
=
scanAndReduce
(
node
.
getDefaultValue
(),
p
,
r
);
...
...
@@ -362,7 +361,6 @@ public class TreeScanner<R,P> implements TreeVisitor<R,P> {
public
R
visitTypeParameter
(
TypeParameterTree
node
,
P
p
)
{
R
r
=
scan
(
node
.
getBounds
(),
p
);
//308 R r = scanAndReduce(node.getAnnotations(), p, r);
return
r
;
}
...
...
@@ -380,12 +378,6 @@ public class TreeScanner<R,P> implements TreeVisitor<R,P> {
return
r
;
}
//308 public R visitAnnotatedType(AnnotatedTypeTree node, P p) {
//308 R r = scan(node.getAnnotations(), p);
//308 r = scanAndReduce(node.getUnderlyingType(), p, r);
//308 return r;
//308 }
public
R
visitOther
(
Tree
node
,
P
p
)
{
return
null
;
}
...
...
src/share/classes/com/sun/tools/classfile/Attribute.java
浏览文件 @
9f3f2aee
/*
* Copyright (c) 2007, 20
08
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2007, 20
11
, 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
...
...
@@ -54,8 +54,6 @@ public abstract class Attribute {
public
static
final
String
RuntimeInvisibleAnnotations
=
"RuntimeInvisibleAnnotations"
;
public
static
final
String
RuntimeVisibleParameterAnnotations
=
"RuntimeVisibleParameterAnnotations"
;
public
static
final
String
RuntimeInvisibleParameterAnnotations
=
"RuntimeInvisibleParameterAnnotations"
;
public
static
final
String
RuntimeVisibleTypeAnnotations
=
"RuntimeVisibleTypeAnnotations"
;
public
static
final
String
RuntimeInvisibleTypeAnnotations
=
"RuntimeInvisibleTypeAnnotations"
;
public
static
final
String
Signature
=
"Signature"
;
public
static
final
String
SourceDebugExtension
=
"SourceDebugExtension"
;
public
static
final
String
SourceFile
=
"SourceFile"
;
...
...
@@ -118,8 +116,6 @@ public abstract class Attribute {
standardAttributes
.
put
(
RuntimeInvisibleParameterAnnotations
,
RuntimeInvisibleParameterAnnotations_attribute
.
class
);
standardAttributes
.
put
(
RuntimeVisibleAnnotations
,
RuntimeVisibleAnnotations_attribute
.
class
);
standardAttributes
.
put
(
RuntimeVisibleParameterAnnotations
,
RuntimeVisibleParameterAnnotations_attribute
.
class
);
standardAttributes
.
put
(
RuntimeVisibleTypeAnnotations
,
RuntimeVisibleTypeAnnotations_attribute
.
class
);
standardAttributes
.
put
(
RuntimeInvisibleTypeAnnotations
,
RuntimeInvisibleTypeAnnotations_attribute
.
class
);
standardAttributes
.
put
(
Signature
,
Signature_attribute
.
class
);
standardAttributes
.
put
(
SourceID
,
SourceID_attribute
.
class
);
}
...
...
@@ -176,8 +172,6 @@ public abstract class Attribute {
R
visitRuntimeInvisibleAnnotations
(
RuntimeInvisibleAnnotations_attribute
attr
,
P
p
);
R
visitRuntimeVisibleParameterAnnotations
(
RuntimeVisibleParameterAnnotations_attribute
attr
,
P
p
);
R
visitRuntimeInvisibleParameterAnnotations
(
RuntimeInvisibleParameterAnnotations_attribute
attr
,
P
p
);
R
visitRuntimeVisibleTypeAnnotations
(
RuntimeVisibleTypeAnnotations_attribute
attr
,
P
p
);
R
visitRuntimeInvisibleTypeAnnotations
(
RuntimeInvisibleTypeAnnotations_attribute
attr
,
P
p
);
R
visitSignature
(
Signature_attribute
attr
,
P
p
);
R
visitSourceDebugExtension
(
SourceDebugExtension_attribute
attr
,
P
p
);
R
visitSourceFile
(
SourceFile_attribute
attr
,
P
p
);
...
...
src/share/classes/com/sun/tools/classfile/ClassWriter.java
浏览文件 @
9f3f2aee
/*
* Copyright (c) 2008, 201
0
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2008, 201
1
, 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
...
...
@@ -459,16 +459,6 @@ public class ClassWriter {
return
null
;
}
public
Void
visitRuntimeVisibleTypeAnnotations
(
RuntimeVisibleTypeAnnotations_attribute
attr
,
ClassOutputStream
out
)
{
annotationWriter
.
write
(
attr
.
annotations
,
out
);
return
null
;
}
public
Void
visitRuntimeInvisibleTypeAnnotations
(
RuntimeInvisibleTypeAnnotations_attribute
attr
,
ClassOutputStream
out
)
{
annotationWriter
.
write
(
attr
.
annotations
,
out
);
return
null
;
}
public
Void
visitRuntimeVisibleParameterAnnotations
(
RuntimeVisibleParameterAnnotations_attribute
attr
,
ClassOutputStream
out
)
{
out
.
writeByte
(
attr
.
parameter_annotations
.
length
);
for
(
Annotation
[]
annos:
attr
.
parameter_annotations
)
...
...
@@ -628,12 +618,6 @@ public class ClassWriter {
write
(
anno
,
out
);
}
public
void
write
(
ExtendedAnnotation
[]
annos
,
ClassOutputStream
out
)
{
out
.
writeShort
(
annos
.
length
);
for
(
ExtendedAnnotation
anno:
annos
)
write
(
anno
,
out
);
}
public
void
write
(
Annotation
anno
,
ClassOutputStream
out
)
{
out
.
writeShort
(
anno
.
type_index
);
out
.
writeShort
(
anno
.
element_value_pairs
.
length
);
...
...
@@ -641,11 +625,6 @@ public class ClassWriter {
write
(
p
,
out
);
}
public
void
write
(
ExtendedAnnotation
anno
,
ClassOutputStream
out
)
{
write
(
anno
.
annotation
,
out
);
write
(
anno
.
position
,
out
);
}
public
void
write
(
element_value_pair
pair
,
ClassOutputStream
out
)
{
out
.
writeShort
(
pair
.
element_name_index
);
write
(
pair
.
value
,
out
);
...
...
@@ -684,95 +663,5 @@ public class ClassWriter {
return
null
;
}
private
void
write
(
ExtendedAnnotation
.
Position
p
,
ClassOutputStream
out
)
{
out
.
writeByte
(
p
.
type
.
targetTypeValue
());
switch
(
p
.
type
)
{
// type case
case
TYPECAST:
case
TYPECAST_GENERIC_OR_ARRAY:
// object creation
case
INSTANCEOF:
case
INSTANCEOF_GENERIC_OR_ARRAY:
// new expression
case
NEW:
case
NEW_GENERIC_OR_ARRAY:
case
NEW_TYPE_ARGUMENT:
case
NEW_TYPE_ARGUMENT_GENERIC_OR_ARRAY:
out
.
writeShort
(
p
.
offset
);
break
;
// local variable
case
LOCAL_VARIABLE:
case
LOCAL_VARIABLE_GENERIC_OR_ARRAY:
int
table_length
=
p
.
lvarOffset
.
length
;
out
.
writeShort
(
table_length
);
for
(
int
i
=
0
;
i
<
table_length
;
++
i
)
{
out
.
writeShort
(
1
);
// for table length
out
.
writeShort
(
p
.
lvarOffset
[
i
]);
out
.
writeShort
(
p
.
lvarLength
[
i
]);
out
.
writeShort
(
p
.
lvarIndex
[
i
]);
}
break
;
// method receiver
case
METHOD_RECEIVER:
// Do nothing
break
;
// type parameters
case
CLASS_TYPE_PARAMETER:
case
METHOD_TYPE_PARAMETER:
out
.
writeByte
(
p
.
parameter_index
);
break
;
// type parameters bounds
case
CLASS_TYPE_PARAMETER_BOUND:
case
CLASS_TYPE_PARAMETER_BOUND_GENERIC_OR_ARRAY:
case
METHOD_TYPE_PARAMETER_BOUND:
case
METHOD_TYPE_PARAMETER_BOUND_GENERIC_OR_ARRAY:
out
.
writeByte
(
p
.
parameter_index
);
out
.
writeByte
(
p
.
bound_index
);
break
;
// wildcards
case
WILDCARD_BOUND:
case
WILDCARD_BOUND_GENERIC_OR_ARRAY:
write
(
p
.
wildcard_position
,
out
);
break
;
// Class extends and implements clauses
case
CLASS_EXTENDS:
case
CLASS_EXTENDS_GENERIC_OR_ARRAY:
out
.
writeByte
(
p
.
type_index
);
break
;
// throws
case
THROWS:
out
.
writeByte
(
p
.
type_index
);
break
;
case
CLASS_LITERAL:
case
CLASS_LITERAL_GENERIC_OR_ARRAY:
out
.
writeShort
(
p
.
offset
);
break
;
// method parameter: not specified
case
METHOD_PARAMETER_GENERIC_OR_ARRAY:
out
.
writeByte
(
p
.
parameter_index
);
break
;
// method type argument: wasn't specified
case
METHOD_TYPE_ARGUMENT:
case
METHOD_TYPE_ARGUMENT_GENERIC_OR_ARRAY:
out
.
writeShort
(
p
.
offset
);
out
.
writeByte
(
p
.
type_index
);
break
;
// We don't need to worry abut these
case
METHOD_RETURN_GENERIC_OR_ARRAY:
case
FIELD_GENERIC_OR_ARRAY:
break
;
case
UNKNOWN:
break
;
default
:
throw
new
AssertionError
(
"unknown type: "
+
p
);
}
// Append location data for generics/arrays.
if
(
p
.
type
.
hasLocation
())
{
out
.
writeShort
(
p
.
location
.
size
());
for
(
int
i
:
p
.
location
)
out
.
writeByte
((
byte
)
i
);
}
}
}
}
src/share/classes/com/sun/tools/classfile/ExtendedAnnotation.java
已删除
100644 → 0
浏览文件 @
c98db104
此差异已折叠。
点击以展开。
src/share/classes/com/sun/tools/classfile/RuntimeInvisibleTypeAnnotations_attribute.java
已删除
100644 → 0
浏览文件 @
c98db104
/*
* Copyright (c) 2007, 2008, 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.classfile
;
import
java.io.IOException
;
/**
* See JSR 308 specification, section 4.1
*
* <p><b>This is NOT part of any supported API.
* If you write code that depends on this, you do so at your own risk.
* This code and its internal interfaces are subject to change or
* deletion without notice.</b>
*/
public
class
RuntimeInvisibleTypeAnnotations_attribute
extends
RuntimeTypeAnnotations_attribute
{
RuntimeInvisibleTypeAnnotations_attribute
(
ClassReader
cr
,
int
name_index
,
int
length
)
throws
IOException
,
Annotation
.
InvalidAnnotation
{
super
(
cr
,
name_index
,
length
);
}
public
RuntimeInvisibleTypeAnnotations_attribute
(
ConstantPool
cp
,
ExtendedAnnotation
[]
annotations
)
throws
ConstantPoolException
{
this
(
cp
.
getUTF8Index
(
Attribute
.
RuntimeInvisibleTypeAnnotations
),
annotations
);
}
public
RuntimeInvisibleTypeAnnotations_attribute
(
int
name_index
,
ExtendedAnnotation
[]
annotations
)
{
super
(
name_index
,
annotations
);
}
public
<
R
,
P
>
R
accept
(
Visitor
<
R
,
P
>
visitor
,
P
p
)
{
return
visitor
.
visitRuntimeInvisibleTypeAnnotations
(
this
,
p
);
}
}
src/share/classes/com/sun/tools/classfile/RuntimeTypeAnnotations_attribute.java
已删除
100644 → 0
浏览文件 @
c98db104
/*
* Copyright (c) 2007, 2008, 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.classfile
;
import
java.io.IOException
;
/**
* See JSR 308 specification, section 4
*
* <p><b>This is NOT part of any supported API.
* If you write code that depends on this, you do so at your own risk.
* This code and its internal interfaces are subject to change or
* deletion without notice.</b>
*/
public
abstract
class
RuntimeTypeAnnotations_attribute
extends
Attribute
{
protected
RuntimeTypeAnnotations_attribute
(
ClassReader
cr
,
int
name_index
,
int
length
)
throws
IOException
,
Annotation
.
InvalidAnnotation
{
super
(
name_index
,
length
);
int
num_annotations
=
cr
.
readUnsignedShort
();
annotations
=
new
ExtendedAnnotation
[
num_annotations
];
for
(
int
i
=
0
;
i
<
annotations
.
length
;
i
++)
annotations
[
i
]
=
new
ExtendedAnnotation
(
cr
);
}
protected
RuntimeTypeAnnotations_attribute
(
int
name_index
,
ExtendedAnnotation
[]
annotations
)
{
super
(
name_index
,
length
(
annotations
));
this
.
annotations
=
annotations
;
}
private
static
int
length
(
ExtendedAnnotation
[]
annos
)
{
int
n
=
2
;
for
(
ExtendedAnnotation
anno:
annos
)
n
+=
anno
.
length
();
return
n
;
}
public
final
ExtendedAnnotation
[]
annotations
;
}
src/share/classes/com/sun/tools/classfile/RuntimeVisibleTypeAnnotations_attribute.java
已删除
100644 → 0
浏览文件 @
c98db104
/*
* Copyright (c) 2007, 2008, 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.classfile
;
import
java.io.IOException
;
/**
* See JSR 308 specification, section 4.1
*
* <p><b>This is NOT part of any supported API.
* If you write code that depends on this, you do so at your own risk.
* This code and its internal interfaces are subject to change or
* deletion without notice.</b>
*/
public
class
RuntimeVisibleTypeAnnotations_attribute
extends
RuntimeTypeAnnotations_attribute
{
RuntimeVisibleTypeAnnotations_attribute
(
ClassReader
cr
,
int
name_index
,
int
length
)
throws
IOException
,
Annotation
.
InvalidAnnotation
{
super
(
cr
,
name_index
,
length
);
}
public
RuntimeVisibleTypeAnnotations_attribute
(
ConstantPool
cp
,
ExtendedAnnotation
[]
annotations
)
throws
ConstantPoolException
{
this
(
cp
.
getUTF8Index
(
Attribute
.
RuntimeVisibleTypeAnnotations
),
annotations
);
}
public
RuntimeVisibleTypeAnnotations_attribute
(
int
name_index
,
ExtendedAnnotation
[]
annotations
)
{
super
(
name_index
,
annotations
);
}
public
<
R
,
P
>
R
accept
(
Visitor
<
R
,
P
>
visitor
,
P
p
)
{
return
visitor
.
visitRuntimeVisibleTypeAnnotations
(
this
,
p
);
}
}
src/share/classes/com/sun/tools/javac/code/Attribute.java
浏览文件 @
9f3f2aee
/*
* Copyright (c) 2003, 201
0
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2003, 201
1
, 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
...
...
@@ -204,21 +204,6 @@ public abstract class Attribute implements AnnotationValue {
}
}
public
static
class
TypeCompound
extends
Compound
{
public
TypeAnnotationPosition
position
;
public
TypeCompound
(
Compound
compound
,
TypeAnnotationPosition
position
)
{
this
(
compound
.
type
,
compound
.
values
,
position
);
}
public
TypeCompound
(
Type
type
,
List
<
Pair
<
MethodSymbol
,
Attribute
>>
values
,
TypeAnnotationPosition
position
)
{
super
(
type
,
values
);
this
.
position
=
position
;
}
}
/** The value for an annotation element of an array type.
*/
public
static
class
Array
extends
Attribute
{
...
...
src/share/classes/com/sun/tools/javac/code/Symbol.java
浏览文件 @
9f3f2aee
/*
* Copyright (c)
2010
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c)
1999, 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
...
...
@@ -100,17 +100,6 @@ public abstract class Symbol implements Element {
*/
public
Type
type
;
/** The type annotations targeted to a tree directly owned by this symbol
*/
// type annotations are stored here for two purposes:
// - convenient location to store annotations for generation after erasure
// - a private interface for accessing type annotations parsed from
// classfiles
// the field is populated for the following declaration only
// class, field, variable and type parameters
//
public
List
<
Attribute
.
TypeCompound
>
typeAnnotations
;
/** The owner of this symbol.
*/
public
Symbol
owner
;
...
...
@@ -133,7 +122,6 @@ public abstract class Symbol implements Element {
this
.
completer
=
null
;
this
.
erasure_field
=
null
;
this
.
attributes_field
=
List
.
nil
();
this
.
typeAnnotations
=
List
.
nil
();
this
.
name
=
name
;
}
...
...
src/share/classes/com/sun/tools/javac/code/TypeAnnotations.java
已删除
100644 → 0
浏览文件 @
c98db104
/*
* Copyright (c) 2009, 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. 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.code
;
import
javax.lang.model.element.ElementKind
;
import
com.sun.tools.javac.code.Symbol.VarSymbol
;
import
com.sun.tools.javac.tree.JCTree
;
import
com.sun.tools.javac.tree.TreeInfo
;
import
com.sun.tools.javac.tree.TreeScanner
;
import
com.sun.tools.javac.tree.JCTree.*
;
import
com.sun.tools.javac.util.Context
;
import
com.sun.tools.javac.util.List
;
import
com.sun.tools.javac.util.ListBuffer
;
/**
* Contains operations specific to processing type annotations
*/
public
class
TypeAnnotations
{
private
static
final
Context
.
Key
<
TypeAnnotations
>
key
=
new
Context
.
Key
<
TypeAnnotations
>();
public
static
TypeAnnotations
instance
(
Context
context
)
{
TypeAnnotations
instance
=
context
.
get
(
key
);
if
(
instance
==
null
)
instance
=
new
TypeAnnotations
(
context
);
return
instance
;
}
protected
TypeAnnotations
(
Context
context
)
{
context
.
put
(
key
,
this
);
}
public
void
taFillAndLift
(
JCClassDecl
tree
,
boolean
visitBodies
)
{
//308 new TypeAnnotationPositions().scan(tree);
//308 new TypeAnnotationLift().scan(tree);
}
private
static
class
TypeAnnotationPositions
extends
TreeScanner
{
private
ListBuffer
<
JCTree
>
frames
=
ListBuffer
.
lb
();
private
void
push
(
JCTree
t
)
{
frames
=
frames
.
prepend
(
t
);
}
private
JCTree
pop
()
{
return
frames
.
next
();
}
private
JCTree
peek2
()
{
return
frames
.
toList
().
tail
.
head
;
}
@Override
public
void
scan
(
JCTree
tree
)
{
push
(
tree
);
super
.
scan
(
tree
);
pop
();
}
private
boolean
inClass
=
false
;
@Override
public
void
visitClassDef
(
JCClassDecl
tree
)
{
if
(!
inClass
)
{
// Do not recurse into nested and inner classes since
// TransTypes.visitClassDef makes an invocation for each class
// separately.
inClass
=
true
;
try
{
super
.
visitClassDef
(
tree
);
}
finally
{
inClass
=
false
;
}
}
}
private
TypeAnnotationPosition
resolveFrame
(
JCTree
tree
,
JCTree
frame
,
List
<
JCTree
>
path
,
TypeAnnotationPosition
p
)
{
switch
(
frame
.
getKind
())
{
case
TYPE_CAST:
p
.
type
=
TargetType
.
TYPECAST
;
p
.
pos
=
frame
.
pos
;
return
p
;
case
INSTANCE_OF:
p
.
type
=
TargetType
.
INSTANCEOF
;
p
.
pos
=
frame
.
pos
;
return
p
;
case
NEW_CLASS:
p
.
type
=
TargetType
.
NEW
;
p
.
pos
=
frame
.
pos
;
return
p
;
case
NEW_ARRAY:
p
.
type
=
TargetType
.
NEW
;
p
.
pos
=
frame
.
pos
;
return
p
;
case
ANNOTATION_TYPE:
case
CLASS:
case
ENUM:
case
INTERFACE:
p
.
pos
=
frame
.
pos
;
if
(((
JCClassDecl
)
frame
).
extending
==
tree
)
{
p
.
type
=
TargetType
.
CLASS_EXTENDS
;
p
.
type_index
=
-
1
;
}
else
if
(((
JCClassDecl
)
frame
).
implementing
.
contains
(
tree
))
{
p
.
type
=
TargetType
.
CLASS_EXTENDS
;
p
.
type_index
=
((
JCClassDecl
)
frame
).
implementing
.
indexOf
(
tree
);
}
else
if
(((
JCClassDecl
)
frame
).
typarams
.
contains
(
tree
))
{
p
.
type
=
TargetType
.
CLASS_TYPE_PARAMETER
;
p
.
parameter_index
=
((
JCClassDecl
)
frame
).
typarams
.
indexOf
(
tree
);
}
else
throw
new
AssertionError
();
return
p
;
case
METHOD:
{
JCMethodDecl
frameMethod
=
(
JCMethodDecl
)
frame
;
p
.
pos
=
frame
.
pos
;
if
(
frameMethod
.
receiverAnnotations
.
contains
(
tree
))
p
.
type
=
TargetType
.
METHOD_RECEIVER
;
else
if
(
frameMethod
.
thrown
.
contains
(
tree
))
{
p
.
type
=
TargetType
.
THROWS
;
p
.
type_index
=
frameMethod
.
thrown
.
indexOf
(
tree
);
}
else
if
(((
JCMethodDecl
)
frame
).
restype
==
tree
)
{
p
.
type
=
TargetType
.
METHOD_RETURN_GENERIC_OR_ARRAY
;
}
else
if
(
frameMethod
.
typarams
.
contains
(
tree
))
{
p
.
type
=
TargetType
.
METHOD_TYPE_PARAMETER
;
p
.
parameter_index
=
frameMethod
.
typarams
.
indexOf
(
tree
);
}
else
throw
new
AssertionError
();
return
p
;
}
case
MEMBER_SELECT:
{
JCFieldAccess
fieldFrame
=
(
JCFieldAccess
)
frame
;
if
(
"class"
.
contentEquals
(
fieldFrame
.
name
))
{
p
.
type
=
TargetType
.
CLASS_LITERAL
;
p
.
pos
=
TreeInfo
.
innermostType
(
fieldFrame
.
selected
).
pos
;
}
else
throw
new
AssertionError
();
return
p
;
}
case
PARAMETERIZED_TYPE:
{
TypeAnnotationPosition
nextP
;
if
(((
JCTypeApply
)
frame
).
clazz
==
tree
)
nextP
=
p
;
// generic: RAW; noop
else
if
(((
JCTypeApply
)
frame
).
arguments
.
contains
(
tree
))
p
.
location
=
p
.
location
.
prepend
(
((
JCTypeApply
)
frame
).
arguments
.
indexOf
(
tree
));
else
throw
new
AssertionError
();
List
<
JCTree
>
newPath
=
path
.
tail
;
return
resolveFrame
(
newPath
.
head
,
newPath
.
tail
.
head
,
newPath
,
p
);
}
case
ARRAY_TYPE:
{
p
.
location
=
p
.
location
.
prepend
(
0
);
List
<
JCTree
>
newPath
=
path
.
tail
;
return
resolveFrame
(
newPath
.
head
,
newPath
.
tail
.
head
,
newPath
,
p
);
}
case
TYPE_PARAMETER:
if
(
path
.
tail
.
tail
.
head
.
getTag
()
==
JCTree
.
CLASSDEF
)
{
JCClassDecl
clazz
=
(
JCClassDecl
)
path
.
tail
.
tail
.
head
;
p
.
type
=
TargetType
.
CLASS_TYPE_PARAMETER_BOUND
;
p
.
parameter_index
=
clazz
.
typarams
.
indexOf
(
path
.
tail
.
head
);
p
.
bound_index
=
((
JCTypeParameter
)
frame
).
bounds
.
indexOf
(
tree
);
}
else
if
(
path
.
tail
.
tail
.
head
.
getTag
()
==
JCTree
.
METHODDEF
)
{
JCMethodDecl
method
=
(
JCMethodDecl
)
path
.
tail
.
tail
.
head
;
p
.
type
=
TargetType
.
METHOD_TYPE_PARAMETER_BOUND
;
p
.
parameter_index
=
method
.
typarams
.
indexOf
(
path
.
tail
.
head
);
p
.
bound_index
=
((
JCTypeParameter
)
frame
).
bounds
.
indexOf
(
tree
);
}
else
throw
new
AssertionError
();
p
.
pos
=
frame
.
pos
;
return
p
;
case
VARIABLE:
VarSymbol
v
=
((
JCVariableDecl
)
frame
).
sym
;
p
.
pos
=
frame
.
pos
;
switch
(
v
.
getKind
())
{
case
LOCAL_VARIABLE:
p
.
type
=
TargetType
.
LOCAL_VARIABLE
;
break
;
case
FIELD:
p
.
type
=
TargetType
.
FIELD_GENERIC_OR_ARRAY
;
break
;
case
PARAMETER:
p
.
type
=
TargetType
.
METHOD_PARAMETER_GENERIC_OR_ARRAY
;
p
.
parameter_index
=
methodParamIndex
(
path
,
frame
);
break
;
default
:
throw
new
AssertionError
();
}
return
p
;
//308 case ANNOTATED_TYPE: {
//308 List<JCTree> newPath = path.tail;
//308 return resolveFrame(newPath.head, newPath.tail.head,
//308 newPath, p);
//308 }
case
METHOD_INVOCATION:
{
JCMethodInvocation
invocation
=
(
JCMethodInvocation
)
frame
;
if
(!
invocation
.
typeargs
.
contains
(
tree
))
throw
new
AssertionError
(
"{"
+
tree
+
"} is not an argument in the invocation: "
+
invocation
);
p
.
type
=
TargetType
.
METHOD_TYPE_ARGUMENT
;
p
.
pos
=
invocation
.
pos
;
p
.
type_index
=
invocation
.
typeargs
.
indexOf
(
tree
);
return
p
;
}
case
EXTENDS_WILDCARD:
case
SUPER_WILDCARD:
{
p
.
type
=
TargetType
.
WILDCARD_BOUND
;
List
<
JCTree
>
newPath
=
path
.
tail
;
TypeAnnotationPosition
wildcard
=
resolveFrame
(
newPath
.
head
,
newPath
.
tail
.
head
,
newPath
,
new
TypeAnnotationPosition
());
if
(!
wildcard
.
location
.
isEmpty
())
wildcard
.
type
=
wildcard
.
type
.
getGenericComplement
();
p
.
wildcard_position
=
wildcard
;
p
.
pos
=
frame
.
pos
;
return
p
;
}
}
return
p
;
}
private
void
setTypeAnnotationPos
(
List
<
JCTypeAnnotation
>
annotations
,
TypeAnnotationPosition
position
)
{
for
(
JCTypeAnnotation
anno
:
annotations
)
{
anno
.
annotation_position
=
position
;
anno
.
attribute_field
.
position
=
position
;
}
}
@Override
public
void
visitNewArray
(
JCNewArray
tree
)
{
findPosition
(
tree
,
tree
,
tree
.
annotations
);
int
dimAnnosCount
=
tree
.
dimAnnotations
.
size
();
// handle annotations associated with dimentions
for
(
int
i
=
0
;
i
<
dimAnnosCount
;
++
i
)
{
TypeAnnotationPosition
p
=
new
TypeAnnotationPosition
();
p
.
type
=
TargetType
.
NEW_GENERIC_OR_ARRAY
;
p
.
pos
=
tree
.
pos
;
p
.
location
=
p
.
location
.
append
(
i
);
setTypeAnnotationPos
(
tree
.
dimAnnotations
.
get
(
i
),
p
);
}
// handle "free" annotations
int
i
=
dimAnnosCount
==
0
?
0
:
dimAnnosCount
-
1
;
JCExpression
elemType
=
tree
.
elemtype
;
while
(
elemType
!=
null
)
{
if
(
elemType
.
getTag
()
==
JCTree
.
ANNOTATED_TYPE
)
{
JCAnnotatedType
at
=
(
JCAnnotatedType
)
elemType
;
TypeAnnotationPosition
p
=
new
TypeAnnotationPosition
();
p
.
type
=
TargetType
.
NEW_GENERIC_OR_ARRAY
;
p
.
pos
=
tree
.
pos
;
p
.
location
=
p
.
location
.
append
(
i
);
setTypeAnnotationPos
(
at
.
annotations
,
p
);
elemType
=
at
.
underlyingType
;
}
else
if
(
elemType
.
getTag
()
==
JCTree
.
TYPEARRAY
)
{
++
i
;
elemType
=
((
JCArrayTypeTree
)
elemType
).
elemtype
;
}
else
break
;
}
// find annotations locations of initializer elements
scan
(
tree
.
elems
);
}
@Override
public
void
visitAnnotatedType
(
JCAnnotatedType
tree
)
{
findPosition
(
tree
,
peek2
(),
tree
.
annotations
);
super
.
visitAnnotatedType
(
tree
);
}
@Override
public
void
visitMethodDef
(
JCMethodDecl
tree
)
{
TypeAnnotationPosition
p
=
new
TypeAnnotationPosition
();
p
.
type
=
TargetType
.
METHOD_RECEIVER
;
setTypeAnnotationPos
(
tree
.
receiverAnnotations
,
p
);
super
.
visitMethodDef
(
tree
);
}
@Override
public
void
visitTypeParameter
(
JCTypeParameter
tree
)
{
findPosition
(
tree
,
peek2
(),
tree
.
annotations
);
super
.
visitTypeParameter
(
tree
);
}
void
findPosition
(
JCTree
tree
,
JCTree
frame
,
List
<
JCTypeAnnotation
>
annotations
)
{
if
(!
annotations
.
isEmpty
())
{
TypeAnnotationPosition
p
=
resolveFrame
(
tree
,
frame
,
frames
.
toList
(),
new
TypeAnnotationPosition
());
if
(!
p
.
location
.
isEmpty
())
p
.
type
=
p
.
type
.
getGenericComplement
();
setTypeAnnotationPos
(
annotations
,
p
);
}
}
private
int
methodParamIndex
(
List
<
JCTree
>
path
,
JCTree
param
)
{
List
<
JCTree
>
curr
=
path
;
if
(
curr
.
head
!=
param
)
curr
=
path
.
tail
;
JCMethodDecl
method
=
(
JCMethodDecl
)
curr
.
tail
.
head
;
return
method
.
params
.
indexOf
(
param
);
}
}
private
static
class
TypeAnnotationLift
extends
TreeScanner
{
List
<
Attribute
.
TypeCompound
>
recordedTypeAnnotations
=
List
.
nil
();
boolean
isInner
=
false
;
@Override
public
void
visitClassDef
(
JCClassDecl
tree
)
{
if
(
isInner
)
{
// tree is an inner class tree. stop now.
// TransTypes.visitClassDef makes an invocation for each class
// separately.
return
;
}
isInner
=
true
;
List
<
Attribute
.
TypeCompound
>
prevTAs
=
recordedTypeAnnotations
;
recordedTypeAnnotations
=
List
.
nil
();
try
{
super
.
visitClassDef
(
tree
);
}
finally
{
tree
.
sym
.
typeAnnotations
=
tree
.
sym
.
typeAnnotations
.
appendList
(
recordedTypeAnnotations
);
recordedTypeAnnotations
=
prevTAs
;
}
}
@Override
public
void
visitMethodDef
(
JCMethodDecl
tree
)
{
List
<
Attribute
.
TypeCompound
>
prevTAs
=
recordedTypeAnnotations
;
recordedTypeAnnotations
=
List
.
nil
();
try
{
super
.
visitMethodDef
(
tree
);
}
finally
{
tree
.
sym
.
typeAnnotations
=
tree
.
sym
.
typeAnnotations
.
appendList
(
recordedTypeAnnotations
);
recordedTypeAnnotations
=
prevTAs
;
}
}
@Override
public
void
visitVarDef
(
JCVariableDecl
tree
)
{
List
<
Attribute
.
TypeCompound
>
prevTAs
=
recordedTypeAnnotations
;
recordedTypeAnnotations
=
List
.
nil
();
ElementKind
kind
=
tree
.
sym
.
getKind
();
if
(
kind
==
ElementKind
.
LOCAL_VARIABLE
&&
tree
.
mods
.
annotations
.
nonEmpty
())
{
// need to lift the annotations
TypeAnnotationPosition
position
=
new
TypeAnnotationPosition
();
position
.
pos
=
tree
.
pos
;
position
.
type
=
TargetType
.
LOCAL_VARIABLE
;
for
(
Attribute
.
Compound
attribute
:
tree
.
sym
.
attributes_field
)
{
Attribute
.
TypeCompound
tc
=
new
Attribute
.
TypeCompound
(
attribute
.
type
,
attribute
.
values
,
position
);
recordedTypeAnnotations
=
recordedTypeAnnotations
.
append
(
tc
);
}
}
try
{
super
.
visitVarDef
(
tree
);
}
finally
{
if
(
kind
.
isField
()
||
kind
==
ElementKind
.
LOCAL_VARIABLE
)
tree
.
sym
.
typeAnnotations
=
tree
.
sym
.
typeAnnotations
.
appendList
(
recordedTypeAnnotations
);
recordedTypeAnnotations
=
kind
.
isField
()
?
prevTAs
:
prevTAs
.
appendList
(
recordedTypeAnnotations
);
}
}
@Override
public
void
visitApply
(
JCMethodInvocation
tree
)
{
scan
(
tree
.
meth
);
scan
(
tree
.
typeargs
);
scan
(
tree
.
args
);
}
public
void
visitAnnotation
(
JCAnnotation
tree
)
{
if
(
tree
instanceof
JCTypeAnnotation
)
recordedTypeAnnotations
=
recordedTypeAnnotations
.
append
(((
JCTypeAnnotation
)
tree
).
attribute_field
);
super
.
visitAnnotation
(
tree
);
}
}
}
src/share/classes/com/sun/tools/javac/comp/Attr.java
浏览文件 @
9f3f2aee
/*
* Copyright (c) 1999, 201
0
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1999, 201
1
, 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
...
...
@@ -2989,10 +2989,6 @@ public class Attr extends JCTree.Visitor {
result
=
tree
.
type
=
syms
.
errType
;
}
public
void
visitAnnotatedType
(
JCAnnotatedType
tree
)
{
result
=
tree
.
type
=
attribType
(
tree
.
getUnderlyingType
(),
env
);
}
public
void
visitErroneous
(
JCErroneous
tree
)
{
if
(
tree
.
errs
!=
null
)
for
(
JCTree
err
:
tree
.
errs
)
...
...
@@ -3184,9 +3180,6 @@ public class Attr extends JCTree.Visitor {
(
c
.
flags
()
&
ABSTRACT
)
==
0
)
{
checkSerialVersionUID
(
tree
,
c
);
}
// Check type annotations applicability rules
validateTypeAnnotations
(
tree
);
}
// where
/** check if a class is a subtype of Serializable, if that is available. */
...
...
@@ -3234,35 +3227,6 @@ public class Attr extends JCTree.Visitor {
return
types
.
capture
(
type
);
}
private
void
validateTypeAnnotations
(
JCTree
tree
)
{
tree
.
accept
(
typeAnnotationsValidator
);
}
//where
private
final
JCTree
.
Visitor
typeAnnotationsValidator
=
new
TreeScanner
()
{
public
void
visitAnnotation
(
JCAnnotation
tree
)
{
if
(
tree
instanceof
JCTypeAnnotation
)
{
chk
.
validateTypeAnnotation
((
JCTypeAnnotation
)
tree
,
false
);
}
super
.
visitAnnotation
(
tree
);
}
public
void
visitTypeParameter
(
JCTypeParameter
tree
)
{
chk
.
validateTypeAnnotations
(
tree
.
annotations
,
true
);
// don't call super. skip type annotations
scan
(
tree
.
bounds
);
}
public
void
visitMethodDef
(
JCMethodDecl
tree
)
{
// need to check static methods
if
((
tree
.
sym
.
flags
()
&
Flags
.
STATIC
)
!=
0
)
{
for
(
JCTypeAnnotation
a
:
tree
.
receiverAnnotations
)
{
if
(
chk
.
isTypeAnnotation
(
a
,
false
))
log
.
error
(
a
.
pos
(),
"annotation.type.not.applicable"
);
}
}
super
.
visitMethodDef
(
tree
);
}
};
// <editor-fold desc="post-attribution visitor">
/**
...
...
src/share/classes/com/sun/tools/javac/comp/Check.java
浏览文件 @
9f3f2aee
/*
* Copyright (c) 1999, 201
0
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1999, 201
1
, 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
...
...
@@ -1086,11 +1086,6 @@ public class Check {
}
}
@Override
public
void
visitAnnotatedType
(
JCAnnotatedType
tree
)
{
tree
.
underlyingType
.
accept
(
this
);
}
/** Default visitor method: do nothing.
*/
@Override
...
...
@@ -2239,14 +2234,6 @@ public class Check {
validateAnnotation
(
a
,
s
);
}
/** Check the type annotations
*/
public
void
validateTypeAnnotations
(
List
<
JCTypeAnnotation
>
annotations
,
boolean
isTypeParameter
)
{
if
(
skipAnnotations
)
return
;
for
(
JCTypeAnnotation
a
:
annotations
)
validateTypeAnnotation
(
a
,
isTypeParameter
);
}
/** Check an annotation of a symbol.
*/
public
void
validateAnnotation
(
JCAnnotation
a
,
Symbol
s
)
{
...
...
@@ -2261,15 +2248,6 @@ public class Check {
}
}
public
void
validateTypeAnnotation
(
JCTypeAnnotation
a
,
boolean
isTypeParameter
)
{
if
(
a
.
type
==
null
)
throw
new
AssertionError
(
"annotation tree hasn't been attributed yet: "
+
a
);
validateAnnotationTree
(
a
);
if
(!
isTypeAnnotation
(
a
,
isTypeParameter
))
log
.
error
(
a
.
pos
(),
"annotation.type.not.applicable"
);
}
/** Is s a method symbol that overrides a method in a superclass? */
boolean
isOverrider
(
Symbol
s
)
{
if
(
s
.
kind
!=
MTH
||
s
.
isStatic
())
...
...
@@ -2288,25 +2266,6 @@ public class Check {
return
false
;
}
/** Is the annotation applicable to type annotations */
boolean
isTypeAnnotation
(
JCTypeAnnotation
a
,
boolean
isTypeParameter
)
{
Attribute
.
Compound
atTarget
=
a
.
annotationType
.
type
.
tsym
.
attribute
(
syms
.
annotationTargetType
.
tsym
);
if
(
atTarget
==
null
)
return
true
;
Attribute
atValue
=
atTarget
.
member
(
names
.
value
);
if
(!(
atValue
instanceof
Attribute
.
Array
))
return
true
;
// error recovery
Attribute
.
Array
arr
=
(
Attribute
.
Array
)
atValue
;
for
(
Attribute
app
:
arr
.
values
)
{
if
(!(
app
instanceof
Attribute
.
Enum
))
return
true
;
// recovery
Attribute
.
Enum
e
=
(
Attribute
.
Enum
)
app
;
if
(!
isTypeParameter
&&
e
.
value
.
name
==
names
.
TYPE_USE
)
return
true
;
else
if
(
isTypeParameter
&&
e
.
value
.
name
==
names
.
TYPE_PARAMETER
)
return
true
;
}
return
false
;
}
/** Is the annotation applicable to the symbol? */
boolean
annotationApplicable
(
JCAnnotation
a
,
Symbol
s
)
{
Attribute
.
Compound
atTarget
=
...
...
src/share/classes/com/sun/tools/javac/comp/Flow.java
浏览文件 @
9f3f2aee
/*
* Copyright (c) 1999, 201
0
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1999, 201
1
, 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
...
...
@@ -37,7 +37,6 @@ import com.sun.tools.javac.util.*;
import
com.sun.tools.javac.util.JCDiagnostic.DiagnosticPosition
;
import
com.sun.tools.javac.code.Symbol.*
;
import
com.sun.tools.javac.comp.Resolve
;
import
com.sun.tools.javac.tree.JCTree.*
;
import
static
com
.
sun
.
tools
.
javac
.
code
.
Flags
.*;
...
...
@@ -1350,11 +1349,6 @@ public class Flow extends TreeScanner {
}
}
public
void
visitAnnotatedType
(
JCAnnotatedType
tree
)
{
// annotations don't get scanned
tree
.
underlyingType
.
accept
(
this
);
}
public
void
visitIdent
(
JCIdent
tree
)
{
if
(
tree
.
sym
.
kind
==
VAR
)
{
checkInit
(
tree
.
pos
(),
(
VarSymbol
)
tree
.
sym
);
...
...
@@ -1373,7 +1367,6 @@ public class Flow extends TreeScanner {
if
(!
tree
.
type
.
isErroneous
()
&&
lint
.
isEnabled
(
Lint
.
LintCategory
.
CAST
)
&&
types
.
isSameType
(
tree
.
expr
.
type
,
tree
.
clazz
.
type
)
&&
!(
ignoreAnnotatedCasts
&&
containsTypeAnnotation
(
tree
.
clazz
))
&&
!
is292targetTypeCast
(
tree
))
{
log
.
warning
(
Lint
.
LintCategory
.
CAST
,
tree
.
pos
(),
"redundant.cast"
,
tree
.
expr
.
type
);
...
...
@@ -1396,23 +1389,6 @@ public class Flow extends TreeScanner {
// Do nothing for TopLevel since each class is visited individually
}
/**************************************************************************
* utility methods for ignoring type-annotated casts lint checking
*************************************************************************/
private
static
final
boolean
ignoreAnnotatedCasts
=
true
;
private
static
class
AnnotationFinder
extends
TreeScanner
{
public
boolean
foundTypeAnno
=
false
;
public
void
visitAnnotation
(
JCAnnotation
tree
)
{
foundTypeAnno
=
foundTypeAnno
||
(
tree
instanceof
JCTypeAnnotation
);
}
}
private
boolean
containsTypeAnnotation
(
JCTree
e
)
{
AnnotationFinder
finder
=
new
AnnotationFinder
();
finder
.
scan
(
e
);
return
finder
.
foundTypeAnno
;
}
/**************************************************************************
* main method
*************************************************************************/
...
...
src/share/classes/com/sun/tools/javac/comp/Lower.java
浏览文件 @
9f3f2aee
/*
* Copyright (c) 1999, 201
0
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1999, 201
1
, 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
...
...
@@ -2585,11 +2585,6 @@ public class Lower extends TreeTranslator {
result
=
tree
;
}
public
void
visitAnnotatedType
(
JCAnnotatedType
tree
)
{
tree
.
underlyingType
=
translate
(
tree
.
underlyingType
);
result
=
tree
.
underlyingType
;
}
public
void
visitTypeCast
(
JCTypeCast
tree
)
{
tree
.
clazz
=
translate
(
tree
.
clazz
);
if
(
tree
.
type
.
isPrimitive
()
!=
tree
.
expr
.
type
.
isPrimitive
())
...
...
src/share/classes/com/sun/tools/javac/comp/MemberEnter.java
浏览文件 @
9f3f2aee
/*
* Copyright (c) 2003, 201
0
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2003, 201
1
, 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
...
...
@@ -928,10 +928,6 @@ public class MemberEnter extends JCTree.Visitor implements Completer {
if
(
hasDeprecatedAnnotation
(
tree
.
mods
.
annotations
))
c
.
flags_field
|=
DEPRECATED
;
annotateLater
(
tree
.
mods
.
annotations
,
baseEnv
,
c
);
// class type parameters use baseEnv but everything uses env
for
(
JCTypeParameter
tp
:
tree
.
typarams
)
tp
.
accept
(
new
TypeAnnotate
(
baseEnv
));
tree
.
accept
(
new
TypeAnnotate
(
env
));
chk
.
checkNonCyclicDecl
(
tree
);
...
...
@@ -1014,86 +1010,6 @@ public class MemberEnter extends JCTree.Visitor implements Completer {
}
}
// A sub-phase that "compiles" annotations in annotated types.
private
class
TypeAnnotate
extends
TreeScanner
{
private
Env
<
AttrContext
>
env
;
public
TypeAnnotate
(
Env
<
AttrContext
>
env
)
{
this
.
env
=
env
;
}
private
void
enterTypeAnnotations
(
List
<
JCTypeAnnotation
>
annotations
)
{
Set
<
TypeSymbol
>
annotated
=
new
HashSet
<
TypeSymbol
>();
if
(!
skipAnnotations
)
for
(
List
<
JCTypeAnnotation
>
al
=
annotations
;
al
.
nonEmpty
();
al
=
al
.
tail
)
{
JCTypeAnnotation
a
=
al
.
head
;
Attribute
.
Compound
c
=
annotate
.
enterAnnotation
(
a
,
syms
.
annotationType
,
env
);
if
(
c
==
null
)
continue
;
Attribute
.
TypeCompound
tc
=
new
Attribute
.
TypeCompound
(
c
.
type
,
c
.
values
,
a
.
annotation_position
);
a
.
attribute_field
=
tc
;
// Note: @Deprecated has no effect on local variables and parameters
if
(!
annotated
.
add
(
a
.
type
.
tsym
))
log
.
error
(
a
.
pos
,
"duplicate.annotation"
);
}
}
// each class (including enclosed inner classes) should be visited
// separately through MemberEnter.complete(Symbol)
// this flag is used to prevent from visiting inner classes.
private
boolean
isEnclosingClass
=
false
;
@Override
public
void
visitClassDef
(
final
JCClassDecl
tree
)
{
if
(
isEnclosingClass
)
return
;
isEnclosingClass
=
true
;
scan
(
tree
.
mods
);
// type parameter need to be visited with a separate env
// scan(tree.typarams);
scan
(
tree
.
extending
);
scan
(
tree
.
implementing
);
scan
(
tree
.
defs
);
}
private
void
annotate
(
final
JCTree
tree
,
final
List
<
JCTypeAnnotation
>
annotations
)
{
annotate
.
later
(
new
Annotate
.
Annotator
()
{
public
String
toString
()
{
return
"annotate "
+
annotations
+
" onto "
+
tree
;
}
public
void
enterAnnotation
()
{
JavaFileObject
prev
=
log
.
useSource
(
env
.
toplevel
.
sourcefile
);
try
{
enterTypeAnnotations
(
annotations
);
}
finally
{
log
.
useSource
(
prev
);
}
}
});
}
@Override
public
void
visitAnnotatedType
(
final
JCAnnotatedType
tree
)
{
annotate
(
tree
,
tree
.
annotations
);
super
.
visitAnnotatedType
(
tree
);
}
@Override
public
void
visitTypeParameter
(
final
JCTypeParameter
tree
)
{
annotate
(
tree
,
tree
.
annotations
);
super
.
visitTypeParameter
(
tree
);
}
@Override
public
void
visitNewArray
(
final
JCNewArray
tree
)
{
annotate
(
tree
,
tree
.
annotations
);
for
(
List
<
JCTypeAnnotation
>
dimAnnos
:
tree
.
dimAnnotations
)
annotate
(
tree
,
dimAnnos
);
super
.
visitNewArray
(
tree
);
}
@Override
public
void
visitMethodDef
(
JCMethodDecl
tree
)
{
annotate
(
tree
,
tree
.
receiverAnnotations
);
super
.
visitMethodDef
(
tree
);
}
}
private
Env
<
AttrContext
>
baseEnv
(
JCClassDecl
tree
,
Env
<
AttrContext
>
env
)
{
Scope
baseScope
=
new
Scope
.
ClassScope
(
tree
.
sym
,
scopeCounter
);
//import already entered local classes into base scope
...
...
src/share/classes/com/sun/tools/javac/comp/TransTypes.java
浏览文件 @
9f3f2aee
/*
* Copyright (c) 1999, 201
0
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1999, 201
1
, 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
...
...
@@ -69,7 +69,6 @@ public class TransTypes extends TreeTranslator {
private
boolean
allowEnums
;
private
Types
types
;
private
final
Resolve
resolve
;
private
final
TypeAnnotations
typeAnnotations
;
/**
* Flag to indicate whether or not to generate bridge methods.
...
...
@@ -91,7 +90,6 @@ public class TransTypes extends TreeTranslator {
types
=
Types
.
instance
(
context
);
make
=
TreeMaker
.
instance
(
context
);
resolve
=
Resolve
.
instance
(
context
);
typeAnnotations
=
TypeAnnotations
.
instance
(
context
);
}
/** A hashtable mapping bridge methods to the methods they override after
...
...
@@ -445,14 +443,12 @@ public class TransTypes extends TreeTranslator {
}
public
void
visitClassDef
(
JCClassDecl
tree
)
{
typeAnnotations
.
taFillAndLift
(
tree
,
true
);
translateClass
(
tree
.
sym
);
result
=
tree
;
}
JCMethodDecl
currentMethod
=
null
;
public
void
visitMethodDef
(
JCMethodDecl
tree
)
{
tree
.
sym
.
typeAnnotations
=
tree
.
sym
.
typeAnnotations
;
JCMethodDecl
previousMethod
=
currentMethod
;
try
{
currentMethod
=
tree
;
...
...
src/share/classes/com/sun/tools/javac/jvm/ClassReader.java
浏览文件 @
9f3f2aee
/*
* Copyright (c) 1999, 201
0
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1999, 201
1
, 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
...
...
@@ -207,10 +207,6 @@ public class ClassReader implements Completer {
/** The minor version number of the class file being read. */
int
minorVersion
;
/** Switch: debug output for JSR 308-related operations.
*/
boolean
debugJSR308
;
/** A table to hold the constant pool indices for method parameter
* names, as given in LocalVariableTable attributes.
*/
...
...
@@ -297,7 +293,6 @@ public class ClassReader implements Completer {
:
null
;
typevars
=
new
Scope
(
syms
.
noSymbol
);
debugJSR308
=
options
.
isSet
(
"TA:reader"
);
lintClassfile
=
Lint
.
instance
(
context
).
isEnabled
(
LintCategory
.
CLASSFILE
);
...
...
@@ -1128,20 +1123,6 @@ public class ClassReader implements Completer {
}
},
// v51 attributes
new
AttributeReader
(
names
.
RuntimeVisibleTypeAnnotations
,
V51
,
CLASS_OR_MEMBER_ATTRIBUTE
)
{
void
read
(
Symbol
sym
,
int
attrLen
)
{
attachTypeAnnotations
(
sym
);
}
},
new
AttributeReader
(
names
.
RuntimeInvisibleTypeAnnotations
,
V51
,
CLASS_OR_MEMBER_ATTRIBUTE
)
{
void
read
(
Symbol
sym
,
int
attrLen
)
{
attachTypeAnnotations
(
sym
);
}
},
// The following attributes for a Code attribute are not currently handled
// StackMapTable
// SourceDebugExtension
...
...
@@ -1351,17 +1332,6 @@ public class ClassReader implements Completer {
}
}
void
attachTypeAnnotations
(
final
Symbol
sym
)
{
int
numAttributes
=
nextChar
();
if
(
numAttributes
!=
0
)
{
ListBuffer
<
TypeAnnotationProxy
>
proxies
=
ListBuffer
.
lb
();
for
(
int
i
=
0
;
i
<
numAttributes
;
i
++)
proxies
.
append
(
readTypeAnnotation
());
annotate
.
later
(
new
TypeAnnotationCompleter
(
sym
,
proxies
.
toList
()));
}
}
/** Attach the default value for an annotation element.
*/
void
attachAnnotationDefault
(
final
Symbol
sym
)
{
...
...
@@ -1398,121 +1368,6 @@ public class ClassReader implements Completer {
return
new
CompoundAnnotationProxy
(
t
,
pairs
.
toList
());
}
TypeAnnotationProxy
readTypeAnnotation
()
{
CompoundAnnotationProxy
proxy
=
readCompoundAnnotation
();
TypeAnnotationPosition
position
=
readPosition
();
if
(
debugJSR308
)
System
.
out
.
println
(
"TA: reading: "
+
proxy
+
" @ "
+
position
+
" in "
+
log
.
currentSourceFile
());
return
new
TypeAnnotationProxy
(
proxy
,
position
);
}
TypeAnnotationPosition
readPosition
()
{
byte
tag
=
nextByte
();
if
(!
TargetType
.
isValidTargetTypeValue
(
tag
))
throw
this
.
badClassFile
(
"bad.type.annotation.value"
,
tag
);
TypeAnnotationPosition
position
=
new
TypeAnnotationPosition
();
TargetType
type
=
TargetType
.
fromTargetTypeValue
(
tag
);
position
.
type
=
type
;
switch
(
type
)
{
// type case
case
TYPECAST:
case
TYPECAST_GENERIC_OR_ARRAY:
// object creation
case
INSTANCEOF:
case
INSTANCEOF_GENERIC_OR_ARRAY:
// new expression
case
NEW:
case
NEW_GENERIC_OR_ARRAY:
position
.
offset
=
nextChar
();
break
;
// local variable
case
LOCAL_VARIABLE:
case
LOCAL_VARIABLE_GENERIC_OR_ARRAY:
int
table_length
=
nextChar
();
position
.
lvarOffset
=
new
int
[
table_length
];
position
.
lvarLength
=
new
int
[
table_length
];
position
.
lvarIndex
=
new
int
[
table_length
];
for
(
int
i
=
0
;
i
<
table_length
;
++
i
)
{
position
.
lvarOffset
[
i
]
=
nextChar
();
position
.
lvarLength
[
i
]
=
nextChar
();
position
.
lvarIndex
[
i
]
=
nextChar
();
}
break
;
// method receiver
case
METHOD_RECEIVER:
// Do nothing
break
;
// type parameters
case
CLASS_TYPE_PARAMETER:
case
METHOD_TYPE_PARAMETER:
position
.
parameter_index
=
nextByte
();
break
;
// type parameter bounds
case
CLASS_TYPE_PARAMETER_BOUND:
case
CLASS_TYPE_PARAMETER_BOUND_GENERIC_OR_ARRAY:
case
METHOD_TYPE_PARAMETER_BOUND:
case
METHOD_TYPE_PARAMETER_BOUND_GENERIC_OR_ARRAY:
position
.
parameter_index
=
nextByte
();
position
.
bound_index
=
nextByte
();
break
;
// wildcard
case
WILDCARD_BOUND:
case
WILDCARD_BOUND_GENERIC_OR_ARRAY:
position
.
wildcard_position
=
readPosition
();
break
;
// Class extends and implements clauses
case
CLASS_EXTENDS:
case
CLASS_EXTENDS_GENERIC_OR_ARRAY:
position
.
type_index
=
nextChar
();
break
;
// throws
case
THROWS:
position
.
type_index
=
nextChar
();
break
;
case
CLASS_LITERAL:
case
CLASS_LITERAL_GENERIC_OR_ARRAY:
position
.
offset
=
nextChar
();
break
;
// method parameter: not specified
case
METHOD_PARAMETER_GENERIC_OR_ARRAY:
position
.
parameter_index
=
nextByte
();
break
;
// method type argument: wasn't specified
case
NEW_TYPE_ARGUMENT:
case
NEW_TYPE_ARGUMENT_GENERIC_OR_ARRAY:
case
METHOD_TYPE_ARGUMENT:
case
METHOD_TYPE_ARGUMENT_GENERIC_OR_ARRAY:
position
.
offset
=
nextChar
();
position
.
type_index
=
nextByte
();
break
;
// We don't need to worry abut these
case
METHOD_RETURN_GENERIC_OR_ARRAY:
case
FIELD_GENERIC_OR_ARRAY:
break
;
case
UNKNOWN:
break
;
default
:
throw
new
AssertionError
(
"unknown type: "
+
position
);
}
if
(
type
.
hasLocation
())
{
int
len
=
nextChar
();
ListBuffer
<
Integer
>
loc
=
ListBuffer
.
lb
();
for
(
int
i
=
0
;
i
<
len
;
i
++)
loc
=
loc
.
append
((
int
)
nextByte
());
position
.
location
=
loc
.
toList
();
}
return
position
;
}
Attribute
readAttributeValue
()
{
char
c
=
(
char
)
buf
[
bp
++];
switch
(
c
)
{
...
...
@@ -1825,45 +1680,6 @@ public class ClassReader implements Completer {
}
}
class
TypeAnnotationCompleter
extends
AnnotationCompleter
{
List
<
TypeAnnotationProxy
>
proxies
;
TypeAnnotationCompleter
(
Symbol
sym
,
List
<
TypeAnnotationProxy
>
proxies
)
{
super
(
sym
,
List
.<
CompoundAnnotationProxy
>
nil
());
this
.
proxies
=
proxies
;
}
List
<
Attribute
.
TypeCompound
>
deproxyTypeCompoundList
(
List
<
TypeAnnotationProxy
>
proxies
)
{
ListBuffer
<
Attribute
.
TypeCompound
>
buf
=
ListBuffer
.
lb
();
for
(
TypeAnnotationProxy
proxy:
proxies
)
{
Attribute
.
Compound
compound
=
deproxyCompound
(
proxy
.
compound
);
Attribute
.
TypeCompound
typeCompound
=
new
Attribute
.
TypeCompound
(
compound
,
proxy
.
position
);
buf
.
add
(
typeCompound
);
}
return
buf
.
toList
();
}
@Override
public
void
enterAnnotation
()
{
JavaFileObject
previousClassFile
=
currentClassFile
;
try
{
currentClassFile
=
classFile
;
List
<
Attribute
.
TypeCompound
>
newList
=
deproxyTypeCompoundList
(
proxies
);
if
(
debugJSR308
)
System
.
out
.
println
(
"TA: reading: adding "
+
newList
+
" to symbol "
+
sym
+
" in "
+
log
.
currentSourceFile
());
sym
.
typeAnnotations
=
((
sym
.
typeAnnotations
==
null
)
?
newList
:
newList
.
prependList
(
sym
.
typeAnnotations
));
}
finally
{
currentClassFile
=
previousClassFile
;
}
}
}
/************************************************************************
* Reading Symbols
...
...
src/share/classes/com/sun/tools/javac/jvm/ClassWriter.java
浏览文件 @
9f3f2aee
/*
* Copyright (c) 1999, 201
0
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1999, 201
1
, 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
...
...
@@ -65,10 +65,6 @@ public class ClassWriter extends ClassFile {
private
final
Options
options
;
/** Switch: debugging output for JSR 308-related operations.
*/
private
boolean
debugJSR308
;
/** Switch: verbose output.
*/
private
boolean
verbose
;
...
...
@@ -180,7 +176,6 @@ public class ClassWriter extends ClassFile {
types
=
Types
.
instance
(
context
);
fileManager
=
context
.
get
(
JavaFileManager
.
class
);
debugJSR308
=
options
.
isSet
(
"TA:writer"
);
verbose
=
options
.
isSet
(
VERBOSE
);
scramble
=
options
.
isSet
(
"-scramble"
);
scrambleAll
=
options
.
isSet
(
"-scrambleAll"
);
...
...
@@ -677,7 +672,6 @@ public class ClassWriter extends ClassFile {
acount
++;
}
acount
+=
writeJavaAnnotations
(
sym
.
getAnnotationMirrors
());
acount
+=
writeTypeAnnotations
(
sym
.
typeAnnotations
);
return
acount
;
}
...
...
@@ -772,46 +766,6 @@ public class ClassWriter extends ClassFile {
return
attrCount
;
}
int
writeTypeAnnotations
(
List
<
Attribute
.
TypeCompound
>
typeAnnos
)
{
if
(
typeAnnos
.
isEmpty
())
return
0
;
ListBuffer
<
Attribute
.
TypeCompound
>
visibles
=
ListBuffer
.
lb
();
ListBuffer
<
Attribute
.
TypeCompound
>
invisibles
=
ListBuffer
.
lb
();
for
(
Attribute
.
TypeCompound
tc
:
typeAnnos
)
{
if
(
tc
.
position
.
type
==
TargetType
.
UNKNOWN
||
!
tc
.
position
.
emitToClassfile
())
continue
;
switch
(
types
.
getRetention
(
tc
))
{
case
SOURCE:
break
;
case
CLASS:
invisibles
.
append
(
tc
);
break
;
case
RUNTIME:
visibles
.
append
(
tc
);
break
;
default
:
;
// /* fail soft */ throw new AssertionError(vis);
}
}
int
attrCount
=
0
;
if
(
visibles
.
length
()
!=
0
)
{
int
attrIndex
=
writeAttr
(
names
.
RuntimeVisibleTypeAnnotations
);
databuf
.
appendChar
(
visibles
.
length
());
for
(
Attribute
.
TypeCompound
p
:
visibles
)
writeTypeAnnotation
(
p
);
endAttr
(
attrIndex
);
attrCount
++;
}
if
(
invisibles
.
length
()
!=
0
)
{
int
attrIndex
=
writeAttr
(
names
.
RuntimeInvisibleTypeAnnotations
);
databuf
.
appendChar
(
invisibles
.
length
());
for
(
Attribute
.
TypeCompound
p
:
invisibles
)
writeTypeAnnotation
(
p
);
endAttr
(
attrIndex
);
attrCount
++;
}
return
attrCount
;
}
/** A visitor to write an attribute including its leading
* single-character marker.
*/
...
...
@@ -888,104 +842,6 @@ public class ClassWriter extends ClassFile {
p
.
snd
.
accept
(
awriter
);
}
}
void
writeTypeAnnotation
(
Attribute
.
TypeCompound
c
)
{
if
(
debugJSR308
)
System
.
out
.
println
(
"TA: writing "
+
c
+
" at "
+
c
.
position
+
" in "
+
log
.
currentSourceFile
());
writeCompoundAttribute
(
c
);
writePosition
(
c
.
position
);
}
void
writePosition
(
TypeAnnotationPosition
p
)
{
databuf
.
appendByte
(
p
.
type
.
targetTypeValue
());
switch
(
p
.
type
)
{
// type case
case
TYPECAST:
case
TYPECAST_GENERIC_OR_ARRAY:
// object creation
case
INSTANCEOF:
case
INSTANCEOF_GENERIC_OR_ARRAY:
// new expression
case
NEW:
case
NEW_GENERIC_OR_ARRAY:
databuf
.
appendChar
(
p
.
offset
);
break
;
// local variable
case
LOCAL_VARIABLE:
case
LOCAL_VARIABLE_GENERIC_OR_ARRAY:
databuf
.
appendChar
(
p
.
lvarOffset
.
length
);
// for table length
for
(
int
i
=
0
;
i
<
p
.
lvarOffset
.
length
;
++
i
)
{
databuf
.
appendChar
(
p
.
lvarOffset
[
i
]);
databuf
.
appendChar
(
p
.
lvarLength
[
i
]);
databuf
.
appendChar
(
p
.
lvarIndex
[
i
]);
}
break
;
// method receiver
case
METHOD_RECEIVER:
// Do nothing
break
;
// type parameters
case
CLASS_TYPE_PARAMETER:
case
METHOD_TYPE_PARAMETER:
databuf
.
appendByte
(
p
.
parameter_index
);
break
;
// type parameters bounds
case
CLASS_TYPE_PARAMETER_BOUND:
case
CLASS_TYPE_PARAMETER_BOUND_GENERIC_OR_ARRAY:
case
METHOD_TYPE_PARAMETER_BOUND:
case
METHOD_TYPE_PARAMETER_BOUND_GENERIC_OR_ARRAY:
databuf
.
appendByte
(
p
.
parameter_index
);
databuf
.
appendByte
(
p
.
bound_index
);
break
;
// wildcards
case
WILDCARD_BOUND:
case
WILDCARD_BOUND_GENERIC_OR_ARRAY:
writePosition
(
p
.
wildcard_position
);
break
;
// Class extends and implements clauses
case
CLASS_EXTENDS:
case
CLASS_EXTENDS_GENERIC_OR_ARRAY:
databuf
.
appendChar
(
p
.
type_index
);
break
;
// throws
case
THROWS:
databuf
.
appendChar
(
p
.
type_index
);
break
;
case
CLASS_LITERAL:
case
CLASS_LITERAL_GENERIC_OR_ARRAY:
databuf
.
appendChar
(
p
.
offset
);
break
;
// method parameter: not specified
case
METHOD_PARAMETER_GENERIC_OR_ARRAY:
databuf
.
appendByte
(
p
.
parameter_index
);
break
;
// method type argument: wasn't specified
case
NEW_TYPE_ARGUMENT:
case
NEW_TYPE_ARGUMENT_GENERIC_OR_ARRAY:
case
METHOD_TYPE_ARGUMENT:
case
METHOD_TYPE_ARGUMENT_GENERIC_OR_ARRAY:
databuf
.
appendChar
(
p
.
offset
);
databuf
.
appendByte
(
p
.
type_index
);
break
;
// We don't need to worry abut these
case
METHOD_RETURN_GENERIC_OR_ARRAY:
case
FIELD_GENERIC_OR_ARRAY:
break
;
case
UNKNOWN:
break
;
default
:
throw
new
AssertionError
(
"unknown position: "
+
p
);
}
// Append location data for generics/arrays.
if
(
p
.
type
.
hasLocation
())
{
databuf
.
appendChar
(
p
.
location
.
size
());
for
(
int
i
:
p
.
location
)
databuf
.
appendByte
((
byte
)
i
);
}
}
/**********************************************************************
* Writing Objects
**********************************************************************/
...
...
@@ -1698,7 +1554,6 @@ public class ClassWriter extends ClassFile {
acount
+=
writeFlagAttrs
(
c
.
flags
());
acount
+=
writeJavaAnnotations
(
c
.
getAnnotationMirrors
());
acount
+=
writeTypeAnnotations
(
c
.
typeAnnotations
);
acount
+=
writeEnclosingMethodAttribute
(
c
);
poolbuf
.
appendInt
(
JAVA_MAGIC
);
...
...
src/share/classes/com/sun/tools/javac/jvm/Code.java
浏览文件 @
9f3f2aee
/*
* Copyright (c) 1999, 201
0
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1999, 201
1
, 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
...
...
@@ -1912,29 +1912,12 @@ public class Code {
if
(
length
<
Character
.
MAX_VALUE
)
{
v
.
length
=
length
;
putVar
(
v
);
fillLocalVarPosition
(
v
);
}
}
}
state
.
defined
.
excl
(
adr
);
}
private
void
fillLocalVarPosition
(
LocalVar
lv
)
{
if
(
lv
==
null
||
lv
.
sym
==
null
||
lv
.
sym
.
typeAnnotations
==
null
)
return
;
for
(
Attribute
.
TypeCompound
ta
:
lv
.
sym
.
typeAnnotations
)
{
TypeAnnotationPosition
p
=
ta
.
position
;
while
(
p
!=
null
)
{
p
.
lvarOffset
=
new
int
[]
{
(
int
)
lv
.
start_pc
};
p
.
lvarLength
=
new
int
[]
{
(
int
)
lv
.
length
};
p
.
lvarIndex
=
new
int
[]
{
(
int
)
lv
.
reg
};
p
.
isValidOffset
=
true
;
p
=
p
.
wildcard_position
;
}
}
}
/** Put a live variable range into the buffer to be output to the
* class file.
*/
...
...
src/share/classes/com/sun/tools/javac/jvm/Gen.java
浏览文件 @
9f3f2aee
/*
* Copyright (c) 1999, 201
0
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1999, 201
1
, 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
...
...
@@ -1682,7 +1682,6 @@ public class Gen extends JCTree.Visitor {
*************************************************************************/
public
void
visitApply
(
JCMethodInvocation
tree
)
{
setTypeAnnotationPositions
(
tree
.
pos
);
// Generate code for method.
Item
m
=
genExpr
(
tree
.
meth
,
methodType
);
// Generate code for all arguments, where the expected types are
...
...
@@ -1718,48 +1717,10 @@ public class Gen extends JCTree.Visitor {
result
=
items
.
makeStackItem
(
pt
);
}
private
void
setTypeAnnotationPositions
(
int
treePos
)
{
MethodSymbol
meth
=
code
.
meth
;
for
(
Attribute
.
TypeCompound
ta
:
meth
.
typeAnnotations
)
{
if
(
ta
.
position
.
pos
==
treePos
)
{
ta
.
position
.
offset
=
code
.
cp
;
ta
.
position
.
lvarOffset
=
new
int
[]
{
code
.
cp
};
ta
.
position
.
isValidOffset
=
true
;
}
}
if
(
code
.
meth
.
getKind
()
!=
ElementKind
.
CONSTRUCTOR
&&
code
.
meth
.
getKind
()
!=
ElementKind
.
STATIC_INIT
)
return
;
for
(
Attribute
.
TypeCompound
ta
:
meth
.
owner
.
typeAnnotations
)
{
if
(
ta
.
position
.
pos
==
treePos
)
{
ta
.
position
.
offset
=
code
.
cp
;
ta
.
position
.
lvarOffset
=
new
int
[]
{
code
.
cp
};
ta
.
position
.
isValidOffset
=
true
;
}
}
ClassSymbol
clazz
=
meth
.
enclClass
();
for
(
Symbol
s
:
new
com
.
sun
.
tools
.
javac
.
model
.
FilteredMemberList
(
clazz
.
members
()))
{
if
(!
s
.
getKind
().
isField
())
continue
;
for
(
Attribute
.
TypeCompound
ta
:
s
.
typeAnnotations
)
{
if
(
ta
.
position
.
pos
==
treePos
)
{
ta
.
position
.
offset
=
code
.
cp
;
ta
.
position
.
lvarOffset
=
new
int
[]
{
code
.
cp
};
ta
.
position
.
isValidOffset
=
true
;
}
}
}
}
public
void
visitNewClass
(
JCNewClass
tree
)
{
// Enclosing instances or anonymous classes should have been eliminated
// by now.
assert
tree
.
encl
==
null
&&
tree
.
def
==
null
;
setTypeAnnotationPositions
(
tree
.
pos
);
code
.
emitop2
(
new_
,
makeRef
(
tree
.
pos
(),
tree
.
type
));
code
.
emitop0
(
dup
);
...
...
@@ -1774,7 +1735,6 @@ public class Gen extends JCTree.Visitor {
}
public
void
visitNewArray
(
JCNewArray
tree
)
{
setTypeAnnotationPositions
(
tree
.
pos
);
if
(
tree
.
elems
!=
null
)
{
Type
elemtype
=
types
.
elemtype
(
tree
.
type
);
...
...
@@ -2104,7 +2064,6 @@ public class Gen extends JCTree.Visitor {
}
public
void
visitTypeCast
(
JCTypeCast
tree
)
{
setTypeAnnotationPositions
(
tree
.
pos
);
result
=
genExpr
(
tree
.
expr
,
tree
.
clazz
.
type
).
load
();
// Additional code is only needed if we cast to a reference type
// which is not statically a supertype of the expression's type.
...
...
@@ -2121,8 +2080,6 @@ public class Gen extends JCTree.Visitor {
}
public
void
visitTypeTest
(
JCInstanceOf
tree
)
{
setTypeAnnotationPositions
(
tree
.
pos
);
genExpr
(
tree
.
expr
,
tree
.
expr
.
type
).
load
();
code
.
emitop2
(
instanceof_
,
makeRef
(
tree
.
pos
(),
tree
.
clazz
.
type
));
result
=
items
.
makeStackItem
(
syms
.
booleanType
);
...
...
@@ -2164,15 +2121,9 @@ public class Gen extends JCTree.Visitor {
if
(
tree
.
name
==
names
.
_class
)
{
assert
target
.
hasClassLiterals
();
setTypeAnnotationPositions
(
tree
.
pos
);
code
.
emitop2
(
ldc2
,
makeRef
(
tree
.
pos
(),
tree
.
selected
.
type
));
result
=
items
.
makeStackItem
(
pt
);
return
;
}
else
if
(
tree
.
name
==
names
.
TYPE
)
{
// Set the annotation positions for primitive class literals
// (e.g. int.class) which have been converted to TYPE field
// access on the corresponding boxed type (e.g. Integer.TYPE).
setTypeAnnotationPositions
(
tree
.
pos
);
}
Symbol
ssym
=
TreeInfo
.
symbol
(
tree
.
selected
);
...
...
src/share/classes/com/sun/tools/javac/processing/JavacProcessingEnvironment.java
浏览文件 @
9f3f2aee
/*
* Copyright (c) 2005, 201
0
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2005, 201
1
, 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
...
...
@@ -49,7 +49,6 @@ import javax.tools.StandardJavaFileManager;
import
javax.tools.JavaFileObject
;
import
javax.tools.DiagnosticListener
;
//308 import com.sun.source.util.AbstractTypeProcessor;
import
com.sun.source.util.TaskEvent
;
import
com.sun.source.util.TaskListener
;
import
com.sun.tools.javac.api.JavacTaskImpl
;
...
...
@@ -712,7 +711,6 @@ public class JavacProcessingEnvironment implements ProcessingEnvironment, Closea
}
if
(
matchedNames
.
size
()
>
0
||
ps
.
contributed
)
{
//308 foundTypeProcessors = foundTypeProcessors || (ps.processor instanceof AbstractTypeProcessor);
boolean
processingResult
=
callProcessor
(
ps
.
processor
,
typeElements
,
renv
);
ps
.
contributed
=
true
;
ps
.
removeSupportedOptions
(
unmatchedProcessorOptions
);
...
...
src/share/classes/com/sun/tools/javac/resources/compiler.properties
浏览文件 @
9f3f2aee
#
# Copyright (c) 1999, 201
0
, Oracle and/or its affiliates. All rights reserved.
# Copyright (c) 1999, 201
1
, 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
...
...
@@ -971,8 +971,6 @@ compiler.misc.bad.const.pool.tag.at=\
bad constant pool tag: {0} at {1}
compiler.misc.bad.signature
=
\
bad signature: {0}
compiler.misc.bad.type.annotation.value
=
\
bad type annotation target type value: {0}
compiler.misc.class.file.wrong.class
=
\
class file contains wrong class: {0}
compiler.misc.class.file.not.found
=
\
...
...
src/share/classes/com/sun/tools/javac/tree/JCTree.java
浏览文件 @
9f3f2aee
/*
* Copyright (c) 1999, 201
0
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1999, 201
1
, 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
...
...
@@ -640,7 +640,6 @@ public abstract class JCTree implements Tree, Cloneable, DiagnosticPosition {
public
JCExpression
restype
;
public
List
<
JCTypeParameter
>
typarams
;
public
List
<
JCVariableDecl
>
params
;
public
List
<
JCTypeAnnotation
>
receiverAnnotations
;
public
List
<
JCExpression
>
thrown
;
public
JCBlock
body
;
public
JCExpression
defaultValue
;
// for annotation types
...
...
@@ -650,7 +649,6 @@ public abstract class JCTree implements Tree, Cloneable, DiagnosticPosition {
JCExpression
restype
,
List
<
JCTypeParameter
>
typarams
,
List
<
JCVariableDecl
>
params
,
List
<
JCTypeAnnotation
>
receiver
,
List
<
JCExpression
>
thrown
,
JCBlock
body
,
JCExpression
defaultValue
,
...
...
@@ -661,7 +659,6 @@ public abstract class JCTree implements Tree, Cloneable, DiagnosticPosition {
this
.
restype
=
restype
;
this
.
typarams
=
typarams
;
this
.
params
=
params
;
this
.
receiverAnnotations
=
(
receiver
!=
null
?
receiver
:
List
.<
JCTypeAnnotation
>
nil
());
this
.
thrown
=
thrown
;
this
.
body
=
body
;
this
.
defaultValue
=
defaultValue
;
...
...
@@ -680,7 +677,6 @@ public abstract class JCTree implements Tree, Cloneable, DiagnosticPosition {
public
List
<
JCVariableDecl
>
getParameters
()
{
return
params
;
}
public
List
<
JCTypeAnnotation
>
getReceiverAnnotations
()
{
return
receiverAnnotations
;
}
public
List
<
JCExpression
>
getThrows
()
{
return
thrown
;
}
...
...
@@ -1402,8 +1398,6 @@ public abstract class JCTree implements Tree, Cloneable, DiagnosticPosition {
public
static
class
JCNewArray
extends
JCExpression
implements
NewArrayTree
{
public
JCExpression
elemtype
;
public
List
<
JCExpression
>
dims
;
public
List
<
JCTypeAnnotation
>
annotations
;
public
List
<
List
<
JCTypeAnnotation
>>
dimAnnotations
;
public
List
<
JCExpression
>
elems
;
protected
JCNewArray
(
JCExpression
elemtype
,
List
<
JCExpression
>
dims
,
...
...
@@ -1411,8 +1405,6 @@ public abstract class JCTree implements Tree, Cloneable, DiagnosticPosition {
{
this
.
elemtype
=
elemtype
;
this
.
dims
=
dims
;
this
.
annotations
=
List
.
nil
();
this
.
dimAnnotations
=
List
.
nil
();
this
.
elems
=
elems
;
}
@Override
...
...
@@ -1923,11 +1915,9 @@ public abstract class JCTree implements Tree, Cloneable, DiagnosticPosition {
public
static
class
JCTypeParameter
extends
JCTree
implements
TypeParameterTree
{
public
Name
name
;
public
List
<
JCExpression
>
bounds
;
public
List
<
JCTypeAnnotation
>
annotations
;
protected
JCTypeParameter
(
Name
name
,
List
<
JCExpression
>
bounds
,
List
<
JCTypeAnnotation
>
annotations
)
{
protected
JCTypeParameter
(
Name
name
,
List
<
JCExpression
>
bounds
)
{
this
.
name
=
name
;
this
.
bounds
=
bounds
;
this
.
annotations
=
annotations
;
}
@Override
public
void
accept
(
Visitor
v
)
{
v
.
visitTypeParameter
(
this
);
}
...
...
@@ -1937,9 +1927,6 @@ public abstract class JCTree implements Tree, Cloneable, DiagnosticPosition {
public
List
<
JCExpression
>
getBounds
()
{
return
bounds
;
}
public
List
<
JCTypeAnnotation
>
getAnnotations
()
{
return
annotations
;
}
@Override
public
<
R
,
D
>
R
accept
(
TreeVisitor
<
R
,
D
>
v
,
D
d
)
{
return
v
.
visitTypeParameter
(
this
,
d
);
...
...
@@ -2030,16 +2017,6 @@ public abstract class JCTree implements Tree, Cloneable, DiagnosticPosition {
}
}
public
static
class
JCTypeAnnotation
extends
JCAnnotation
{
public
TypeAnnotationPosition
annotation_position
;
public
Attribute
.
TypeCompound
attribute_field
;
protected
JCTypeAnnotation
(
JCTree
annotationType
,
List
<
JCExpression
>
args
)
{
super
(
annotationType
,
args
);
this
.
annotation_position
=
new
TypeAnnotationPosition
();
}
}
public
static
class
JCModifiers
extends
JCTree
implements
com
.
sun
.
source
.
tree
.
ModifiersTree
{
public
long
flags
;
public
List
<
JCAnnotation
>
annotations
;
...
...
@@ -2067,40 +2044,6 @@ public abstract class JCTree implements Tree, Cloneable, DiagnosticPosition {
}
}
public
static
class
JCAnnotatedType
extends
JCExpression
//308 implements com.sun.source.tree.AnnotatedTypeTree
{
public
List
<
JCTypeAnnotation
>
annotations
;
public
JCExpression
underlyingType
;
protected
JCAnnotatedType
(
List
<
JCTypeAnnotation
>
annotations
,
JCExpression
underlyingType
)
{
throw
new
UnsupportedOperationException
();
//308 this.annotations = annotations;
//308 this.underlyingType = underlyingType;
}
@Override
public
void
accept
(
Visitor
v
)
{
v
.
visitAnnotatedType
(
this
);
}
public
Kind
getKind
()
{
throw
new
UnsupportedOperationException
();
//308 return Kind.ANNOTATED_TYPE;
}
public
List
<
JCTypeAnnotation
>
getAnnotations
()
{
return
annotations
;
}
public
JCExpression
getUnderlyingType
()
{
return
underlyingType
;
}
@Override
public
<
R
,
D
>
R
accept
(
TreeVisitor
<
R
,
D
>
v
,
D
d
)
{
throw
new
UnsupportedOperationException
();
//308 return v.visitAnnotatedType(this, d);
}
@Override
public
int
getTag
()
{
return
ANNOTATED_TYPE
;
}
}
public
static
class
JCErroneous
extends
JCExpression
implements
com
.
sun
.
source
.
tree
.
ErroneousTree
{
public
List
<?
extends
JCTree
>
errs
;
...
...
@@ -2168,7 +2111,6 @@ public abstract class JCTree implements Tree, Cloneable, DiagnosticPosition {
JCExpression
restype
,
List
<
JCTypeParameter
>
typarams
,
List
<
JCVariableDecl
>
params
,
List
<
JCTypeAnnotation
>
receiver
,
List
<
JCExpression
>
thrown
,
JCBlock
body
,
JCExpression
defaultValue
);
...
...
@@ -2290,7 +2232,6 @@ public abstract class JCTree implements Tree, Cloneable, DiagnosticPosition {
public
void
visitTypeBoundKind
(
TypeBoundKind
that
)
{
visitTree
(
that
);
}
public
void
visitAnnotation
(
JCAnnotation
that
)
{
visitTree
(
that
);
}
public
void
visitModifiers
(
JCModifiers
that
)
{
visitTree
(
that
);
}
public
void
visitAnnotatedType
(
JCAnnotatedType
that
)
{
visitTree
(
that
);
}
public
void
visitErroneous
(
JCErroneous
that
)
{
visitTree
(
that
);
}
public
void
visitLetExpr
(
LetExpr
that
)
{
visitTree
(
that
);
}
...
...
src/share/classes/com/sun/tools/javac/tree/Pretty.java
浏览文件 @
9f3f2aee
/*
* Copyright (c) 1999, 201
0
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1999, 201
1
, 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
...
...
@@ -224,15 +224,6 @@ public class Pretty extends JCTree.Visitor {
}
}
public
void
printTypeAnnotations
(
List
<
JCTypeAnnotation
>
trees
)
throws
IOException
{
if
(
trees
.
nonEmpty
())
print
(
" "
);
for
(
List
<
JCTypeAnnotation
>
l
=
trees
;
l
.
nonEmpty
();
l
=
l
.
tail
)
{
printExpr
(
l
.
head
);
print
(
" "
);
}
}
/** Print documentation comment, if it exists
* @param tree The tree for which a documentation comment should be printed.
*/
...
...
@@ -890,33 +881,21 @@ public class Pretty extends JCTree.Visitor {
try
{
if
(
tree
.
elemtype
!=
null
)
{
print
(
"new "
);
printTypeAnnotations
(
tree
.
annotations
);
JCTree
elem
=
tree
.
elemtype
;
printBaseElementType
(
elem
);
boolean
isElemAnnoType
=
elem
instanceof
JCAnnotatedType
;
int
i
=
0
;
List
<
List
<
JCTypeAnnotation
>>
da
=
tree
.
dimAnnotations
;
if
(
elem
.
getTag
()
==
JCTree
.
TYPEARRAY
)
printBaseElementType
((
JCArrayTypeTree
)
elem
)
;
else
printExpr
(
elem
)
;
for
(
List
<
JCExpression
>
l
=
tree
.
dims
;
l
.
nonEmpty
();
l
=
l
.
tail
)
{
if
(
da
.
size
()
>
i
)
{
printTypeAnnotations
(
da
.
get
(
i
));
}
print
(
"["
);
i
++;
printExpr
(
l
.
head
);
print
(
"]"
);
}
if
(
tree
.
elems
!=
null
)
{
if
(
isElemAnnoType
)
{
printTypeAnnotations
(((
JCAnnotatedType
)
tree
.
elemtype
).
annotations
);
}
print
(
"[]"
);
}
if
(
isElemAnnoType
)
elem
=
((
JCAnnotatedType
)
elem
).
underlyingType
;
if
(
elem
instanceof
JCArrayTypeTree
)
printBrackets
((
JCArrayTypeTree
)
elem
);
}
if
(
tree
.
elems
!=
null
)
{
if
(
tree
.
elemtype
!=
null
)
print
(
"[]"
);
print
(
"{"
);
printExprs
(
tree
.
elems
);
print
(
"}"
);
...
...
@@ -1173,11 +1152,6 @@ public class Pretty extends JCTree.Visitor {
JCTree
elem
;
while
(
true
)
{
elem
=
tree
.
elemtype
;
if
(
elem
.
getTag
()
==
JCTree
.
ANNOTATED_TYPE
)
{
JCAnnotatedType
atype
=
(
JCAnnotatedType
)
elem
;
printTypeAnnotations
(
atype
.
annotations
);
elem
=
atype
.
underlyingType
;
}
print
(
"[]"
);
if
(
elem
.
getTag
()
!=
JCTree
.
TYPEARRAY
)
break
;
tree
=
(
JCArrayTypeTree
)
elem
;
...
...
@@ -1272,15 +1246,6 @@ public class Pretty extends JCTree.Visitor {
}
}
public
void
visitAnnotatedType
(
JCAnnotatedType
tree
)
{
try
{
printTypeAnnotations
(
tree
.
annotations
);
printExpr
(
tree
.
underlyingType
);
}
catch
(
IOException
e
)
{
throw
new
UncheckedIOException
(
e
);
}
}
public
void
visitTree
(
JCTree
tree
)
{
try
{
print
(
"(UNKNOWN: "
+
tree
+
")"
);
...
...
src/share/classes/com/sun/tools/javac/tree/TreeCopier.java
浏览文件 @
9f3f2aee
/*
* Copyright (c) 2006, 201
0
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2006, 201
1
, 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
...
...
@@ -71,13 +71,6 @@ public class TreeCopier<P> implements TreeVisitor<JCTree,P> {
return
lb
.
toList
();
}
//308 public JCTree visitAnnotatedType(AnnotatedTypeTree node, P p) {
//308 JCAnnotatedType t = (JCAnnotatedType) node;
//308 List<JCTypeAnnotation> annotations = copy(t.annotations, p);
//308 JCExpression underlyingType = copy(t.underlyingType, p);
//308 return M.at(t.pos).AnnotatedType(annotations, underlyingType);
//308 }
public
JCTree
visitAnnotation
(
AnnotationTree
node
,
P
p
)
{
JCAnnotation
t
=
(
JCAnnotation
)
node
;
JCTree
annotationType
=
copy
(
t
.
annotationType
,
p
);
...
...
@@ -240,11 +233,10 @@ public class TreeCopier<P> implements TreeVisitor<JCTree,P> {
JCExpression
restype
=
copy
(
t
.
restype
,
p
);
List
<
JCTypeParameter
>
typarams
=
copy
(
t
.
typarams
,
p
);
List
<
JCVariableDecl
>
params
=
copy
(
t
.
params
,
p
);
List
<
JCTypeAnnotation
>
receiver
=
copy
(
t
.
receiverAnnotations
,
p
);
List
<
JCExpression
>
thrown
=
copy
(
t
.
thrown
,
p
);
JCBlock
body
=
copy
(
t
.
body
,
p
);
JCExpression
defaultValue
=
copy
(
t
.
defaultValue
,
p
);
return
M
.
at
(
t
.
pos
).
MethodDef
(
mods
,
t
.
name
,
restype
,
typarams
,
params
,
receiver
,
thrown
,
body
,
defaultValue
);
return
M
.
at
(
t
.
pos
).
MethodDef
(
mods
,
t
.
name
,
restype
,
typarams
,
params
,
thrown
,
body
,
defaultValue
);
}
public
JCTree
visitMethodInvocation
(
MethodInvocationTree
node
,
P
p
)
{
...
...
@@ -372,9 +364,8 @@ public class TreeCopier<P> implements TreeVisitor<JCTree,P> {
public
JCTree
visitTypeParameter
(
TypeParameterTree
node
,
P
p
)
{
JCTypeParameter
t
=
(
JCTypeParameter
)
node
;
List
<
JCTypeAnnotation
>
annos
=
copy
(
t
.
annotations
,
p
);
List
<
JCExpression
>
bounds
=
copy
(
t
.
bounds
,
p
);
return
M
.
at
(
t
.
pos
).
TypeParameter
(
t
.
name
,
bounds
,
annos
);
return
M
.
at
(
t
.
pos
).
TypeParameter
(
t
.
name
,
bounds
);
}
public
JCTree
visitInstanceOf
(
InstanceOfTree
node
,
P
p
)
{
...
...
src/share/classes/com/sun/tools/javac/tree/TreeInfo.java
浏览文件 @
9f3f2aee
/*
* Copyright (c) 1999, 201
0
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1999, 201
1
, 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
...
...
@@ -311,12 +311,6 @@ public class TreeInfo {
case
(
JCTree
.
POSTINC
):
case
(
JCTree
.
POSTDEC
):
return
getStartPos
(((
JCUnary
)
tree
).
arg
);
case
(
JCTree
.
ANNOTATED_TYPE
):
{
JCAnnotatedType
node
=
(
JCAnnotatedType
)
tree
;
if
(
node
.
annotations
.
nonEmpty
())
return
getStartPos
(
node
.
annotations
.
head
);
return
getStartPos
(
node
.
underlyingType
);
}
case
(
JCTree
.
NEWCLASS
):
{
JCNewClass
node
=
(
JCNewClass
)
tree
;
if
(
node
.
encl
!=
null
)
...
...
@@ -420,8 +414,6 @@ public class TreeInfo {
return
getEndPos
(((
JCUnary
)
tree
).
arg
,
endPositions
);
case
(
JCTree
.
WHILELOOP
):
return
getEndPos
(((
JCWhileLoop
)
tree
).
body
,
endPositions
);
case
(
JCTree
.
ANNOTATED_TYPE
):
return
getEndPos
(((
JCAnnotatedType
)
tree
).
underlyingType
,
endPositions
);
case
(
JCTree
.
ERRONEOUS
):
{
JCErroneous
node
=
(
JCErroneous
)
tree
;
if
(
node
.
errs
!=
null
&&
node
.
errs
.
nonEmpty
())
...
...
@@ -909,8 +901,6 @@ public class TreeInfo {
*/
public
static
JCExpression
typeIn
(
JCExpression
tree
)
{
switch
(
tree
.
getTag
())
{
case
JCTree
.
ANNOTATED_TYPE
:
return
((
JCAnnotatedType
)
tree
).
underlyingType
;
case
JCTree
.
IDENT
:
/* simple names */
case
JCTree
.
TYPEIDENT
:
/* primitive name */
case
JCTree
.
SELECT
:
/* qualified name */
...
...
@@ -930,8 +920,6 @@ public class TreeInfo {
return
innermostType
(((
JCArrayTypeTree
)
type
).
elemtype
);
case
JCTree
.
WILDCARD
:
return
innermostType
(((
JCWildcard
)
type
).
inner
);
case
JCTree
.
ANNOTATED_TYPE
:
return
innermostType
(((
JCAnnotatedType
)
type
).
underlyingType
);
default
:
return
type
;
}
...
...
src/share/classes/com/sun/tools/javac/tree/TreeMaker.java
浏览文件 @
9f3f2aee
/*
* Copyright (c) 1999, 201
0
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1999, 201
1
, 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
...
...
@@ -169,27 +169,11 @@ public class TreeMaker implements JCTree.Factory {
List
<
JCExpression
>
thrown
,
JCBlock
body
,
JCExpression
defaultValue
)
{
return
MethodDef
(
mods
,
name
,
restype
,
typarams
,
params
,
null
,
thrown
,
body
,
defaultValue
);
}
public
JCMethodDecl
MethodDef
(
JCModifiers
mods
,
Name
name
,
JCExpression
restype
,
List
<
JCTypeParameter
>
typarams
,
List
<
JCVariableDecl
>
params
,
List
<
JCTypeAnnotation
>
receiver
,
List
<
JCExpression
>
thrown
,
JCBlock
body
,
JCExpression
defaultValue
)
{
JCMethodDecl
tree
=
new
JCMethodDecl
(
mods
,
name
,
restype
,
typarams
,
params
,
receiver
,
thrown
,
body
,
defaultValue
,
...
...
@@ -458,11 +442,7 @@ public class TreeMaker implements JCTree.Factory {
}
public
JCTypeParameter
TypeParameter
(
Name
name
,
List
<
JCExpression
>
bounds
)
{
return
TypeParameter
(
name
,
bounds
,
List
.<
JCTypeAnnotation
>
nil
());
}
public
JCTypeParameter
TypeParameter
(
Name
name
,
List
<
JCExpression
>
bounds
,
List
<
JCTypeAnnotation
>
annos
)
{
JCTypeParameter
tree
=
new
JCTypeParameter
(
name
,
bounds
,
annos
);
JCTypeParameter
tree
=
new
JCTypeParameter
(
name
,
bounds
);
tree
.
pos
=
pos
;
return
tree
;
}
...
...
@@ -485,12 +465,6 @@ public class TreeMaker implements JCTree.Factory {
return
tree
;
}
public
JCTypeAnnotation
TypeAnnotation
(
JCTree
annotationType
,
List
<
JCExpression
>
args
)
{
JCTypeAnnotation
tree
=
new
JCTypeAnnotation
(
annotationType
,
args
);
tree
.
pos
=
pos
;
return
tree
;
}
public
JCModifiers
Modifiers
(
long
flags
,
List
<
JCAnnotation
>
annotations
)
{
JCModifiers
tree
=
new
JCModifiers
(
flags
,
annotations
);
boolean
noFlags
=
(
flags
&
(
Flags
.
ModifierFlags
|
Flags
.
ANNOTATION
))
==
0
;
...
...
@@ -502,12 +476,6 @@ public class TreeMaker implements JCTree.Factory {
return
Modifiers
(
flags
,
List
.<
JCAnnotation
>
nil
());
}
public
JCAnnotatedType
AnnotatedType
(
List
<
JCTypeAnnotation
>
annotations
,
JCExpression
underlyingType
)
{
JCAnnotatedType
tree
=
new
JCAnnotatedType
(
annotations
,
underlyingType
);
tree
.
pos
=
pos
;
return
tree
;
}
public
JCErroneous
Erroneous
()
{
return
Erroneous
(
List
.<
JCTree
>
nil
());
}
...
...
@@ -821,7 +789,6 @@ public class TreeMaker implements JCTree.Factory {
Type
(
mtype
.
getReturnType
()),
TypeParams
(
mtype
.
getTypeArguments
()),
Params
(
mtype
.
getParameterTypes
(),
m
),
null
,
Types
(
mtype
.
getThrownTypes
()),
body
,
null
,
...
...
src/share/classes/com/sun/tools/javac/tree/TreeScanner.java
浏览文件 @
9f3f2aee
/*
* Copyright (c) 2001, 201
0
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2001, 201
1
, 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
...
...
@@ -85,7 +85,6 @@ public class TreeScanner extends Visitor {
scan
(
tree
.
restype
);
scan
(
tree
.
typarams
);
scan
(
tree
.
params
);
scan
(
tree
.
receiverAnnotations
);
scan
(
tree
.
thrown
);
scan
(
tree
.
defaultValue
);
scan
(
tree
.
body
);
...
...
@@ -208,11 +207,8 @@ public class TreeScanner extends Visitor {
}
public
void
visitNewArray
(
JCNewArray
tree
)
{
scan
(
tree
.
annotations
);
scan
(
tree
.
elemtype
);
scan
(
tree
.
dims
);
for
(
List
<
JCTypeAnnotation
>
annos
:
tree
.
dimAnnotations
)
scan
(
annos
);
scan
(
tree
.
elems
);
}
...
...
@@ -281,7 +277,6 @@ public class TreeScanner extends Visitor {
}
public
void
visitTypeParameter
(
JCTypeParameter
tree
)
{
scan
(
tree
.
annotations
);
scan
(
tree
.
bounds
);
}
...
...
@@ -305,11 +300,6 @@ public class TreeScanner extends Visitor {
scan
(
tree
.
args
);
}
public
void
visitAnnotatedType
(
JCAnnotatedType
tree
)
{
scan
(
tree
.
annotations
);
scan
(
tree
.
underlyingType
);
}
public
void
visitErroneous
(
JCErroneous
tree
)
{
}
...
...
src/share/classes/com/sun/tools/javac/tree/TreeTranslator.java
浏览文件 @
9f3f2aee
/*
* Copyright (c) 1999, 201
0
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1999, 201
1
, 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
...
...
@@ -283,11 +283,6 @@ public class TreeTranslator extends JCTree.Visitor {
}
public
void
visitNewArray
(
JCNewArray
tree
)
{
tree
.
annotations
=
translate
(
tree
.
annotations
);
List
<
List
<
JCTypeAnnotation
>>
dimAnnos
=
List
.
nil
();
for
(
List
<
JCTypeAnnotation
>
origDimAnnos
:
tree
.
dimAnnotations
)
dimAnnos
=
dimAnnos
.
append
(
translate
(
origDimAnnos
));
tree
.
dimAnnotations
=
dimAnnos
;
tree
.
elemtype
=
translate
(
tree
.
elemtype
);
tree
.
dims
=
translate
(
tree
.
dims
);
tree
.
elems
=
translate
(
tree
.
elems
);
...
...
@@ -374,7 +369,6 @@ public class TreeTranslator extends JCTree.Visitor {
}
public
void
visitTypeParameter
(
JCTypeParameter
tree
)
{
tree
.
annotations
=
translate
(
tree
.
annotations
);
tree
.
bounds
=
translate
(
tree
.
bounds
);
result
=
tree
;
}
...
...
@@ -412,12 +406,6 @@ public class TreeTranslator extends JCTree.Visitor {
result
=
tree
;
}
public
void
visitAnnotatedType
(
JCAnnotatedType
tree
)
{
tree
.
annotations
=
translate
(
tree
.
annotations
);
tree
.
underlyingType
=
translate
(
tree
.
underlyingType
);
result
=
tree
;
}
public
void
visitTree
(
JCTree
tree
)
{
throw
new
AssertionError
(
tree
);
}
...
...
src/share/classes/com/sun/tools/javap/AnnotationWriter.java
浏览文件 @
9f3f2aee
/*
* Copyright (c) 2007, 201
0
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2007, 201
1
, 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
...
...
@@ -26,7 +26,6 @@
package
com.sun.tools.javap
;
import
com.sun.tools.classfile.Annotation
;
import
com.sun.tools.classfile.ExtendedAnnotation
;
import
com.sun.tools.classfile.Annotation.Annotation_element_value
;
import
com.sun.tools.classfile.Annotation.Array_element_value
;
import
com.sun.tools.classfile.Annotation.Class_element_value
;
...
...
@@ -77,129 +76,6 @@ public class AnnotationWriter extends BasicWriter {
print
(
")"
);
}
public
void
write
(
ExtendedAnnotation
annot
)
{
write
(
annot
,
true
,
false
);
}
public
void
write
(
ExtendedAnnotation
annot
,
boolean
showOffsets
,
boolean
resolveIndices
)
{
write
(
annot
.
annotation
,
resolveIndices
);
print
(
": "
);
write
(
annot
.
position
,
showOffsets
);
}
public
void
write
(
ExtendedAnnotation
.
Position
pos
,
boolean
showOffsets
)
{
print
(
pos
.
type
);
switch
(
pos
.
type
)
{
// type case
case
TYPECAST:
case
TYPECAST_GENERIC_OR_ARRAY:
// object creation
case
INSTANCEOF:
case
INSTANCEOF_GENERIC_OR_ARRAY:
// new expression
case
NEW:
case
NEW_GENERIC_OR_ARRAY:
case
NEW_TYPE_ARGUMENT:
case
NEW_TYPE_ARGUMENT_GENERIC_OR_ARRAY:
if
(
showOffsets
)
{
print
(
", offset="
);
print
(
pos
.
offset
);
}
break
;
// local variable
case
LOCAL_VARIABLE:
case
LOCAL_VARIABLE_GENERIC_OR_ARRAY:
print
(
", {"
);
for
(
int
i
=
0
;
i
<
pos
.
lvarOffset
.
length
;
++
i
)
{
if
(
i
!=
0
)
print
(
"; "
);
if
(
showOffsets
)
{
print
(
", start_pc="
);
print
(
pos
.
lvarOffset
[
i
]);
}
print
(
", length="
);
print
(
pos
.
lvarLength
[
i
]);
print
(
", index="
);
print
(
pos
.
lvarIndex
[
i
]);
}
print
(
"}"
);
break
;
// method receiver
case
METHOD_RECEIVER:
// Do nothing
break
;
// type parameters
case
CLASS_TYPE_PARAMETER:
case
METHOD_TYPE_PARAMETER:
print
(
", param_index="
);
print
(
pos
.
parameter_index
);
break
;
// type parameters bound
case
CLASS_TYPE_PARAMETER_BOUND:
case
CLASS_TYPE_PARAMETER_BOUND_GENERIC_OR_ARRAY:
case
METHOD_TYPE_PARAMETER_BOUND:
case
METHOD_TYPE_PARAMETER_BOUND_GENERIC_OR_ARRAY:
print
(
", param_index="
);
print
(
pos
.
parameter_index
);
print
(
", bound_index="
);
print
(
pos
.
bound_index
);
break
;
// wildcard
case
WILDCARD_BOUND:
case
WILDCARD_BOUND_GENERIC_OR_ARRAY:
print
(
", wild_card="
);
print
(
pos
.
wildcard_position
);
break
;
// Class extends and implements clauses
case
CLASS_EXTENDS:
case
CLASS_EXTENDS_GENERIC_OR_ARRAY:
print
(
", type_index="
);
print
(
pos
.
type_index
);
break
;
// throws
case
THROWS:
print
(
", type_index="
);
print
(
pos
.
type_index
);
break
;
case
CLASS_LITERAL:
case
CLASS_LITERAL_GENERIC_OR_ARRAY:
if
(
showOffsets
)
{
print
(
", offset="
);
print
(
pos
.
offset
);
}
break
;
// method parameter: not specified
case
METHOD_PARAMETER_GENERIC_OR_ARRAY:
print
(
", param_index="
);
print
(
pos
.
parameter_index
);
break
;
// method type argument: wasn't specified
case
METHOD_TYPE_ARGUMENT:
case
METHOD_TYPE_ARGUMENT_GENERIC_OR_ARRAY:
if
(
showOffsets
)
{
print
(
", offset="
);
print
(
pos
.
offset
);
}
print
(
", type_index="
);
print
(
pos
.
type_index
);
break
;
// We don't need to worry abut these
case
METHOD_RETURN_GENERIC_OR_ARRAY:
case
FIELD_GENERIC_OR_ARRAY:
break
;
case
UNKNOWN:
break
;
default
:
throw
new
AssertionError
(
"unknown type: "
+
pos
.
type
);
}
// Append location data for generics/arrays.
if
(
pos
.
type
.
hasLocation
())
{
print
(
", location="
);
print
(
pos
.
location
);
}
}
public
void
write
(
Annotation
.
element_value_pair
pair
)
{
write
(
pair
,
false
);
}
...
...
src/share/classes/com/sun/tools/javap/AttributeWriter.java
浏览文件 @
9f3f2aee
/*
* Copyright (c) 2007, 201
0
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2007, 201
1
, 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
...
...
@@ -47,10 +47,8 @@ import com.sun.tools.classfile.LocalVariableTable_attribute;
import
com.sun.tools.classfile.LocalVariableTypeTable_attribute
;
import
com.sun.tools.classfile.RuntimeInvisibleAnnotations_attribute
;
import
com.sun.tools.classfile.RuntimeInvisibleParameterAnnotations_attribute
;
import
com.sun.tools.classfile.RuntimeInvisibleTypeAnnotations_attribute
;
import
com.sun.tools.classfile.RuntimeVisibleAnnotations_attribute
;
import
com.sun.tools.classfile.RuntimeVisibleParameterAnnotations_attribute
;
import
com.sun.tools.classfile.RuntimeVisibleTypeAnnotations_attribute
;
import
com.sun.tools.classfile.Signature_attribute
;
import
com.sun.tools.classfile.SourceDebugExtension_attribute
;
import
com.sun.tools.classfile.SourceFile_attribute
;
...
...
@@ -392,30 +390,6 @@ public class AttributeWriter extends BasicWriter
return
null
;
}
public
Void
visitRuntimeVisibleTypeAnnotations
(
RuntimeVisibleTypeAnnotations_attribute
attr
,
Void
ignore
)
{
println
(
"RuntimeVisibleTypeAnnotations:"
);
indent
(+
1
);
for
(
int
i
=
0
;
i
<
attr
.
annotations
.
length
;
i
++)
{
print
(
i
+
": "
);
annotationWriter
.
write
(
attr
.
annotations
[
i
]);
println
();
}
indent
(-
1
);
return
null
;
}
public
Void
visitRuntimeInvisibleTypeAnnotations
(
RuntimeInvisibleTypeAnnotations_attribute
attr
,
Void
ignore
)
{
println
(
"RuntimeInvisibleTypeAnnotations:"
);
indent
(+
1
);
for
(
int
i
=
0
;
i
<
attr
.
annotations
.
length
;
i
++)
{
print
(
i
+
": "
);
annotationWriter
.
write
(
attr
.
annotations
[
i
]);
println
();
}
indent
(-
1
);
return
null
;
}
public
Void
visitRuntimeVisibleParameterAnnotations
(
RuntimeVisibleParameterAnnotations_attribute
attr
,
Void
ignore
)
{
println
(
"RuntimeVisibleParameterAnnotations:"
);
indent
(+
1
);
...
...
src/share/classes/com/sun/tools/javap/CodeWriter.java
浏览文件 @
9f3f2aee
/*
* Copyright (c) 2007, 201
0
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2007, 201
1
, 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
...
...
@@ -64,7 +64,6 @@ class CodeWriter extends BasicWriter {
stackMapWriter
=
StackMapWriter
.
instance
(
context
);
localVariableTableWriter
=
LocalVariableTableWriter
.
instance
(
context
);
localVariableTypeTableWriter
=
LocalVariableTypeTableWriter
.
instance
(
context
);
typeAnnotationWriter
=
TypeAnnotationWriter
.
instance
(
context
);
options
=
Options
.
instance
(
context
);
}
...
...
@@ -266,11 +265,6 @@ class CodeWriter extends BasicWriter {
detailWriters
.
add
(
tryBlockWriter
);
}
if
(
options
.
details
.
contains
(
InstructionDetailWriter
.
Kind
.
TYPE_ANNOS
))
{
typeAnnotationWriter
.
reset
(
attr
);
detailWriters
.
add
(
typeAnnotationWriter
);
}
return
detailWriters
;
}
...
...
@@ -279,7 +273,6 @@ class CodeWriter extends BasicWriter {
private
ConstantWriter
constantWriter
;
private
LocalVariableTableWriter
localVariableTableWriter
;
private
LocalVariableTypeTableWriter
localVariableTypeTableWriter
;
private
TypeAnnotationWriter
typeAnnotationWriter
;
private
SourceWriter
sourceWriter
;
private
StackMapWriter
stackMapWriter
;
private
TryBlockWriter
tryBlockWriter
;
...
...
src/share/classes/com/sun/tools/javap/InstructionDetailWriter.java
浏览文件 @
9f3f2aee
/*
* Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2009,
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
...
...
@@ -42,13 +42,13 @@ public abstract class InstructionDetailWriter extends BasicWriter {
LOCAL_VAR_TYPES
(
"localVariableTypes"
),
SOURCE
(
"source"
),
STACKMAPS
(
"stackMaps"
),
TRY_BLOCKS
(
"tryBlocks"
),
TYPE_ANNOS
(
"typeAnnotations"
);
TRY_BLOCKS
(
"tryBlocks"
);
Kind
(
String
option
)
{
this
.
option
=
option
;
}
final
String
option
;
}
InstructionDetailWriter
(
Context
context
)
{
super
(
context
);
}
...
...
src/share/classes/com/sun/tools/javap/TypeAnnotationWriter.java
已删除
100644 → 0
浏览文件 @
c98db104
/*
* Copyright (c) 2009, 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.javap
;
import
com.sun.tools.classfile.Attribute
;
import
com.sun.tools.classfile.Code_attribute
;
import
com.sun.tools.classfile.ExtendedAnnotation
;
import
com.sun.tools.classfile.ExtendedAnnotation.Position
;
import
com.sun.tools.classfile.Instruction
;
import
com.sun.tools.classfile.Method
;
import
com.sun.tools.classfile.RuntimeInvisibleTypeAnnotations_attribute
;
import
com.sun.tools.classfile.RuntimeTypeAnnotations_attribute
;
import
com.sun.tools.classfile.RuntimeVisibleTypeAnnotations_attribute
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
/**
* Annotate instructions with details about type annotations.
*
* <p><b>This is NOT part of any supported API.
* If you write code that depends on this, you do so at your own risk.
* This code and its internal interfaces are subject to change or
* deletion without notice.</b>
*/
public
class
TypeAnnotationWriter
extends
InstructionDetailWriter
{
public
enum
NoteKind
{
VISIBLE
,
INVISIBLE
};
public
static
class
Note
{
Note
(
NoteKind
kind
,
ExtendedAnnotation
anno
)
{
this
.
kind
=
kind
;
this
.
anno
=
anno
;
}
public
final
NoteKind
kind
;
public
final
ExtendedAnnotation
anno
;
}
static
TypeAnnotationWriter
instance
(
Context
context
)
{
TypeAnnotationWriter
instance
=
context
.
get
(
TypeAnnotationWriter
.
class
);
if
(
instance
==
null
)
instance
=
new
TypeAnnotationWriter
(
context
);
return
instance
;
}
protected
TypeAnnotationWriter
(
Context
context
)
{
super
(
context
);
context
.
put
(
TypeAnnotationWriter
.
class
,
this
);
annotationWriter
=
AnnotationWriter
.
instance
(
context
);
classWriter
=
ClassWriter
.
instance
(
context
);
}
public
void
reset
(
Code_attribute
attr
)
{
Method
m
=
classWriter
.
getMethod
();
pcMap
=
new
HashMap
<
Integer
,
List
<
Note
>>();
check
(
NoteKind
.
VISIBLE
,
(
RuntimeVisibleTypeAnnotations_attribute
)
m
.
attributes
.
get
(
Attribute
.
RuntimeVisibleTypeAnnotations
));
check
(
NoteKind
.
INVISIBLE
,
(
RuntimeInvisibleTypeAnnotations_attribute
)
m
.
attributes
.
get
(
Attribute
.
RuntimeInvisibleTypeAnnotations
));
}
private
void
check
(
NoteKind
kind
,
RuntimeTypeAnnotations_attribute
attr
)
{
if
(
attr
==
null
)
return
;
for
(
ExtendedAnnotation
anno:
attr
.
annotations
)
{
Position
p
=
anno
.
position
;
Note
note
=
null
;
if
(
p
.
offset
!=
-
1
)
addNote
(
p
.
offset
,
note
=
new
Note
(
kind
,
anno
));
if
(
p
.
lvarOffset
!=
null
)
{
for
(
int
i
=
0
;
i
<
p
.
lvarOffset
.
length
;
i
++)
{
if
(
note
==
null
)
note
=
new
Note
(
kind
,
anno
);
addNote
(
p
.
lvarOffset
[
i
],
note
);
}
}
}
}
private
void
addNote
(
int
pc
,
Note
note
)
{
List
<
Note
>
list
=
pcMap
.
get
(
pc
);
if
(
list
==
null
)
pcMap
.
put
(
pc
,
list
=
new
ArrayList
<
Note
>());
list
.
add
(
note
);
}
@Override
void
writeDetails
(
Instruction
instr
)
{
String
indent
=
space
(
2
);
// get from Options?
int
pc
=
instr
.
getPC
();
List
<
Note
>
notes
=
pcMap
.
get
(
pc
);
if
(
notes
!=
null
)
{
for
(
Note
n:
notes
)
{
print
(
indent
);
print
(
"@"
);
annotationWriter
.
write
(
n
.
anno
,
false
,
true
);
print
(
", "
);
println
(
n
.
kind
.
toString
().
toLowerCase
());
}
}
}
private
AnnotationWriter
annotationWriter
;
private
ClassWriter
classWriter
;
private
Map
<
Integer
,
List
<
Note
>>
pcMap
;
}
test/tools/javac/diags/examples.not-yet.txt
浏览文件 @
9f3f2aee
...
...
@@ -52,7 +52,6 @@ compiler.misc.bad.const.pool.tag.at # bad class file
compiler.misc.bad.enclosing.method # bad class file
compiler.misc.bad.runtime.invisible.param.annotations # bad class file
compiler.misc.bad.signature # bad class file
compiler.misc.bad.type.annotation.value
compiler.misc.base.membership # UNUSED
compiler.misc.ccf.found.later.version
compiler.misc.ccf.unrecognized.attribute
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录