### Eclipse Workspace Patch 1.0 #P org.eclipse.pde.ui Index: src/org/eclipse/pde/internal/ui/PDEUIMessages.java =================================================================== RCS file: /cvsroot/eclipse/pde/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/PDEUIMessages.java,v retrieving revision 1.390 diff -u -r1.390 PDEUIMessages.java --- src/org/eclipse/pde/internal/ui/PDEUIMessages.java 14 Nov 2008 20:53:37 -0000 1.390 +++ src/org/eclipse/pde/internal/ui/PDEUIMessages.java 16 Nov 2008 19:17:15 -0000 @@ -1030,6 +1030,7 @@ public static String ManifestEditor_DetailExtension_edit; public static String ManifestEditor_DetailExtension_up; public static String ManifestEditor_DetailExtension_down; + public static String ManifestEditor_DetailExtension_missingExtPointSchema; public static String ManifestEditor_ExportSection_title; public static String ManifestEditor_ExportSection_desc; Index: src/org/eclipse/pde/internal/ui/pderesources.properties =================================================================== RCS file: /cvsroot/eclipse/pde/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/pderesources.properties,v retrieving revision 1.1013 diff -u -r1.1013 pderesources.properties --- src/org/eclipse/pde/internal/ui/pderesources.properties 14 Nov 2008 20:53:37 -0000 1.1013 +++ src/org/eclipse/pde/internal/ui/pderesources.properties 16 Nov 2008 19:17:17 -0000 @@ -272,6 +272,7 @@ ManifestEditor_DetailExtension_edit = Edit... ManifestEditor_DetailExtension_up = Up ManifestEditor_DetailExtension_down = Down +ManifestEditor_DetailExtension_missingExtPointSchema = No schema found for ''{0}'' extension point ManifestEditor_ExportSection_title = Library Visibility ManifestEditor_ExportSection_desc = Specify the portions of the selected library that should be visible to other plug-ins: Index: src/org/eclipse/pde/internal/ui/editor/plugin/ExtensionsSection.java =================================================================== RCS file: /cvsroot/eclipse/pde/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/plugin/ExtensionsSection.java,v retrieving revision 1.76 diff -u -r1.76 ExtensionsSection.java --- src/org/eclipse/pde/internal/ui/editor/plugin/ExtensionsSection.java 9 Jul 2008 18:11:27 -0000 1.76 +++ src/org/eclipse/pde/internal/ui/editor/plugin/ExtensionsSection.java 16 Nov 2008 19:17:17 -0000 @@ -15,10 +15,12 @@ import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.*; import org.eclipse.jface.action.*; +import org.eclipse.jface.dialogs.IMessageProvider; import org.eclipse.jface.util.IPropertyChangeListener; import org.eclipse.jface.util.PropertyChangeEvent; import org.eclipse.jface.viewers.*; import org.eclipse.jface.wizard.WizardDialog; +import org.eclipse.osgi.util.NLS; import org.eclipse.pde.core.IModelChangedEvent; import org.eclipse.pde.core.IModelChangedListener; import org.eclipse.pde.core.plugin.*; @@ -639,6 +641,7 @@ public void refresh() { IPluginModelBase model = (IPluginModelBase) getPage().getModel(); fExtensionTree.setInput(model.getPluginBase()); + reportMissingExtensionPointSchemas(model.getPluginBase()); selectFirstExtension(); getManagedForm().fireSelectionChanged(ExtensionsSection.this, fExtensionTree.getSelection()); super.refresh(); @@ -662,9 +665,29 @@ IPluginObject parent = changeObject instanceof IPluginExtension ? ((IPluginModelBase) getPage().getModel()).getPluginBase() : pobj.getParent(); if (event.getChangeType() == IModelChangedEvent.INSERT) { fExtensionTree.refresh(parent); + if (changeObject instanceof IPluginExtension) { + IPluginExtension ext = (IPluginExtension) changeObject; + if (ext.getSchema() == null) + reportMissingExtensionPointSchema(ext.getPoint()); + } fExtensionTree.setSelection(new StructuredSelection(changeObject), true); fExtensionTree.getTree().setFocus(); } else if (event.getChangeType() == IModelChangedEvent.REMOVE) { + if (changeObject instanceof IPluginExtension) { + IPluginExtension ext = (IPluginExtension) changeObject; + IPluginExtension[] extensions = ((IPluginBase) parent).getExtensions(); + boolean found = false; + // search if there is at least another extension extending the same point than the one being removed + for (int i = 0; i < extensions.length; i++) { + String point = extensions[i].getPoint(); + if (ext.getPoint().equals(point)) { + found = true; + break; + } + } + if (!found) + getManagedForm().getMessageManager().removeMessage(ext.getPoint()); + } fExtensionTree.remove(pobj); } else { if (event.getChangedProperty().equals(IPluginParent.P_SIBLING_ORDER)) { @@ -1673,4 +1696,16 @@ return selection.size() == 1; } + private void reportMissingExtensionPointSchemas(IPluginBase pluginBase) { + IPluginExtension[] extensions = pluginBase.getExtensions(); + for (int i = 0; i < extensions.length; i++) { + IPluginExtension ext = extensions[i]; + if (ext.getSchema() == null) + reportMissingExtensionPointSchema(ext.getPoint()); + } + } + + private void reportMissingExtensionPointSchema(String point) { + getManagedForm().getMessageManager().addMessage(point, NLS.bind(PDEUIMessages.ManifestEditor_DetailExtension_missingExtPointSchema, point), null, IMessageProvider.WARNING); + } }