public ConfigClassRegistry(final ExmlConfiguration config) throws IOException { this.config = config; sourcePathInputSource = PathInputSource.fromFiles(config.getSourcePath(), new String[0], true); ParserOptions parserOptions = new CCRParserOptions(); jangarooParser = new JangarooParser(parserOptions, new StdOutCompileLog()) { @Override protected InputSource findSource(String qname) { InputSource inputSource = super.findSource(qname); if (inputSource != null) { // A regular source file (not a generated file) has been found. Use it. return inputSource; } // Just in case the requested class is a class // that is generated from an EXML file, regenerate the file before // it is too late. This will only affect generated files, so it is pretty safe. tryGenerateClass(qname); // Just in case the source was not found on the first attempt, fetch it again. return super.findSource(qname); } }; List<File> fullClassPath = new ArrayList<File>(config.getClassPath()); fullClassPath.add(config.getOutputDirectory()); InputSource classPathInputSource = PathInputSource.fromFiles( fullClassPath, new String[] {"", JangarooParser.JOO_API_IN_JAR_DIRECTORY_PREFIX}, false); jangarooParser.setUp(sourcePathInputSource, classPathInputSource); exmlConfigPackageXsdGenerator = new ExmlConfigPackageXsdGenerator(); }
private ConfigClass findActionScriptConfigClass(String name) { CompilationUnit compilationsUnit = jangarooParser.getCompilationUnit(name); if (compilationsUnit != null) { try { return buildConfigClass(compilationsUnit); } catch (RuntimeException e) { throw new ExmlcException( "while building config class '" + name + "': " + e.getMessage(), e); } } return null; }
private void tryGenerateClass(String qname) { ExmlSourceFile exmlSourceFile = getExmlSourceFilesByConfigClassName().get(qname); if (exmlSourceFile != null) { exmlSourceFile.generateConfigClass(); } else { // is there an EXML file for the qname interpreted as a target class name? InputSource exmlInputSource = sourcePathInputSource.getChild( JangarooParser.getInputSourceFileName( qname, sourcePathInputSource, Exmlc.EXML_SUFFIX)); if (exmlInputSource != null) { String configClassName = computeConfigClassNameFromTargetClassName(qname); exmlSourceFile = getExmlSourceFilesByConfigClassName().get(configClassName); if (exmlSourceFile != null) { exmlSourceFile.generateTargetClass(); } } } }