001 /*
002 * Copyright 2005-2006 Sun Microsystems, Inc. All Rights Reserved.
003 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
004 *
005 * This code is free software; you can redistribute it and/or modify it
006 * under the terms of the GNU General Public License version 2 only, as
007 * published by the Free Software Foundation. Sun designates this
008 * particular file as subject to the "Classpath" exception as provided
009 * by Sun in the LICENSE file that accompanied this code.
010 *
011 * This code is distributed in the hope that it will be useful, but WITHOUT
012 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
013 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
014 * version 2 for more details (a copy is included in the LICENSE file that
015 * accompanied this code).
016 *
017 * You should have received a copy of the GNU General Public License version
018 * 2 along with this work; if not, write to the Free Software Foundation,
019 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
020 *
021 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
022 * CA 95054 USA or visit www.sun.com if you need additional information or
023 * have any questions.
024 */
025
026 package com.sun.source.util;
027
028 import com.sun.source.tree.CompilationUnitTree;
029 import com.sun.source.tree.Tree;
030 import java.io.IOException;
031 import javax.lang.model.element.Element;
032 import javax.lang.model.type.TypeMirror;
033 import javax.lang.model.util.Elements;
034 import javax.lang.model.util.Types;
035 import javax.tools.JavaCompiler.CompilationTask;
036 import javax.tools.JavaFileObject;
037
038 /**
039 * Provides access to functionality specific to the Sun Java Compiler, javac.
040 *
041 * @author Peter von der Ahé
042 * @author Jonathan Gibbons
043 * @since 1.6
044 */
045 public abstract class JavacTask implements CompilationTask {
046
047 /**
048 * Parse the specified files returning a list of abstract syntax trees.
049 *
050 * @return a list of abstract syntax trees
051 * @throws IOException if an unhandled I/O error occurred in the compiler.
052 */
053 public abstract Iterable<? extends CompilationUnitTree> parse()
054 throws IOException;
055
056 /**
057 * Complete all analysis.
058 *
059 * @return a list of elements that were analyzed
060 * @throws IOException if an unhandled I/O error occurred in the compiler.
061 */
062 public abstract Iterable<? extends Element> analyze() throws IOException;
063
064 /**
065 * Generate code.
066 *
067 * @return a list of files that were generated
068 * @throws IOException if an unhandled I/O error occurred in the compiler.
069 */
070 public abstract Iterable<? extends JavaFileObject> generate() throws IOException;
071
072 /**
073 * The specified listener will receive events describing the progress of
074 * this compilation task.
075 */
076 public abstract void setTaskListener(TaskListener taskListener);
077
078 /**
079 * Get a type mirror of the tree node determined by the specified path.
080 */
081 public abstract TypeMirror getTypeMirror(Iterable<? extends Tree> path);
082 /**
083 * Get a utility object for dealing with program elements.
084 */
085 public abstract Elements getElements();
086
087 /**
088 * Get a utility object for dealing with type mirrors.
089 */
090 public abstract Types getTypes();
091 }