Example usage for org.aspectj.tools.ajc Main setCompletionRunner

List of usage examples for org.aspectj.tools.ajc Main setCompletionRunner

Introduction

In this page you can find the example usage for org.aspectj.tools.ajc Main setCompletionRunner.

Prototype

public void setCompletionRunner(Runnable runner) 

Source Link

Document

Install a Runnable to be invoked synchronously after each compile completes.

Usage

From source file:org.eclipse.ajdt.core.ant.AjcTask.java

License:Open Source License

/**
 * Run the compile in the same VM by loading the compiler (Main), setting up any message holders, doing the compile, and
 * converting abort/failure and error messages to BuildException, as appropriate.
 * //  ww  w.  ja  va2 s  .  c  om
  * @return true on successful compilation
 * @throws BuildException if abort or failure messages or if errors and failonerror.
 * 
 */
protected boolean executeInSameVM(String[] args) {
    if (null != maxMem) {
        log("maxMem ignored unless forked: " + maxMem, Project.MSG_WARN);
    }
    IMessageHolder holder = messageHolder;
    int numPreviousErrors;
    if (null == holder) {
        MessageHandler mhandler = new MessageHandler(true);
        final IMessageHandler delegate;
        delegate = new AntMessageHandler(this.logger, this.verbose, false);
        mhandler.setInterceptor(delegate);
        holder = mhandler;
        numPreviousErrors = 0;
    } else {
        numPreviousErrors = holder.numMessages(IMessage.ERROR, true);
    }
    AjdtCommandForAnt command = new AjdtCommandForAnt();
    {
        Main newmain = new Main();
        newmain.setCommand(command);
        newmain.setHolder(holder);
        newmain.setCompletionRunner(new Runnable() {
            public void run() {
                doCompletionTasks();
            }
        });
        if (null != main) {
            MessageUtil.fail(holder, "still running prior main");
            return false;
        }
        main = newmain;
    }
    main.runMain(args, false);
    if (failonerror) {
        int errs = holder.numMessages(IMessage.ERROR, false);
        errs -= numPreviousErrors;
        if (0 < errs) {
            String m = errs + " errors";
            MessageUtil.print(System.err, holder, "", MessageUtil.MESSAGE_ALL, MessageUtil.PICK_ERROR, true);
            throw new BuildException(m);
        }
    }
    // Throw BuildException if there are any fail or abort
    // messages.
    // The BuildException message text has a list of class names
    // for the exceptions found in the messages, or the
    // number of fail/abort messages found if there were
    // no exceptions for any of the fail/abort messages.
    // The interceptor message handler should have already
    // printed the messages, including any stack traces.
    // HACK: this ignores the Usage message
    {
        IMessage[] fails = holder.getMessages(IMessage.FAIL, true);
        if (!LangUtil.isEmpty(fails)) {
            StringBuffer sb = new StringBuffer();
            String prefix = "fail due to ";
            int numThrown = 0;
            for (int i = 0; i < fails.length; i++) {
                String message = fails[i].getMessage();
                if (LangUtil.isEmpty(message)) {
                    message = "<no message>";
                } else if (-1 != message.indexOf(USAGE_SUBSTRING)) {
                    continue;
                }
                Throwable t = fails[i].getThrown();
                if (null != t) {
                    numThrown++;
                    sb.append(prefix);
                    sb.append(LangUtil.unqualifiedClassName(t.getClass()));
                    String thrownMessage = t.getMessage();
                    if (!LangUtil.isEmpty(thrownMessage)) {
                        sb.append(" \"" + thrownMessage + "\"");
                    }
                }
                sb.append("\"" + message + "\"");
                prefix = ", ";
            }
            if (0 < sb.length()) {
                sb.append(" (" + numThrown + " exceptions)");
                throw new BuildException(sb.toString());
            }
        }
    }
    return command.isFailed();
}