Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_langtools
提交
c1fe11a6
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看板
提交
c1fe11a6
编写于
5月 19, 2009
作者:
J
jjg
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
6843013: missing files in fix for 6824493
Reviewed-by: darcy
上级
c603036a
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
317 addition
and
0 deletion
+317
-0
src/share/classes/com/sun/tools/javap/LocalVariableTableWriter.java
...classes/com/sun/tools/javap/LocalVariableTableWriter.java
+158
-0
src/share/classes/com/sun/tools/javap/LocalVariableTypeTableWriter.java
...ses/com/sun/tools/javap/LocalVariableTypeTableWriter.java
+159
-0
未找到文件。
src/share/classes/com/sun/tools/javap/LocalVariableTableWriter.java
0 → 100644
浏览文件 @
c1fe11a6
/*
* Copyright 2009 Sun Microsystems, Inc. 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. Sun designates this
* particular file as subject to the "Classpath" exception as provided
* by Sun 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.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.ConstantPool
;
import
com.sun.tools.classfile.ConstantPoolException
;
import
com.sun.tools.classfile.Descriptor
;
import
com.sun.tools.classfile.Descriptor.InvalidDescriptor
;
import
com.sun.tools.classfile.Instruction
;
import
com.sun.tools.classfile.LocalVariableTable_attribute
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.ListIterator
;
import
java.util.Map
;
/**
* Annotate instructions with details about local variables.
*
* <p><b>This is NOT part of any API supported by Sun Microsystems. 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
LocalVariableTableWriter
extends
InstructionDetailWriter
{
public
enum
NoteKind
{
START
(
"start"
)
{
public
boolean
match
(
LocalVariableTable_attribute
.
Entry
entry
,
int
pc
)
{
return
(
pc
==
entry
.
start_pc
);
}
},
END
(
"end"
)
{
public
boolean
match
(
LocalVariableTable_attribute
.
Entry
entry
,
int
pc
)
{
return
(
pc
==
entry
.
start_pc
+
entry
.
length
);
}
};
NoteKind
(
String
text
)
{
this
.
text
=
text
;
}
public
abstract
boolean
match
(
LocalVariableTable_attribute
.
Entry
entry
,
int
pc
);
public
final
String
text
;
};
static
LocalVariableTableWriter
instance
(
Context
context
)
{
LocalVariableTableWriter
instance
=
context
.
get
(
LocalVariableTableWriter
.
class
);
if
(
instance
==
null
)
instance
=
new
LocalVariableTableWriter
(
context
);
return
instance
;
}
protected
LocalVariableTableWriter
(
Context
context
)
{
super
(
context
);
context
.
put
(
LocalVariableTableWriter
.
class
,
this
);
classWriter
=
ClassWriter
.
instance
(
context
);
}
public
void
reset
(
Code_attribute
attr
)
{
codeAttr
=
attr
;
pcMap
=
new
HashMap
<
Integer
,
List
<
LocalVariableTable_attribute
.
Entry
>>();
LocalVariableTable_attribute
lvt
=
(
LocalVariableTable_attribute
)
(
attr
.
attributes
.
get
(
Attribute
.
LocalVariableTable
));
if
(
lvt
==
null
)
return
;
for
(
int
i
=
0
;
i
<
lvt
.
local_variable_table
.
length
;
i
++)
{
LocalVariableTable_attribute
.
Entry
entry
=
lvt
.
local_variable_table
[
i
];
put
(
entry
.
start_pc
,
entry
);
put
(
entry
.
start_pc
+
entry
.
length
,
entry
);
}
}
public
void
writeDetails
(
Instruction
instr
)
{
int
pc
=
instr
.
getPC
();
writeLocalVariables
(
pc
,
NoteKind
.
END
);
writeLocalVariables
(
pc
,
NoteKind
.
START
);
}
@Override
public
void
flush
()
{
int
pc
=
codeAttr
.
code_length
;
writeLocalVariables
(
pc
,
NoteKind
.
END
);
}
public
void
writeLocalVariables
(
int
pc
,
NoteKind
kind
)
{
ConstantPool
constant_pool
=
classWriter
.
getClassFile
().
constant_pool
;
String
indent
=
space
(
2
);
// get from Options?
List
<
LocalVariableTable_attribute
.
Entry
>
entries
=
pcMap
.
get
(
pc
);
if
(
entries
!=
null
)
{
for
(
ListIterator
<
LocalVariableTable_attribute
.
Entry
>
iter
=
entries
.
listIterator
(
kind
==
NoteKind
.
END
?
entries
.
size
()
:
0
);
kind
==
NoteKind
.
END
?
iter
.
hasPrevious
()
:
iter
.
hasNext
()
;
)
{
LocalVariableTable_attribute
.
Entry
entry
=
kind
==
NoteKind
.
END
?
iter
.
previous
()
:
iter
.
next
();
if
(
kind
.
match
(
entry
,
pc
))
{
print
(
indent
);
print
(
kind
.
text
);
print
(
" local "
);
print
(
entry
.
index
);
print
(
" // "
);
Descriptor
d
=
new
Descriptor
(
entry
.
descriptor_index
);
try
{
print
(
d
.
getFieldType
(
constant_pool
));
}
catch
(
InvalidDescriptor
e
)
{
print
(
report
(
e
));
}
catch
(
ConstantPoolException
e
)
{
print
(
report
(
e
));
}
print
(
" "
);
try
{
print
(
constant_pool
.
getUTF8Value
(
entry
.
name_index
));
}
catch
(
ConstantPoolException
e
)
{
print
(
report
(
e
));
}
println
();
}
}
}
}
private
void
put
(
int
pc
,
LocalVariableTable_attribute
.
Entry
entry
)
{
List
<
LocalVariableTable_attribute
.
Entry
>
list
=
pcMap
.
get
(
pc
);
if
(
list
==
null
)
{
list
=
new
ArrayList
<
LocalVariableTable_attribute
.
Entry
>();
pcMap
.
put
(
pc
,
list
);
}
if
(!
list
.
contains
(
entry
))
list
.
add
(
entry
);
}
private
ClassWriter
classWriter
;
private
Code_attribute
codeAttr
;
private
Map
<
Integer
,
List
<
LocalVariableTable_attribute
.
Entry
>>
pcMap
;
}
src/share/classes/com/sun/tools/javap/LocalVariableTypeTableWriter.java
0 → 100644
浏览文件 @
c1fe11a6
/*
* Copyright 2009 Sun Microsystems, Inc. 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. Sun designates this
* particular file as subject to the "Classpath" exception as provided
* by Sun 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.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.ConstantPool
;
import
com.sun.tools.classfile.ConstantPoolException
;
import
com.sun.tools.classfile.Descriptor
;
import
com.sun.tools.classfile.Descriptor.InvalidDescriptor
;
import
com.sun.tools.classfile.Instruction
;
import
com.sun.tools.classfile.LocalVariableTypeTable_attribute
;
import
com.sun.tools.classfile.Signature
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.ListIterator
;
import
java.util.Map
;
/**
* Annotate instructions with details about local variables.
*
* <p><b>This is NOT part of any API supported by Sun Microsystems. 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
LocalVariableTypeTableWriter
extends
InstructionDetailWriter
{
public
enum
NoteKind
{
START
(
"start"
)
{
public
boolean
match
(
LocalVariableTypeTable_attribute
.
Entry
entry
,
int
pc
)
{
return
(
pc
==
entry
.
start_pc
);
}
},
END
(
"end"
)
{
public
boolean
match
(
LocalVariableTypeTable_attribute
.
Entry
entry
,
int
pc
)
{
return
(
pc
==
entry
.
start_pc
+
entry
.
length
);
}
};
NoteKind
(
String
text
)
{
this
.
text
=
text
;
}
public
abstract
boolean
match
(
LocalVariableTypeTable_attribute
.
Entry
entry
,
int
pc
);
public
final
String
text
;
};
static
LocalVariableTypeTableWriter
instance
(
Context
context
)
{
LocalVariableTypeTableWriter
instance
=
context
.
get
(
LocalVariableTypeTableWriter
.
class
);
if
(
instance
==
null
)
instance
=
new
LocalVariableTypeTableWriter
(
context
);
return
instance
;
}
protected
LocalVariableTypeTableWriter
(
Context
context
)
{
super
(
context
);
context
.
put
(
LocalVariableTypeTableWriter
.
class
,
this
);
classWriter
=
ClassWriter
.
instance
(
context
);
}
public
void
reset
(
Code_attribute
attr
)
{
codeAttr
=
attr
;
pcMap
=
new
HashMap
<
Integer
,
List
<
LocalVariableTypeTable_attribute
.
Entry
>>();
LocalVariableTypeTable_attribute
lvt
=
(
LocalVariableTypeTable_attribute
)
(
attr
.
attributes
.
get
(
Attribute
.
LocalVariableTypeTable
));
if
(
lvt
==
null
)
return
;
for
(
int
i
=
0
;
i
<
lvt
.
local_variable_table
.
length
;
i
++)
{
LocalVariableTypeTable_attribute
.
Entry
entry
=
lvt
.
local_variable_table
[
i
];
put
(
entry
.
start_pc
,
entry
);
put
(
entry
.
start_pc
+
entry
.
length
,
entry
);
}
}
public
void
writeDetails
(
Instruction
instr
)
{
int
pc
=
instr
.
getPC
();
writeLocalVariables
(
pc
,
NoteKind
.
END
);
writeLocalVariables
(
pc
,
NoteKind
.
START
);
}
@Override
public
void
flush
()
{
int
pc
=
codeAttr
.
code_length
;
writeLocalVariables
(
pc
,
NoteKind
.
END
);
}
public
void
writeLocalVariables
(
int
pc
,
NoteKind
kind
)
{
ConstantPool
constant_pool
=
classWriter
.
getClassFile
().
constant_pool
;
String
indent
=
space
(
2
);
// get from Options?
List
<
LocalVariableTypeTable_attribute
.
Entry
>
entries
=
pcMap
.
get
(
pc
);
if
(
entries
!=
null
)
{
for
(
ListIterator
<
LocalVariableTypeTable_attribute
.
Entry
>
iter
=
entries
.
listIterator
(
kind
==
NoteKind
.
END
?
entries
.
size
()
:
0
);
kind
==
NoteKind
.
END
?
iter
.
hasPrevious
()
:
iter
.
hasNext
()
;
)
{
LocalVariableTypeTable_attribute
.
Entry
entry
=
kind
==
NoteKind
.
END
?
iter
.
previous
()
:
iter
.
next
();
if
(
kind
.
match
(
entry
,
pc
))
{
print
(
indent
);
print
(
kind
.
text
);
print
(
" generic local "
);
print
(
entry
.
index
);
print
(
" // "
);
Descriptor
d
=
new
Signature
(
entry
.
signature_index
);
try
{
print
(
d
.
getFieldType
(
constant_pool
));
}
catch
(
InvalidDescriptor
e
)
{
print
(
report
(
e
));
}
catch
(
ConstantPoolException
e
)
{
print
(
report
(
e
));
}
print
(
" "
);
try
{
print
(
constant_pool
.
getUTF8Value
(
entry
.
name_index
));
}
catch
(
ConstantPoolException
e
)
{
print
(
report
(
e
));
}
println
();
}
}
}
}
private
void
put
(
int
pc
,
LocalVariableTypeTable_attribute
.
Entry
entry
)
{
List
<
LocalVariableTypeTable_attribute
.
Entry
>
list
=
pcMap
.
get
(
pc
);
if
(
list
==
null
)
{
list
=
new
ArrayList
<
LocalVariableTypeTable_attribute
.
Entry
>();
pcMap
.
put
(
pc
,
list
);
}
if
(!
list
.
contains
(
entry
))
list
.
add
(
entry
);
}
private
ClassWriter
classWriter
;
private
Code_attribute
codeAttr
;
private
Map
<
Integer
,
List
<
LocalVariableTypeTable_attribute
.
Entry
>>
pcMap
;
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录