diff options
author | Walter Harley | 2006-01-23 23:21:54 +0000 |
---|---|---|
committer | Walter Harley | 2006-01-23 23:21:54 +0000 |
commit | a994e662a4817b94f0ffd1269ce2502dfa3e3fd2 (patch) | |
tree | 499a2d5efa2d7f7a8bcb0c4a455444bbda9a24d3 | |
parent | 49099cec4e59f123467edd68104b9573efb32a38 (diff) | |
download | eclipse.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.
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); + } } /** |