Download
Getting Started
Members
Projects
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
More
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
Toggle navigation
Bugzilla – Attachment 261567 Details for
Bug 475797
[patch] Target platform misses bundle after version of workspace bundle gets changed
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read
this important communication.
[patch]
Cumulative patch
cumulat_patch.patch (text/plain), 6.20 KB, created by
Vikas Chandra
on 2016-05-09 13:08:03 EDT
(
hide
)
Description:
Cumulative patch
Filename:
MIME Type:
Creator:
Vikas Chandra
Created:
2016-05-09 13:08:03 EDT
Size:
6.20 KB
patch
obsolete
>diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/PDEState.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/PDEState.java >index 51aae7e..74f4f10 100644 >--- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/PDEState.java >+++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/PDEState.java >@@ -16,12 +16,12 @@ > import java.util.*; > import org.eclipse.core.runtime.CoreException; > import org.eclipse.core.runtime.IProgressMonitor; >-import org.eclipse.osgi.service.resolver.BundleDescription; >-import org.eclipse.osgi.service.resolver.State; >+import org.eclipse.osgi.service.resolver.*; > import org.eclipse.pde.core.plugin.IPluginModelBase; > import org.eclipse.pde.core.target.LoadTargetDefinitionJob; > import org.eclipse.pde.internal.core.plugin.*; > import org.eclipse.pde.internal.core.util.CoreUtility; >+import org.osgi.framework.Version; > > public class PDEState extends MinimalState { > >@@ -57,6 +57,54 @@ > > private void createNewTargetState(boolean resolve, URL[] urls, IProgressMonitor monitor) { > fState = stateObjectFactory.createState(resolve); >+ if (resolve) { >+ fState.getResolver().setSelectionPolicy(new Comparator<BaseDescription>() { >+ @Override >+ public int compare(BaseDescription bd1, BaseDescription bd2) { >+ Version v1 = bd1.getVersion(); >+ Version v2 = bd2.getVersion(); >+ int versionCompare = versionCompare(v1, v2); >+ if (versionCompare != 0) >+ return versionCompare; >+ BundleDescription s1 = bd1.getSupplier(); >+ BundleDescription s2 = bd2.getSupplier(); >+ String n1 = s1.getName(); >+ String n2 = s2.getName(); >+ if (n1 != null && n1.equals(n2)) { >+ return versionCompare(s1.getVersion(), s2.getVersion()); >+ } >+ long id1 = s1.getBundleId(); >+ long id2 = s2.getBundleId(); >+ return (id1 < id2) ? -1 : ((id1 == id2) ? 0 : 1); >+ } >+ >+ /** >+ * Compares the given versions and prefers ".qualifier" versions over versions >+ * with any concrete qualifier. >+ * >+ * @param v1 first version >+ * @param v2 second version >+ * @return a negative number, zero, or a positive number depending on >+ * if the first version is more desired, equal amount of desire, or less desired >+ * than the second version respectively >+ */ >+ private int versionCompare(Version v1, Version v2) { >+ if (v1.getMajor() == v2.getMajor() && v1.getMinor() == v2.getMinor() && v1.getMicro() == v2.getMicro()) { >+ boolean q1 = "qualifier".equals(v1.getQualifier()); //$NON-NLS-1$ >+ boolean q2 = "qualifier".equals(v2.getQualifier()); //$NON-NLS-1$ >+ if (q1 && q2) { >+ return 0; >+ } else if (q1 && !q2) { >+ return -1; >+ } else if (q2 && !q1) { >+ return 1; >+ } >+ } >+ int versionCompare = -(v1.compareTo(v2)); >+ return versionCompare; >+ } >+ }); >+ } > monitor.beginTask(PDECoreMessages.PDEState_CreatingTargetModelState, urls.length); > for (int i = 0; i < urls.length; i++) { > File file = new File(urls[i].getFile()); >diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/PluginModelManager.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/PluginModelManager.java >index dff7849..7be1184 100644 >--- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/PluginModelManager.java >+++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/PluginModelManager.java >@@ -27,7 +27,6 @@ > import org.eclipse.pde.core.plugin.*; > import org.eclipse.pde.core.target.*; > import org.eclipse.pde.internal.core.target.P2TargetUtils; >-import org.osgi.framework.Version; > > public class PluginModelManager implements IModelProviderListener { > private static final String fExternalPluginListFile = "SavedExternalPluginList.txt"; //$NON-NLS-1$ >@@ -691,29 +690,16 @@ > } > > private synchronized void addWorkspaceBundleToState(Map<String, LocalModelEntry> entries, IPluginModelBase model) { >- IPluginBase pluginBase = model.getPluginBase(); >- String id = pluginBase.getId(); >+ String id = model.getPluginBase().getId(); > if (id == null) > return; > >- // Remove target models by the same ID from the state, iff the *.qualifier version from the workspace overrides them. >- // Otherwise, update target models. >- Version version = Version.parseVersion(pluginBase.getVersion()); >- boolean isQualifierVersion = "qualifier".equals(version.getQualifier()); //$NON-NLS-1$ >+ // update target models by the same ID from the state, if any > ModelEntry entry = entries.get(id); > if (entry != null) { > IPluginModelBase[] models = entry.getExternalModels(); >- for (int i = 0; i < models.length; i++) { >- Version entryVersion = models[i].getBundleDescription().getVersion(); >- if (isQualifierVersion >- && version.getMajor() == entryVersion.getMajor() >- && version.getMinor() == entryVersion.getMinor() >- && version.getMicro() == entryVersion.getMicro()) { >- fState.removeBundleDescription(models[i].getBundleDescription()); >- } else { >- fState.updateBundleDescription(models[i].getBundleDescription()); >- } >- } >+ for (int i = 0; i < models.length; i++) >+ fState.updateBundleDescription(models[i].getBundleDescription()); > } > > // add new bundle to the state >@@ -939,8 +925,25 @@ > break; > } > } >- if (isActive) >- fState.addBundle(model, true); >+ if (isActive) { >+ // refresh everything related to this bundle model id >+ fEntries.remove(newID); >+ fState.removeBundleDescription(desc); >+ for (int i = 0; i < fExternalManager.getAllModels().length; i++) { >+ IPluginModelBase modelExternal = fExternalManager.getAllModels()[i]; >+ if (modelExternal.getPluginBase().getId().equals(newID)) { >+ addToTable(fEntries, new IPluginModelBase[] { modelExternal }); >+ } >+ } >+ IPluginModelBase[] models = fWorkspaceManager.getPluginModels(); >+ for (int i = 0; i < models.length; i++) { >+ IPluginModelBase modelWorkspace = models[i]; >+ if (modelWorkspace.getPluginBase().getId().equals(newID)) { >+ addToTable(fEntries, new IPluginModelBase[] { modelWorkspace }); >+ addWorkspaceBundleToState(fEntries, modelWorkspace); >+ } >+ } >+ } > } else > // if the target plug-in has become disabled/unchecked, remove its bundle > // description from the state
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 475797
:
259269
|
260882
| 261567