Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Packages/bundles that are already imported/added are shown #1195

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -363,7 +363,7 @@ public static HashMap<String, IPackageFragment> getPackageFragmentsHash2(IJavaPr
if (name.length() == 0) {
name = "."; //$NON-NLS-1$
}
if ((fragment.hasChildren() || fragment.getNonJavaResources().length > 0) && !existingPackages.contains(name)) {
if ((fragment.hasChildren() || fragment.getNonJavaResources().length > 0)) {
if (!name.equals("java") || !name.startsWith("java.") || allowJava) { //$NON-NLS-1$ //$NON-NLS-2$
map.put(fragment.getPath().makeRelative() + "_" + fragment.getElementName(), fragment); //$NON-NLS-1$
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
*******************************************************************************/
package org.eclipse.pde.internal.ui;

import java.util.HashMap;
import java.util.Locale;

import org.eclipse.core.resources.IProject;
Expand Down Expand Up @@ -86,6 +87,7 @@
import org.eclipse.pde.internal.core.text.bundle.ImportPackageObject;
import org.eclipse.pde.internal.core.text.bundle.PackageObject;
import org.eclipse.pde.internal.core.util.VersionUtil;
import org.eclipse.pde.internal.ui.dialogs.PluginSelectionDialog;
import org.eclipse.pde.internal.ui.elements.NamedElement;
import org.eclipse.pde.internal.ui.util.SWTUtil;
import org.eclipse.pde.internal.ui.util.SharedLabelProvider;
Expand All @@ -96,6 +98,11 @@

public class PDELabelProvider extends SharedLabelProvider {
private static final String SYSTEM_BUNDLE = "system.bundle"; //$NON-NLS-1$
private IPluginModelBase currentModel;

public IPluginModelBase getCurrentPluginModel() {
return currentModel;
}

public PDELabelProvider() {
}
Expand Down Expand Up @@ -203,6 +210,14 @@ public String getObjectText(IPluginBase pluginBase) {
}
if (pluginBase.getModel() != null && !pluginBase.getModel().isInSync())
text += " " + PDEUIMessages.PluginModelManager_outOfSync; //$NON-NLS-1$

HashMap<String, Boolean> existingImports = PluginSelectionDialog.getExistingImports(currentModel,
false);
if (existingImports.get(pluginBase.getId()) != null && existingImports.get(pluginBase.getId())) {
text += " " + PDEUIMessages.PluginModelManager_alreadyAddedViaReexport; //$NON-NLS-1$
} else if (existingImports.get(pluginBase.getId()) != null && !existingImports.get(pluginBase.getId())) {
text += " " + PDEUIMessages.PluginModelManager_alreadyAdded; //$NON-NLS-1$
}
return text;
}

Expand Down Expand Up @@ -951,4 +966,7 @@ public static String formatVersion(String versionRange) {
return versionRange;
}

public void setCurrentModel(IPluginModelBase currentModel) {
this.currentModel = currentModel;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,14 @@
public class PDEUIMessages extends NLS {
private static final String BUNDLE_NAME = "org.eclipse.pde.internal.ui.pderesources";//$NON-NLS-1$

public static String PluginModelManager_alreadyImported;

public static String PluginModelManager_alreadyAdded;

public static String PluginModelManager_alreadyAddedViaReexport;

public static String PluginModelManager_alreadyExported;

public static String AbstractLauncherToolbar_noProblems;

public static String AbstractLauncherToolbar_noSelection;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,14 @@

import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;

import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.IDialogSettings;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.osgi.service.resolver.ExportPackageDescription;
import org.eclipse.osgi.service.resolver.VersionRange;
import org.eclipse.pde.core.plugin.IFragment;
Expand All @@ -43,6 +43,7 @@
import org.eclipse.pde.internal.ui.IHelpContextIds;
import org.eclipse.pde.internal.ui.PDEPlugin;
import org.eclipse.pde.internal.ui.PDEUIMessages;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Shell;
Expand Down Expand Up @@ -137,6 +138,11 @@ public PluginSelectionDialog(Shell parentShell, IPluginModelBase[] models, boole
setListLabelProvider(PDEPlugin.getDefault().getLabelProvider());
}

public PluginSelectionDialog(Shell activeWorkbenchShell, IPluginModelBase[] availablePlugins,
boolean multipleSelection, IPluginModelBase model) {
this(activeWorkbenchShell, availablePlugins, multipleSelection);
PDEPlugin.getDefault().getLabelProvider().setCurrentModel(model);
}
@Override
protected void configureShell(Shell newShell) {
super.configureShell(newShell);
Expand All @@ -153,8 +159,8 @@ private static IPluginModelBase[] getElements(boolean includeFragments) {
return PluginRegistry.getActiveModels(includeFragments);
}

public static HashSet<String> getExistingImports(IPluginModelBase model, boolean includeImportPkg) {
HashSet<String> existingImports = new HashSet<>();
public static HashMap<String,Boolean> getExistingImports(IPluginModelBase model, boolean includeImportPkg) {
HashMap<String, Boolean> existingImports = new HashMap<>();
addSelfAndDirectImports(existingImports, model);
if (model instanceof IFragmentModel) {
IFragment fragment = ((IFragmentModel) model).getFragment();
Expand All @@ -169,33 +175,34 @@ public static HashSet<String> getExistingImports(IPluginModelBase model, boolean
return existingImports;
}

private static void addSelfAndDirectImports(HashSet<String> set, IPluginModelBase model) {
private static void addSelfAndDirectImports(HashMap<String, Boolean> existingImports, IPluginModelBase model) {
if (model == null) {
return;
}
set.add(model.getPluginBase().getId());
existingImports.put(model.getPluginBase().getId(), false);
IPluginImport[] imports = model.getPluginBase().getImports();
for (IPluginImport pImport : imports) {
String id = pImport.getId();
if (set.add(id)) {
addReexportedImport(set, id);
}
existingImports.put(id, false);
addReexportedImport(existingImports, id);

}
}

private static void addReexportedImport(HashSet<String> set, String id) {
private static void addReexportedImport(HashMap<String, Boolean> existingImports, String id) {
IPluginModelBase model = PluginRegistry.findModel(id);
if (model != null) {
IPluginImport[] imports = model.getPluginBase().getImports();
for (IPluginImport pImport : imports) {
if (pImport.isReexported() && set.add(pImport.getId())) {
addReexportedImport(set, pImport.getId());
if (pImport.isReexported()) {
existingImports.put(pImport.getId(), true);
addReexportedImport(existingImports, pImport.getId());
}
}
}
}

private static void addImportedPackages(IBundlePluginModelBase base, HashSet<String> existingImports) {
private static void addImportedPackages(IBundlePluginModelBase base, HashMap<String, Boolean> existingImports) {
HashMap<String, ImportPackageObject> map = getImportPackages(base);
if (map == null) {
return;
Expand All @@ -220,7 +227,7 @@ private static void addImportedPackages(IBundlePluginModelBase base, HashSet<Str
continue;
}
}
existingImports.add(exported[i].getSupplier().getSymbolicName());
existingImports.put(exported[i].getSupplier().getSymbolicName(), false);
}
}
}
Expand Down Expand Up @@ -297,4 +304,22 @@ protected void createButtonsForButtonBar(Composite parent) {
createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false);
}

@Override
protected void updateButtonsEnableState(IStatus status) {
super.updateButtonsEnableState(status);
Button okButton = getOkButton();
StructuredSelection currentSelection = super.getSelectedItems();
HashMap<String, Boolean> existingImports = PluginSelectionDialog
.getExistingImports(PDEPlugin.getDefault().getLabelProvider().getCurrentPluginModel(), false);
if(!currentSelection.isEmpty())
okButton.setEnabled(false);
for (Object selection : currentSelection) {
if (selection instanceof IPluginModelBase
&& !(existingImports.keySet().contains(((IPluginModelBase) selection).getPluginBase().getId()))) {
okButton.setEnabled(true);
break;
}

}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.IPackageFragment;
import org.eclipse.jdt.core.JavaCore;
Expand All @@ -34,7 +35,7 @@
import org.eclipse.jdt.ui.JavaElementLabelProvider;
import org.eclipse.jdt.ui.JavaUI;
import org.eclipse.jdt.ui.actions.FindReferencesAction;
import org.eclipse.jdt.ui.actions.ShowInPackageViewAction;

Check warning on line 38 in ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/plugin/ExportPackageSection.java

View check run for this annotation

Jenkins - eclipse-pde / Compiler and API Tools

Deprecation

NORMAL: The type ShowInPackageViewAction is deprecated
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.Separator;
Expand All @@ -42,6 +43,7 @@
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.Viewer;
Expand Down Expand Up @@ -359,8 +361,8 @@
if (frag != null)
try {
IViewPart part = PDEPlugin.getActivePage().showView(JavaUI.ID_PACKAGES);
ShowInPackageViewAction action = new ShowInPackageViewAction(part.getSite());

Check warning on line 364 in ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/plugin/ExportPackageSection.java

View check run for this annotation

Jenkins - eclipse-pde / Compiler and API Tools

Deprecation

NORMAL: The type ShowInPackageViewAction is deprecated

Check warning on line 364 in ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/plugin/ExportPackageSection.java

View check run for this annotation

Jenkins - eclipse-pde / Compiler and API Tools

Deprecation

NORMAL: The type ShowInPackageViewAction is deprecated

Check warning on line 364 in ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/plugin/ExportPackageSection.java

View check run for this annotation

Jenkins - eclipse-pde / Compiler and API Tools

Deprecation

NORMAL: The constructor ShowInPackageViewAction(IWorkbenchSite) is deprecated
action.run(frag);

Check warning on line 365 in ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/plugin/ExportPackageSection.java

View check run for this annotation

Jenkins - eclipse-pde / Compiler and API Tools

Deprecation

NORMAL: The method run(IJavaElement) from the type ShowInPackageViewAction is deprecated
} catch (PartInitException e) {
}
}
Expand Down Expand Up @@ -408,8 +410,8 @@
final IProject project = model.getUnderlyingResource().getProject();
try {
if (project.hasNature(JavaCore.NATURE_ID)) {
ILabelProvider labelProvider = new JavaElementLabelProvider();
final ConditionalListSelectionDialog dialog = new ConditionalListSelectionDialog(PDEPlugin.getActiveWorkbenchShell(), labelProvider, PDEUIMessages.ExportPackageSection_dialogButtonLabel);
ILabelProvider labelProvider = new ExportPackgeLabelProvider();
final ConditionalListSelectionDialog dialog = new ConditionalListSelectionDialog(PDEPlugin.getActiveWorkbenchShell(), labelProvider, PDEUIMessages.ExportPackageSection_dialogButtonLabel, fHeader);
final Collection<String> pckgs = fHeader == null ? Collections.emptySet() : fHeader.getPackageNames();
final boolean allowJava = "true".equals(getBundle().getHeader(ICoreConstants.ECLIPSE_JREBUNDLE)); //$NON-NLS-1$
Runnable runnable = () -> {
Expand Down Expand Up @@ -441,6 +443,7 @@
if (fHeader != null) {
for (Object selectedObject : selected) {
IPackageFragment candidate = (IPackageFragment) selectedObject;
if (!fHeader.getPackageNames().contains(candidate.getElementName()))
fHeader.addPackage(new ExportPackageObject(fHeader, candidate, getVersionAttribute()));
}
} else {
Expand Down Expand Up @@ -626,4 +629,22 @@
Action action = new CalculateUsesAction(proj, (IBundlePluginModelBase) getPage().getModel());
action.run();
}

class ExportPackgeLabelProvider extends LabelProvider {
JavaElementLabelProvider javaElementLabel = new JavaElementLabelProvider();
@Override
public String getText(Object element) {

if (element instanceof IJavaElement javaElement) {
String text = javaElementLabel.getText(javaElement);
final Collection<String> pckgs = fHeader == null ? Collections.emptySet() : fHeader.getPackageNames();
if (!pckgs.isEmpty() && pckgs.contains(text)) {
return text + " " + PDEUIMessages.PluginModelManager_alreadyExported; //$NON-NLS-1$
}

}
return javaElementLabel.getText(element);
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@
import org.eclipse.jdt.ui.ISharedImages;
import org.eclipse.jdt.ui.JavaUI;
import org.eclipse.jdt.ui.actions.FindReferencesInWorkingSetAction;
import org.eclipse.jdt.ui.actions.ShowInPackageViewAction;

Check warning on line 34 in ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/plugin/ImportPackageSection.java

View check run for this annotation

Jenkins - eclipse-pde / Compiler and API Tools

Deprecation

NORMAL: The type ShowInPackageViewAction is deprecated
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.Separator;
Expand Down Expand Up @@ -114,13 +114,21 @@

private ImportPackageHeader fHeader;

static class ImportItemWrapper {
public static class ImportItemWrapper {
Object fUnderlying;
private boolean isImported = false;

public boolean isAlreadyImported() {
return isImported;
}

public ImportItemWrapper(Object underlying) {
fUnderlying = underlying;
}

public void setAlreadyImported() {
this.isImported = true;
}
@Override
public String toString() {
return getName();
Expand Down Expand Up @@ -180,7 +188,7 @@
}
}

static class ImportPackageDialogLabelProvider extends LabelProvider {
class ImportPackageDialogLabelProvider extends LabelProvider {
@Override
public Image getImage(Object element) {
return JavaUI.getSharedImages().getImage(ISharedImages.IMG_OBJS_PACKAGE);
Expand All @@ -201,6 +209,10 @@
buffer.append(' ');
buffer.append(PDELabelProvider.formatVersion(version.toString()));
}
if (p.isAlreadyImported() && fHeader != null && fHeader.hasPackage(p.getName())) {
buffer.append(' ');
buffer.append(PDEUIMessages.PluginModelManager_alreadyImported);
}
return buffer.toString();
}
}
Expand Down Expand Up @@ -408,8 +420,8 @@
if (frag != null)
try {
IViewPart part = PDEPlugin.getActivePage().showView(JavaUI.ID_PACKAGES);
ShowInPackageViewAction action = new ShowInPackageViewAction(part.getSite());

Check warning on line 423 in ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/plugin/ImportPackageSection.java

View check run for this annotation

Jenkins - eclipse-pde / Compiler and API Tools

Deprecation

NORMAL: The type ShowInPackageViewAction is deprecated

Check warning on line 423 in ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/plugin/ImportPackageSection.java

View check run for this annotation

Jenkins - eclipse-pde / Compiler and API Tools

Deprecation

NORMAL: The type ShowInPackageViewAction is deprecated

Check warning on line 423 in ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/plugin/ImportPackageSection.java

View check run for this annotation

Jenkins - eclipse-pde / Compiler and API Tools

Deprecation

NORMAL: The constructor ShowInPackageViewAction(IWorkbenchSite) is deprecated
action.run(frag);

Check warning on line 424 in ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/plugin/ImportPackageSection.java

View check run for this annotation

Jenkins - eclipse-pde / Compiler and API Tools

Deprecation

NORMAL: The method run(IJavaElement) from the type ShowInPackageViewAction is deprecated
} catch (PartInitException e) {
}
}
Expand Down Expand Up @@ -464,7 +476,8 @@
Set<String> names = new HashSet<>(); // set of String names, do not allow the same package to be added twice
for (int i = 0; i < selected.length; i++) {
ImportPackageObject impObject = null;
if (selected[i] instanceof ImportItemWrapper)
if (selected[i] instanceof ImportItemWrapper
&& !((ImportItemWrapper) selected[i]).isAlreadyImported())
selected[i] = ((ImportItemWrapper) selected[i]).fUnderlying;

if (selected[i] instanceof ExportPackageDescription)
Expand Down Expand Up @@ -530,8 +543,14 @@
NameVersionDescriptor nameVersion = new NameVersionDescriptor(exportedPackage.getName(), exportedPackage.getVersion().toString(), NameVersionDescriptor.TYPE_PACKAGE);
if (("java".equals(name) || name.startsWith("java.")) && !allowJava) //$NON-NLS-1$ //$NON-NLS-2$
continue;
if (nameVersions.add(nameVersion) && (fHeader == null || !fHeader.hasPackage(name)))
elements.add(new ImportItemWrapper(exportedPackage));
if (nameVersions.add(nameVersion)) {
ImportItemWrapper importItemWrapper = new ImportItemWrapper(exportedPackage);
elements.add(importItemWrapper);
if (fHeader != null && fHeader.hasPackage(name)) {
importItemWrapper.setAlreadyImported();
}
}

}
IPluginModelBase model = (IPluginModelBase) getPage().getPDEEditor().getAggregateModel();
if (model instanceof IBundlePluginModelBase) {
Expand All @@ -544,8 +563,13 @@
String name = pkg.getName();
String version = pkg.getVersion();
NameVersionDescriptor nameVersion = new NameVersionDescriptor(name, version, NameVersionDescriptor.TYPE_PACKAGE);
if (nameVersions.add(nameVersion) && (fHeader == null || !fHeader.hasPackage(name)))
elements.add(new ImportItemWrapper(pkg));
if (nameVersions.add(nameVersion)) {
ImportItemWrapper importItemWrapper = new ImportItemWrapper(pkg);
elements.add(importItemWrapper);
if (fHeader != null && fHeader.hasPackage(name)) {
importItemWrapper.setAlreadyImported();
}
}
}
}
}
Expand Down
Loading
Loading