KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
Eclipse's JDT compiler provide an interface INameEnvironment which defines method findType(...) enable you to do cascade compilation. Curiously I would like to know if there are any means to do it using standard JDK compiler toolkit? Note , the scenario is a template engine which do in memory compilation for template file generated classes which have inter-dependencies, and it cannot forecast the order you encountered a template file, thus Foo might needs to be compiled first before it's parent Bar compiled already, therefore you need a mechanism to do cascade compilation, meaning during compilation of Foo you need to generate another source Bar and compile it first in order to continue Foo 's compilation: some code like the follows: 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's a standard class return findStandType(name); } catch (ClassFormatException e) { // Something very very bad throw new RuntimeException(e); } }
Tags (comma-separated)
Save Edits
Cancel