diff -r 31eeebc3ef49 -r 516b112d6c68 langtools/src/share/classes/com/sun/tools/javac/main/JavaCompiler.java --- a/langtools/src/share/classes/com/sun/tools/javac/main/JavaCompiler.java Fri Mar 09 17:10:56 2012 +0000 +++ b/langtools/src/share/classes/com/sun/tools/javac/main/JavaCompiler.java Tue Mar 13 15:43:40 2012 -0700 @@ -44,6 +44,8 @@ import javax.tools.DiagnosticListener; import javax.tools.JavaFileManager; import javax.tools.JavaFileObject; +import javax.tools.StandardLocation; + import static javax.tools.StandardLocation.CLASS_OUTPUT; import com.sun.source.util.TaskEvent; @@ -60,6 +62,7 @@ import com.sun.tools.javac.tree.JCTree.*; import com.sun.tools.javac.util.*; import com.sun.tools.javac.util.Log.WriterKind; + import static com.sun.tools.javac.main.Option.*; import static com.sun.tools.javac.util.JCDiagnostic.DiagnosticFlag.*; import static com.sun.tools.javac.util.ListBuffer.lb; @@ -227,6 +230,10 @@ */ protected ClassWriter writer; + /** The native header writer. + */ + protected JNIWriter jniWriter; + /** The module for the symbol table entry phases. */ protected Enter enter; @@ -330,6 +337,7 @@ reader = ClassReader.instance(context); make = TreeMaker.instance(context); writer = ClassWriter.instance(context); + jniWriter = JNIWriter.instance(context); enter = Enter.instance(context); todo = Todo.instance(context); @@ -1450,8 +1458,13 @@ JavaFileObject file; if (usePrintSource) file = printSource(env, cdef); - else + else { + if (fileManager.hasLocation(StandardLocation.NATIVE_HEADER_OUTPUT) + && jniWriter.needsHeader(cdef.sym)) { + jniWriter.write(cdef.sym); + } file = genCode(env, cdef); + } if (results != null && file != null) results.add(file); } catch (IOException ex) {