Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWalter Harley2006-01-23 23:21:54 +0000
committerWalter Harley2006-01-23 23:21:54 +0000
commita994e662a4817b94f0ffd1269ce2502dfa3e3fd2 (patch)
tree499a2d5efa2d7f7a8bcb0c4a455444bbda9a24d3
parent49099cec4e59f123467edd68104b9573efb32a38 (diff)
downloadeclipse.jdt.core-a994e662a4817b94f0ffd1269ce2502dfa3e3fd2.tar.gz
eclipse.jdt.core-a994e662a4817b94f0ffd1269ce2502dfa3e3fd2.tar.xz
eclipse.jdt.core-a994e662a4817b94f0ffd1269ce2502dfa3e3fd2.zip
bugzilla 124844 - NPE when activating Annotation Processing workspace prefs. Same change made in 3.2.
-rw-r--r--org.eclipse.jdt.apt.core/src/org/eclipse/jdt/apt/core/internal/generatedfile/GeneratedSourceFolderManager.java30
-rw-r--r--org.eclipse.jdt.apt.ui/src/org/eclipse/jdt/apt/ui/internal/preferences/AptConfigurationBlock.java10
2 files changed, 33 insertions, 7 deletions
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 142a57716b..db4433281b 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,9 +13,12 @@ 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.IWorkspaceRoot;
+import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Path;
import org.eclipse.jdt.apt.core.AptPlugin;
import org.eclipse.jdt.apt.core.internal.AptProject;
import org.eclipse.jdt.apt.core.internal.util.FileSystemUtil;
@@ -433,14 +436,35 @@ public class GeneratedSourceFolderManager {
* <code>dirString</code> is likely to succeed.
*/
public static boolean validate(final IJavaProject jproj, final String folderName) {
- IFolder folder = null;
+ boolean succeeded = false;
try {
- folder = jproj.getProject().getFolder( folderName );
+ if (jproj != null) {
+ // If we have a specific project, we can just ask.
+ IFolder folder = null;
+ folder = jproj.getProject().getFolder( folderName );
+ succeeded = (folder != null);
+ }
+ else {
+ // We're being asked about the default, so no specific project;
+ // here we have to guess. The code that will later fail if we
+ // get it wrong is IProject.getFolder(String). So we use some
+ // heuristics.
+ IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
+ IPath state = AptPlugin.getPlugin().getStateLocation();
+ IPath proposed = new Path(folderName);
+ IPath combined = state.append(proposed);
+ if (combined.segmentCount() <= state.segmentCount()) {
+ // proposed folder depth is too shallow
+ return false;
+ }
+ IFolder folder = root.getFolder(combined);
+ succeeded = (folder != null);
+ }
}
catch (IllegalArgumentException e) {
return false;
}
- return folder != null;
+ return succeeded;
}
}
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 8d020e824b..41f17a132d 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
@@ -326,10 +326,12 @@ public class AptConfigurationBlock extends BaseConfigurationBlock {
}
saveProcessorOptions(elements);
super.saveSettings();
- if (!fOriginalGenSrcDir.equals(fGenSrcDirField.getText()))
- fAptProject.preferenceChanged(AptPreferenceConstants.APT_GENSRCDIR);
- if (fOriginalAptEnabled != fAptEnabledField.isSelected())
- fAptProject.preferenceChanged(AptPreferenceConstants.APT_ENABLED);
+ if (null != fAptProject) {
+ if (!fOriginalGenSrcDir.equals(fGenSrcDirField.getText()))
+ fAptProject.preferenceChanged(AptPreferenceConstants.APT_GENSRCDIR);
+ if (fOriginalAptEnabled != fAptEnabledField.isSelected())
+ fAptProject.preferenceChanged(AptPreferenceConstants.APT_ENABLED);
+ }
}
/**

Back to the top