Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWalter Harley2006-02-03 01:57:23 +0000
committerWalter Harley2006-02-03 01:57:23 +0000
commite2c8b8023f769df30a2baf6b7a009e9cef4c3a51 (patch)
tree44d7b29ab0b4d083a77e22da296e793ae8ba0376
parent14709b7432079a77371ede39c1d4b7e62802877d (diff)
downloadeclipse.jdt.core-e2c8b8023f769df30a2baf6b7a009e9cef4c3a51.tar.gz
eclipse.jdt.core-e2c8b8023f769df30a2baf6b7a009e9cef4c3a51.tar.xz
eclipse.jdt.core-e2c8b8023f769df30a2baf6b7a009e9cef4c3a51.zip
bugzilla 108070 - warn when setting generated source folder to an existing directory; only delete derived contents when deleting it.
-rw-r--r--org.eclipse.jdt.apt.core/src/org/eclipse/jdt/apt/core/internal/AptProject.java3
-rw-r--r--org.eclipse.jdt.apt.core/src/org/eclipse/jdt/apt/core/internal/generatedfile/GeneratedFileManager.java37
-rw-r--r--org.eclipse.jdt.apt.core/src/org/eclipse/jdt/apt/core/internal/generatedfile/GeneratedSourceFolderManager.java31
-rw-r--r--org.eclipse.jdt.apt.core/src/org/eclipse/jdt/apt/core/internal/util/FileSystemUtil.java65
-rw-r--r--org.eclipse.jdt.apt.ui/src/org/eclipse/jdt/apt/ui/internal/preferences/AptConfigurationBlock.java7
-rw-r--r--org.eclipse.jdt.apt.ui/src/org/eclipse/jdt/apt/ui/internal/preferences/Messages.java2
-rw-r--r--org.eclipse.jdt.apt.ui/src/org/eclipse/jdt/apt/ui/internal/preferences/messages.properties1
7 files changed, 74 insertions, 72 deletions
diff --git a/org.eclipse.jdt.apt.core/src/org/eclipse/jdt/apt/core/internal/AptProject.java b/org.eclipse.jdt.apt.core/src/org/eclipse/jdt/apt/core/internal/AptProject.java
index b42b8330af..aaabc31584 100644
--- a/org.eclipse.jdt.apt.core/src/org/eclipse/jdt/apt/core/internal/AptProject.java
+++ b/org.eclipse.jdt.apt.core/src/org/eclipse/jdt/apt/core/internal/AptProject.java
@@ -6,6 +6,7 @@ import org.eclipse.core.runtime.CoreException;
import org.eclipse.jdt.apt.core.AptPlugin;
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;
@@ -92,7 +93,7 @@ public class AptProject {
{
IResource[] members = f.members();
for ( int i = 0; i<members.length; i++ ){
- _gfm.deleteDerivedResources(members[i]);
+ FileSystemUtil.deleteDerivedResources(members[i]);
}
}
catch ( CoreException ce )
diff --git a/org.eclipse.jdt.apt.core/src/org/eclipse/jdt/apt/core/internal/generatedfile/GeneratedFileManager.java b/org.eclipse.jdt.apt.core/src/org/eclipse/jdt/apt/core/internal/generatedfile/GeneratedFileManager.java
index 0de2f36342..4a22f2303d 100644
--- a/org.eclipse.jdt.apt.core/src/org/eclipse/jdt/apt/core/internal/generatedfile/GeneratedFileManager.java
+++ b/org.eclipse.jdt.apt.core/src/org/eclipse/jdt/apt/core/internal/generatedfile/GeneratedFileManager.java
@@ -1040,43 +1040,6 @@ public class GeneratedFileManager {
}
/**
- * If the given resource is a folder, then recursively deleted all derived
- * files and folders contained within it. Delete the folder if it becomes empty
- * and if itself is also a derived resource.
- * If the given resource is a file, delete it iff it is a derived resource.
- * The resource is left untouched if it is no a folder or a file.
- * @param resource
- * @return <code>true</code> iff the resource has been deleted.
- * @throws CoreException
- */
- public boolean deleteDerivedResources(final IResource resource)
- throws CoreException
- {
- if( resource.getType() == IResource.FOLDER ){
- boolean deleteFolder = resource.isDerived();
- IResource[] members = ((IFolder)resource).members();
- for( int i=0, len=members.length; i<len; i++ ){
- deleteFolder &= deleteDerivedResources(members[i]);
- }
- if( deleteFolder ){
- resource.delete(true, null);
- return true;
- }
- return false;
- }
- else if( resource.getType() == IResource.FILE ){
- if( resource.isDerived() ){
- resource.delete(true, null);
- return true;
- }
- return false;
- }
- // will skip pass everything else.
- else
- return false;
- }
-
- /**
* This method should only be used for testing purposes to ensure
* that maps contain entries when we expect them to.
*/
diff --git a/org.eclipse.jdt.apt.core/src/org/eclipse/jdt/apt/core/internal/generatedfile/GeneratedSourceFolderManager.java b/org.eclipse.jdt.apt.core/src/org/eclipse/jdt/apt/core/internal/generatedfile/GeneratedSourceFolderManager.java
index db4433281b..40613f3185 100644
--- a/org.eclipse.jdt.apt.core/src/org/eclipse/jdt/apt/core/internal/generatedfile/GeneratedSourceFolderManager.java
+++ b/org.eclipse.jdt.apt.core/src/org/eclipse/jdt/apt/core/internal/generatedfile/GeneratedSourceFolderManager.java
@@ -13,11 +13,15 @@ package org.eclipse.jdt.apt.core.internal.generatedfile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IWorkspace;
import org.eclipse.core.resources.IWorkspaceRoot;
+import org.eclipse.core.resources.IWorkspaceRunnable;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.OperationCanceledException;
import org.eclipse.core.runtime.Path;
import org.eclipse.jdt.apt.core.AptPlugin;
import org.eclipse.jdt.apt.core.internal.AptProject;
@@ -405,7 +409,7 @@ public class GeneratedSourceFolderManager {
* @param srcFolder
*/
private void removeFolder() {
- IFolder srcFolder = null;
+ final IFolder srcFolder;
synchronized ( this )
{
srcFolder = _generatedSourceFolder;
@@ -420,13 +424,32 @@ public class GeneratedSourceFolderManager {
// clean up the classpath first so that when we actually delete the
// generated source folder we won't cause a classpath error.
- try {
- ClasspathUtil.removeFromProjectClasspath( _aptProject.getJavaProject(), srcFolder, null );
+ try {
+ if (srcFolder.isDerived()) {
+ ClasspathUtil.removeFromProjectClasspath( _aptProject.getJavaProject(), srcFolder, null );
+ }
} catch (JavaModelException e) {
AptPlugin.log( e, "Failed to remove classpath entry for old generated src folder " + srcFolder.getName() ); //$NON-NLS-1$
}
- FileSystemUtil.deleteFolder(srcFolder);
+ final IWorkspaceRunnable runnable = new IWorkspaceRunnable(){
+ public void run(IProgressMonitor monitor)
+ {
+ try {
+ FileSystemUtil.deleteDerivedResources(srcFolder);
+ } catch(CoreException e) {
+ AptPlugin.log(e, "failed to delete old generated source folder " + srcFolder.getName() ); //$NON-NLS-1$
+ } catch(OperationCanceledException cancel) {
+ AptPlugin.log(cancel, "deletion of generated source folder got cancelled"); //$NON-NLS-1$
+ }
+ }
+ };
+ IWorkspace ws = ResourcesPlugin.getWorkspace();
+ try{
+ ws.run(runnable, ws.getRoot(), IWorkspace.AVOID_UPDATE, null);
+ }catch(CoreException e){
+ AptPlugin.log(e, "Runnable for deleting old generated source folder " + srcFolder.getName() + " failed."); //$NON-NLS-1$ //$NON-NLS-2$
+ }
}
/**
diff --git a/org.eclipse.jdt.apt.core/src/org/eclipse/jdt/apt/core/internal/util/FileSystemUtil.java b/org.eclipse.jdt.apt.core/src/org/eclipse/jdt/apt/core/internal/util/FileSystemUtil.java
index 293fc78d1a..2df6292620 100644
--- a/org.eclipse.jdt.apt.core/src/org/eclipse/jdt/apt/core/internal/util/FileSystemUtil.java
+++ b/org.eclipse.jdt.apt.core/src/org/eclipse/jdt/apt/core/internal/util/FileSystemUtil.java
@@ -24,13 +24,8 @@ import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.IWorkspace;
-import org.eclipse.core.resources.IWorkspaceRunnable;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.OperationCanceledException;
-import org.eclipse.jdt.apt.core.AptPlugin;
/**
* Simple utility class to encapsulate an mkdirs() that avoids a timing issue
@@ -41,33 +36,43 @@ public final class FileSystemUtil
private FileSystemUtil() {}
/**
- * Remove the specified folder from disk, using a WorkspaceRunnable so that
- * the job blocks until it can obtain the necessary locks.
- * @param folder
+ * If the given resource is a folder, then recursively deleted all derived
+ * files and folders contained within it. Delete the folder if it becomes empty
+ * and if itself is also a derived resource.
+ * If the given resource is a file, delete it iff it is a derived resource.
+ * The resource is left untouched if it is no a folder or a file.
+ * @param resource
+ * @return <code>true</code> iff the resource has been deleted.
+ * @throws CoreException
*/
- public static void deleteFolder(final IFolder folder) {
- if( folder != null ){
- final IWorkspaceRunnable runnable = new IWorkspaceRunnable(){
- public void run(IProgressMonitor monitor)
- {
- if( folder != null ){
- try{
- folder.delete(true, false, null);
- }catch(CoreException e){
- AptPlugin.log(e, "failed to delete old generated source folder " + folder.getName() ); //$NON-NLS-1$
- }catch(OperationCanceledException cancel){
- AptPlugin.log(cancel, "deletion of generated source folder got cancelled"); //$NON-NLS-1$
- }
- }
- }
- };
- IWorkspace ws = ResourcesPlugin.getWorkspace();
- try{
- ws.run(runnable, ws.getRoot(), IWorkspace.AVOID_UPDATE, null);
- }catch(CoreException e){
- AptPlugin.log(e, "Runnable for deleting old generated source folder " + folder.getName() + " failed."); //$NON-NLS-1$ //$NON-NLS-2$
- }
+ public static boolean deleteDerivedResources(final IResource resource)
+ throws CoreException
+ {
+ if (null == resource) {
+ return false;
+ }
+ if( resource.getType() == IResource.FOLDER ){
+ boolean deleteFolder = resource.isDerived();
+ IResource[] members = ((IFolder)resource).members();
+ for( int i=0, len=members.length; i<len; i++ ){
+ deleteFolder &= deleteDerivedResources(members[i]);
+ }
+ if( deleteFolder ){
+ resource.delete(true, null);
+ return true;
+ }
+ return false;
}
+ else if( resource.getType() == IResource.FILE ){
+ if( resource.isDerived() ){
+ resource.delete(true, null);
+ return true;
+ }
+ return false;
+ }
+ // will skip pass everything else.
+ else
+ return false;
}
public static void mkdirs( File parent )
diff --git a/org.eclipse.jdt.apt.ui/src/org/eclipse/jdt/apt/ui/internal/preferences/AptConfigurationBlock.java b/org.eclipse.jdt.apt.ui/src/org/eclipse/jdt/apt/ui/internal/preferences/AptConfigurationBlock.java
index 41f17a132d..03efef5446 100644
--- a/org.eclipse.jdt.apt.ui/src/org/eclipse/jdt/apt/ui/internal/preferences/AptConfigurationBlock.java
+++ b/org.eclipse.jdt.apt.ui/src/org/eclipse/jdt/apt/ui/internal/preferences/AptConfigurationBlock.java
@@ -18,6 +18,7 @@ import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
+import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.preferences.IScopeContext;
@@ -386,6 +387,12 @@ public class AptConfigurationBlock extends BaseConfigurationBlock {
if (!AptConfig.validateGenSrcDir(fJProj, dirName)) {
return new StatusInfo(IStatus.ERROR, Messages.AptConfigurationBlock_genSrcDirMustBeValidRelativePath);
}
+ if (fJProj != null && !dirName.equals(fOriginalGenSrcDir)) {
+ IFolder folder = fJProj.getProject().getFolder( dirName );
+ if (folder != null && folder.exists() && !folder.isDerived()) {
+ return new StatusInfo(IStatus.WARNING, Messages.AptConfigurationBlock_warningContentsMayBeDeleted);
+ }
+ }
return new StatusInfo();
}
diff --git a/org.eclipse.jdt.apt.ui/src/org/eclipse/jdt/apt/ui/internal/preferences/Messages.java b/org.eclipse.jdt.apt.ui/src/org/eclipse/jdt/apt/ui/internal/preferences/Messages.java
index b3075e114b..8fa73c3cb0 100644
--- a/org.eclipse.jdt.apt.ui/src/org/eclipse/jdt/apt/ui/internal/preferences/Messages.java
+++ b/org.eclipse.jdt.apt.ui/src/org/eclipse/jdt/apt/ui/internal/preferences/Messages.java
@@ -105,4 +105,6 @@ public class Messages extends NLS {
public static String AdvancedFactoryPathOptionsDialog_batchMode;
public static String AdvancedFactoryPathOptionsDialog_label_processorsInThisContainer;
+
+ public static String AptConfigurationBlock_warningContentsMayBeDeleted;
}
diff --git a/org.eclipse.jdt.apt.ui/src/org/eclipse/jdt/apt/ui/internal/preferences/messages.properties b/org.eclipse.jdt.apt.ui/src/org/eclipse/jdt/apt/ui/internal/preferences/messages.properties
index 6e5ea2fe5e..edc77e1b9f 100644
--- a/org.eclipse.jdt.apt.ui/src/org/eclipse/jdt/apt/ui/internal/preferences/messages.properties
+++ b/org.eclipse.jdt.apt.ui/src/org/eclipse/jdt/apt/ui/internal/preferences/messages.properties
@@ -6,6 +6,7 @@ AptConfigurationBlock_remove=Remove
AptConfigurationBlock_value=Value
AptConfigurationBlock_generatedSrcDir=Generated source directory:
AptConfigurationBlock_warningIgnoredOptions=An automatically set option will override this option
+AptConfigurationBlock_warningContentsMayBeDeleted=Contents of generated source directory may be deleted
AptConfigurationBlock_classpathAddedAutomaticallyNote=Note: options such as \"-classpath\" and \"-sourcepath\" are automatically passed to all processors, with values corresponding to the project's Java settings.
AptConfigurationBlock_genSrcDirMustBeValidRelativePath=Generated source directory must be a valid relative path
AptConfigurationBlock_options=Processor options (-Akey=value):

Back to the top