/******************************************************************************* * 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(); } }