Package com.onpositive.google.scrapbook

Source Code of com.onpositive.google.scrapbook.CompilerFacade$Unit

package com.onpositive.google.scrapbook;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Map;

import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.compiler.CategorizedProblem;
import org.eclipse.jdt.core.compiler.IProblem;
import org.eclipse.jdt.core.dom.AST;
import org.eclipse.jdt.core.dom.ASTParser;
import org.eclipse.jdt.core.dom.CompilationUnit;
import org.eclipse.jdt.core.dom.ImportDeclaration;
import org.eclipse.jdt.internal.compiler.ClassFile;
import org.eclipse.jdt.internal.compiler.CompilationResult;
import org.eclipse.jdt.internal.compiler.Compiler;
import org.eclipse.jdt.internal.compiler.ICompilerRequestor;
import org.eclipse.jdt.internal.compiler.IErrorHandlingPolicy;
import org.eclipse.jdt.internal.compiler.IProblemFactory;
import org.eclipse.jdt.internal.compiler.env.ICompilationUnit;
import org.eclipse.jdt.internal.compiler.env.INameEnvironment;
import org.eclipse.jdt.internal.compiler.impl.CompilerOptions;
import org.eclipse.jdt.internal.compiler.problem.DefaultProblemFactory;
import org.eclipse.jdt.internal.core.builder.NameEnvironment;

@SuppressWarnings("restriction")
public class CompilerFacade {

  int length;
 
  private final class Unit implements
      org.eclipse.jdt.internal.compiler.env.ICompilationUnit {
    private final String str;

    private Unit(String str) {
      this.str = str;
    }

   
    public char[] getFileName() {
      return "snippet.java".toCharArray();
    }

   
    public char[][] getPackageName() {
      return new char[][] { "snippet".toCharArray() };
    }

   
    public char[] getMainTypeName() {
      return "snippet".toCharArray();
    }

   
    public char[] getContents() {
      StringBuilder bs = new StringBuilder();
     
      bs
          .append("package snippet;import java.io.PrintWriter;");
      ASTParser newParser = ASTParser.newParser(AST.JLS3);
      newParser.setSource(str.toCharArray());
      StringBuilder bls=new StringBuilder(str);
      CompilationUnit createAST = (CompilationUnit) newParser.createAST(null);
      //ArrayList<String> results = new ArrayList<String>();
      for (Object n : createAST.imports()) {
        ImportDeclaration decl = (ImportDeclaration) n;
        String name = decl.getName().getFullyQualifiedName();
        if (decl.isOnDemand()) {
          bs.append("import "+name+".*;");
         
        } else {
          bs.append("import "+name+";");
        }
        int i = decl.getStartPosition()+decl.getLength();
        for (int a=decl.getStartPosition();a<i;a++){
          bls.setCharAt(a, ' ');
        }
      }
     
      bs
          .append("public class snippet{ public void doIt(PrintWriter out) throws Throwable{\n");
      length=bs.length();
      bs.append(bls.toString());
      bs.append("\n}}");
      return bs.toString().toCharArray();
    }
  }

  byte[] resultBytes;

  @SuppressWarnings("unchecked")
  public byte[] compile(final String str, IJavaProject prj) {
    Map prjOptions = prj.getOptions(true);

    CompilerOptions options = new CompilerOptions(prjOptions);

    INameEnvironment environment = new NameEnvironment(prj);
    IErrorHandlingPolicy policy = new IErrorHandlingPolicy() {

     
      public boolean stopOnFirstError() {
        return false;
      }

     
      public boolean proceedOnErrors() {
        return true;
      }
    };

    ICompilerRequestor requestor = new ICompilerRequestor() {

     
      public void acceptResult(CompilationResult result) {
        ClassFile[] classFiles = result.getClassFiles();
        for (ClassFile f : classFiles) {
          resultBytes = f.getBytes();
          break;
        }
      }
    };
    IProblemFactory problemFactory = new DefaultProblemFactory();
    Compiler c = new Compiler(environment, policy, options, requestor,
        problemFactory);
    c.compile(new ICompilationUnit[] { new Unit(str) });
    environment.cleanup();
    return resultBytes;
  }

  CategorizedProblem[] problems;
  @SuppressWarnings("unchecked")
  public CategorizedProblem[] validate(final String str, IJavaProject prj) {
    Map prjOptions = prj.getOptions(true);

    CompilerOptions options = new CompilerOptions(prjOptions);

    INameEnvironment environment = new NameEnvironment(prj);
    IErrorHandlingPolicy policy = new IErrorHandlingPolicy() {

     
      public boolean stopOnFirstError() {
        return false;
      }

     
      public boolean proceedOnErrors() {
        return true;
      }
    };
   
    ICompilerRequestor requestor = new ICompilerRequestor() {

     
      public void acceptResult(CompilationResult result) {
        ClassFile[] classFiles = result.getClassFiles();
        for (ClassFile f : classFiles) {
          resultBytes = f.getBytes();
          break;
        }
        problems=result.getAllProblems();
      }
    };
    IProblemFactory problemFactory = new DefaultProblemFactory();
    Compiler c = new Compiler(environment, policy, options, requestor,
        problemFactory);
    c.compile(new ICompilationUnit[] { new Unit(str) });
    environment.cleanup();
    return problems;
  }
}
TOP

Related Classes of com.onpositive.google.scrapbook.CompilerFacade$Unit

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.