author | alanb |
Thu, 01 Dec 2016 09:02:42 +0000 | |
changeset 42407 | f3702cff2933 |
parent 36526 | 3b41f1c69604 |
child 42822 | a84956e7ee4d |
permissions | -rw-r--r-- |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
1 |
/* |
36526 | 2 |
* Copyright (c) 2007, 2016, Oracle and/or its affiliates. All rights reserved. |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
3 |
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
4 |
* |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
5 |
* This code is free software; you can redistribute it and/or modify it |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
6 |
* under the terms of the GNU General Public License version 2 only, as |
5520 | 7 |
* published by the Free Software Foundation. Oracle designates this |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
8 |
* particular file as subject to the "Classpath" exception as provided |
5520 | 9 |
* by Oracle in the LICENSE file that accompanied this code. |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
10 |
* |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
11 |
* This code is distributed in the hope that it will be useful, but WITHOUT |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
12 |
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
13 |
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
14 |
* version 2 for more details (a copy is included in the LICENSE file that |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
15 |
* accompanied this code). |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
16 |
* |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
17 |
* You should have received a copy of the GNU General Public License version |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
18 |
* 2 along with this work; if not, write to the Free Software Foundation, |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
19 |
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
20 |
* |
5520 | 21 |
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
22 |
* or visit www.oracle.com if you need additional information or have any |
|
23 |
* questions. |
|
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
24 |
*/ |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
25 |
|
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
26 |
package com.sun.tools.javap; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
27 |
|
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
28 |
import com.sun.tools.classfile.AccessFlags; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
29 |
import com.sun.tools.classfile.AnnotationDefault_attribute; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
30 |
import com.sun.tools.classfile.Attribute; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
31 |
import com.sun.tools.classfile.Attributes; |
8042 | 32 |
import com.sun.tools.classfile.BootstrapMethods_attribute; |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
33 |
import com.sun.tools.classfile.CharacterRangeTable_attribute; |
36526 | 34 |
import com.sun.tools.classfile.CharacterRangeTable_attribute.Entry; |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
35 |
import com.sun.tools.classfile.Code_attribute; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
36 |
import com.sun.tools.classfile.CompilationID_attribute; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
37 |
import com.sun.tools.classfile.ConstantPool; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
38 |
import com.sun.tools.classfile.ConstantPoolException; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
39 |
import com.sun.tools.classfile.ConstantValue_attribute; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
40 |
import com.sun.tools.classfile.DefaultAttribute; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
41 |
import com.sun.tools.classfile.Deprecated_attribute; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
42 |
import com.sun.tools.classfile.EnclosingMethod_attribute; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
43 |
import com.sun.tools.classfile.Exceptions_attribute; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
44 |
import com.sun.tools.classfile.InnerClasses_attribute; |
36526 | 45 |
import com.sun.tools.classfile.InnerClasses_attribute.Info; |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
46 |
import com.sun.tools.classfile.LineNumberTable_attribute; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
47 |
import com.sun.tools.classfile.LocalVariableTable_attribute; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
48 |
import com.sun.tools.classfile.LocalVariableTypeTable_attribute; |
15031
c4fad55a5681
8004727: Add compiler support for parameter reflection
jjg
parents:
8042
diff
changeset
|
49 |
import com.sun.tools.classfile.MethodParameters_attribute; |
36526 | 50 |
import com.sun.tools.classfile.Module_attribute; |
42407
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
51 |
import com.sun.tools.classfile.ModuleHashes_attribute; |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
52 |
import com.sun.tools.classfile.ModuleMainClass_attribute; |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
53 |
import com.sun.tools.classfile.ModulePackages_attribute; |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
54 |
import com.sun.tools.classfile.ModuleTarget_attribute; |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
55 |
import com.sun.tools.classfile.ModuleVersion_attribute; |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
56 |
import com.sun.tools.classfile.RuntimeInvisibleAnnotations_attribute; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
57 |
import com.sun.tools.classfile.RuntimeInvisibleParameterAnnotations_attribute; |
15385 | 58 |
import com.sun.tools.classfile.RuntimeInvisibleTypeAnnotations_attribute; |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
59 |
import com.sun.tools.classfile.RuntimeVisibleAnnotations_attribute; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
60 |
import com.sun.tools.classfile.RuntimeVisibleParameterAnnotations_attribute; |
15385 | 61 |
import com.sun.tools.classfile.RuntimeVisibleTypeAnnotations_attribute; |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
62 |
import com.sun.tools.classfile.Signature_attribute; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
63 |
import com.sun.tools.classfile.SourceDebugExtension_attribute; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
64 |
import com.sun.tools.classfile.SourceFile_attribute; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
65 |
import com.sun.tools.classfile.SourceID_attribute; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
66 |
import com.sun.tools.classfile.StackMapTable_attribute; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
67 |
import com.sun.tools.classfile.StackMap_attribute; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
68 |
import com.sun.tools.classfile.Synthetic_attribute; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
69 |
|
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
70 |
import static com.sun.tools.classfile.AccessFlags.*; |
29291
076c277565f7
8073550: java* tools: replace obj.getClass hacks with Assert.checkNonNull or Objects.requireNonNull
mcimadamore
parents:
26389
diff
changeset
|
71 |
|
076c277565f7
8073550: java* tools: replace obj.getClass hacks with Assert.checkNonNull or Objects.requireNonNull
mcimadamore
parents:
26389
diff
changeset
|
72 |
import com.sun.tools.javac.util.Assert; |
22153
f9f06fcca59d
8029800: Flags.java uses String.toLowerCase without specifying Locale
jlahoda
parents:
18670
diff
changeset
|
73 |
import com.sun.tools.javac.util.StringUtils; |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
74 |
|
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
75 |
/* |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
76 |
* A writer for writing Attributes as text. |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
77 |
* |
5847
1908176fd6e3
6944312: Potential rebranding issues in openjdk/langtools repository sources
jjg
parents:
5520
diff
changeset
|
78 |
* <p><b>This is NOT part of any supported API. |
1908176fd6e3
6944312: Potential rebranding issues in openjdk/langtools repository sources
jjg
parents:
5520
diff
changeset
|
79 |
* If you write code that depends on this, you do so at your own risk. |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
80 |
* This code and its internal interfaces are subject to change or |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
81 |
* deletion without notice.</b> |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
82 |
*/ |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
83 |
public class AttributeWriter extends BasicWriter |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
84 |
implements Attribute.Visitor<Void,Void> |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
85 |
{ |
3141
79c119fae7fb
6852856: javap changes to facilitate subclassing javap for variants
jjg
parents:
735
diff
changeset
|
86 |
public static AttributeWriter instance(Context context) { |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
87 |
AttributeWriter instance = context.get(AttributeWriter.class); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
88 |
if (instance == null) |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
89 |
instance = new AttributeWriter(context); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
90 |
return instance; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
91 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
92 |
|
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
93 |
protected AttributeWriter(Context context) { |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
94 |
super(context); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
95 |
context.put(AttributeWriter.class, this); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
96 |
annotationWriter = AnnotationWriter.instance(context); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
97 |
codeWriter = CodeWriter.instance(context); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
98 |
constantWriter = ConstantWriter.instance(context); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
99 |
options = Options.instance(context); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
100 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
101 |
|
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
102 |
public void write(Object owner, Attribute attr, ConstantPool constant_pool) { |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
103 |
if (attr != null) { |
29291
076c277565f7
8073550: java* tools: replace obj.getClass hacks with Assert.checkNonNull or Objects.requireNonNull
mcimadamore
parents:
26389
diff
changeset
|
104 |
Assert.checkNonNull(constant_pool); |
076c277565f7
8073550: java* tools: replace obj.getClass hacks with Assert.checkNonNull or Objects.requireNonNull
mcimadamore
parents:
26389
diff
changeset
|
105 |
Assert.checkNonNull(owner); |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
106 |
this.constant_pool = constant_pool; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
107 |
this.owner = owner; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
108 |
attr.accept(this, null); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
109 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
110 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
111 |
|
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
112 |
public void write(Object owner, Attributes attrs, ConstantPool constant_pool) { |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
113 |
if (attrs != null) { |
29291
076c277565f7
8073550: java* tools: replace obj.getClass hacks with Assert.checkNonNull or Objects.requireNonNull
mcimadamore
parents:
26389
diff
changeset
|
114 |
Assert.checkNonNull(constant_pool); |
076c277565f7
8073550: java* tools: replace obj.getClass hacks with Assert.checkNonNull or Objects.requireNonNull
mcimadamore
parents:
26389
diff
changeset
|
115 |
Assert.checkNonNull(owner); |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
116 |
this.constant_pool = constant_pool; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
117 |
this.owner = owner; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
118 |
for (Attribute attr: attrs) |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
119 |
attr.accept(this, null); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
120 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
121 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
122 |
|
36526 | 123 |
@Override |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
124 |
public Void visitDefault(DefaultAttribute attr, Void ignore) { |
18667
7c871925691f
6983646: javap should identify why a DefaultAttribute is being used
vromero
parents:
18665
diff
changeset
|
125 |
if (attr.reason != null) { |
7c871925691f
6983646: javap should identify why a DefaultAttribute is being used
vromero
parents:
18665
diff
changeset
|
126 |
report(attr.reason); |
7c871925691f
6983646: javap should identify why a DefaultAttribute is being used
vromero
parents:
18665
diff
changeset
|
127 |
} |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
128 |
byte[] data = attr.info; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
129 |
int i = 0; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
130 |
int j = 0; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
131 |
print(" "); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
132 |
try { |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
133 |
print(attr.getName(constant_pool)); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
134 |
} catch (ConstantPoolException e) { |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
135 |
report(e); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
136 |
print("attribute name = #" + attr.attribute_name_index); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
137 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
138 |
print(": "); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
139 |
println("length = 0x" + toHex(attr.info.length)); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
140 |
|
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
141 |
print(" "); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
142 |
|
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
143 |
while (i < data.length) { |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
144 |
print(toHex(data[i], 2)); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
145 |
|
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
146 |
j++; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
147 |
if (j == 16) { |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
148 |
println(); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
149 |
print(" "); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
150 |
j = 0; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
151 |
} else { |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
152 |
print(" "); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
153 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
154 |
i++; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
155 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
156 |
println(); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
157 |
return null; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
158 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
159 |
|
36526 | 160 |
@Override |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
161 |
public Void visitAnnotationDefault(AnnotationDefault_attribute attr, Void ignore) { |
3546 | 162 |
println("AnnotationDefault:"); |
163 |
indent(+1); |
|
164 |
print("default_value: "); |
|
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
165 |
annotationWriter.write(attr.default_value); |
3546 | 166 |
indent(-1); |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
167 |
return null; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
168 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
169 |
|
36526 | 170 |
@Override |
8042 | 171 |
public Void visitBootstrapMethods(BootstrapMethods_attribute attr, Void p) { |
172 |
println(Attribute.BootstrapMethods + ":"); |
|
173 |
for (int i = 0; i < attr.bootstrap_method_specifiers.length ; i++) { |
|
174 |
BootstrapMethods_attribute.BootstrapMethodSpecifier bsm = attr.bootstrap_method_specifiers[i]; |
|
175 |
indent(+1); |
|
176 |
print(i + ": #" + bsm.bootstrap_method_ref + " "); |
|
177 |
println(constantWriter.stringValue(bsm.bootstrap_method_ref)); |
|
178 |
indent(+1); |
|
179 |
println("Method arguments:"); |
|
180 |
indent(+1); |
|
181 |
for (int j = 0; j < bsm.bootstrap_arguments.length; j++) { |
|
182 |
print("#" + bsm.bootstrap_arguments[j] + " "); |
|
183 |
println(constantWriter.stringValue(bsm.bootstrap_arguments[j])); |
|
184 |
} |
|
185 |
indent(-3); |
|
186 |
} |
|
187 |
return null; |
|
188 |
} |
|
189 |
||
36526 | 190 |
@Override |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
191 |
public Void visitCharacterRangeTable(CharacterRangeTable_attribute attr, Void ignore) { |
3546 | 192 |
println("CharacterRangeTable:"); |
193 |
indent(+1); |
|
36526 | 194 |
for (Entry e : attr.character_range_table) { |
7625
f7374a9d9cc9
7004698: javap does not output CharacterRangeTable attributes correctly
jjg
parents:
5847
diff
changeset
|
195 |
print(String.format(" %2d, %2d, %6x, %6x, %4x", |
f7374a9d9cc9
7004698: javap does not output CharacterRangeTable attributes correctly
jjg
parents:
5847
diff
changeset
|
196 |
e.start_pc, e.end_pc, |
f7374a9d9cc9
7004698: javap does not output CharacterRangeTable attributes correctly
jjg
parents:
5847
diff
changeset
|
197 |
e.character_range_start, e.character_range_end, |
f7374a9d9cc9
7004698: javap does not output CharacterRangeTable attributes correctly
jjg
parents:
5847
diff
changeset
|
198 |
e.flags)); |
3546 | 199 |
tab(); |
7625
f7374a9d9cc9
7004698: javap does not output CharacterRangeTable attributes correctly
jjg
parents:
5847
diff
changeset
|
200 |
print(String.format("// %2d, %2d, %4d:%02d, %4d:%02d", |
f7374a9d9cc9
7004698: javap does not output CharacterRangeTable attributes correctly
jjg
parents:
5847
diff
changeset
|
201 |
e.start_pc, e.end_pc, |
f7374a9d9cc9
7004698: javap does not output CharacterRangeTable attributes correctly
jjg
parents:
5847
diff
changeset
|
202 |
(e.character_range_start >> 10), (e.character_range_start & 0x3ff), |
f7374a9d9cc9
7004698: javap does not output CharacterRangeTable attributes correctly
jjg
parents:
5847
diff
changeset
|
203 |
(e.character_range_end >> 10), (e.character_range_end & 0x3ff))); |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
204 |
if ((e.flags & CharacterRangeTable_attribute.CRT_STATEMENT) != 0) |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
205 |
print(", statement"); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
206 |
if ((e.flags & CharacterRangeTable_attribute.CRT_BLOCK) != 0) |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
207 |
print(", block"); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
208 |
if ((e.flags & CharacterRangeTable_attribute.CRT_ASSIGNMENT) != 0) |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
209 |
print(", assignment"); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
210 |
if ((e.flags & CharacterRangeTable_attribute.CRT_FLOW_CONTROLLER) != 0) |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
211 |
print(", flow-controller"); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
212 |
if ((e.flags & CharacterRangeTable_attribute.CRT_FLOW_TARGET) != 0) |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
213 |
print(", flow-target"); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
214 |
if ((e.flags & CharacterRangeTable_attribute.CRT_INVOKE) != 0) |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
215 |
print(", invoke"); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
216 |
if ((e.flags & CharacterRangeTable_attribute.CRT_CREATE) != 0) |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
217 |
print(", create"); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
218 |
if ((e.flags & CharacterRangeTable_attribute.CRT_BRANCH_TRUE) != 0) |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
219 |
print(", branch-true"); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
220 |
if ((e.flags & CharacterRangeTable_attribute.CRT_BRANCH_FALSE) != 0) |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
221 |
print(", branch-false"); |
7625
f7374a9d9cc9
7004698: javap does not output CharacterRangeTable attributes correctly
jjg
parents:
5847
diff
changeset
|
222 |
println(); |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
223 |
} |
3546 | 224 |
indent(-1); |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
225 |
return null; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
226 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
227 |
|
36526 | 228 |
@Override |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
229 |
public Void visitCode(Code_attribute attr, Void ignore) { |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
230 |
codeWriter.write(attr, constant_pool); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
231 |
return null; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
232 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
233 |
|
36526 | 234 |
@Override |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
235 |
public Void visitCompilationID(CompilationID_attribute attr, Void ignore) { |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
236 |
constantWriter.write(attr.compilationID_index); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
237 |
return null; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
238 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
239 |
|
42407
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
240 |
private String getJavaPackage(ModulePackages_attribute attr, int index) { |
36526 | 241 |
try { |
242 |
return getJavaName(attr.getPackage(index, constant_pool)); |
|
243 |
} catch (ConstantPoolException e) { |
|
244 |
return report(e); |
|
245 |
} |
|
246 |
} |
|
247 |
||
248 |
@Override |
|
42407
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
249 |
public Void visitModulePackages(ModulePackages_attribute attr, Void ignore) { |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
250 |
println("ModulePackages: "); |
36526 | 251 |
indent(+1); |
252 |
for (int i = 0; i < attr.packages_count; i++) { |
|
253 |
print("#" + attr.packages_index[i]); |
|
254 |
tab(); |
|
255 |
println("// " + getJavaPackage(attr, i)); |
|
256 |
} |
|
257 |
indent(-1); |
|
258 |
return null; |
|
259 |
} |
|
260 |
||
261 |
@Override |
|
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
262 |
public Void visitConstantValue(ConstantValue_attribute attr, Void ignore) { |
22698 | 263 |
print("ConstantValue: "); |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
264 |
constantWriter.write(attr.constantvalue_index); |
3546 | 265 |
println(); |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
266 |
return null; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
267 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
268 |
|
36526 | 269 |
@Override |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
270 |
public Void visitDeprecated(Deprecated_attribute attr, Void ignore) { |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
271 |
println("Deprecated: true"); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
272 |
return null; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
273 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
274 |
|
36526 | 275 |
@Override |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
276 |
public Void visitEnclosingMethod(EnclosingMethod_attribute attr, Void ignore) { |
3546 | 277 |
print("EnclosingMethod: #" + attr.class_index + ".#" + attr.method_index); |
278 |
tab(); |
|
279 |
print("// " + getJavaClassName(attr)); |
|
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
280 |
if (attr.method_index != 0) |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
281 |
print("." + getMethodName(attr)); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
282 |
println(); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
283 |
return null; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
284 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
285 |
|
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
286 |
private String getJavaClassName(EnclosingMethod_attribute a) { |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
287 |
try { |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
288 |
return getJavaName(a.getClassName(constant_pool)); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
289 |
} catch (ConstantPoolException e) { |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
290 |
return report(e); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
291 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
292 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
293 |
|
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
294 |
private String getMethodName(EnclosingMethod_attribute a) { |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
295 |
try { |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
296 |
return a.getMethodName(constant_pool); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
297 |
} catch (ConstantPoolException e) { |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
298 |
return report(e); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
299 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
300 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
301 |
|
36526 | 302 |
@Override |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
303 |
public Void visitExceptions(Exceptions_attribute attr, Void ignore) { |
3546 | 304 |
println("Exceptions:"); |
305 |
indent(+1); |
|
306 |
print("throws "); |
|
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
307 |
for (int i = 0; i < attr.number_of_exceptions; i++) { |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
308 |
if (i > 0) |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
309 |
print(", "); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
310 |
print(getJavaException(attr, i)); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
311 |
} |
3546 | 312 |
println(); |
313 |
indent(-1); |
|
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
314 |
return null; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
315 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
316 |
|
733 | 317 |
private String getJavaException(Exceptions_attribute attr, int index) { |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
318 |
try { |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
319 |
return getJavaName(attr.getException(index, constant_pool)); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
320 |
} catch (ConstantPoolException e) { |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
321 |
return report(e); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
322 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
323 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
324 |
|
36526 | 325 |
@Override |
42407
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
326 |
public Void visitModuleHashes(ModuleHashes_attribute attr, Void ignore) { |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
327 |
println("ModuleHashes:"); |
36526 | 328 |
indent(+1); |
329 |
print("algorithm #" + attr.algorithm_index); |
|
330 |
tab(); |
|
331 |
println("// " + getAlgorithm(attr)); |
|
42407
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
332 |
for (ModuleHashes_attribute.Entry e : attr.hashes_table) { |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
333 |
print("#" + e.module_name_index); |
36526 | 334 |
tab(); |
42407
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
335 |
println("// " + getModuleName(e)); |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
336 |
println("hash_length: " + e.hash.length); |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
337 |
println("hash: [" + toHex(e.hash) + "]"); |
36526 | 338 |
} |
339 |
indent(-1); |
|
340 |
return null; |
|
341 |
} |
|
342 |
||
42407
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
343 |
private String getAlgorithm(ModuleHashes_attribute attr) { |
36526 | 344 |
try { |
345 |
return constant_pool.getUTF8Value(attr.algorithm_index); |
|
346 |
} catch (ConstantPoolException e) { |
|
347 |
return report(e); |
|
348 |
} |
|
349 |
} |
|
350 |
||
42407
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
351 |
private String getModuleName(ModuleHashes_attribute.Entry entry) { |
36526 | 352 |
try { |
42407
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
353 |
return constant_pool.getUTF8Value(entry.module_name_index); |
36526 | 354 |
} catch (ConstantPoolException e) { |
355 |
return report(e); |
|
356 |
} |
|
357 |
} |
|
358 |
||
359 |
@Override |
|
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
360 |
public Void visitInnerClasses(InnerClasses_attribute attr, Void ignore) { |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
361 |
boolean first = true; |
36526 | 362 |
for (Info info : attr.classes) { |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
363 |
//access |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
364 |
AccessFlags access_flags = info.inner_class_access_flags; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
365 |
if (options.checkAccess(access_flags)) { |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
366 |
if (first) { |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
367 |
writeInnerClassHeader(); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
368 |
first = false; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
369 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
370 |
for (String name: access_flags.getInnerClassModifiers()) |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
371 |
print(name + " "); |
26389
b389165f2c78
8034861: Incorrect format and indentation of InnerClasses section
jjg
parents:
25874
diff
changeset
|
372 |
if (info.inner_name_index != 0) { |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
373 |
print("#" + info.inner_name_index + "= "); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
374 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
375 |
print("#" + info.inner_class_info_index); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
376 |
if (info.outer_class_info_index != 0) { |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
377 |
print(" of #" + info.outer_class_info_index); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
378 |
} |
26389
b389165f2c78
8034861: Incorrect format and indentation of InnerClasses section
jjg
parents:
25874
diff
changeset
|
379 |
print(";"); |
b389165f2c78
8034861: Incorrect format and indentation of InnerClasses section
jjg
parents:
25874
diff
changeset
|
380 |
tab(); |
b389165f2c78
8034861: Incorrect format and indentation of InnerClasses section
jjg
parents:
25874
diff
changeset
|
381 |
print("// "); |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
382 |
if (info.inner_name_index != 0) { |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
383 |
print(getInnerName(constant_pool, info) + "="); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
384 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
385 |
constantWriter.write(info.inner_class_info_index); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
386 |
if (info.outer_class_info_index != 0) { |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
387 |
print(" of "); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
388 |
constantWriter.write(info.outer_class_info_index); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
389 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
390 |
println(); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
391 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
392 |
} |
3546 | 393 |
if (!first) |
394 |
indent(-1); |
|
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
395 |
return null; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
396 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
397 |
|
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
398 |
String getInnerName(ConstantPool constant_pool, InnerClasses_attribute.Info info) { |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
399 |
try { |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
400 |
return info.getInnerName(constant_pool); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
401 |
} catch (ConstantPoolException e) { |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
402 |
return report(e); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
403 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
404 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
405 |
|
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
406 |
private void writeInnerClassHeader() { |
22698 | 407 |
println("InnerClasses:"); |
3546 | 408 |
indent(+1); |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
409 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
410 |
|
36526 | 411 |
@Override |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
412 |
public Void visitLineNumberTable(LineNumberTable_attribute attr, Void ignore) { |
3546 | 413 |
println("LineNumberTable:"); |
414 |
indent(+1); |
|
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
415 |
for (LineNumberTable_attribute.Entry entry: attr.line_number_table) { |
3546 | 416 |
println("line " + entry.line_number + ": " + entry.start_pc); |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
417 |
} |
3546 | 418 |
indent(-1); |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
419 |
return null; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
420 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
421 |
|
36526 | 422 |
@Override |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
423 |
public Void visitLocalVariableTable(LocalVariableTable_attribute attr, Void ignore) { |
3546 | 424 |
println("LocalVariableTable:"); |
425 |
indent(+1); |
|
426 |
println("Start Length Slot Name Signature"); |
|
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
427 |
for (LocalVariableTable_attribute.Entry entry : attr.local_variable_table) { |
18665
49867b085faf
8005552: c.s.t.javap.AttributeWriter.visitLocalVariableTable() uses incorrect format string
vromero
parents:
15720
diff
changeset
|
428 |
println(String.format("%5d %7d %5d %5s %s", |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
429 |
entry.start_pc, entry.length, entry.index, |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
430 |
constantWriter.stringValue(entry.name_index), |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
431 |
constantWriter.stringValue(entry.descriptor_index))); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
432 |
} |
3546 | 433 |
indent(-1); |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
434 |
return null; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
435 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
436 |
|
36526 | 437 |
@Override |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
438 |
public Void visitLocalVariableTypeTable(LocalVariableTypeTable_attribute attr, Void ignore) { |
3546 | 439 |
println("LocalVariableTypeTable:"); |
440 |
indent(+1); |
|
441 |
println("Start Length Slot Name Signature"); |
|
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
442 |
for (LocalVariableTypeTable_attribute.Entry entry : attr.local_variable_table) { |
3546 | 443 |
println(String.format("%5d %7d %5d %5s %s", |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
444 |
entry.start_pc, entry.length, entry.index, |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
445 |
constantWriter.stringValue(entry.name_index), |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
446 |
constantWriter.stringValue(entry.signature_index))); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
447 |
} |
3546 | 448 |
indent(-1); |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
449 |
return null; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
450 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
451 |
|
36526 | 452 |
@Override |
42407
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
453 |
public Void visitModuleMainClass(ModuleMainClass_attribute attr, Void ignore) { |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
454 |
print("ModuleMainClass: #" + attr.main_class_index); |
36526 | 455 |
tab(); |
456 |
print("// " + getJavaClassName(attr)); |
|
457 |
println(); |
|
458 |
return null; |
|
459 |
} |
|
460 |
||
42407
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
461 |
private String getJavaClassName(ModuleMainClass_attribute a) { |
36526 | 462 |
try { |
463 |
return getJavaName(a.getMainClassName(constant_pool)); |
|
464 |
} catch (ConstantPoolException e) { |
|
465 |
return report(e); |
|
466 |
} |
|
467 |
} |
|
468 |
||
15031
c4fad55a5681
8004727: Add compiler support for parameter reflection
jjg
parents:
8042
diff
changeset
|
469 |
private static final String format = "%-31s%s"; |
c4fad55a5681
8004727: Add compiler support for parameter reflection
jjg
parents:
8042
diff
changeset
|
470 |
|
36526 | 471 |
@Override |
15031
c4fad55a5681
8004727: Add compiler support for parameter reflection
jjg
parents:
8042
diff
changeset
|
472 |
public Void visitMethodParameters(MethodParameters_attribute attr, |
c4fad55a5681
8004727: Add compiler support for parameter reflection
jjg
parents:
8042
diff
changeset
|
473 |
Void ignore) { |
c4fad55a5681
8004727: Add compiler support for parameter reflection
jjg
parents:
8042
diff
changeset
|
474 |
final String header = String.format(format, "Name", "Flags"); |
c4fad55a5681
8004727: Add compiler support for parameter reflection
jjg
parents:
8042
diff
changeset
|
475 |
println("MethodParameters:"); |
c4fad55a5681
8004727: Add compiler support for parameter reflection
jjg
parents:
8042
diff
changeset
|
476 |
indent(+1); |
c4fad55a5681
8004727: Add compiler support for parameter reflection
jjg
parents:
8042
diff
changeset
|
477 |
println(header); |
c4fad55a5681
8004727: Add compiler support for parameter reflection
jjg
parents:
8042
diff
changeset
|
478 |
for (MethodParameters_attribute.Entry entry : |
c4fad55a5681
8004727: Add compiler support for parameter reflection
jjg
parents:
8042
diff
changeset
|
479 |
attr.method_parameter_table) { |
15720
e61b2f7a5148
8006345: Report Synthesized Parameters in java.lang.reflect.Parameter API
mcimadamore
parents:
15385
diff
changeset
|
480 |
String namestr = |
e61b2f7a5148
8006345: Report Synthesized Parameters in java.lang.reflect.Parameter API
mcimadamore
parents:
15385
diff
changeset
|
481 |
entry.name_index != 0 ? |
e61b2f7a5148
8006345: Report Synthesized Parameters in java.lang.reflect.Parameter API
mcimadamore
parents:
15385
diff
changeset
|
482 |
constantWriter.stringValue(entry.name_index) : "<no name>"; |
15031
c4fad55a5681
8004727: Add compiler support for parameter reflection
jjg
parents:
8042
diff
changeset
|
483 |
String flagstr = |
15720
e61b2f7a5148
8006345: Report Synthesized Parameters in java.lang.reflect.Parameter API
mcimadamore
parents:
15385
diff
changeset
|
484 |
(0 != (entry.flags & ACC_FINAL) ? "final " : "") + |
e61b2f7a5148
8006345: Report Synthesized Parameters in java.lang.reflect.Parameter API
mcimadamore
parents:
15385
diff
changeset
|
485 |
(0 != (entry.flags & ACC_MANDATED) ? "mandated " : "") + |
e61b2f7a5148
8006345: Report Synthesized Parameters in java.lang.reflect.Parameter API
mcimadamore
parents:
15385
diff
changeset
|
486 |
(0 != (entry.flags & ACC_SYNTHETIC) ? "synthetic" : ""); |
e61b2f7a5148
8006345: Report Synthesized Parameters in java.lang.reflect.Parameter API
mcimadamore
parents:
15385
diff
changeset
|
487 |
println(String.format(format, namestr, flagstr)); |
15031
c4fad55a5681
8004727: Add compiler support for parameter reflection
jjg
parents:
8042
diff
changeset
|
488 |
} |
c4fad55a5681
8004727: Add compiler support for parameter reflection
jjg
parents:
8042
diff
changeset
|
489 |
indent(-1); |
c4fad55a5681
8004727: Add compiler support for parameter reflection
jjg
parents:
8042
diff
changeset
|
490 |
return null; |
c4fad55a5681
8004727: Add compiler support for parameter reflection
jjg
parents:
8042
diff
changeset
|
491 |
} |
c4fad55a5681
8004727: Add compiler support for parameter reflection
jjg
parents:
8042
diff
changeset
|
492 |
|
36526 | 493 |
@Override |
494 |
public Void visitModule(Module_attribute attr, Void ignore) { |
|
495 |
println("Module:"); |
|
496 |
indent(+1); |
|
42407
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
497 |
|
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
498 |
print(attr.module_name); |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
499 |
tab(); |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
500 |
println("// " + constantWriter.stringValue(attr.module_name)); |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
501 |
|
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
502 |
print(String.format("%x", attr.module_flags)); |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
503 |
tab(); |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
504 |
print("// "); |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
505 |
if ((attr.module_flags & Module_attribute.ACC_OPEN) != 0) |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
506 |
print(" ACC_OPEN"); |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
507 |
if ((attr.module_flags & Module_attribute.ACC_MANDATED) != 0) |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
508 |
print(" ACC_MANDATED"); |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
509 |
if ((attr.module_flags & Module_attribute.ACC_SYNTHETIC) != 0) |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
510 |
print(" ACC_SYNTHETIC"); |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
511 |
println(); |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
512 |
|
36526 | 513 |
printRequiresTable(attr); |
514 |
printExportsTable(attr); |
|
42407
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
515 |
printOpensTable(attr); |
36526 | 516 |
printUsesTable(attr); |
517 |
printProvidesTable(attr); |
|
518 |
indent(-1); |
|
519 |
return null; |
|
520 |
} |
|
521 |
||
522 |
protected void printRequiresTable(Module_attribute attr) { |
|
523 |
Module_attribute.RequiresEntry[] entries = attr.requires; |
|
42407
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
524 |
print(entries.length); |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
525 |
tab(); |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
526 |
println("// " + "requires"); |
36526 | 527 |
indent(+1); |
528 |
for (Module_attribute.RequiresEntry e: entries) { |
|
42407
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
529 |
print("#" + e.requires_index + "," + String.format("%x", e.requires_flags)); |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
530 |
tab(); |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
531 |
print("// " + constantWriter.stringValue(e.requires_index)); |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
532 |
if ((e.requires_flags & Module_attribute.ACC_TRANSITIVE) != 0) |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
533 |
print(" ACC_TRANSITIVE"); |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
534 |
if ((e.requires_flags & Module_attribute.ACC_STATIC_PHASE) != 0) |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
535 |
print(" ACC_STATIC_PHASE"); |
36526 | 536 |
if ((e.requires_flags & Module_attribute.ACC_SYNTHETIC) != 0) |
42407
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
537 |
print(" ACC_SYNTHETIC"); |
36526 | 538 |
if ((e.requires_flags & Module_attribute.ACC_MANDATED) != 0) |
42407
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
539 |
print(" ACC_MANDATED"); |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
540 |
println(); |
36526 | 541 |
} |
542 |
indent(-1); |
|
543 |
} |
|
544 |
||
545 |
protected void printExportsTable(Module_attribute attr) { |
|
546 |
Module_attribute.ExportsEntry[] entries = attr.exports; |
|
42407
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
547 |
print(entries.length); |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
548 |
tab(); |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
549 |
println("// exports"); |
36526 | 550 |
indent(+1); |
551 |
for (Module_attribute.ExportsEntry e: entries) { |
|
42407
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
552 |
printExportOpenEntry(e.exports_index, e.exports_flags, e.exports_to_index); |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
553 |
} |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
554 |
indent(-1); |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
555 |
} |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
556 |
|
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
557 |
protected void printOpensTable(Module_attribute attr) { |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
558 |
Module_attribute.OpensEntry[] entries = attr.opens; |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
559 |
print(entries.length); |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
560 |
tab(); |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
561 |
println("// opens"); |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
562 |
indent(+1); |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
563 |
for (Module_attribute.OpensEntry e: entries) { |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
564 |
printExportOpenEntry(e.opens_index, e.opens_flags, e.opens_to_index); |
36526 | 565 |
} |
566 |
indent(-1); |
|
567 |
} |
|
568 |
||
42407
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
569 |
protected void printExportOpenEntry(int index, int flags, int[] to_index) { |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
570 |
print("#" + index + "," + String.format("%x", flags)); |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
571 |
tab(); |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
572 |
print("// "); |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
573 |
print(constantWriter.stringValue(index)); |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
574 |
if ((flags & Module_attribute.ACC_MANDATED) != 0) |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
575 |
print(" ACC_MANDATED"); |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
576 |
if ((flags & Module_attribute.ACC_SYNTHETIC) != 0) |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
577 |
print(" ACC_SYNTHETIC"); |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
578 |
if (to_index.length == 0) { |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
579 |
println(); |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
580 |
} else { |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
581 |
println(" to ... " + to_index.length); |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
582 |
indent(+1); |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
583 |
for (int to: to_index) { |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
584 |
print("#" + to); |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
585 |
tab(); |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
586 |
println("// ... to " + constantWriter.stringValue(to)); |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
587 |
} |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
588 |
indent(-1); |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
589 |
} |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
590 |
} |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
591 |
|
36526 | 592 |
protected void printUsesTable(Module_attribute attr) { |
593 |
int[] entries = attr.uses_index; |
|
42407
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
594 |
print(entries.length); |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
595 |
tab(); |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
596 |
println("// " + "uses"); |
36526 | 597 |
indent(+1); |
598 |
for (int e: entries) { |
|
42407
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
599 |
print("#" + e); |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
600 |
tab(); |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
601 |
println("// " + constantWriter.stringValue(e)); |
36526 | 602 |
} |
603 |
indent(-1); |
|
604 |
} |
|
605 |
||
606 |
protected void printProvidesTable(Module_attribute attr) { |
|
607 |
Module_attribute.ProvidesEntry[] entries = attr.provides; |
|
42407
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
608 |
print(entries.length); |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
609 |
tab(); |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
610 |
println("// " + "provides"); |
36526 | 611 |
indent(+1); |
612 |
for (Module_attribute.ProvidesEntry e: entries) { |
|
42407
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
613 |
print("#" + e.provides_index); |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
614 |
tab(); |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
615 |
print("// "); |
36526 | 616 |
print(constantWriter.stringValue(e.provides_index)); |
42407
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
617 |
println(" with ... " + e.with_count); |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
618 |
indent(+1); |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
619 |
for (int with : e.with_index) { |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
620 |
print("#" + with); |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
621 |
tab(); |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
622 |
println("// ... with " + constantWriter.stringValue(with)); |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
623 |
} |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
624 |
indent(-1); |
36526 | 625 |
} |
626 |
indent(-1); |
|
627 |
} |
|
628 |
||
629 |
@Override |
|
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
630 |
public Void visitRuntimeVisibleAnnotations(RuntimeVisibleAnnotations_attribute attr, Void ignore) { |
3546 | 631 |
println("RuntimeVisibleAnnotations:"); |
632 |
indent(+1); |
|
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
633 |
for (int i = 0; i < attr.annotations.length; i++) { |
3546 | 634 |
print(i + ": "); |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
635 |
annotationWriter.write(attr.annotations[i]); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
636 |
println(); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
637 |
} |
3546 | 638 |
indent(-1); |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
639 |
return null; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
640 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
641 |
|
36526 | 642 |
@Override |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
643 |
public Void visitRuntimeInvisibleAnnotations(RuntimeInvisibleAnnotations_attribute attr, Void ignore) { |
3546 | 644 |
println("RuntimeInvisibleAnnotations:"); |
645 |
indent(+1); |
|
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
646 |
for (int i = 0; i < attr.annotations.length; i++) { |
3546 | 647 |
print(i + ": "); |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
648 |
annotationWriter.write(attr.annotations[i]); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
649 |
println(); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
650 |
} |
3546 | 651 |
indent(-1); |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
652 |
return null; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
653 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
654 |
|
36526 | 655 |
@Override |
15385 | 656 |
public Void visitRuntimeVisibleTypeAnnotations(RuntimeVisibleTypeAnnotations_attribute attr, Void ignore) { |
657 |
println("RuntimeVisibleTypeAnnotations:"); |
|
658 |
indent(+1); |
|
659 |
for (int i = 0; i < attr.annotations.length; i++) { |
|
660 |
print(i + ": "); |
|
661 |
annotationWriter.write(attr.annotations[i]); |
|
662 |
println(); |
|
663 |
} |
|
664 |
indent(-1); |
|
665 |
return null; |
|
666 |
} |
|
667 |
||
36526 | 668 |
@Override |
15385 | 669 |
public Void visitRuntimeInvisibleTypeAnnotations(RuntimeInvisibleTypeAnnotations_attribute attr, Void ignore) { |
670 |
println("RuntimeInvisibleTypeAnnotations:"); |
|
671 |
indent(+1); |
|
672 |
for (int i = 0; i < attr.annotations.length; i++) { |
|
673 |
print(i + ": "); |
|
674 |
annotationWriter.write(attr.annotations[i]); |
|
675 |
println(); |
|
676 |
} |
|
677 |
indent(-1); |
|
678 |
return null; |
|
679 |
} |
|
680 |
||
36526 | 681 |
@Override |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
682 |
public Void visitRuntimeVisibleParameterAnnotations(RuntimeVisibleParameterAnnotations_attribute attr, Void ignore) { |
3546 | 683 |
println("RuntimeVisibleParameterAnnotations:"); |
684 |
indent(+1); |
|
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
685 |
for (int param = 0; param < attr.parameter_annotations.length; param++) { |
3546 | 686 |
println("parameter " + param + ": "); |
687 |
indent(+1); |
|
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
688 |
for (int i = 0; i < attr.parameter_annotations[param].length; i++) { |
3546 | 689 |
print(i + ": "); |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
690 |
annotationWriter.write(attr.parameter_annotations[param][i]); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
691 |
println(); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
692 |
} |
3546 | 693 |
indent(-1); |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
694 |
} |
3546 | 695 |
indent(-1); |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
696 |
return null; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
697 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
698 |
|
36526 | 699 |
@Override |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
700 |
public Void visitRuntimeInvisibleParameterAnnotations(RuntimeInvisibleParameterAnnotations_attribute attr, Void ignore) { |
3546 | 701 |
println("RuntimeInvisibleParameterAnnotations:"); |
702 |
indent(+1); |
|
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
703 |
for (int param = 0; param < attr.parameter_annotations.length; param++) { |
3546 | 704 |
println(param + ": "); |
705 |
indent(+1); |
|
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
706 |
for (int i = 0; i < attr.parameter_annotations[param].length; i++) { |
3546 | 707 |
print(i + ": "); |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
708 |
annotationWriter.write(attr.parameter_annotations[param][i]); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
709 |
println(); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
710 |
} |
3546 | 711 |
indent(-1); |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
712 |
} |
3546 | 713 |
indent(-1); |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
714 |
return null; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
715 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
716 |
|
36526 | 717 |
@Override |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
718 |
public Void visitSignature(Signature_attribute attr, Void ignore) { |
3546 | 719 |
print("Signature: #" + attr.signature_index); |
720 |
tab(); |
|
721 |
println("// " + getSignature(attr)); |
|
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
722 |
return null; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
723 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
724 |
|
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
725 |
String getSignature(Signature_attribute info) { |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
726 |
try { |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
727 |
return info.getSignature(constant_pool); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
728 |
} catch (ConstantPoolException e) { |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
729 |
return report(e); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
730 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
731 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
732 |
|
36526 | 733 |
@Override |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
734 |
public Void visitSourceDebugExtension(SourceDebugExtension_attribute attr, Void ignore) { |
18670
a23df082a854
8019397: javap does not show SourceDebugExtension properly
vromero
parents:
18667
diff
changeset
|
735 |
println("SourceDebugExtension:"); |
a23df082a854
8019397: javap does not show SourceDebugExtension properly
vromero
parents:
18667
diff
changeset
|
736 |
indent(+1); |
a23df082a854
8019397: javap does not show SourceDebugExtension properly
vromero
parents:
18667
diff
changeset
|
737 |
for (String s: attr.getValue().split("[\r\n]+")) { |
a23df082a854
8019397: javap does not show SourceDebugExtension properly
vromero
parents:
18667
diff
changeset
|
738 |
println(s); |
a23df082a854
8019397: javap does not show SourceDebugExtension properly
vromero
parents:
18667
diff
changeset
|
739 |
} |
a23df082a854
8019397: javap does not show SourceDebugExtension properly
vromero
parents:
18667
diff
changeset
|
740 |
indent(-1); |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
741 |
return null; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
742 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
743 |
|
36526 | 744 |
@Override |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
745 |
public Void visitSourceFile(SourceFile_attribute attr, Void ignore) { |
3546 | 746 |
println("SourceFile: \"" + getSourceFile(attr) + "\""); |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
747 |
return null; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
748 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
749 |
|
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
750 |
private String getSourceFile(SourceFile_attribute attr) { |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
751 |
try { |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
752 |
return attr.getSourceFile(constant_pool); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
753 |
} catch (ConstantPoolException e) { |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
754 |
return report(e); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
755 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
756 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
757 |
|
36526 | 758 |
@Override |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
759 |
public Void visitSourceID(SourceID_attribute attr, Void ignore) { |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
760 |
constantWriter.write(attr.sourceID_index); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
761 |
return null; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
762 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
763 |
|
36526 | 764 |
@Override |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
765 |
public Void visitStackMap(StackMap_attribute attr, Void ignore) { |
3546 | 766 |
println("StackMap: number_of_entries = " + attr.number_of_entries); |
767 |
indent(+1); |
|
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
768 |
StackMapTableWriter w = new StackMapTableWriter(); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
769 |
for (StackMapTable_attribute.stack_map_frame entry : attr.entries) { |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
770 |
w.write(entry); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
771 |
} |
3546 | 772 |
indent(-1); |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
773 |
return null; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
774 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
775 |
|
36526 | 776 |
@Override |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
777 |
public Void visitStackMapTable(StackMapTable_attribute attr, Void ignore) { |
3546 | 778 |
println("StackMapTable: number_of_entries = " + attr.number_of_entries); |
779 |
indent(+1); |
|
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
780 |
StackMapTableWriter w = new StackMapTableWriter(); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
781 |
for (StackMapTable_attribute.stack_map_frame entry : attr.entries) { |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
782 |
w.write(entry); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
783 |
} |
3546 | 784 |
indent(-1); |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
785 |
return null; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
786 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
787 |
|
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
788 |
class StackMapTableWriter // also handles CLDC StackMap attributes |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
789 |
implements StackMapTable_attribute.stack_map_frame.Visitor<Void,Void> { |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
790 |
public void write(StackMapTable_attribute.stack_map_frame frame) { |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
791 |
frame.accept(this, null); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
792 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
793 |
|
36526 | 794 |
@Override |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
795 |
public Void visit_same_frame(StackMapTable_attribute.same_frame frame, Void p) { |
23112
4fa26477332d
8033930: Unnecessary new line after the StackMapTable
jjg
parents:
23110
diff
changeset
|
796 |
printHeader(frame, "/* same */"); |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
797 |
return null; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
798 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
799 |
|
36526 | 800 |
@Override |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
801 |
public Void visit_same_locals_1_stack_item_frame(StackMapTable_attribute.same_locals_1_stack_item_frame frame, Void p) { |
23112
4fa26477332d
8033930: Unnecessary new line after the StackMapTable
jjg
parents:
23110
diff
changeset
|
802 |
printHeader(frame, "/* same_locals_1_stack_item */"); |
3546 | 803 |
indent(+1); |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
804 |
printMap("stack", frame.stack); |
3546 | 805 |
indent(-1); |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
806 |
return null; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
807 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
808 |
|
36526 | 809 |
@Override |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
810 |
public Void visit_same_locals_1_stack_item_frame_extended(StackMapTable_attribute.same_locals_1_stack_item_frame_extended frame, Void p) { |
23112
4fa26477332d
8033930: Unnecessary new line after the StackMapTable
jjg
parents:
23110
diff
changeset
|
811 |
printHeader(frame, "/* same_locals_1_stack_item_frame_extended */"); |
3546 | 812 |
indent(+1); |
813 |
println("offset_delta = " + frame.offset_delta); |
|
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
814 |
printMap("stack", frame.stack); |
3546 | 815 |
indent(-1); |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
816 |
return null; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
817 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
818 |
|
36526 | 819 |
@Override |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
820 |
public Void visit_chop_frame(StackMapTable_attribute.chop_frame frame, Void p) { |
23112
4fa26477332d
8033930: Unnecessary new line after the StackMapTable
jjg
parents:
23110
diff
changeset
|
821 |
printHeader(frame, "/* chop */"); |
3546 | 822 |
indent(+1); |
823 |
println("offset_delta = " + frame.offset_delta); |
|
824 |
indent(-1); |
|
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
825 |
return null; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
826 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
827 |
|
36526 | 828 |
@Override |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
829 |
public Void visit_same_frame_extended(StackMapTable_attribute.same_frame_extended frame, Void p) { |
23112
4fa26477332d
8033930: Unnecessary new line after the StackMapTable
jjg
parents:
23110
diff
changeset
|
830 |
printHeader(frame, "/* same_frame_extended */"); |
3546 | 831 |
indent(+1); |
832 |
println("offset_delta = " + frame.offset_delta); |
|
833 |
indent(-1); |
|
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
834 |
return null; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
835 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
836 |
|
36526 | 837 |
@Override |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
838 |
public Void visit_append_frame(StackMapTable_attribute.append_frame frame, Void p) { |
23112
4fa26477332d
8033930: Unnecessary new line after the StackMapTable
jjg
parents:
23110
diff
changeset
|
839 |
printHeader(frame, "/* append */"); |
18665
49867b085faf
8005552: c.s.t.javap.AttributeWriter.visitLocalVariableTable() uses incorrect format string
vromero
parents:
15720
diff
changeset
|
840 |
indent(+1); |
49867b085faf
8005552: c.s.t.javap.AttributeWriter.visitLocalVariableTable() uses incorrect format string
vromero
parents:
15720
diff
changeset
|
841 |
println("offset_delta = " + frame.offset_delta); |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
842 |
printMap("locals", frame.locals); |
23110 | 843 |
indent(-1); |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
844 |
return null; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
845 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
846 |
|
36526 | 847 |
@Override |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
848 |
public Void visit_full_frame(StackMapTable_attribute.full_frame frame, Void p) { |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
849 |
if (frame instanceof StackMap_attribute.stack_map_frame) { |
23112
4fa26477332d
8033930: Unnecessary new line after the StackMapTable
jjg
parents:
23110
diff
changeset
|
850 |
printHeader(frame, "offset = " + frame.offset_delta); |
3546 | 851 |
indent(+1); |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
852 |
} else { |
23112
4fa26477332d
8033930: Unnecessary new line after the StackMapTable
jjg
parents:
23110
diff
changeset
|
853 |
printHeader(frame, "/* full_frame */"); |
3546 | 854 |
indent(+1); |
855 |
println("offset_delta = " + frame.offset_delta); |
|
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
856 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
857 |
printMap("locals", frame.locals); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
858 |
printMap("stack", frame.stack); |
3546 | 859 |
indent(-1); |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
860 |
return null; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
861 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
862 |
|
23112
4fa26477332d
8033930: Unnecessary new line after the StackMapTable
jjg
parents:
23110
diff
changeset
|
863 |
void printHeader(StackMapTable_attribute.stack_map_frame frame, String extra) { |
4fa26477332d
8033930: Unnecessary new line after the StackMapTable
jjg
parents:
23110
diff
changeset
|
864 |
print("frame_type = " + frame.frame_type + " "); |
4fa26477332d
8033930: Unnecessary new line after the StackMapTable
jjg
parents:
23110
diff
changeset
|
865 |
println(extra); |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
866 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
867 |
|
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
868 |
void printMap(String name, StackMapTable_attribute.verification_type_info[] map) { |
3546 | 869 |
print(name + " = ["); |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
870 |
for (int i = 0; i < map.length; i++) { |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
871 |
StackMapTable_attribute.verification_type_info info = map[i]; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
872 |
int tag = info.tag; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
873 |
switch (tag) { |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
874 |
case StackMapTable_attribute.verification_type_info.ITEM_Object: |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
875 |
print(" "); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
876 |
constantWriter.write(((StackMapTable_attribute.Object_variable_info) info).cpool_index); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
877 |
break; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
878 |
case StackMapTable_attribute.verification_type_info.ITEM_Uninitialized: |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
879 |
print(" " + mapTypeName(tag)); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
880 |
print(" " + ((StackMapTable_attribute.Uninitialized_variable_info) info).offset); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
881 |
break; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
882 |
default: |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
883 |
print(" " + mapTypeName(tag)); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
884 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
885 |
print(i == (map.length - 1) ? " " : ","); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
886 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
887 |
println("]"); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
888 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
889 |
|
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
890 |
String mapTypeName(int tag) { |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
891 |
switch (tag) { |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
892 |
case StackMapTable_attribute.verification_type_info.ITEM_Top: |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
893 |
return "top"; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
894 |
|
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
895 |
case StackMapTable_attribute.verification_type_info.ITEM_Integer: |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
896 |
return "int"; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
897 |
|
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
898 |
case StackMapTable_attribute.verification_type_info.ITEM_Float: |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
899 |
return "float"; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
900 |
|
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
901 |
case StackMapTable_attribute.verification_type_info.ITEM_Long: |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
902 |
return "long"; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
903 |
|
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
904 |
case StackMapTable_attribute.verification_type_info.ITEM_Double: |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
905 |
return "double"; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
906 |
|
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
907 |
case StackMapTable_attribute.verification_type_info.ITEM_Null: |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
908 |
return "null"; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
909 |
|
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
910 |
case StackMapTable_attribute.verification_type_info.ITEM_UninitializedThis: |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
911 |
return "this"; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
912 |
|
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
913 |
case StackMapTable_attribute.verification_type_info.ITEM_Object: |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
914 |
return "CP"; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
915 |
|
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
916 |
case StackMapTable_attribute.verification_type_info.ITEM_Uninitialized: |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
917 |
return "uninitialized"; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
918 |
|
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
919 |
default: |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
920 |
report("unrecognized verification_type_info tag: " + tag); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
921 |
return "[tag:" + tag + "]"; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
922 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
923 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
924 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
925 |
|
36526 | 926 |
@Override |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
927 |
public Void visitSynthetic(Synthetic_attribute attr, Void ignore) { |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
928 |
println("Synthetic: true"); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
929 |
return null; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
930 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
931 |
|
36526 | 932 |
@Override |
42407
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
933 |
public Void visitModuleTarget(ModuleTarget_attribute attr, Void ignore) { |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
934 |
println("ModuleTarget:"); |
36526 | 935 |
indent(+1); |
936 |
print("os_name: #" + attr.os_name_index); |
|
937 |
if (attr.os_name_index != 0) { |
|
938 |
tab(); |
|
939 |
print("// " + getOSName(attr)); |
|
940 |
} |
|
941 |
println(); |
|
942 |
print("os_arch: #" + attr.os_arch_index); |
|
943 |
if (attr.os_arch_index != 0) { |
|
944 |
tab(); |
|
945 |
print("// " + getOSArch(attr)); |
|
946 |
} |
|
947 |
println(); |
|
948 |
print("os_version: #" + attr.os_version_index); |
|
949 |
if (attr.os_version_index != 0) { |
|
950 |
tab(); |
|
951 |
print("// " + getOSVersion(attr)); |
|
952 |
} |
|
953 |
println(); |
|
954 |
indent(-1); |
|
955 |
return null; |
|
956 |
} |
|
957 |
||
42407
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
958 |
private String getOSName(ModuleTarget_attribute attr) { |
36526 | 959 |
try { |
960 |
return constant_pool.getUTF8Value(attr.os_name_index); |
|
961 |
} catch (ConstantPoolException e) { |
|
962 |
return report(e); |
|
963 |
} |
|
964 |
} |
|
965 |
||
42407
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
966 |
private String getOSArch(ModuleTarget_attribute attr) { |
36526 | 967 |
try { |
968 |
return constant_pool.getUTF8Value(attr.os_arch_index); |
|
969 |
} catch (ConstantPoolException e) { |
|
970 |
return report(e); |
|
971 |
} |
|
972 |
} |
|
973 |
||
42407
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
974 |
private String getOSVersion(ModuleTarget_attribute attr) { |
36526 | 975 |
try { |
976 |
return constant_pool.getUTF8Value(attr.os_version_index); |
|
977 |
} catch (ConstantPoolException e) { |
|
978 |
return report(e); |
|
979 |
} |
|
980 |
} |
|
981 |
||
982 |
@Override |
|
42407
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
983 |
public Void visitModuleVersion(ModuleVersion_attribute attr, Void ignore) { |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
984 |
print("ModuleVersion: #" + attr.version_index); |
36526 | 985 |
indent(+1); |
986 |
tab(); |
|
987 |
println("// " + getVersion(attr)); |
|
988 |
indent(-1); |
|
989 |
return null; |
|
990 |
} |
|
991 |
||
42407
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
992 |
private String getVersion(ModuleVersion_attribute attr) { |
36526 | 993 |
try { |
994 |
return constant_pool.getUTF8Value(attr.version_index); |
|
995 |
} catch (ConstantPoolException e) { |
|
996 |
return report(e); |
|
997 |
} |
|
998 |
} |
|
999 |
||
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
1000 |
static String getJavaName(String name) { |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
1001 |
return name.replace('/', '.'); |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
1002 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
1003 |
|
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
1004 |
String toHex(byte b, int w) { |
22698 | 1005 |
return toHex(b & 0xff, w); |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
1006 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
1007 |
|
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
1008 |
static String toHex(int i) { |
22153
f9f06fcca59d
8029800: Flags.java uses String.toLowerCase without specifying Locale
jlahoda
parents:
18670
diff
changeset
|
1009 |
return StringUtils.toUpperCase(Integer.toString(i, 16)); |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
1010 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
1011 |
|
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
1012 |
static String toHex(int i, int w) { |
22153
f9f06fcca59d
8029800: Flags.java uses String.toLowerCase without specifying Locale
jlahoda
parents:
18670
diff
changeset
|
1013 |
String s = StringUtils.toUpperCase(Integer.toHexString(i)); |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
1014 |
while (s.length() < w) |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
1015 |
s = "0" + s; |
22153
f9f06fcca59d
8029800: Flags.java uses String.toLowerCase without specifying Locale
jlahoda
parents:
18670
diff
changeset
|
1016 |
return StringUtils.toUpperCase(s); |
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
1017 |
} |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
1018 |
|
42407
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
1019 |
static String toHex(byte[] ba) { |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
1020 |
StringBuilder sb = new StringBuilder(ba.length); |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
1021 |
for (byte b: ba) { |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
1022 |
sb.append(String.format("%02x", b & 0xff)); |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
1023 |
} |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
1024 |
return sb.toString(); |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
1025 |
} |
f3702cff2933
8169069: Module system implementation refresh (11/2016)
alanb
parents:
36526
diff
changeset
|
1026 |
|
36526 | 1027 |
private final AnnotationWriter annotationWriter; |
1028 |
private final CodeWriter codeWriter; |
|
1029 |
private final ConstantWriter constantWriter; |
|
1030 |
private final Options options; |
|
727
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
1031 |
|
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
1032 |
private ConstantPool constant_pool; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
1033 |
private Object owner; |
cb50c1ae7bab
4075303: Use javap to enquire aboput a specific inner class
jjg
parents:
diff
changeset
|
1034 |
} |