src/main/java/xelfi/compiler/XelfiCompilerMain.java
author Jan Lahoda <jlahoda@netbeans.org>
Tue, 24 Jan 2017 04:27:23 +0100
changeset 14 3ff7a893a7ce
parent 5 2c326fbd80f2
child 15 cdb47e644581
permissions -rw-r--r--
Using 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 sun.tools.javac.*;
jaroslav@0
     9
import sun.tools.java.*;
jaroslav@0
    10
import java.io.*;
jlahoda@14
    11
import java.util.Arrays;
jlahoda@14
    12
import javax.tools.JavaCompiler;
jlahoda@14
    13
import javax.tools.StandardJavaFileManager;
jlahoda@14
    14
import javax.tools.ToolProvider;
jaroslav@0
    15
jaroslav@0
    16
jaroslav@0
    17
class XelfiCompilerMain extends Main implements MainCompiler
jaroslav@0
    18
{
jaroslav@0
    19
    /** Output from compiler is send here. */
jaroslav@0
    20
  protected XelfiCompilerOutput out;
jaroslav@0
    21
jaroslav@0
    22
  XelfiCompilerMain(XelfiCompilerOutput o)
jaroslav@0
    23
  {
jaroslav@0
    24
    super(o, "javac");
jaroslav@0
    25
    out = o;
jaroslav@0
    26
  }
jaroslav@0
    27
jaroslav@0
    28
  public void compileClass(File file)
jaroslav@0
    29
  {
jaroslav@0
    30
    String args[] = null;
jaroslav@0
    31
    if(CompilerOptions.getUseGparam())
jaroslav@0
    32
    {
jaroslav@0
    33
      args = new String[2];
jaroslav@0
    34
      args[0] = "-g";
jaroslav@0
    35
      args[1] = file.toString();
jaroslav@0
    36
      output("Compiling: " + args[0] + " " + args[1]);
jaroslav@0
    37
    }
jaroslav@0
    38
    else
jaroslav@0
    39
    {
jaroslav@0
    40
      args = new String[1];
jaroslav@0
    41
      args[0] = file.toString();
jaroslav@0
    42
      output("Compiling: " + args[0]);
jaroslav@0
    43
    }
jlahoda@14
    44
    JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
jlahoda@14
    45
    StandardJavaFileManager fm = compiler.getStandardFileManager(null, null, null);
jlahoda@14
    46
    try {
jlahoda@14
    47
      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
    48
    } finally {
jlahoda@14
    49
      try {
jlahoda@14
    50
        fm.close();
jlahoda@14
    51
      } catch (IOException ex) {
jlahoda@14
    52
         ex.printStackTrace();
jlahoda@14
    53
      }
jlahoda@14
    54
    }
jaroslav@0
    55
    output("\n");
jaroslav@0
    56
  }
jaroslav@0
    57
jaroslav@0
    58
  public void error(String err)
jaroslav@0
    59
  {
jaroslav@0
    60
    out.topLevelError(err);
jaroslav@0
    61
  }
jaroslav@0
    62
jaroslav@0
    63
  public void output(String msg)
jaroslav@0
    64
  {
jaroslav@0
    65
    out.topLevelOutput(msg);
jaroslav@0
    66
  }
jaroslav@0
    67
}