protected void doCompile() { if (compiledClasses == null || classLoader==null) { doGenerate(); try { Map<String, Class<?>> compilationResult = javaCompiler.compileToClasses(getGeneratedCode()); Iterator<Class<?>> values = compilationResult.values().iterator(); this.classLoader = values.hasNext() ? values.next().getClassLoader() : null; this.compiledClasses = compilationResult; } catch (IllegalArgumentException e) { throw new AssertionError(e); } } } }
/** * Convenience method for the common case, that only one file is generated. */ public String getSingleGeneratedCode() { doGenerate(); Set<GeneratedFile> generatedFiles = access.getGeneratedFiles(); if (generatedFiles.size() == 1) return generatedFiles.iterator().next().getContents().toString(); else if (generatedFiles.isEmpty()) return "NO FILE WAS GENERATED"; String separator = System.getProperty("line.separator"); if (separator == null) separator = "\n"; List<GeneratedFile> files = newArrayList(generatedFiles); Collections.sort(files, new Comparator<GeneratedFile>() { @Override public int compare(GeneratedFile o1, GeneratedFile o2) { return o1.getPath().toString().compareTo(o2.getPath().toString()); } }); StringBuilder result = new StringBuilder("MULTIPLE FILES WERE GENERATED"+separator+separator); int i = 1; for (GeneratedFile file: files) { result.append("File "+i+" : "+file.getPath().toString()+separator+separator); result.append(file.getContents()).append(separator); i++; } return result.toString(); }
/** * @return all generated resources. the key is the file path and the value denotes the generated text. */ public Map<String, CharSequence> getAllGeneratedResources() { doGenerate(); Map<String,CharSequence> result = newHashMap(); for (GeneratedFile f: access.getGeneratedFiles()) { result.put(f.getPath(), f.getContents()); } return result; }
result.setResourceSet(resourceSet); result.setOutputConfigurations(getOutputConfigurations()); result.doGenerate(); acceptor.accept(result); } catch (Exception e) {
/** * Ensures generation happened and returns a map of the generated Java source files. * * @return a map of the generated Java source files, where the key is the qualified class name and the value the generated Java code. */ public Map<String,String> getGeneratedCode() { doGenerate(); return generatedCode; }