blob: 8b28ab7d569584b1199970dd6700e460ebbbed24 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2005, 2007 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:
* jgarms@bea.com - initial API and implementation
*******************************************************************************/
package org.eclipse.jdt.apt.core.internal;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jdt.apt.core.internal.generatedfile.GeneratedFileManager;
import org.eclipse.jdt.apt.core.internal.generatedfile.GeneratedSourceFolderManager;
import org.eclipse.jdt.apt.core.internal.util.FileSystemUtil;
import org.eclipse.jdt.apt.core.util.AptPreferenceConstants;
import org.eclipse.jdt.core.IJavaProject;
/**
* Stores project-specific data for APT. Analagous to JavaProject
* @author jgarms
*
*/
public class AptProject {
private final IJavaProject _javaProject;
private final GeneratedFileManager _gfm;
private final GeneratedSourceFolderManager _gsfm;
public AptProject(final IJavaProject javaProject) {
_javaProject = javaProject;
_gsfm = new GeneratedSourceFolderManager(this);
_gfm = new GeneratedFileManager(this, _gsfm);
}
public IJavaProject getJavaProject() {
return _javaProject;
}
public GeneratedFileManager getGeneratedFileManager() {
return _gfm;
}
public GeneratedSourceFolderManager getGeneratedSourceFolderManager() {
return _gsfm;
}
/**
* This method should be called whenever compilation begins, to perform
* initialization and verify configuration.
*/
public void compilationStarted() {
_gfm.compilationStarted();
}
/**
* This method should be called whenever project preferences are
* changed by the user. This may cause the classpath and generated
* source folder to change, so this should <em>not</em> be called
* from a context where resources may be locked, e.g., within
* certain resource change listeners.
* @param key a preference key such as @see AptPreferenceConstants#APT_ENABLED
*/
public void preferenceChanged(String key) {
if (AptPreferenceConstants.APT_GENSRCDIR.equals(key)) {
_gsfm.folderNamePreferenceChanged();
}
else if(AptPreferenceConstants.APT_ENABLED.equals(key) ){
_gsfm.enabledPreferenceChanged();
}
}
/**
* Invoked whenever a project is cleaned. This will remove any state kept about
* generated files for the given project. If the deleteFiles flag is specified,
* then the contents of the generated source folder will be deleted.
*
* @param deleteFiles true if the contents of the generated source folder are to be
* deleted, false otherwise.
*/
public void projectClean( boolean deleteFiles )
{
_gfm.projectCleaned();
// delete the contents of the generated source folder, but don't delete
// the generated source folder because that will cause a classpath change,
// which will force the next build to be a full build.
if ( deleteFiles )
{
IFolder f = _gsfm.getFolder();
if ( f != null && f.exists() )
{
try
{
IResource[] members = f.members();
for ( int i = 0; i<members.length; i++ ){
FileSystemUtil.deleteDerivedResources(members[i]);
}
}
catch ( CoreException ce )
{
AptPlugin.log(ce, "Could not delete generated files"); //$NON-NLS-1$
}
}
}
}
/**
* Invoked when a project is closed.
*/
public void projectClosed()
{
_gfm.projectClosed();
}
/**
* Invoked when a project has been deleted, to clean up
* state associated with the project.
* This will not delete any of the project's generated files
* from disk, nor will it delete this object (which in turn
* owns the GeneratedFileManager for this project).
*/
public void projectDeleted()
{
if (AptPlugin.DEBUG)
AptPlugin.trace("AptProject.projectDeleted cleaning state for project " + _javaProject.getElementName()); //$NON-NLS-1$
_gfm.projectDeleted();
}
}