diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/builders/FeatureErrorReporter.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/builders/FeatureErrorReporter.java index d4fc2ea6bb5..0c9abbb2dd0 100644 --- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/builders/FeatureErrorReporter.java +++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/builders/FeatureErrorReporter.java @@ -40,7 +40,7 @@ public class FeatureErrorReporter extends ManifestErrorReporter { static HashSet attrs = new HashSet<>(); - static String[] attrNames = {"id", "version", "label", "provider-name", "image", "os", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ + static String[] attrNames = { "id", "version", "include-sources", "label", "provider-name", "image", "os", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ "ws", "arch", "nl", "colocation-affinity", "primary", "exclusive", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ "plugin", "application", "license-feature", "license-feature-version"}; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/feature/Feature.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/feature/Feature.java index f25ff3d4e6c..772c2aad98f 100644 --- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/feature/Feature.java +++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/feature/Feature.java @@ -58,6 +58,7 @@ public class Feature extends VersionableObject implements IFeature { private String fCopyright; private String fLicenseFeatureID; private String fLicenseFeatureVersion; + private boolean fIncludeSources; @Override public void addPlugins(IFeaturePlugin[] newPlugins) throws CoreException { @@ -213,6 +214,7 @@ protected void parse(Node node) { fApplication = getNodeAttribute(node, "application"); //$NON-NLS-1$ fPrimary = getBooleanAttribute(node, "primary"); //$NON-NLS-1$ fExclusive = getBooleanAttribute(node, "exclusive"); //$NON-NLS-1$ + fIncludeSources = getBooleanAttribute(node, "include-sources"); //$NON-NLS-1$ NodeList children = node.getChildNodes(); fValid = true; @@ -372,6 +374,11 @@ public String getApplication() { return fApplication; } + @Override + public boolean isIncludingSources() { + return fIncludeSources; + } + @Override public void setOS(String os) throws CoreException { ensureModelEditable(); @@ -442,6 +449,13 @@ public void setApplication(String newValue) throws CoreException { firePropertyChanged(P_APPLICATION, oldValue, newValue); } + @Override + public void setIncludingSources(boolean includesSources) { + Object oldValue = fIncludeSources; + this.fIncludeSources = includesSources; + firePropertyChanged(this, P_SOURCES, oldValue, includesSources); + } + @Override public void setProviderName(String providerName) throws CoreException { ensureModelEditable(); @@ -570,6 +584,9 @@ public void restoreProperty(String name, Object oldValue, Object newValue) throw case P_IMAGE: setImageName((String) newValue); break; + case P_SOURCES: + setIncludingSources(newValue != null ? ((Boolean) newValue).booleanValue() : false); + break; default: super.restoreProperty(name, oldValue, newValue); break; @@ -581,6 +598,7 @@ public void reset() { super.reset(); fData.clear(); fPlugins.clear(); + fIncludeSources = false; fImports.clear(); fChildren.clear(); fUrl = null; @@ -654,6 +672,8 @@ public void write(String indent, PrintWriter writer) { writeIfDefined(indenta, writer, "id", getId()); //$NON-NLS-1$ writeIfDefined(indenta, writer, "label", getWritableString(getLabel())); //$NON-NLS-1$ writeIfDefined(indenta, writer, "version", getVersion()); //$NON-NLS-1$ + writeIfDefined(indenta, writer, "include-sources", //$NON-NLS-1$ + isIncludingSources() ? String.valueOf(isIncludingSources()) : null); writeIfDefined(indenta, writer, "provider-name", //$NON-NLS-1$ getWritableString(fProviderName)); writeIfDefined(indenta, writer, "plugin", //$NON-NLS-1$ diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/ifeature/IFeature.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/ifeature/IFeature.java index 51596f34832..0cc7cf05639 100644 --- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/ifeature/IFeature.java +++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/ifeature/IFeature.java @@ -59,6 +59,7 @@ public interface IFeature extends IFeatureObject, IVersionable, IEnvironment { public static final String P_COLLOCATION_AFFINITY = "colocation-affinity"; //$NON-NLS-1$ public static final String P_APPLICATION = "application"; //$NON-NLS-1$ + public static final String P_SOURCES = "include-sources"; //$NON-NLS-1$ public static final int INFO_DESCRIPTION = 0; public static final int INFO_COPYRIGHT = 1; @@ -257,6 +258,10 @@ public interface IFeature extends IFeatureObject, IVersionable, IEnvironment { void setApplication(String value) throws CoreException; boolean isValid(); + + public boolean isIncludingSources(); + + void setIncludingSources(boolean b); public void swap(IFeatureChild feature1, IFeatureChild feature2); } diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/PDEUIMessages.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/PDEUIMessages.java index d028e9168f1..ccf80260d84 100644 --- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/PDEUIMessages.java +++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/PDEUIMessages.java @@ -2233,6 +2233,8 @@ public class PDEUIMessages extends NLS { public static String FeatureSection_addRequired; public static String FeatureSection_toggleRoot; + public static String FeatureSpecSection_addSources0; + public static String ImportPackageSection_desc; public static String ImportPackageSection_descFragment; public static String ExportPackageSection_desc; diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/feature/FeatureSpecSection.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/feature/FeatureSpecSection.java index 3f343ef4d61..dae1df85529 100644 --- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/feature/FeatureSpecSection.java +++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/feature/FeatureSpecSection.java @@ -42,12 +42,15 @@ import org.eclipse.pde.internal.ui.parts.FormEntry; import org.eclipse.pde.internal.ui.util.SWTUtil; import org.eclipse.pde.internal.ui.wizards.plugin.NewPluginProjectWizard; +import org.eclipse.swt.SWT; import org.eclipse.swt.dnd.Clipboard; import org.eclipse.swt.dnd.RTFTransfer; import org.eclipse.swt.dnd.TextTransfer; import org.eclipse.swt.dnd.Transfer; import org.eclipse.swt.dnd.TransferData; +import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.forms.events.HyperlinkEvent; import org.eclipse.ui.forms.widgets.FormToolkit; @@ -75,6 +78,8 @@ public class FeatureSpecSection extends PDESection { private boolean fPatch = false; + private Button fIncludesSourcesCheckbox; + public FeatureSpecSection(FeatureFormPage page, Composite parent) { super(page, parent, Section.DESCRIPTION); getSection().setText(PDEUIMessages.FeatureEditor_SpecSection_title); @@ -380,6 +385,14 @@ public void textValueChanged(FormEntry text) { } }); + fIncludesSourcesCheckbox = toolkit.createButton(container, PDEUIMessages.FeatureSpecSection_addSources0, SWT.CHECK); + fIncludesSourcesCheckbox.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + + fIncludesSourcesCheckbox.addSelectionListener(SelectionListener.widgetSelectedAdapter(e -> { + boolean isSelected = fIncludesSourcesCheckbox.getSelection(); + feature.setIncludingSources(isSelected); + })); + GridData gd = (GridData) fIdText.getText().getLayoutData(); gd.widthHint = 150; @@ -503,6 +516,7 @@ public void refresh() { setIfDefined(fTitleText, feature.getLabel()); getPage().getManagedForm().getForm().setText(model.getResourceString(feature.getLabel())); setIfDefined(fVersionText, feature.getVersion()); + fIncludesSourcesCheckbox.setSelection(feature.isIncludingSources()); setIfDefined(fProviderText, feature.getProviderName()); setIfDefined(fPluginText, feature.getPlugin()); if (isPatch()) { diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/pderesources.properties b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/pderesources.properties index e9b7551cb1e..207394dce7e 100644 --- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/pderesources.properties +++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/pderesources.properties @@ -1256,6 +1256,7 @@ FeatureImportWizard_messages_updating = Updating... FeatureImportWizard_title = Import Features FeatureSection_addRequired=Add Required FeatureSection_toggleRoot=Toggle Install Mode +FeatureSpecSection_addSources0=Include sources automatically FeatureImportWizard_noToAll = No to A&ll FeatureImportWizard_messages_noFeatures = No features found. Ensure that the chosen directory contains 'features' folder. FeatureImportWizard_messages_title = Feature Import