Skip to content

Commit 0a7516d

Browse files
4075303: Use javap to enquire aboput a specific inner class
4348375: Javap is not internationalized 4459541: "javap -l" shows line numbers as signed short; they should be unsigned 4501660: change diagnostic of -help as 'print this help message and exit' 4776241: unused source file in javap.. 4870651: javap should recognize generics, varargs, enum 4876942: javap invoked without args does not print help screen 4880663: javap could output whitespace between class name and opening brace 4975569: javap doesn't print new flag bits 6271787: javap dumps LocalVariableTypeTable attribute in hex, needs to print a table 6305779: javap: support annotations 6439940: Clean up javap implementation 6469569: wrong check of searchpath in JavapEnvironment 6474890: javap does not open .zip files in -classpath 6587786: Javap throws error : "ERROR:Could not find <classname>" for JRE classes 6622215: javap ignores certain relevant access flags 6622216: javap names some attributes incorrectly 6622232: javap gets whitespace confused 6622260: javap prints negative bytes incorrectly in hex Reviewed-by: ksrini
1 parent e3ba3ec commit 0a7516d

87 files changed

Lines changed: 11690 additions & 8 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

langtools/make/build.properties

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ javac.no.jdk.warnings = -XDignore.symbol.file=true
6666
# set the following to -version to verify the versions of javac being used
6767
javac.version.opt =
6868
# in time, there should be no exceptions to -Xlint:all
69-
javac.lint.opts = -Xlint:all,-unchecked,-deprecation,-fallthrough,-cast,-serial -Werror
69+
javac.lint.opts = -Xlint:all,-deprecation,-fallthrough,-serial -Werror
7070

7171
# options for the <javadoc> task for javac
7272
javadoc.jls3.url=http://java.sun.com/docs/books/jls/
@@ -120,6 +120,8 @@ javah.tests = \
120120
tools/javah/
121121

122122
javap.includes = \
123+
com/sun/tools/classfile/ \
124+
com/sun/tools/javap/ \
123125
sun/tools/javap/
124126

125127
javap.tests = \

langtools/make/build.xml

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@
136136
<arg value="-html:${findbugs.home}/src/xsl/fancy.xsl"/>
137137
<arg value="${dist.findbugs.dir}/findbugs.xml"/>
138138
<redirector output="${dist.findbugs.dir}/findbugs.html"/>
139-
</exec>
139+
</exec>
140140
</target>
141141

142142
<target name="coverage" depends="-def-cobertura,build-all-classes,instrument-classes,jtreg,coverage-report"/>
@@ -301,14 +301,15 @@
301301
jarmainclass="sun.tools.javap.Main"/>
302302
</target>
303303

304-
<target name="build-classes-javap" depends="build-bootstrap-javac">
304+
<target name="build-classes-javap" depends="build-classes-javac">
305305
<build-classes name="javap" includes="${javap.includes}"/>
306306
</target>
307307

308-
<target name="build-javap" depends="build-bootstrap-javac">
308+
<target name="build-javap" depends="build-javac">
309309
<build-tool name="javap"
310310
includes="${javap.includes}"
311-
jarmainclass="sun.tools.javap.Main"/>
311+
jarmainclass="sun.tools.javap.Main"
312+
jarclasspath="javac.jar"/>
312313
</target>
313314

314315
<!-- (no javadoc for javap) -->
@@ -480,7 +481,7 @@
480481
destdir="@{gensrc.dir}"
481482
includes="@{includes}"/>
482483
<copy todir="@{gensrc.dir}">
483-
<fileset dir="${src.classes.dir}" includes="${javac.includes}"/>
484+
<fileset dir="${src.classes.dir}" includes="@{includes}"/>
484485
<globmapper from="*.properties-template" to="*.properties"/>
485486
<filterset begintoken="$(" endtoken=")">
486487
<filter token="JDK_VERSION" value="${jdk.version}"/>

langtools/make/netbeans/common/standard-ide-actions-no-javadoc.ent

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,5 +157,5 @@
157157
</action>
158158

159159
<action name="javadoc">
160-
<target>javadoc-nb</target>
160+
<target>-javadoc-nb</target>
161161
</action>

langtools/make/netbeans/common/standard-ide-actions.ent

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,5 +157,5 @@
157157
</action>
158158

