提交 66327e49 编写于 作者: L lana

Merge

......@@ -248,4 +248,9 @@ a345cf28faca8cc49a28241a0a197fd520d25beb jdk8-b123
d5aab8300d3b51e8043ab5fe5832ef6c6cbb5552 jdk8u20-b00
436176151e85455e74cd1441a2ba96e791c56785 jdk8-b124
79dc4b992c0a385c1364592801781b747b85c6ca jdk8u20-b01
436176151e85455e74cd1441a2ba96e791c56785 jdk8-b125
ba24b63043626003929927f091e8b84190f39261 jdk8-b126
bb69217ed81202b1a490dc7150dc7cd073689341 jdk8-b127
09cdd3b493c0d13dc32206e5f12bb1a2f7465687 jdk8-b128
8fe7202d3c38784f3f14368e3954fc4e0394afa4 jdk8-b129
26b33a6ea08810853af37e81c9b435465b289c98 jdk8u20-b02
/*
* Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
......@@ -1172,8 +1172,10 @@ public class DocCommentParser {
DCText string = quotedString();
if (string != null) {
skipWhitespace();
if (ch == '@')
if (ch == '@'
|| ch == EOI && bp == buf.length - 1) {
return m.at(pos).See(List.<DCTree>of(string));
}
}
break;
......
/*
* Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2001, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
......@@ -30,6 +30,7 @@ import java.io.IOException;
import java.util.Collection;
import java.util.EnumSet;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import javax.tools.JavaFileManager.Location;
......@@ -238,10 +239,13 @@ public class JavadocTool extends com.sun.tools.javac.main.JavaCompiler {
files = lb.toList();
}
Set<JavaFileObject> ufiles = new HashSet<>();
for (JavaFileObject fo : files) {
// messager.notice("main.Loading_source_file", fn);
trees.append(parse(fo));
hasFiles = true;
if (ufiles.add(fo)) { // ignore duplicates
// messager.notice("main.Loading_source_file", fn);
trees.append(parse(fo));
hasFiles = true;
}
}
if (!hasFiles) {
......
......@@ -547,7 +547,6 @@ public class AttributeWriter extends BasicWriter
for (StackMapTable_attribute.stack_map_frame entry : attr.entries) {
w.write(entry);
}
println();
indent(-1);
return null;
}
......@@ -559,7 +558,6 @@ public class AttributeWriter extends BasicWriter
for (StackMapTable_attribute.stack_map_frame entry : attr.entries) {
w.write(entry);
}
println();
indent(-1);
return null;
}
......@@ -571,14 +569,12 @@ public class AttributeWriter extends BasicWriter
}
public Void visit_same_frame(StackMapTable_attribute.same_frame frame, Void p) {
printHeader(frame);
println(" /* same */");
printHeader(frame, "/* same */");
return null;
}
public Void visit_same_locals_1_stack_item_frame(StackMapTable_attribute.same_locals_1_stack_item_frame frame, Void p) {
printHeader(frame);
println(" /* same_locals_1_stack_item */");
printHeader(frame, "/* same_locals_1_stack_item */");
indent(+1);
printMap("stack", frame.stack);
indent(-1);
......@@ -586,8 +582,7 @@ public class AttributeWriter extends BasicWriter
}
public Void visit_same_locals_1_stack_item_frame_extended(StackMapTable_attribute.same_locals_1_stack_item_frame_extended frame, Void p) {
printHeader(frame);
println(" /* same_locals_1_stack_item_frame_extended */");
printHeader(frame, "/* same_locals_1_stack_item_frame_extended */");
indent(+1);
println("offset_delta = " + frame.offset_delta);
printMap("stack", frame.stack);
......@@ -596,8 +591,7 @@ public class AttributeWriter extends BasicWriter
}
public Void visit_chop_frame(StackMapTable_attribute.chop_frame frame, Void p) {
printHeader(frame);
println(" /* chop */");
printHeader(frame, "/* chop */");
indent(+1);
println("offset_delta = " + frame.offset_delta);
indent(-1);
......@@ -605,8 +599,7 @@ public class AttributeWriter extends BasicWriter
}
public Void visit_same_frame_extended(StackMapTable_attribute.same_frame_extended frame, Void p) {
printHeader(frame);
println(" /* same_frame_extended */");
printHeader(frame, "/* same_frame_extended */");
indent(+1);
println("offset_delta = " + frame.offset_delta);
indent(-1);
......@@ -614,21 +607,20 @@ public class AttributeWriter extends BasicWriter
}
public Void visit_append_frame(StackMapTable_attribute.append_frame frame, Void p) {
printHeader(frame);
println(" /* append */");
printHeader(frame, "/* append */");
indent(+1);
println("offset_delta = " + frame.offset_delta);
printMap("locals", frame.locals);
indent(-1);
return null;
}
public Void visit_full_frame(StackMapTable_attribute.full_frame frame, Void p) {
printHeader(frame);
if (frame instanceof StackMap_attribute.stack_map_frame) {
printHeader(frame, "offset = " + frame.offset_delta);
indent(+1);
println(" offset = " + frame.offset_delta);
} else {
println(" /* full_frame */");
printHeader(frame, "/* full_frame */");
indent(+1);
println("offset_delta = " + frame.offset_delta);
}
......@@ -638,8 +630,9 @@ public class AttributeWriter extends BasicWriter
return null;
}
void printHeader(StackMapTable_attribute.stack_map_frame frame) {
print(" frame_type = " + frame.frame_type);
void printHeader(StackMapTable_attribute.stack_map_frame frame, String extra) {
print("frame_type = " + frame.frame_type + " ");
println(extra);
}
void printMap(String name, StackMapTable_attribute.verification_type_info[] map) {
......
......@@ -151,12 +151,22 @@ public class BasicWriter {
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
switch (c) {
case ' ':
pendingSpaces++;
break;
case '\n':
println();
break;
default:
if (buffer.length() == 0)
indent();
if (pendingSpaces > 0) {
for (int sp = 0; sp < pendingSpaces; sp++)
buffer.append(' ');
pendingSpaces = 0;
}
buffer.append(c);
}
}
......@@ -164,6 +174,8 @@ public class BasicWriter {
}
protected void println() {
// ignore/discard pending spaces
pendingSpaces = 0;
out.println(buffer);
buffer.setLength(0);
}
......@@ -173,26 +185,21 @@ public class BasicWriter {
}
protected void tab() {
if (buffer.length() == 0)
indent();
space(indentCount * indentWidth + tabColumn - buffer.length());
int col = indentCount * indentWidth + tabColumn;
pendingSpaces += (col <= buffer.length() ? 1 : col - buffer.length());
}
private void indent() {
space(indentCount * indentWidth);
}
private void space(int n) {
for (int i = 0; i < n; i++)
buffer.append(' ');
pendingSpaces += (indentCount * indentWidth);
}
private PrintWriter out;
private StringBuilder buffer;
private final PrintWriter out;
private final StringBuilder buffer;
private int indentCount;
private int indentWidth;
private int tabColumn;
private final int indentWidth;
private final int tabColumn;
private boolean pendingNewline;
private int pendingSpaces;
}
}
/*
* Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
......@@ -385,6 +385,8 @@ public class ClassWriter extends BasicWriter {
indent(+1);
boolean showBlank = false;
if (options.showDescriptors)
println("descriptor: " + getValue(f.descriptor));
......@@ -394,12 +396,12 @@ public class ClassWriter extends BasicWriter {
if (options.showAllAttrs) {
for (Attribute attr: f.attributes)
attrWriter.write(f, attr, constant_pool);
println();
showBlank = true;
}
indent(-1);
if (options.showDisassembled || options.showLineAndLocalVariableTables)
if (showBlank || options.showDisassembled || options.showLineAndLocalVariableTables)
println();
}
......@@ -498,27 +500,23 @@ public class ClassWriter extends BasicWriter {
report("Unexpected or invalid value for Code attribute");
}
if (options.showDisassembled && !options.showAllAttrs) {
if (code != null) {
if (options.showAllAttrs) {
Attribute[] attrs = m.attributes.attrs;
for (Attribute attr: attrs)
attrWriter.write(m, attr, constant_pool);
} else if (code != null) {
if (options.showDisassembled) {
println("Code:");
codeWriter.writeInstrs(code);
codeWriter.writeExceptionTable(code);
}
}
if (options.showLineAndLocalVariableTables) {
if (code != null) {
if (options.showLineAndLocalVariableTables) {
attrWriter.write(code, code.attributes.get(Attribute.LineNumberTable), constant_pool);
attrWriter.write(code, code.attributes.get(Attribute.LocalVariableTable), constant_pool);
}
}
if (options.showAllAttrs) {
Attribute[] attrs = m.attributes.attrs;
for (Attribute attr: attrs)
attrWriter.write(m, attr, constant_pool);
}
indent(-1);
// set pendingNewline to write a newline before the next method (if any)
......
......@@ -309,7 +309,9 @@ public class JavapTask implements DisassemblerTool.DisassemblerTask, Messages {
void process(JavapTask task, String opt, String arg) throws BadArgs {
int sep = opt.indexOf(":");
try {
task.options.indentWidth = Integer.valueOf(opt.substring(sep + 1));
int i = Integer.valueOf(opt.substring(sep + 1));
if (i > 0) // silently ignore invalid values
task.options.indentWidth = i;
} catch (NumberFormatException e) {
}
}
......@@ -325,7 +327,9 @@ public class JavapTask implements DisassemblerTool.DisassemblerTask, Messages {
void process(JavapTask task, String opt, String arg) throws BadArgs {
int sep = opt.indexOf(":");
try {
task.options.tabColumn = Integer.valueOf(opt.substring(sep + 1));
int i = Integer.valueOf(opt.substring(sep + 1));
if (i > 0) // silently ignore invalid values
task.options.tabColumn = i;
} catch (NumberFormatException e) {
}
}
......@@ -466,7 +470,7 @@ public class JavapTask implements DisassemblerTool.DisassemblerTask, Messages {
} catch (BadArgs e) {
reportError(e.key, e.args);
if (e.showUsage) {
log.println(getMessage("main.usage.summary", progname));
printLines(getMessage("main.usage.summary", progname));
}
return EXIT_CMDERR;
} catch (InternalError e) {
......@@ -561,8 +565,12 @@ public class JavapTask implements DisassemblerTool.DisassemblerTask, Messages {
}
}
if (fileManager.handleOption(name, rest))
return;
try {
if (fileManager.handleOption(name, rest))
return;
} catch (IllegalArgumentException e) {
throw new BadArgs("err.invalid.use.of.option", name).showUsage(true);
}
throw new BadArgs("err.unknown.option", name).showUsage(true);
}
......@@ -878,27 +886,33 @@ public class JavapTask implements DisassemblerTool.DisassemblerTask, Messages {
}
private void showHelp() {
log.println(getMessage("main.usage", progname));
printLines(getMessage("main.usage", progname));
for (Option o: recognizedOptions) {
String name = o.aliases[0].substring(1); // there must always be at least one name
if (name.startsWith("X") || name.equals("fullversion") || name.equals("h") || name.equals("verify"))
continue;
log.println(getMessage("main.opt." + name));
printLines(getMessage("main.opt." + name));
}
String[] fmOptions = { "-classpath", "-cp", "-bootclasspath" };
for (String o: fmOptions) {
if (fileManager.isSupportedOption(o) == -1)
continue;
String name = o.substring(1);
log.println(getMessage("main.opt." + name));
printLines(getMessage("main.opt." + name));
}
}
private void showVersion(boolean full) {
log.println(version(full ? "full" : "release"));
printLines(version(full ? "full" : "release"));
}
private void printLines(String msg) {
log.println(msg.replace("\n", nl));
}
private static final String nl = System.getProperty("line.separator");
private static final String versionRBName = "com.sun.tools.javap.resources.version";
private static ResourceBundle versionRB;
......
......@@ -86,8 +86,8 @@ public class Options {
public boolean showConstants;
public boolean sysInfo;
public boolean showInnerClasses;
public int indentWidth = 2; // #spaces per indentWidth level
public int tabColumn = 40; // column number for comments
public int indentWidth = 2; // #spaces per indentWidth level; must be > 0
public int tabColumn = 40; // column number for comments; must be > 0
public boolean compat; // bug-for-bug compatibility mode with old javap
}
......@@ -14,6 +14,7 @@ err.ioerror=IO error reading {0}: {1}
err.missing.arg=no value given for {0}
err.no.classes.specified=no classes specified
err.not.standard.file.manager=can only specify class files when using a standard file manager
err.invalid.use.of.option=invalid use of option: {0}
err.unknown.option=unknown option: {0}
err.verify.not.supported=-verify not supported
err.no.SourceFile.attribute=no SourceFile attribute
......@@ -80,7 +81,7 @@ main.opt.bootclasspath=\
\ -bootclasspath <path> Override location of bootstrap class files
main.opt.constants=\
\ -constants Show static final constants
\ -constants Show final constants
main.opt.sysinfo=\
......
/*
* Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
......@@ -23,7 +23,7 @@
/*
* @test
* @bug 7021614
* @bug 7021614 8031212
* @summary extend com.sun.source API to support parsing javadoc comments
* @build DocCommentTester
* @run main DocCommentTester SeeTest.java
......@@ -41,9 +41,9 @@ DocComment[DOC_COMMENT, pos:1
Text[TEXT, pos:1, abc.]
body: empty
block tags: 1
Erroneous[ERRONEOUS, pos:7
code: compiler.err.dc.unexpected.content
body: @see_"String"
See[SEE, pos:7
reference: 1
Text[TEXT, pos:12, "String"]
]
]
*/
......
/*
* Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2009, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
......@@ -23,8 +23,8 @@
/**
* @test
* @bug 7091528
* @summary javadoc attempts to parse .class files
* @bug 7091528 8029145
* @summary ensures javadoc parses unique source files and ignores all class files
* @compile p/C1.java p/q/C2.java
* @run main T7091528
*/
......@@ -37,17 +37,22 @@ public class T7091528 {
public static void main(String... args) {
new T7091528().run();
}
void run() {
File testSrc = new File(System.getProperty("test.src"));
File testClasses = new File(System.getProperty("test.classes"));
String[] args = {
"-d", ".",
// 7091528, tests if class files are being ignored
runTest("-d", ".",
"-sourcepath", testClasses + File.pathSeparator + testSrc,
"-subpackages",
"p"
};
"p");
// 8029145, tests if unique source files are parsed
runTest("-d", ".",
"-sourcepath", testSrc.getAbsolutePath(),
"-subpackages",
"p:p.q");
}
void runTest(String... args) {
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
String doclet = com.sun.tools.doclets.standard.Standard.class.getName();
......
/*
* Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @bug 8033930 8033913
* @summary bad formatting of StackMapTable entries
*/
import java.io.*;
import java.util.*;
public class StackMapTableTest {
public static void main(String... args) throws Exception {
new StackMapTableTest().run();
}
void run() throws Exception {
String testClasses = System.getProperty("test.classes");
String out = javap("-v", "-classpath", testClasses, A.class.getName());
String nl = System.getProperty("line.separator");
out = out.replaceAll(nl, "\n");
if (out.contains("\n\n\n"))
error("double blank line found");
String expect =
" StackMapTable: number_of_entries = 2\n" +
" frame_type = 252 /* append */\n" +
" offset_delta = 2\n" +
" locals = [ int ]\n" +
" frame_type = 250 /* chop */\n" +
" offset_delta = 18\n";
if (!out.contains(expect))
error("expected text not found");
if (errors > 0)
throw new Exception(errors + " errors found");
}
String javap(String... args) throws Exception {
StringWriter sw = new StringWriter();
PrintWriter out = new PrintWriter(sw);
int rc = com.sun.tools.javap.Main.run(args, out);
out.close();
System.out.println(sw.toString());
if (rc < 0)
throw new Exception("javap exited, rc=" + rc);
return sw.toString();
}
void error(String msg) {
System.out.println("Error: " + msg);
errors++;
}
int errors;
/** Simple test class to run through javap. */
public class A {
public void a() {
for (int i = 0; i < 10; i++) {
System.out.println(i);
}
}
public void b() {
}
public void c() {
}
}
}
/*
* Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @bug 8032814
* @summary LineNumberTable/LocalVariableTable tables duplication for the
* "-v -l" combination of options
* @compile -g T8032814.java
* @run main T8032814
*/
import java.io.*;
import java.util.*;
public class T8032814 {
public static void main(String... args) throws Exception {
new T8032814().run();
}
void run() throws Exception {
Class<?> clazz = T8032814.class;
int count = clazz.getDeclaredConstructors().length
+ clazz.getDeclaredMethods().length;
test(clazz, 0);
test(clazz, count, "-v");
test(clazz, count, "-l");
test(clazz, count, "-v", "-l");
if (errors > 0)
throw new Exception(errors + " errors occurred");
}
void test(Class<?> clazz, int expectedCount, String... opts) throws Exception {
System.err.println("test class " + clazz.getName() + " " + Arrays.asList(opts) + ": expect: " + expectedCount);
List<String> args = new ArrayList<String>();
args.addAll(Arrays.asList(opts));
args.addAll(Arrays.asList("-classpath", System.getProperty("test.classes")));
args.add(clazz.getName());
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
int rc = com.sun.tools.javap.Main.run(args.toArray(new String[args.size()]), pw);
pw.close();
String out = sw.toString();
if (rc != 0)
throw new Exception("javap failed unexpectedly: rc=" + rc);
int lntCount = 0, lvtCount = 0;
for (String line: out.split("[\r\n]+")) {
if (line.matches("^ *LineNumberTable:$"))
lntCount++;
if (line.matches("^ *LocalVariableTable:$"))
lvtCount++;
}
checkEqual("LineNumberTable", lntCount, expectedCount);
checkEqual("LocalVariableTable", lvtCount, expectedCount);
}
void checkEqual(String attr, int found, int expect) {
if (found != expect) {
error("Unexpected number of occurrences of " + attr + "\n" +
"found: " + found + ", expected: " + expect);
}
}
void error(String msg) {
System.err.println("Error: " + msg);
errors++;
}
int errors = 0;
}
/*
* Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @bug 8032819
* @summary Extra empty line between field declarations for the "-v -c" and "-v -l" combination of options
* @compile -g T8032819.java
* @run main T8032819
*/
import java.io.*;
import java.util.*;
public class T8032819 {
static class Fields {
int f1;
int f2;
}
public static void main(String... args) throws Exception {
new T8032819().run();
}
void run() throws Exception {
Class<?> clazz = Fields.class;
test(clazz);
test(clazz, "-c");
test(clazz, "-l");
test(clazz, "-l", "-c");
test(clazz, "-v");
test(clazz, "-v", "-c");
test(clazz, "-v", "-l");
test(clazz, "-v", "-l", "-c");
if (errors > 0)
throw new Exception(errors + " errors occurred");
}
static final String sep = System.getProperty("line.separator");
static final String doubleBlankLine = sep + sep + sep;
void test(Class<?> clazz, String... opts) throws Exception {
System.err.println("test " + Arrays.asList(opts));
List<String> args = new ArrayList<String>();
args.addAll(Arrays.asList(opts));
args.addAll(Arrays.asList("-classpath", System.getProperty("test.classes")));
args.add(clazz.getName());
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
int rc = com.sun.tools.javap.Main.run(args.toArray(new String[args.size()]), pw);
pw.close();
String out = sw.toString();
if (rc != 0)
throw new Exception("javap failed unexpectedly: rc=" + rc);
int count = 0;
int i = out.indexOf(doubleBlankLine, 0);
while (i != -1) {
count++;
i = out.indexOf(doubleBlankLine, i + doubleBlankLine.length());
}
if (count > 0)
error(count + " double blank lines found");
}
void error(String msg) {
System.err.println("Error: " + msg);
errors++;
}
int errors = 0;
}
/*
* Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @bug 8033180
* @summary Bad newline characters
*/
import java.io.*;
import java.util.*;
public class T8033180 {
public static void main(String... args) throws Exception {
new T8033180().run();
}
void run() throws Exception {
// fast-track this case, because test cannot fail in this case
if (lineSep.equals(nl))
return;
test("-help");
test("-version");
if (errors > 0)
throw new Exception(errors + " errors occurred");
}
static final String lineSep = System.getProperty("line.separator");
static final String nl = "\n";
void test(String... opts) throws Exception {
System.err.println("test " + Arrays.asList(opts));
List<String> args = new ArrayList<String>();
args.addAll(Arrays.asList(opts));
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
int rc = com.sun.tools.javap.Main.run(args.toArray(new String[args.size()]), pw);
pw.close();
String out = sw.toString();
if (rc != 0)
throw new Exception("javap failed unexpectedly: rc=" + rc);
// remove all valid platform newline sequences
String out2 = out.replace(lineSep, "");
// count the remaining simple newline characters
int count = 0;
int i = out2.indexOf(nl, 0);
while (i != -1) {
count++;
i = out2.indexOf(nl, i + nl.length());
}
if (count > 0)
error(count + " newline characters found");
}
void error(String msg) {
System.err.println("Error: " + msg);
errors++;
}
int errors = 0;
}
/*
* Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @bug 8033711
* @summary An exception is thrown if using the "-classpath" option with no arguments
*/
import java.io.*;
public class T8033711 {
public static void main(String[] args) throws Exception {
new T8033711().run();
}
public void run() throws Exception {
String out = javap("-classpath");
if (out.contains("IllegalArgumentException"))
throw new Exception("exception found in javap output");
if (!out.contains("Error: invalid use of option"))
throw new Exception("expected error message not found in javap output");
}
String javap(String... args) {
StringWriter sw = new StringWriter();
PrintWriter out = new PrintWriter(sw);
int rc = com.sun.tools.javap.Main.run(args, out);
out.close();
System.out.println(sw.toString());
System.out.println("javap exited, rc=" + rc);
return sw.toString();
}
}
/*
* Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @bug 8033581 8033798 8033726
* @summary Check whitespace in generated output
*/
import java.io.*;
import java.util.*;
public class WhitespaceTest {
public static void main(String... args) throws Exception {
new WhitespaceTest().run();
}
void run() throws Exception {
test("-v", "java.lang.String");
test("-XDtab:1", "-v", "java.lang.String");
String testClasses = System.getProperty("test.classes");
for (int i = 10; i < 40; i++)
test("-XDtab:" + i, "-v", "-classpath", testClasses, "WhitespaceTest$HelloWorld");
if (errors > 0)
throw new Exception(errors + " errors found");
}
void test(String... args) throws Exception {
// need to avoid "//" appearing as a constant in the constant pool
String slash = "/";
String doubleSlash = slash + slash;
System.out.println("test: " + Arrays.asList(args));
String out = javap(args);
for (String line: out.split("[\r\n]+")) {
if (line.endsWith(" "))
error("line has trailing whitespace: " + line);
int comment = line.indexOf(doubleSlash);
if (comment > 0 && line.charAt(comment - 1) != ' ')
error("no space before comment: " + line);
if (line.matches(" +}"))
error("bad indentation: " + line);
}
}
String javap(String... args) throws Exception {
StringWriter sw = new StringWriter();
PrintWriter out = new PrintWriter(sw);
int rc = com.sun.tools.javap.Main.run(args, out);
out.close();
System.out.println(sw.toString());
if (rc < 0)
throw new Exception("javap exited, rc=" + rc);
return sw.toString();
}
void error(String msg) {
System.out.println("Error: " + msg);
errors++;
}
int errors;
// small class to test repeatedly with different tab values
static class HelloWorld {
public static void main(String... args) {
System.out.println("Hello World!");
}
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册