protected InputStream getCompilationUnitInputStream(String path) { Environment env = factory.getEnvironment(); spoon.reflect.cu.CompilationUnit cu = factory.CompilationUnit().getMap().get(path); List<CtType<?>> toBePrinted = cu.getDeclaredTypes(); PrettyPrinter printer = null; if (printer == null) { printer = new DefaultJavaPrettyPrinter(env); } printer.calculate(cu, toBePrinted); return new ByteArrayInputStream(printer.getResult().toString().getBytes()); }
protected void generateProcessedSourceFilesUsingCUs() { factory.getEnvironment().debugMessage("Generating source using compilation units..."); // Check output directory if (outputDirectory == null) { throw new RuntimeException("You should set output directory before generating source files"); } // Create spooned directory if (outputDirectory.isFile()) { throw new RuntimeException("Output must be a directory"); } if (!outputDirectory.exists()) { if (!outputDirectory.mkdirs()) { throw new RuntimeException("Error creating output directory"); } } try { outputDirectory = outputDirectory.getCanonicalFile(); } catch (IOException e1) { throw new SpoonException(e1); } factory.getEnvironment().debugMessage("Generating source files to: " + outputDirectory); List<File> printedFiles = new ArrayList<File>(); for (spoon.reflect.cu.CompilationUnit cu : factory.CompilationUnit().getMap().values()) { factory .getEnvironment() .debugMessage("Generating source for compilation unit: " + cu.getFile()); CtType<?> element = cu.getMainType(); CtPackage pack = element.getPackage(); // create package directory File packageDir; if (pack.getQualifiedName().equals(CtPackage.TOP_LEVEL_PACKAGE_NAME)) { packageDir = new File(outputDirectory.getAbsolutePath()); } else { // Create current package directory packageDir = new File( outputDirectory.getAbsolutePath() + File.separatorChar + pack.getQualifiedName().replace('.', File.separatorChar)); } if (!packageDir.exists()) { if (!packageDir.mkdirs()) { throw new RuntimeException("Error creating output directory"); } } // print type try { File file = new File( packageDir.getAbsolutePath() + File.separatorChar + element.getSimpleName() + DefaultJavaPrettyPrinter.JAVA_FILE_EXTENSION); file.createNewFile(); // the path must be given relatively to to the working directory InputStream is = getCompilationUnitInputStream(cu.getFile().getPath()); IOUtils.copy(is, new FileOutputStream(file)); if (!printedFiles.contains(file)) { printedFiles.add(file); } } catch (Exception e) { Launcher.LOGGER.error(e.getMessage(), e); } } }