Компилятор 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);
}
}