jjg@1210: /* jjg@1210: * Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved. jjg@1210: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. jjg@1210: * jjg@1210: * This code is free software; you can redistribute it and/or modify it jjg@1210: * under the terms of the GNU General Public License version 2 only, as jjg@1210: * published by the Free Software Foundation. Oracle designates this jjg@1210: * particular file as subject to the "Classpath" exception as provided jjg@1210: * by Oracle in the LICENSE file that accompanied this code. jjg@1210: * jjg@1210: * This code is distributed in the hope that it will be useful, but WITHOUT jjg@1210: * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or jjg@1210: * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License jjg@1210: * version 2 for more details (a copy is included in the LICENSE file that jjg@1210: * accompanied this code). jjg@1210: * jjg@1210: * You should have received a copy of the GNU General Public License version jjg@1210: * 2 along with this work; if not, write to the Free Software Foundation, jjg@1210: * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. jjg@1210: * jjg@1210: * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA jjg@1210: * or visit www.oracle.com if you need additional information or have any jjg@1210: * questions. jjg@1210: */ jjg@1210: jjg@1210: package com.sun.tools.javac.api; jjg@1210: jjg@1210: import java.io.IOException; jjg@1357: import java.util.Collection; jjg@1210: import java.util.Locale; jjg@1210: jjg@1210: import javax.annotation.processing.Processor; jjg@1210: import javax.lang.model.element.Element; jjg@1210: import javax.lang.model.type.TypeMirror; jjg@1210: import javax.lang.model.util.Elements; jjg@1210: import javax.lang.model.util.Types; jjg@1210: import javax.tools.JavaFileObject; jjg@1210: jjg@1210: import com.sun.source.tree.CompilationUnitTree; jjg@1210: import com.sun.source.tree.Tree; jjg@1210: import com.sun.source.util.JavacTask; jjg@1210: import com.sun.source.util.TaskListener; jjg@1210: import com.sun.tools.javac.model.JavacElements; jjg@1210: import com.sun.tools.javac.model.JavacTypes; jjg@1210: import com.sun.tools.javac.tree.JCTree; jjg@1210: import com.sun.tools.javac.util.Context; jjg@1210: jjg@1210: /** jjg@1210: * Provides basic functionality for implementations of JavacTask. jjg@1210: * jjg@1210: *

This is NOT part of any supported API. jjg@1210: * If you write code that depends on this, you do so at your own jjg@1210: * risk. This code and its internal interfaces are subject to change jjg@1210: * or deletion without notice.

jjg@1210: */ jjg@1210: public class BasicJavacTask extends JavacTask { jjg@1210: protected Context context; jjg@1210: private TaskListener taskListener; jjg@1210: jjg@1455: public static JavacTask instance(Context context) { jjg@1455: JavacTask instance = context.get(JavacTask.class); jjg@1455: if (instance == null) jjg@1455: instance = new BasicJavacTask(context, true); jjg@1455: return instance; jjg@1455: } jjg@1455: jjg@1210: public BasicJavacTask(Context c, boolean register) { jjg@1210: context = c; jjg@1210: if (register) jjg@1210: context.put(JavacTask.class, this); jjg@1210: } jjg@1210: jjg@1210: @Override jjg@1210: public Iterable parse() throws IOException { jjg@1210: throw new IllegalStateException(); jjg@1210: } jjg@1210: jjg@1210: @Override jjg@1210: public Iterable analyze() throws IOException { jjg@1210: throw new IllegalStateException(); jjg@1210: } jjg@1210: jjg@1210: @Override jjg@1210: public Iterable generate() throws IOException { jjg@1210: throw new IllegalStateException(); jjg@1210: } jjg@1210: jjg@1210: @Override jjg@1210: public void setTaskListener(TaskListener tl) { jjg@1210: MultiTaskListener mtl = MultiTaskListener.instance(context); jjg@1210: if (taskListener != null) jjg@1210: mtl.remove(taskListener); jjg@1210: if (tl != null) jjg@1210: mtl.add(tl); jjg@1210: taskListener = tl; jjg@1210: } jjg@1210: jjg@1210: @Override jjg@1210: public void addTaskListener(TaskListener taskListener) { jjg@1210: MultiTaskListener mtl = MultiTaskListener.instance(context); jjg@1210: mtl.add(taskListener); jjg@1210: } jjg@1210: jjg@1210: @Override jjg@1210: public void removeTaskListener(TaskListener taskListener) { jjg@1210: MultiTaskListener mtl = MultiTaskListener.instance(context); jjg@1210: mtl.remove(taskListener); jjg@1210: } jjg@1210: jjg@1210: public Collection getTaskListeners() { jjg@1210: MultiTaskListener mtl = MultiTaskListener.instance(context); jjg@1210: return mtl.getTaskListeners(); jjg@1210: } jjg@1210: jjg@1210: @Override jjg@1210: public TypeMirror getTypeMirror(Iterable path) { jjg@1210: // TODO: Should complete attribution if necessary jjg@1210: Tree last = null; jjg@1210: for (Tree node : path) jjg@1210: last = node; jjg@1210: return ((JCTree)last).type; jjg@1210: } jjg@1210: jjg@1210: @Override jjg@1210: public Elements getElements() { jjg@1210: return JavacElements.instance(context); jjg@1210: } jjg@1210: jjg@1210: @Override jjg@1210: public Types getTypes() { jjg@1210: return JavacTypes.instance(context); jjg@1210: } jjg@1210: jjg@1210: public void setProcessors(Iterable processors) { jjg@1210: throw new IllegalStateException(); jjg@1210: } jjg@1210: jjg@1210: public void setLocale(Locale locale) { jjg@1210: throw new IllegalStateException(); jjg@1210: } jjg@1210: jjg@1210: public Boolean call() { jjg@1210: throw new IllegalStateException(); jjg@1210: } jjg@1210: jjg@1334: /** jjg@1334: * For internal use only. This method will be jjg@1334: * removed without warning. jjg@1334: */ jjg@1416: public Context getContext() { jjg@1416: return context; jjg@1416: } jjg@1416: jjg@1416: /** jjg@1416: * For internal use only. This method will be jjg@1416: * removed without warning. jjg@1416: */ jjg@1334: public void updateContext(Context newContext) { jjg@1334: context = newContext; jjg@1334: } jjg@1210: }