159159
<action name="javadoc">
160-
<target>javadoc-nb</target>
160+
<target>-javadoc-nb</target>
161161
</action>
Lines changed: 254 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,254 @@
1+
/*
2+
* Copyright 2007 Sun Microsystems, Inc. All Rights Reserved.
3+
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4+
*
5+
* This code is free software; you can redistribute it and/or modify it
6+
* under the terms of the GNU General Public License version 2 only, as
7+
* published by the Free Software Foundation. Sun designates this
8+
* particular file as subject to the "Classpath" exception as provided
9+
* by Sun in the LICENSE file that accompanied this code.
10+
*
11+
* This code is distributed in the hope that it will be useful, but WITHOUT
12+
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13+
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14+
* version 2 for more details (a copy is included in the LICENSE file that
15+
* accompanied this code).
16+
*
17+
* You should have received a copy of the GNU General Public License version
18+
* 2 along with this work; if not, write to the Free Software Foundation,
19+
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20+
*
21+
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
22+
* CA 95054 USA or visit www.sun.com if you need additional information or
23+
* have any questions.
24+
*/
25+
26+
package com.sun.tools.classfile;
27+
28+
import java.io.IOException;
29+
import java.util.LinkedHashSet;
30+
import java.util.Set;
31+
32+
/**
33+
* See JVMS3, sections 4.2, 4.6, 4.7.
34+
*
35+
* <p><b>This is NOT part of any API supported by Sun Microsystems. If
36+
* you write code that depends on this, you do so at your own risk.
37+
* This code and its internal interfaces are subject to change or
38+
* deletion without notice.</b>
39+
*/
40+
public class AccessFlags {
41+
public static final int ACC_PUBLIC = 0x0001; // class, inner, field, method
42+
public static final int ACC_PRIVATE = 0x0002; // inner, field, method
43+
public static final int ACC_PROTECTED = 0x0004; // inner, field, method
44+
public static final int ACC_STATIC = 0x0008; // inner, field, method
45+
public static final int ACC_FINAL = 0x0010; // class, inner, field, method
46+
public static final int ACC_SUPER = 0x0020; // class
47+
public static final int ACC_SYNCHRONIZED = 0x0020; // method
48+
public static final int ACC_VOLATILE = 0x0040; // field
49+
public static final int ACC_BRIDGE = 0x0040; // method
50+
public static final int ACC_TRANSIENT = 0x0080; // field
51+
public static final int ACC_VARARGS = 0x0080; // method
52+
public static final int ACC_NATIVE = 0x0100; // method
53+
public static final int ACC_INTERFACE = 0x0200; // class, inner
54+
public static final int ACC_ABSTRACT = 0x0400; // class, inner, method
55+
public static final int ACC_STRICT = 0x0800; // method
56+
public static final int ACC_SYNTHETIC = 0x1000; // class, inner, field, method
57+
public static final int ACC_ANNOTATION = 0x2000; // class, inner
58+
public static final int ACC_ENUM = 0x4000; // class, inner, field
59+
public static final int ACC_MODULE = 0x8000; // class, inner, field, method
60+
61+
private static enum Type { Class, InnerClass, Field, Method};
62+
63+
AccessFlags(ClassReader cr) throws IOException {
64+
this(cr.readUnsignedShort());
65+
}
66+
67+
public AccessFlags(int flags) {
68+
this.flags = flags;
69+
}
70+
71+
public AccessFlags ignore(int mask) {
72+
return new AccessFlags(flags & ~mask);
73+
}
74+
75+
public boolean is(int mask) {
76+
return (flags & mask) != 0;
77+
}
78+
79+
private static final int[] classModifiers = {
80+
ACC_PUBLIC, ACC_FINAL, ACC_ABSTRACT, ACC_MODULE
81+
};
82+
83+
private static final int[] classFlags = {
84+
ACC_PUBLIC, ACC_FINAL, ACC_SUPER, ACC_INTERFACE, ACC_ABSTRACT,
85+
ACC_SYNTHETIC, ACC_ANNOTATION, ACC_ENUM, ACC_MODULE
86+
};
87+
88+
public Set<String> getClassModifiers() {
89+
int f = ((flags & ACC_INTERFACE) != 0 ? flags & ~ACC_ABSTRACT : flags);
90+
return getModifiers(f, classModifiers, Type.Class);
91+
}
92+
93+
public Set<String> getClassFlags() {
94+
return getFlags(classFlags, Type.Class);
95+
}
96+
97+
private static final int[] innerClassModifiers = {
98+
ACC_PUBLIC, ACC_PRIVATE, ACC_PROTECTED, ACC_STATIC, ACC_FINAL,
99+
ACC_ABSTRACT, ACC_MODULE
100+
};
101+
102+
private static final int[] innerClassFlags = {
103+
ACC_PUBLIC, ACC_PRIVATE, ACC_PROTECTED, ACC_STATIC, ACC_FINAL, ACC_SUPER,
104+
ACC_INTERFACE, ACC_ABSTRACT, ACC_SYNTHETIC, ACC_ANNOTATION, ACC_ENUM, ACC_MODULE
105+
};
106+
107+
public Set<String> getInnerClassModifiers() {
108+
int f = ((flags & ACC_INTERFACE) != 0 ? flags & ~ACC_ABSTRACT : flags);
109+
return getModifiers(f, innerClassModifiers, Type.InnerClass);
110+
}
111+
112+
public Set<String> getInnerClassFlags() {
113+
return getFlags(innerClassFlags, Type.InnerClass);
114+
}
115+
116+
private static final int[] fieldModifiers = {
117+
ACC_PUBLIC, ACC_PRIVATE, ACC_PROTECTED, ACC_STATIC, ACC_FINAL,
118+
ACC_VOLATILE, ACC_TRANSIENT, ACC_MODULE
119+
};
120+
121+
private static final int[] fieldFlags = {
122+
ACC_PUBLIC, ACC_PRIVATE, ACC_PROTECTED, ACC_STATIC, ACC_FINAL,
123+
ACC_VOLATILE, ACC_TRANSIENT, ACC_SYNTHETIC, ACC_ENUM, ACC_MODULE
124+
};
125+
126+
public Set<String> getFieldModifiers() {
127+
return getModifiers(fieldModifiers, Type.Field);
128+
}
129+
130+
public Set<String> getFieldFlags() {
131+
return getFlags(fieldFlags, Type.Field);
132+
}
133+
134+
private static final int[] methodModifiers = {
135+
ACC_PUBLIC, ACC_PRIVATE, ACC_PROTECTED, ACC_STATIC, ACC_FINAL,
136+
ACC_SYNCHRONIZED, ACC_NATIVE, ACC_ABSTRACT, ACC_STRICT, ACC_MODULE
137+
};
138+
139+
private static final int[] methodFlags = {
140+
ACC_PUBLIC, ACC_PRIVATE, ACC_PROTECTED, ACC_STATIC, ACC_FINAL,
141+
ACC_SYNCHRONIZED, ACC_BRIDGE, ACC_VARARGS, ACC_NATIVE, ACC_ABSTRACT,
142+
ACC_STRICT, ACC_SYNTHETIC, ACC_MODULE
143+
};
144+
145+
public Set<String> getMethodModifiers() {
146+
return getModifiers(methodModifiers, Type.Method);
147+
}
148+
149+
public Set<String> getMethodFlags() {
150+
return getFlags(methodFlags, Type.Method);
151+
}
152+
153+
private Set<String> getModifiers(int[] modifierFlags, Type t) {
154+
return getModifiers(flags, modifierFlags, t);
155+
}
156+
157+
private static Set<String> getModifiers(int flags, int[] modifierFlags, Type t) {
158+
Set<String> s = new LinkedHashSet<String>();
159+
for (int m: modifierFlags) {
160+
if ((flags & m) != 0)
161+
s.add(flagToModifier(m, t));
162+
}
163+
return s;
164+
}
165+
166+
private Set<String> getFlags(int[] expectedFlags, Type t) {
167+
Set<String> s = new LinkedHashSet<String>();
168+
int f = flags;
169+
for (int e: expectedFlags) {
170+
if ((f & e) != 0) {
171+
s.add(flagToName(e, t));
172+
f = f & ~e;
173+
}
174+
}
175+
while (f != 0) {
176+
int bit = Integer.highestOneBit(f);
177+
s.add("0x" + Integer.toHexString(bit));
178+
f = f & ~bit;
179+
}
180+
return s;
181+
}
182+
183+
private static String flagToModifier(int flag, Type t) {
184+
switch (flag) {
185+
case ACC_PUBLIC:
186+
return "public";
187+
case ACC_PRIVATE:
188+
return "private";
189+
case ACC_PROTECTED:
190+
return "protected";
191+
case ACC_STATIC:
192+
return "static";
193+
case ACC_FINAL:
194+
return "final";
195+
case ACC_SYNCHRONIZED:
196+
return "synchronized";
197+
case 0x80:
198+
return (t == Type.Field ? "transient" : null);
199+
case ACC_VOLATILE:
200+
return "volatile";
201+
case ACC_NATIVE:
202+
return "native";
203+
case ACC_ABSTRACT:
204+
return "abstract";
205+
case ACC_STRICT:
206+
return "strictfp";
207+
case ACC_MODULE:
208+
return "module";
209+
default:
210+
return null;
211+
}
212+
}
213+
214+
private static String flagToName(int flag, Type t) {
215+
switch (flag) {
216+
case ACC_PUBLIC:
217+
return "ACC_PUBLIC";
218+
case ACC_PRIVATE:
219+
return "ACC_PRIVATE";
220+
case ACC_PROTECTED:
221+
return "ACC_PROTECTED";
222+
case ACC_STATIC:
223+
return "ACC_STATIC";
224+
case ACC_FINAL:
225+
return "ACC_FINAL";
226+
case 0x20:
227+
return (t == Type.Class ? "ACC_SUPER" : "ACC_SYNCHRONIZED");
228+
case 0x40:
229+
return (t == Type.Field ? "ACC_VOLATILE" : "ACC_BRIDGE");
230+
case 0x80:
231+
return (t == Type.Field ? "ACC_TRANSIENT" : "ACC_VARARGS");
232+
case ACC_NATIVE:
233+
return "ACC_NATIVE";
234+
case ACC_INTERFACE:
235+
return "ACC_INTERFACE";
236+
case ACC_ABSTRACT:
237+
return "ACC_ABSTRACT";
238+
case ACC_STRICT:
239+
return "ACC_STRICT";
240+
case ACC_SYNTHETIC:
241+
return "ACC_SYNTHETIC";
242+
case ACC_ANNOTATION:
243+
return "ACC_ANNOTATION";
244+
case ACC_ENUM:
245+
return "ACC_ENUM";
246+
case ACC_MODULE:
247+
return "ACC_MODULE";
248+
default:
249+
return null;
250+
}
251+
}
252+
253+
final int flags;
254+
}

0 commit comments

Comments
 (0)