-
Bug
-
Resolution: Fixed
-
P2
-
6
-
b73
-
generic
-
generic
-
Verified
javax.tools.JavaCompilerTool.run( (JavaFileManager) null, , , ) doesn't use default JavaFileManager
test fragment:
CommonServices.FileManagerWrapper a_fmw = new CommonServices.FileManagerWrapper( a_fm, new CommonServices.Tracer( ref ) );
a_fmw.clearMarksCount();
// set default (custom) file manager
a_tool.setFileManager( a_fmw );
// run 'run'
try {
boolean a_res = a_tool.run((JavaFileManager) null, null, ref, a_validSource);
} catch (RuntimeException a_e) {
return Status.failed( String.format( "exception during 'JavaCompilerTool.run' ('%s')\n", a_e.getMessage() ) );
}
if( a_fmw.marksCount() == 0 )
return Status.failed( "default JavaFileManager wasn't used (directly passed one was used)\n" );
CommonServices.FileManagerWrapper & Markable classes:
public static class Markable {
public void clearMarksCount() { m_marksCount = 0; }
public int marksCount() { return m_marksCount; }
protected void mark() { m_marksCount++; }
private int m_marksCount = 0;
}
public static class FileManagerWrapper extends Markable implements JavaFileManager {
public FileManagerWrapper( JavaFileManager p_fm, Tracer p_tracer ) {
m_fm = p_fm;
m_tracer = p_tracer;
}
public void close() throws IOException {
mark(); m_fm.close();
}
public void flush() throws IOException {
mark(); m_fm.flush();
}
public JavaFileObject getFileForInput(String name) throws IOException {
mark();
return m_fm.getFileForInput(name);
}
public JavaFileObject getFileForOutput(String classname, JavaFileObject.Kind kind, JavaFileObject sibling) throws IOException {
mark();
return m_fm.getFileForOutput(classname, kind, sibling);
}
public JavaFileObject getFileForOutput(String filename, String location, String pkg) throws IOException {
mark();
return m_fm.getFileForOutput(filename, location, pkg);
}
public Iterable<JavaFileObject> list(String packageName, Set<JavaFileObject.Kind> kinds) throws IOException {
mark();
return m_fm.list(packageName, kinds);
}
public void setLocation(String location, String path) {
mark();
m_fm.setLocation(location, path);
}
private JavaFileManager m_fm;
private Tracer m_tracer;
}
test fragment:
CommonServices.FileManagerWrapper a_fmw = new CommonServices.FileManagerWrapper( a_fm, new CommonServices.Tracer( ref ) );
a_fmw.clearMarksCount();
// set default (custom) file manager
a_tool.setFileManager( a_fmw );
// run 'run'
try {
boolean a_res = a_tool.run((JavaFileManager) null, null, ref, a_validSource);
} catch (RuntimeException a_e) {
return Status.failed( String.format( "exception during 'JavaCompilerTool.run' ('%s')\n", a_e.getMessage() ) );
}
if( a_fmw.marksCount() == 0 )
return Status.failed( "default JavaFileManager wasn't used (directly passed one was used)\n" );
CommonServices.FileManagerWrapper & Markable classes:
public static class Markable {
public void clearMarksCount() { m_marksCount = 0; }
public int marksCount() { return m_marksCount; }
protected void mark() { m_marksCount++; }
private int m_marksCount = 0;
}
public static class FileManagerWrapper extends Markable implements JavaFileManager {
public FileManagerWrapper( JavaFileManager p_fm, Tracer p_tracer ) {
m_fm = p_fm;
m_tracer = p_tracer;
}
public void close() throws IOException {
mark(); m_fm.close();
}
public void flush() throws IOException {
mark(); m_fm.flush();
}
public JavaFileObject getFileForInput(String name) throws IOException {
mark();
return m_fm.getFileForInput(name);
}
public JavaFileObject getFileForOutput(String classname, JavaFileObject.Kind kind, JavaFileObject sibling) throws IOException {
mark();
return m_fm.getFileForOutput(classname, kind, sibling);
}
public JavaFileObject getFileForOutput(String filename, String location, String pkg) throws IOException {
mark();
return m_fm.getFileForOutput(filename, location, pkg);
}
public Iterable<JavaFileObject> list(String packageName, Set<JavaFileObject.Kind> kinds) throws IOException {
mark();
return m_fm.list(packageName, kinds);
}
public void setLocation(String location, String path) {
mark();
m_fm.setLocation(location, path);
}
private JavaFileManager m_fm;
private Tracer m_tracer;
}