Компилятор Eclipse JDT предоставляет интерфейс INameEnvironment, который определяет метод findType(...), позволяющий выполнять каскадную компиляцию. Любопытно, что я хотел бы знать, есть ли какие-либо средства для этого, используя стандартный набор инструментов компилятора JDK?
Примечание, сценарий - это механизм шаблонов, который делает в компиляции памяти для созданных шаблонов классов, которые имеют взаимозависимости, и не может прогнозировать порядок, в котором вы столкнулись с файлом шаблона, таким образом Foo может потребоваться скомпилировать сначала, прежде чем он будет скомпилирован parent Bar, поэтому вам нужен механизм для каскадной компиляции, то есть во время компиляции Foo вам нужно сгенерировать еще один источник Bar и скомпилировать его сначала, чтобы продолжить Foo компиляция: некоторый код выглядит следующим образом:
private NameEnvironmentAnswer findType(final String name) {
try {
if (!name.contains(TemplateClass.CN_SUFFIX)) {
return findStandType(name);
}
char[] fileName = name.toCharArray();
TemplateClass templateClass = classCache.getByClassName(name);
// TemplateClass exists
if (templateClass != null) {
if (templateClass.javaByteCode != null) {
ClassFileReader classFileReader = new ClassFileReader(templateClass.javaByteCode, fileName, true);
return new NameEnvironmentAnswer(classFileReader, null);
}
// Cascade compilation
ICompilationUnit compilationUnit = new CompilationUnit(name);
return new NameEnvironmentAnswer(compilationUnit, null);
}
// So it a standard class
return findStandType(name);
} catch (ClassFormatException e) {
// Something very very bad
throw new RuntimeException(e);
}
}