diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/workingsets/IWorkingSetProjectConfigurationFactory.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/workingsets/IWorkingSetProjectConfigurationFactory.java index 5edef550059..0fe3241f0b0 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/workingsets/IWorkingSetProjectConfigurationFactory.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/workingsets/IWorkingSetProjectConfigurationFactory.java @@ -170,16 +170,23 @@ public interface IWorkingSetProjectConfigurationFactory { result = new String[0]; } + for (String natureId : result) { + if (projectNaturePartOrdering.get(natureId) == null) { + // re-do nature cache. Some natures were added recently + projectNaturePartOrdering = computeProjectNaturePartOrdering(); + break; + } + } + if (result.length > 0) { Arrays.sort(result, new Comparator() { @Override public int compare(String nature1, String nature2) { Set required1 = projectNaturePartOrdering.get(nature1); Set required2 = projectNaturePartOrdering.get(nature2); - - if (required1.contains(nature2)) { + if (required1 != null && required1.contains(nature2)) { return -1; // required1 precedes required2 - } else if (required2.contains(nature1)) { + } else if (required2 != null && required2.contains(nature1)) { return +1; // required2 precedes required1 } else if (nature1.startsWith("org.eclipse.cdt.") //$NON-NLS-1$ && !nature2.startsWith("org.eclipse.cdt.")) { //$NON-NLS-1$