| /******************************************************************************* |
| * Copyright (c) 2007, 2011 BEA Systems, Inc. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * wharley@bea.com - initial API and implementation |
| * IBM Corporation - fix for 342598 |
| *******************************************************************************/ |
| |
| package org.eclipse.jdt.internal.compiler.apt.dispatch; |
| |
| import java.util.ArrayList; |
| import java.util.List; |
| import java.util.Map; |
| |
| import javax.annotation.processing.Filer; |
| import javax.annotation.processing.Messager; |
| import javax.annotation.processing.ProcessingEnvironment; |
| import javax.lang.model.SourceVersion; |
| import javax.lang.model.util.Elements; |
| import javax.lang.model.util.Types; |
| |
| import org.eclipse.jdt.internal.compiler.Compiler; |
| import org.eclipse.jdt.internal.compiler.apt.model.ElementsImpl; |
| import org.eclipse.jdt.internal.compiler.apt.model.Factory; |
| import org.eclipse.jdt.internal.compiler.apt.model.TypesImpl; |
| import org.eclipse.jdt.internal.compiler.classfmt.ClassFileConstants; |
| import org.eclipse.jdt.internal.compiler.env.ICompilationUnit; |
| import org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment; |
| import org.eclipse.jdt.internal.compiler.lookup.ReferenceBinding; |
| |
| /** |
| * Implementation of ProcessingEnvironment that is common to batch and IDE environments. |
| */ |
| public abstract class BaseProcessingEnvImpl implements ProcessingEnvironment { |
| |
| // Initialized in subclasses: |
| protected Filer _filer; |
| protected Messager _messager; |
| protected Map<String, String> _processorOptions; |
| protected Compiler _compiler; |
| |
| // Initialized in this base class: |
| protected Elements _elementUtils; |
| protected Types _typeUtils; |
| private List<ICompilationUnit> _addedUnits; |
| private List<ReferenceBinding> _addedClassFiles; |
| private List<ICompilationUnit> _deletedUnits; |
| private boolean _errorRaised; |
| private Factory _factory; |
| |
| public BaseProcessingEnvImpl() { |
| _addedUnits = new ArrayList<ICompilationUnit>(); |
| _addedClassFiles = new ArrayList<ReferenceBinding>(); |
| _deletedUnits = new ArrayList<ICompilationUnit>(); |
| _elementUtils = new ElementsImpl(this); |
| _typeUtils = new TypesImpl(this); |
| _factory = new Factory(this); |
| _errorRaised = false; |
| } |
| |
| public void addNewUnit(ICompilationUnit unit) { |
| _addedUnits.add(unit); |
| } |
| |
| public void addNewClassFile(ReferenceBinding binding) { |
| _addedClassFiles.add(binding); |
| } |
| |
| public Compiler getCompiler() { |
| return _compiler; |
| } |
| |
| public ICompilationUnit[] getDeletedUnits() { |
| ICompilationUnit[] result = new ICompilationUnit[_deletedUnits.size()]; |
| _deletedUnits.toArray(result); |
| return result; |
| } |
| |
| public ICompilationUnit[] getNewUnits() { |
| ICompilationUnit[] result = new ICompilationUnit[_addedUnits.size()]; |
| _addedUnits.toArray(result); |
| return result; |
| } |
| |
| @Override |
| public Elements getElementUtils() { |
| return _elementUtils; |
| } |
| |
| @Override |
| public Filer getFiler() { |
| return _filer; |
| } |
| |
| @Override |
| public Messager getMessager() { |
| return _messager; |
| } |
| |
| @Override |
| public Map<String, String> getOptions() { |
| return _processorOptions; |
| } |
| |
| @Override |
| public Types getTypeUtils() { |
| return _typeUtils; |
| } |
| |
| public LookupEnvironment getLookupEnvironment() { |
| return _compiler.lookupEnvironment; |
| } |
| |
| @Override |
| public SourceVersion getSourceVersion() { |
| if (this._compiler.options.sourceLevel <= ClassFileConstants.JDK1_5) { |
| return SourceVersion.RELEASE_5; |
| } |
| if (this._compiler.options.sourceLevel == ClassFileConstants.JDK1_6) { |
| return SourceVersion.RELEASE_6; |
| } |
| try { |
| return SourceVersion.valueOf("RELEASE_7"); //$NON-NLS-1$ |
| } catch(IllegalArgumentException e) { |
| // handle call on a JDK 6 |
| return SourceVersion.RELEASE_6; |
| } |
| } |
| |
| /** |
| * Called when AnnotationProcessorManager has retrieved the list of |
| * newly generated compilation units (ie, once per round) |
| */ |
| public void reset() { |
| _addedUnits.clear(); |
| _addedClassFiles.clear(); |
| _deletedUnits.clear(); |
| } |
| |
| /** |
| * Has an error been raised in any of the rounds of processing in this build? |
| * @return |
| */ |
| public boolean errorRaised() |
| { |
| return _errorRaised; |
| } |
| |
| /** |
| * Set or clear the errorRaised flag. Typically this will be set by the Messager |
| * when an error has been raised, and it will never be cleared. |
| */ |
| public void setErrorRaised(boolean b) |
| { |
| _errorRaised = true; |
| } |
| |
| public Factory getFactory() |
| { |
| return _factory; |
| } |
| |
| public ReferenceBinding[] getNewClassFiles() { |
| ReferenceBinding[] result = new ReferenceBinding[_addedClassFiles.size()]; |
| _addedClassFiles.toArray(result); |
| return result; |
| } |
| |
| } |