Bug 549329 - More Quickfix options for "This plug-in does not export all
of its packages"

Change-Id: I075f1ef73ab0ab350eae6d05ed78271c14d491de
Signed-off-by: Vikas Chandra <Vikas.Chandra@in.ibm.com>
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 e7dbe5b..f54b45b 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
@@ -3242,6 +3242,7 @@
 	public static String PDEJavaHelper_msgContentAssistAvailableWithKeyBinding;
 
 	public static String AddExportPackageResolution_Label;
+	public static String AddExportPackageInternalDirectiveResolution_Label;
 	public static String AddBundleClassPathResolution_add;
 
 	public static String AddBundleManifestVersionResolution_description;
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/AddExportPackageInternalDirectiveMarkerResolution.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/AddExportPackageInternalDirectiveMarkerResolution.java
new file mode 100644
index 0000000..b7cc51f
--- /dev/null
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/AddExportPackageInternalDirectiveMarkerResolution.java
@@ -0,0 +1,47 @@
+/*******************************************************************************
+ *  Copyright (c) 2019 IBM Corporation and others.
+ *
+ *  This program and the accompanying materials
+ *  are made available under the terms of the Eclipse Public License 2.0
+ *  which accompanies this distribution, and is available at
+ *  https://www.eclipse.org/legal/epl-2.0/
+ *
+ *  SPDX-License-Identifier: EPL-2.0
+ *
+ *  Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.pde.internal.ui.correction;
+
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.pde.internal.core.ibundle.IBundle;
+import org.eclipse.pde.internal.core.text.bundle.*;
+import org.eclipse.pde.internal.ui.PDEUIMessages;
+import org.osgi.framework.Constants;
+
+public class AddExportPackageInternalDirectiveMarkerResolution extends AddExportPackageMarkerResolution {
+
+	public AddExportPackageInternalDirectiveMarkerResolution(IMarker mark, int type, String values) {
+		super(mark, type, values);
+	}
+
+	@Override
+	public String getLabel() {
+		return PDEUIMessages.AddExportPackageInternalDirectiveResolution_Label;
+	}
+
+	@Override
+	protected void createChange(BundleModel model) {
+		IBundle bundle = model.getBundle();
+		if (bundle instanceof Bundle) {
+			Bundle bun = (Bundle) bundle;
+			ExportPackageHeader header = (ExportPackageHeader) bun.getManifestHeader(Constants.EXPORT_PACKAGE);
+			if (header == null) {
+				bundle.setHeader(Constants.EXPORT_PACKAGE, ""); //$NON-NLS-1$
+				header = (ExportPackageHeader) bun.getManifestHeader(Constants.EXPORT_PACKAGE);
+			}
+			processPackages(header, true);
+		}
+	}
+
+}
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/AddExportPackageMarkerResolution.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/AddExportPackageMarkerResolution.java
index 7ad6fd7..4c88baa 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/AddExportPackageMarkerResolution.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/AddExportPackageMarkerResolution.java
@@ -48,11 +48,11 @@
 				bundle.setHeader(Constants.EXPORT_PACKAGE, ""); //$NON-NLS-1$
 				header = (ExportPackageHeader) bun.getManifestHeader(Constants.EXPORT_PACKAGE);
 			}
-			processPackages(header);
+			processPackages(header, false);
 		}
 	}
 
-	private void processPackages(ExportPackageHeader header) {
+	protected void processPackages(ExportPackageHeader header, boolean setInternal) {
 		fValues = marker.getAttribute("packages", null); //$NON-NLS-1$
 		if (fValues == null) {
 			return;
@@ -64,6 +64,10 @@
 		Pattern pat = PatternConstructor.createPattern(filter, false);
 		for (String packageId : packages) {
 			ExportPackageObject obj = header.addPackage(packageId);
+			if (setInternal){
+				obj.setInternal(setInternal);
+				continue;
+			}
 			if (pat.matcher(packageId).matches())
 				obj.setInternal(true);
 		}
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/ResolutionGenerator.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/ResolutionGenerator.java
index 8e1dd6e..332ed9a 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/ResolutionGenerator.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/ResolutionGenerator.java
@@ -88,7 +88,7 @@
 			case PDEMarkerFactory.M_UNECESSARY_DEP :
 				return new IMarkerResolution[] {new RemoveRequireBundleResolution(AbstractPDEMarkerResolution.REMOVE_TYPE, marker.getAttribute("bundleId", null), marker)}; //$NON-NLS-1$
 			case PDEMarkerFactory.M_MISSING_EXPORT_PKGS :
-				return new IMarkerResolution[] { new AddExportPackageMarkerResolution(marker,AbstractPDEMarkerResolution.CREATE_TYPE, marker.getAttribute("packages", null)) }; //$NON-NLS-1$
+				return new IMarkerResolution[] { new AddExportPackageMarkerResolution(marker,AbstractPDEMarkerResolution.CREATE_TYPE, marker.getAttribute("packages", null)), new AddExportPackageInternalDirectiveMarkerResolution(marker,AbstractPDEMarkerResolution.CREATE_TYPE, marker.getAttribute("packages", null))  }; //$NON-NLS-1$//$NON-NLS-2$
 			case PDEMarkerFactory.B_REMOVE_SLASH_FILE_ENTRY :
 				return new IMarkerResolution[] {new RemoveSeperatorBuildEntryResolution(AbstractPDEMarkerResolution.RENAME_TYPE, marker)};
 			case PDEMarkerFactory.B_APPEND_SLASH_FOLDER_ENTRY :
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 f5986ea..85a348f 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
@@ -2370,6 +2370,7 @@
 LocationSection_0=&Locations
 AppendSeperatorBuildEntryResolution_label=Append a trailing separator to {0}.
 AddExportPackageResolution_Label=Add missing packages
+AddExportPackageInternalDirectiveResolution_Label=Add missing packages with x-internal directive
 
 DependencyManagementSection_jobName=Analyzing Code
 DescriptionSection_nameLabel=Name: