Mercurial > hg > openjdk > jdk6 > langtools
changeset 100:e8cf1a74be06
6420151: need to improve byfile compile policy to eliminate footprint issues
Reviewed-by: darcy
line wrap: on
line diff
--- a/src/share/classes/com/sun/tools/javac/api/JavacTaskImpl.java Fri Jun 18 11:13:26 2010 -0700 +++ b/src/share/classes/com/sun/tools/javac/api/JavacTaskImpl.java Fri Jun 18 17:00:50 2010 -0700 @@ -472,23 +472,22 @@ } abstract class Filter { - void run(ListBuffer<Env<AttrContext>> list, Iterable<? extends TypeElement> classes) { + void run(Queue<Env<AttrContext>> list, Iterable<? extends TypeElement> classes) { Set<TypeElement> set = new HashSet<TypeElement>(); for (TypeElement item: classes) set.add(item); - List<Env<AttrContext>> defer = List.<Env<AttrContext>>nil(); - while (list.nonEmpty()) { - Env<AttrContext> env = list.next(); + ListBuffer<Env<AttrContext>> defer = ListBuffer.<Env<AttrContext>>lb(); + while (list.peek() != null) { + Env<AttrContext> env = list.remove(); ClassSymbol csym = env.enclClass.sym; if (csym != null && set.contains(csym.outermostClass())) process(env); else - defer = defer.prepend(env); + defer = defer.append(env); } - for (List<Env<AttrContext>> l = defer; l.nonEmpty(); l = l.tail) - list.prepend(l.head); + list.addAll(defer); } abstract void process(Env<AttrContext> env);
--- a/src/share/classes/com/sun/tools/javac/comp/Todo.java Fri Jun 18 11:13:26 2010 -0700 +++ b/src/share/classes/com/sun/tools/javac/comp/Todo.java Fri Jun 18 17:00:50 2010 -0700 @@ -25,7 +25,14 @@ package com.sun.tools.javac.comp; -import com.sun.tools.javac.util.*; +import java.util.AbstractQueue; +import com.sun.tools.javac.util.Context; +import java.util.HashMap; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.Map; +import java.util.Queue; +import javax.tools.JavaFileObject; /** A queue of all as yet unattributed classes. * @@ -34,7 +41,7 @@ * This code and its internal interfaces are subject to change or * deletion without notice.</b> */ -public class Todo extends ListBuffer<Env<AttrContext>> { +public class Todo extends AbstractQueue<Env<AttrContext>> { /** The context key for the todo list. */ protected static final Context.Key<Todo> todoKey = new Context.Key<Todo>(); @@ -51,4 +58,115 @@ protected Todo(Context context) { context.put(todoKey, this); } + + public void append(Env<AttrContext> env) { + add(env); + } + + @Override + public Iterator<Env<AttrContext>> iterator() { + return contents.iterator(); + } + + @Override + public int size() { + return contents.size(); + } + + public boolean offer(Env<AttrContext> e) { + if (contents.add(e)) { + if (contentsByFile != null) + addByFile(e); + return true; + } else { + return false; + } + } + + public Env<AttrContext> poll() { + if (size() == 0) + return null; + Env<AttrContext> env = contents.remove(0); + if (contentsByFile != null) + removeByFile(env); + return env; + } + + public Env<AttrContext> peek() { + return (size() == 0 ? null : contents.get(0)); + } + + public Queue<Queue<Env<AttrContext>>> groupByFile() { + if (contentsByFile == null) { + contentsByFile = new LinkedList<Queue<Env<AttrContext>>>(); + for (Env<AttrContext> env: contents) { + addByFile(env); + } + } + return contentsByFile; + } + + private void addByFile(Env<AttrContext> env) { + JavaFileObject file = env.toplevel.sourcefile; + if (fileMap == null) + fileMap = new HashMap<JavaFileObject, FileQueue>(); + FileQueue fq = fileMap.get(file); + if (fq == null) { + fq = new FileQueue(); + fileMap.put(file, fq); + contentsByFile.add(fq); + } + fq.fileContents.add(env); + } + + private void removeByFile(Env<AttrContext> env) { + JavaFileObject file = env.toplevel.sourcefile; + FileQueue fq = fileMap.get(file); + if (fq == null) + return; + if (fq.fileContents.remove(env)) { + if (fq.isEmpty()) { + fileMap.remove(file); + contentsByFile.remove(fq); + } + } + } + + LinkedList<Env<AttrContext>> contents = new LinkedList<Env<AttrContext>>(); + LinkedList<Queue<Env<AttrContext>>> contentsByFile; + Map<JavaFileObject, FileQueue> fileMap; + + class FileQueue extends AbstractQueue<Env<AttrContext>> { + @Override + public Iterator<Env<AttrContext>> iterator() { + return fileContents.iterator(); + } + + @Override + public int size() { + return fileContents.size(); + } + + public boolean offer(Env<AttrContext> e) { + if (fileContents.offer(e)) { + contents.add(e); + return true; + } + return false; + } + + public Env<AttrContext> poll() { + if (fileContents.size() == 0) + return null; + Env<AttrContext> env = fileContents.remove(0); + contents.remove(env); + return env; + } + + public Env<AttrContext> peek() { + return (fileContents.size() == 0 ? null : fileContents.get(0)); + } + + LinkedList<Env<AttrContext>> fileContents = new LinkedList<Env<AttrContext>>(); + } }
--- a/src/share/classes/com/sun/tools/javac/main/JavaCompiler.java Fri Jun 18 11:13:26 2010 -0700 +++ b/src/share/classes/com/sun/tools/javac/main/JavaCompiler.java Fri Jun 18 17:00:50 2010 -0700 @@ -121,35 +121,47 @@ } } - private static enum CompilePolicy { - /* - * Just attribute the parse trees + /** + * Control how the compiler's latter phases (attr, flow, desugar, generate) + * are connected. Each individual file is processed by each phase in turn, + * but with different compile policies, you can control the order in which + * each class is processed through its next phase. + * + * <p>Generally speaking, the compiler will "fail fast" in the face of + * errors, although not aggressively so. flow, desugar, etc become no-ops + * once any errors have occurred. No attempt is currently made to determine + * if it might be safe to process a class through its next phase because + * it does not depend on any unrelated errors that might have occurred. + */ + protected static enum CompilePolicy { + /** + * Just attribute the parse trees. */ ATTR_ONLY, - /* + /** * Just attribute and do flow analysis on the parse trees. * This should catch most user errors. */ CHECK_ONLY, - /* + /** * Attribute everything, then do flow analysis for everything, * then desugar everything, and only then generate output. - * Means nothing is generated if there are any errors in any classes. + * This means no output will be generated if there are any + * errors in any classes. */ SIMPLE, - /* - * After attributing everything and doing flow analysis, - * group the work by compilation unit. - * Then, process the work for each compilation unit together. - * Means nothing is generated for a compilation unit if the are any errors - * in the compilation unit (or in any preceding compilation unit.) + /** + * Groups the classes for each source file together, then process + * each group in a manner equivalent to the {@code SIMPLE} policy. + * This means no output will be generated if there are any + * errors in any of the classes in a source file. */ BY_FILE, - /* + /** * Completely process each entry on the todo list in turn. * -- this is the same for 1.5. * Means output might be generated for some classes in a compilation unit @@ -177,7 +189,7 @@ private static CompilePolicy DEFAULT_COMPILE_POLICY = CompilePolicy.BY_TODO; - private static enum ImplicitSourcePolicy { + protected static enum ImplicitSourcePolicy { /** Don't generate or process implicitly read source files. */ NONE, /** Generate classes for implicitly read source files. */ @@ -247,11 +259,11 @@ /** The type eraser. */ - TransTypes transTypes; + protected TransTypes transTypes; /** The syntactic sugar desweetener. */ - Lower lower; + protected Lower lower; /** The annotation annotator. */ @@ -784,14 +796,17 @@ generate(desugar(flow(attribute(todo)))); break; - case BY_FILE: - for (Queue<Env<AttrContext>> queue : groupByFile(flow(attribute(todo))).values()) - generate(desugar(queue)); + case BY_FILE: { + Queue<Queue<Env<AttrContext>>> q = todo.groupByFile(); + while (!q.isEmpty() && errorCount() == 0) { + generate(desugar(flow(attribute(q.remove())))); + } + } break; case BY_TODO: - while (todo.nonEmpty()) - generate(desugar(flow(attribute(todo.next())))); + while (!todo.isEmpty()) + generate(desugar(flow(attribute(todo.remove())))); break; default: @@ -1107,13 +1122,13 @@ /** * Perform dataflow checks on an attributed parse tree. */ - protected void flow(Env<AttrContext> env, ListBuffer<Env<AttrContext>> results) { + protected void flow(Env<AttrContext> env, Queue<Env<AttrContext>> results) { try { if (errorCount() > 0) return; if (relax || compileStates.isDone(env, CompileState.FLOW)) { - results.append(env); + results.add(env); return; } @@ -1132,7 +1147,7 @@ if (errorCount() > 0) return; - results.append(env); + results.add(env); } finally { log.useSource(prev); @@ -1286,7 +1301,7 @@ generate(queue, null); } - public void generate(Queue<Pair<Env<AttrContext>, JCClassDecl>> queue, ListBuffer<JavaFileObject> results) { + public void generate(Queue<Pair<Env<AttrContext>, JCClassDecl>> queue, Queue<JavaFileObject> results) { boolean usePrintSource = (stubOutput || sourceOutput || printFlat); for (Pair<Env<AttrContext>, JCClassDecl> x: queue) { @@ -1296,7 +1311,7 @@ if (verboseCompilePolicy) { log.printLines(log.noticeWriter, "[generate " + (usePrintSource ? " source" : "code") - + " " + env.enclClass.sym + "]"); + + " " + cdef.sym + "]"); } if (taskListener != null) { @@ -1314,7 +1329,7 @@ else file = genCode(env, cdef); if (results != null && file != null) - results.append(file); + results.add(file); } catch (IOException ex) { log.error(cdef.pos(), "class.cant.write", cdef.sym, ex.getMessage());
--- a/src/share/classes/com/sun/tools/javadoc/JavadocTodo.java Fri Jun 18 11:13:26 2010 -0700 +++ b/src/share/classes/com/sun/tools/javadoc/JavadocTodo.java Fri Jun 18 17:00:50 2010 -0700 @@ -46,8 +46,13 @@ super(context); } - public ListBuffer<Env<AttrContext>> append(Env<AttrContext> e) { + @Override + public void append(Env<AttrContext> e) { // do nothing; Javadoc doesn't perform attribution. - return this; + } + + @Override + public boolean offer(Env<AttrContext> e) { + return false; } }
--- a/test/tools/javac/6734819/T6734819a.java Fri Jun 18 11:13:26 2010 -0700 +++ b/test/tools/javac/6734819/T6734819a.java Fri Jun 18 17:00:50 2010 -0700 @@ -1,5 +1,5 @@ /* - * Copyright 2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -16,9 +16,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * 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. */ /*
--- a/test/tools/javac/6734819/T6734819b.java Fri Jun 18 11:13:26 2010 -0700 +++ b/test/tools/javac/6734819/T6734819b.java Fri Jun 18 17:00:50 2010 -0700 @@ -1,5 +1,5 @@ /* - * Copyright 2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -16,9 +16,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * 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. */ /*
--- a/test/tools/javac/6734819/T6734819b.out Fri Jun 18 11:13:26 2010 -0700 +++ b/test/tools/javac/6734819/T6734819b.out Fri Jun 18 17:00:50 2010 -0700 @@ -5,5 +5,5 @@ [desugar A] [generate code A] [desugar B] +[generate code B.C] [generate code B] -[generate code B]
--- a/test/tools/javac/6734819/T6734819c.java Fri Jun 18 11:13:26 2010 -0700 +++ b/test/tools/javac/6734819/T6734819c.java Fri Jun 18 17:00:50 2010 -0700 @@ -1,5 +1,5 @@ /* - * Copyright 2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -16,9 +16,9 @@ * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * 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. */ /*
--- a/test/tools/javac/policy/A.java Fri Jun 18 11:13:26 2010 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,41 +0,0 @@ -/* - * Copyright (c) 2005, 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. - */ - -class A -{ - A() { - D d = new D(); - } -} - -class A1 -{ - A1() { - } -} - -class A2 -{ - A2() { - } -}
--- a/test/tools/javac/policy/B.java Fri Jun 18 11:13:26 2010 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,20 +0,0 @@ -/* /nodynamiccopyright/ */ -class B -{ - B() { - } -} - - -class B1 -{ - B1() { - x = 1; - } -} - -class B2 -{ - B2() { - } -}
--- a/test/tools/javac/policy/C.java Fri Jun 18 11:13:26 2010 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,20 +0,0 @@ -/* /nodynamiccopyright/ */ -class C -{ - C() { - } -} - - -class C1 -{ - C1() { - return; return; - } -} - -class C2 -{ - C2() { - } -}
--- a/test/tools/javac/policy/D.java Fri Jun 18 11:13:26 2010 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,40 +0,0 @@ -/* - * Copyright (c) 2005, 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. - */ - -class D -{ - D() { - } -} - -class D1 -{ - D1() { - } -} - -class D2 -{ - D2() { - } -}
--- a/test/tools/javac/policy/Test.java Fri Jun 18 11:13:26 2010 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,91 +0,0 @@ -/* - * Copyright (c) 2005, 2006, 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 6260188 6290772 - * @summary provide variable policies for javac operation - * Default compile policy is now "by file" (reverted to "todo" for 6382700) - * Because of attr errors in B, no code should be generated - * @compile/fail/ref=bytodo.ABD.out -XDstdout -XDrawDiagnostics -XDverboseCompilePolicy A.java B.java D.java - */ - -/* - * @test - * @bug 6260188 - * @summary provide variable policies for javac operation - * Generate code for A, A1, A2, B - * @compile/fail/ref=bytodo.ABD.out -XDstdout -XDrawDiagnostics -XDverboseCompilePolicy -XDcompilePolicy=bytodo A.java B.java D.java - */ - -/* - * @test - * @bug 6260188 - * @summary provide variable policies for javac operation - * Because of attr errors in B, no code should be generated - * @compile/fail/ref=simple.ABD.out -XDstdout -XDrawDiagnostics -XDverboseCompilePolicy -XDcompilePolicy=simple A.java B.java D.java - */ - -/* - * @test - * @bug 6260188 - * @summary provide variable policies for javac operation - * Because of attr errors in B, no code should be generated - * @compile/fail/ref=byfile.ABD.out -XDstdout -XDrawDiagnostics -XDverboseCompilePolicy -XDcompilePolicy=byfile A.java B.java D.java - */ - - - - -/* - * @test - * @bug 6260188 6290772 - * @summary provide variable policies for javac operation - * Default compile policy is now "by file" (reverted to "todo" for 6382700) - * Generate code for A, A1, A2, but because of flow errors in C, no more code should be generated - * @compile/fail/ref=bytodo.ACD.out -XDstdout -XDrawDiagnostics -XDverboseCompilePolicy A.java C.java D.java - */ - -/* - * @test - * @bug 6260188 - * @summary provide variable policies for javac operation - * Generate code for A, A1, A2, C - * @compile/fail/ref=bytodo.ACD.out -XDstdout -XDrawDiagnostics -XDverboseCompilePolicy -XDcompilePolicy=bytodo A.java C.java D.java - */ - -/* - * @test - * @bug 6260188 - * @summary provide variable policies for javac operation - * Because of flow errors in C, no code should be generated - * @compile/fail/ref=simple.ACD.out -XDstdout -XDrawDiagnostics -XDverboseCompilePolicy -XDcompilePolicy=simple A.java C.java D.java - */ - -/* - * @test - * @bug 6260188 - * @summary provide variable policies for javac operation - * Generate code for A, A1, A2, but because of flow errors in C, no more code should be generated - * @compile/fail/ref=byfile.ACD.out -XDstdout -XDrawDiagnostics -XDverboseCompilePolicy -XDcompilePolicy=byfile A.java C.java D.java - */
--- a/test/tools/javac/policy/byfile.ABD.out Fri Jun 18 11:13:26 2010 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -[attribute A] -[attribute A1] -[attribute A2] -[attribute B] -[attribute B1] -B.java:12:9: compiler.err.cant.resolve.location: (- compiler.misc.kindname.variable), x, , , (- compiler.misc.kindname.class), B1 -[attribute B2] -[attribute D] -[attribute D1] -[attribute D2] -1 error
--- a/test/tools/javac/policy/byfile.ACD.out Fri Jun 18 11:13:26 2010 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,16 +0,0 @@ -[attribute A] -[attribute A1] -[attribute A2] -[attribute C] -[attribute C1] -[attribute C2] -[attribute D] -[attribute D1] -[attribute D2] -[flow A] -[flow A1] -[flow A2] -[flow C] -[flow C1] -C.java:12:17: compiler.err.unreachable.stmt -1 error
--- a/test/tools/javac/policy/bytodo.ABD.out Fri Jun 18 11:13:26 2010 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,23 +0,0 @@ -[attribute A] -[flow A] -[desugar A] -[generate code A] -[attribute A1] -[flow A1] -[desugar A1] -[generate code A1] -[attribute A2] -[flow A2] -[desugar A2] -[generate code A2] -[attribute B] -[flow B] -[desugar B] -[generate code B] -[attribute B1] -B.java:12:9: compiler.err.cant.resolve.location: (- compiler.misc.kindname.variable), x, , , (- compiler.misc.kindname.class), B1 -[attribute B2] -[attribute D] -[attribute D1] -[attribute D2] -1 error
--- a/test/tools/javac/policy/bytodo.ACD.out Fri Jun 18 11:13:26 2010 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,24 +0,0 @@ -[attribute A] -[flow A] -[desugar A] -[generate code A] -[attribute A1] -[flow A1] -[desugar A1] -[generate code A1] -[attribute A2] -[flow A2] -[desugar A2] -[generate code A2] -[attribute C] -[flow C] -[desugar C] -[generate code C] -[attribute C1] -[flow C1] -C.java:12:17: compiler.err.unreachable.stmt -[attribute C2] -[attribute D] -[attribute D1] -[attribute D2] -1 error
--- a/test/tools/javac/policy/simple.ABD.out Fri Jun 18 11:13:26 2010 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -[attribute A] -[attribute A1] -[attribute A2] -[attribute B] -[attribute B1] -B.java:12:9: compiler.err.cant.resolve.location: (- compiler.misc.kindname.variable), x, , , (- compiler.misc.kindname.class), B1 -[attribute B2] -[attribute D] -[attribute D1] -[attribute D2] -1 error
--- a/test/tools/javac/policy/simple.ACD.out Fri Jun 18 11:13:26 2010 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,16 +0,0 @@ -[attribute A] -[attribute A1] -[attribute A2] -[attribute C] -[attribute C1] -[attribute C2] -[attribute D] -[attribute D1] -[attribute D2] -[flow A] -[flow A1] -[flow A2] -[flow C] -[flow C1] -C.java:12:17: compiler.err.unreachable.stmt -1 error
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/tools/javac/policy/test1/A.java Fri Jun 18 17:00:50 2010 -0700 @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2005, 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. + */ + +class A +{ + A() { + D d = new D(); + } +} + +class A1 +{ + A1() { + } +} + +class A2 +{ + A2() { + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/tools/javac/policy/test1/B.java Fri Jun 18 17:00:50 2010 -0700 @@ -0,0 +1,20 @@ +/* /nodynamiccopyright/ */ +class B +{ + B() { + } +} + + +class B1 +{ + B1() { + x = 1; + } +} + +class B2 +{ + B2() { + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/tools/javac/policy/test1/C.java Fri Jun 18 17:00:50 2010 -0700 @@ -0,0 +1,20 @@ +/* /nodynamiccopyright/ */ +class C +{ + C() { + } +} + + +class C1 +{ + C1() { + return; return; + } +} + +class C2 +{ + C2() { + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/tools/javac/policy/test1/D.java Fri Jun 18 17:00:50 2010 -0700 @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2005, 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. + */ + +class D +{ + D() { + } +} + +class D1 +{ + D1() { + } +} + +class D2 +{ + D2() { + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/tools/javac/policy/test1/Test1a.java Fri Jun 18 17:00:50 2010 -0700 @@ -0,0 +1,99 @@ +/* + * Copyright (c) 2005, 2006, 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. + */ + +// These tests exercise the various compile policies available via +// JavaCompiler.CompilePolicy. Like any golden file tests, they are +// somewhat fragile and susceptible to breakage, but like the canary +// in the mine, it is useful to know when something is not as it used +// to be. The golden files should not be taken as a guarantee of +// future behavior, and should be updated, with due care, if the +// behavior of the compile policy is deliberately changed. + +/* + * @test + * @bug 6260188 6290772 + * @summary provide variable policies for javac operation + * Default compile policy is now "by file" (reverted to "todo" for 6382700) + * Because of attr errors in B, no code should be generated + * @compile/fail/ref=bytodo.ABD.out -XDstdout -XDrawDiagnostics -XDverboseCompilePolicy A.java B.java D.java + */ + +/* + * @test + * @bug 6260188 + * @summary provide variable policies for javac operation + * Generate code for A, A1, A2, B + * @compile/fail/ref=bytodo.ABD.out -XDstdout -XDrawDiagnostics -XDverboseCompilePolicy -XDcompilePolicy=bytodo A.java B.java D.java + */ + +/* + * @test + * @bug 6260188 + * @summary provide variable policies for javac operation + * Because of attr errors in B, no code should be generated + * @compile/fail/ref=simple.ABD.out -XDstdout -XDrawDiagnostics -XDverboseCompilePolicy -XDcompilePolicy=simple A.java B.java D.java + */ + +/* + * @test + * @bug 6260188 + * @summary provide variable policies for javac operation + * Because of attr errors in B, no code should be generated + * @compile/fail/ref=byfile.ABD.out -XDstdout -XDrawDiagnostics -XDverboseCompilePolicy -XDcompilePolicy=byfile A.java B.java D.java + */ + + + + +/* + * @test + * @bug 6260188 6290772 + * @summary provide variable policies for javac operation + * Default compile policy is now "by file" (reverted to "todo" for 6382700) + * Generate code for A, A1, A2, but because of flow errors in C, no more code should be generated + * @compile/fail/ref=bytodo.ACD.out -XDstdout -XDrawDiagnostics -XDverboseCompilePolicy A.java C.java D.java + */ + +/* + * @test + * @bug 6260188 + * @summary provide variable policies for javac operation + * Generate code for A, A1, A2, C + * @compile/fail/ref=bytodo.ACD.out -XDstdout -XDrawDiagnostics -XDverboseCompilePolicy -XDcompilePolicy=bytodo A.java C.java D.java + */ + +/* + * @test + * @bug 6260188 + * @summary provide variable policies for javac operation + * Because of flow errors in C, no code should be generated + * @compile/fail/ref=simple.ACD.out -XDstdout -XDrawDiagnostics -XDverboseCompilePolicy -XDcompilePolicy=simple A.java C.java D.java + */ + +/* + * @test + * @bug 6260188 + * @summary provide variable policies for javac operation + * Generate code for A, A1, A2, but because of flow errors in C, no more code should be generated + * @compile/fail/ref=byfile.ACD.out -XDstdout -XDrawDiagnostics -XDverboseCompilePolicy -XDcompilePolicy=byfile A.java C.java D.java + */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/tools/javac/policy/test1/Test1b.java Fri Jun 18 17:00:50 2010 -0700 @@ -0,0 +1,156 @@ +/* + * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * 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 6420151 + * @summary Compile a group of files and validate the set of class files produced + * @run main Test1b -XDcompilePolicy=byfile A.java B.java D.java + */ + +/* + * @test 6420151 + * @summary Compile a group of files and validate the set of class files produced + * @run main Test1b -XDcompilePolicy=byfile A.java C.java D.java + */ + +/* + * @test 6420151 + * @summary Compile a group of files and validate the set of class files produced + * @run main Test1b -XDcompilePolicy=simple A.java B.java D.java + */ + +/* + * @test 6420151 + * @summary Compile a group of files and validate the set of class files produced + * @run main Test1b -XDcompilePolicy=simple A.java C.java D.java + */ + +// These test cases should be uncommented when the default compile policy is +// changed to "byfile". While the default policy is "bytodo", the test cases fail +///* +// * @test 6420151 +// * @summary Compile a group of files and validate the set of class files produced +// * @run main Test1b A.java B.java D.java +// */ +// +///* +// * @test 6420151 +// * @summary Compile a group of files and validate the set of class files produced +// * @run main Test1b A.java C.java D.java +// */ + +// These test cases are retained for debugging; if uncommented, they show that +// to bytodo mode fails the "all or none" class file test +///* +// * @test 6420151 +// * @summary Compile a group of files and validate the set of class files produced +// * @run main Test1b -XDcompilePolicy=bytodo A.java B.java D.java +// */ +// +///* +// * @test 6420151 +// * @summary Compile a group of files and validate the set of class files produced +// * @run main Test1b -XDcompilePolicy=bytodo A.java C.java D.java +// */ + +import java.io.File; +import java.io.PrintWriter; +import java.io.StringWriter; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class Test1b +{ + public static void main(String... args) throws Exception { + new Test1b().run(args); + } + + void run(String... args) throws Exception { + File testSrcDir = new File(System.getProperty("test.src")); + File tmpClassDir = new File("."); + List<String> l = new ArrayList<String>(); + l.add("-d"); + l.add(tmpClassDir.getPath()); + for (String a: args) { + if (a.endsWith(".java")) + l.add(new File(testSrcDir, a).getPath()); + else + l.add(a); + } + + StringWriter sw = new StringWriter(); + int rc = com.sun.tools.javac.Main.compile(l.toArray(new String[l.size()]), new PrintWriter(sw)); + System.err.println(sw); + + Pattern p = Pattern.compile("([A-Z]+).*"); + for (String name: tmpClassDir.list()) { + if (name.endsWith(".class")) { + Matcher m = p.matcher(name); + if (m.matches()) { + found(m.group(1), name); + } + } + } + + // for all classes that might have been compiled, check that + // all the classes in the source file get generated, or none do. + check("A", 3); + check("B", 3); + check("C", 3); + check("D", 3); + + if (errors > 0) + throw new Exception(errors + " errors"); + } + + void check(String prefix, int expect) { + List<String> names = map.get(prefix); + int found = (names == null ? 0 : names.size()); + if (found == 0 || found == expect) { + System.err.println("Found " + found + " files for " + prefix + ": OK"); + return; + } + error("Found " + found + " files for " + prefix + ": expected 0 or " + expect + " " + names); + } + + void found(String prefix, String name) { + List<String> names = map.get(prefix); + if (names == null) { + names = new ArrayList<String>(); + map.put(prefix, names); + } + names.add(name); + } + + void error(String message) { + System.err.println(message); + errors++; + } + + Map<String,List<String>> map = new HashMap<String,List<String>>(); + int errors; +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/tools/javac/policy/test1/byfile.ABD.out Fri Jun 18 17:00:50 2010 -0700 @@ -0,0 +1,17 @@ +[attribute A] +[attribute A1] +[attribute A2] +[flow A] +[flow A1] +[flow A2] +[desugar A] +[desugar A1] +[desugar A2] +[generate code A] +[generate code A1] +[generate code A2] +[attribute B] +[attribute B1] +B.java:12:9: compiler.err.cant.resolve.location: (- compiler.misc.kindname.variable), x, , , (- compiler.misc.kindname.class), B1 +[attribute B2] +1 error
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/tools/javac/policy/test1/byfile.ACD.out Fri Jun 18 17:00:50 2010 -0700 @@ -0,0 +1,19 @@ +[attribute A] +[attribute A1] +[attribute A2] +[flow A] +[flow A1] +[flow A2] +[desugar A] +[desugar A1] +[desugar A2] +[generate code A] +[generate code A1] +[generate code A2] +[attribute C] +[attribute C1] +[attribute C2] +[flow C] +[flow C1] +C.java:12:17: compiler.err.unreachable.stmt +1 error
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/tools/javac/policy/test1/bytodo.ABD.out Fri Jun 18 17:00:50 2010 -0700 @@ -0,0 +1,23 @@ +[attribute A] +[flow A] +[desugar A] +[generate code A] +[attribute A1] +[flow A1] +[desugar A1] +[generate code A1] +[attribute A2] +[flow A2] +[desugar A2] +[generate code A2] +[attribute B] +[flow B] +[desugar B] +[generate code B] +[attribute B1] +B.java:12:9: compiler.err.cant.resolve.location: (- compiler.misc.kindname.variable), x, , , (- compiler.misc.kindname.class), B1 +[attribute B2] +[attribute D] +[attribute D1] +[attribute D2] +1 error
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/tools/javac/policy/test1/bytodo.ACD.out Fri Jun 18 17:00:50 2010 -0700 @@ -0,0 +1,24 @@ +[attribute A] +[flow A] +[desugar A] +[generate code A] +[attribute A1] +[flow A1] +[desugar A1] +[generate code A1] +[attribute A2] +[flow A2] +[desugar A2] +[generate code A2] +[attribute C] +[flow C] +[desugar C] +[generate code C] +[attribute C1] +[flow C1] +C.java:12:17: compiler.err.unreachable.stmt +[attribute C2] +[attribute D] +[attribute D1] +[attribute D2] +1 error
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/tools/javac/policy/test1/simple.ABD.out Fri Jun 18 17:00:50 2010 -0700 @@ -0,0 +1,11 @@ +[attribute A] +[attribute A1] +[attribute A2] +[attribute B] +[attribute B1] +B.java:12:9: compiler.err.cant.resolve.location: (- compiler.misc.kindname.variable), x, , , (- compiler.misc.kindname.class), B1 +[attribute B2] +[attribute D] +[attribute D1] +[attribute D2] +1 error
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/tools/javac/policy/test1/simple.ACD.out Fri Jun 18 17:00:50 2010 -0700 @@ -0,0 +1,16 @@ +[attribute A] +[attribute A1] +[attribute A2] +[attribute C] +[attribute C1] +[attribute C2] +[attribute D] +[attribute D1] +[attribute D2] +[flow A] +[flow A1] +[flow A2] +[flow C] +[flow C1] +C.java:12:17: compiler.err.unreachable.stmt +1 error
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/tools/javac/policy/test2/A.java Fri Jun 18 17:00:50 2010 -0700 @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * 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. + */ + +class A { + + class A1 { + } + + static class A2 extends B { + } + + static class A3 extends B.Inner { + } + + class A4 { + void m1() { + class A3m1 { } + } + + void m2() { + new B() { + }; + } + } + +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/tools/javac/policy/test2/B.java Fri Jun 18 17:00:50 2010 -0700 @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * 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. + */ + +class B { + static class Inner { + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/tools/javac/policy/test2/Test.java Fri Jun 18 17:00:50 2010 -0700 @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * 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 + * @compile/ref=byfile.AB.out -XDstdout -XDverboseCompilePolicy -XDcompile.policy=byfile A.java B.java + */ + +/* + * @test + * @compile/ref=byfile.BA.out -XDstdout -XDverboseCompilePolicy -XDcompile.policy=byfile B.java A.java + */ + +/* + * @test + * @compile/ref=bytodo.AB.out -XDstdout -XDverboseCompilePolicy -XDcompile.policy=bytodo A.java B.java + */ + +/* + * @test + * @compile/ref=bytodo.BA.out -XDstdout -XDverboseCompilePolicy -XDcompile.policy=bytodo B.java A.java + */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/tools/javac/policy/test2/byfile.AB.out Fri Jun 18 17:00:50 2010 -0700 @@ -0,0 +1,15 @@ +[attribute A] +[flow A] +[attribute B] +[flow B] +[desugar A] +[generate code A.A1] +[generate code A.A2] +[generate code A.A3] +[generate code A3m1] +[generate code <anonymous A$A4$1>] +[generate code A.A4] +[generate code A] +[desugar B] +[generate code B.Inner] +[generate code B]
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/tools/javac/policy/test2/byfile.BA.out Fri Jun 18 17:00:50 2010 -0700 @@ -0,0 +1,15 @@ +[attribute B] +[flow B] +[desugar B] +[generate code B.Inner] +[generate code B] +[attribute A] +[flow A] +[desugar A] +[generate code A.A1] +[generate code A.A2] +[generate code A.A3] +[generate code A3m1] +[generate code <anonymous A$A4$1>] +[generate code A.A4] +[generate code A]
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/tools/javac/policy/test2/bytodo.AB.out Fri Jun 18 17:00:50 2010 -0700 @@ -0,0 +1,15 @@ +[attribute A] +[flow A] +[attribute B] +[flow B] +[desugar A] +[generate code A.A1] +[generate code A.A2] +[generate code A.A3] +[generate code A3m1] +[generate code <anonymous A$A4$1>] +[generate code A.A4] +[generate code A] +[desugar B] +[generate code B.Inner] +[generate code B]
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/tools/javac/policy/test2/bytodo.BA.out Fri Jun 18 17:00:50 2010 -0700 @@ -0,0 +1,15 @@ +[attribute B] +[flow B] +[desugar B] +[generate code B.Inner] +[generate code B] +[attribute A] +[flow A] +[desugar A] +[generate code A.A1] +[generate code A.A2] +[generate code A.A3] +[generate code A3m1] +[generate code <anonymous A$A4$1>] +[generate code A.A4] +[generate code A]