/* * Copyright (c) 2013-2016 Chris Newland. * Licensed under https://github.com/AdoptOpenJDK/jitwatch/blob/master/LICENSE-BSD * Instructions: https://github.com/AdoptOpenJDK/jitwatch/wiki */ package org.adoptopenjdk.jitwatch.process.compiler; import java.io.File; import java.io.FileNotFoundException; import java.io.FileWriter; import java.io.FilenameFilter; import java.io.IOException; import java.nio.file.Path; import java.nio.file.Paths; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.adoptopenjdk.jitwatch.logger.ILogListener; import org.adoptopenjdk.jitwatch.process.AbstractProcess; public class CompilerScala extends AbstractProcess implements ICompiler { private Path compilerPath; private String languageHomeDir; private final String COMPILER_NAME = "scalac"; public CompilerScala(String languageHomeDir) throws FileNotFoundException { super(); this.languageHomeDir = languageHomeDir; compilerPath = Paths.get(languageHomeDir, "bin", COMPILER_NAME); if (!compilerPath.toFile().exists()) { throw new FileNotFoundException("Could not find " + COMPILER_NAME); } compilerPath = compilerPath.normalize(); } @Override public boolean compile(List<File> sourceFiles, List<String> classpathEntries, File outputDir, ILogListener logListener) throws IOException { List<String> commands = new ArrayList<>(); commands.add(compilerPath.toString()); String outputDirPath = outputDir.getAbsolutePath().toString(); List<String> compileOptions = Arrays.asList(new String[] { "-print", "-g:vars", "-d", outputDirPath }); commands.addAll(compileOptions); addScalaCoreLibs(classpathEntries); if (classpathEntries.size() > 0) { commands.add("-classpath"); commands.add(makeClassPath(classpathEntries)); } for (File sourceFile : sourceFiles) { commands.add(sourceFile.getAbsolutePath()); } boolean success = runCommands(commands, logListener); if (success) { String realSource = getOutputStream(); /* FileWriter writer = null; try { writer = new FileWriter(saveFile); writer.write(getSource()); sandboxStage.log("Saved " + saveFile.getCanonicalPath()); sourceFile = saveFile; } catch (IOException ioe) { sandboxStage.log("Could not save file"); } finally { if (writer != null) { try { writer.close(); } catch (IOException ioe) { } } } */ } return success; } private void addScalaCoreLibs(List<String> classpathEntries) { String[] coreLibs = Paths.get(languageHomeDir, "lib").toFile().list(new FilenameFilter() { @Override public boolean accept(File dir, String name) { return name.endsWith(".jar"); } }); for (String filename : coreLibs) { if (!classpathEntries.contains(filename)) { classpathEntries.add(filename); } } } }