src/main/java/xelfi/compiler/XelfiCompilerMain.java
author Jaroslav Tulach <jaroslav.tulach@xelfi.cz>
Tue, 24 Jan 2017 04:30:13 +0100
branchDirtyFix
changeset 15 cdb47e644581
parent 10 fe294d0f1297
parent 14 3ff7a893a7ce
permissions -rw-r--r--
Merging in usage of modern Java compiler
jaroslav@0
     1
/** XelfiCompilerMain class
jaroslav@0
     2
* @author: Filip Dvorak
jaroslav@0
     3
* @version: 1.3
jaroslav@0
     4
*/
jaroslav@0
     5
jaroslav@0
     6
package xelfi.compiler;
jaroslav@0
     7
jaroslav@0
     8
import java.io.*;
jlahoda@14
     9
import java.util.Arrays;
jlahoda@14
    10
import javax.tools.JavaCompiler;
jlahoda@14
    11
import javax.tools.StandardJavaFileManager;
jlahoda@14
    12
import javax.tools.ToolProvider;
jaroslav@0
    13
jaroslav@0
    14
jaroslav@10
    15
class XelfiCompilerMain extends Object implements MainCompiler
jaroslav@0
    16
{
jaroslav@0
    17
    /** Output from compiler is send here. */
jaroslav@0
    18
  protected XelfiCompilerOutput out;
jaroslav@0
    19
jaroslav@0
    20
  XelfiCompilerMain(XelfiCompilerOutput o)
jaroslav@0
    21
  {
jaroslav@0
    22
    out = o;
jaroslav@0
    23
  }
jaroslav@0
    24
jaroslav@0
    25
  public void compileClass(File file)
jaroslav@0
    26
  {
jaroslav@0
    27
    String args[] = null;
jaroslav@0
    28
    if(CompilerOptions.getUseGparam())
jaroslav@0
    29
    {
jaroslav@0
    30
      args = new String[2];
jaroslav@0
    31
      args[0] = "-g";
jaroslav@0
    32
      args[1] = file.toString();
jaroslav@0
    33
      output("Compiling: " + args[0] + " " + args[1]);
jaroslav@0
    34
    }
jaroslav@0
    35
    else
jaroslav@0
    36
    {
jaroslav@0
    37
      args = new String[1];
jaroslav@0
    38
      args[0] = file.toString();
jaroslav@0
    39
      output("Compiling: " + args[0]);
jaroslav@0
    40
    }
jlahoda@14
    41
    JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
jlahoda@14
    42
    StandardJavaFileManager fm = compiler.getStandardFileManager(null, null, null);
jlahoda@14
    43
    try {
jlahoda@14
    44
      compiler.getTask(new OutputStreamWriter(out), fm, null, Arrays.asList(args).subList(0, args.length - 1), null, fm.getJavaFileObjects(args[args.length - 1])).call();
jlahoda@14
    45
    } finally {
jlahoda@14
    46
      try {
jlahoda@14
    47
        fm.close();
jlahoda@14
    48
      } catch (IOException ex) {
jlahoda@14
    49
         ex.printStackTrace();
jlahoda@14
    50
      }
jlahoda@14
    51
    }
jaroslav@0
    52
    output("\n");
jaroslav@0
    53
  }
jaroslav@0
    54
jaroslav@0
    55
  public void error(String err)
jaroslav@0
    56
  {
jaroslav@0
    57
    out.topLevelError(err);
jaroslav@0
    58
  }
jaroslav@0
    59
jaroslav@0
    60
  public void output(String msg)
jaroslav@0
    61
  {
jaroslav@0
    62
    out.topLevelOutput(msg);
jaroslav@0
    63
  }
jaroslav@0
    64
}