diff options
author | Thomas Watson | 2021-08-23 16:40:07 +0000 |
---|---|---|
committer | Thomas Watson | 2021-08-23 18:05:33 +0000 |
commit | d231f4aaf90c9fcee6069ced7e5cf836a0f4183c (patch) | |
tree | 0803c11d1b1cafd790868868ea7e8d23a87e4a48 | |
parent | 9586a04ba4659bb940887f1f0b9beaa2434b0836 (diff) | |
download | rt.equinox.framework-d231f4aaf90c9fcee6069ced7e5cf836a0f4183c.tar.gz rt.equinox.framework-d231f4aaf90c9fcee6069ced7e5cf836a0f4183c.tar.xz rt.equinox.framework-d231f4aaf90c9fcee6069ced7e5cf836a0f4183c.zip |
Bug 575576 - BundleWiring and Wiring lists must be snapshot/mutableY20210826-0800Y20210824-0940Y20210824-0840S4_21_0_RC1I20210827-1800I20210825-1800I20210825-0600I20210824-1800I20210824-0600I20210823-1800
Change-Id: I8e5626478ec54812e3267adb70edb3c07a63d9cc
Signed-off-by: Thomas Watson <tjwatson@us.ibm.com>
Reviewed-on: https://git.eclipse.org/r/c/equinox/rt.equinox.framework/+/184329
Reviewed-by: BJ Hargrave <hargrave@us.ibm.com>
6 files changed, 109 insertions, 88 deletions
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/ModuleWiring.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/ModuleWiring.java index bdd3398e3..50bfc537e 100644 --- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/ModuleWiring.java +++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/ModuleWiring.java @@ -13,6 +13,14 @@ *******************************************************************************/ package org.eclipse.osgi.container; +import static org.eclipse.osgi.internal.container.InternalUtils.asCopy; +import static org.eclipse.osgi.internal.container.InternalUtils.asListBundleCapability; +import static org.eclipse.osgi.internal.container.InternalUtils.asListBundleRequirement; +import static org.eclipse.osgi.internal.container.InternalUtils.asListBundleWire; +import static org.eclipse.osgi.internal.container.InternalUtils.asListCapability; +import static org.eclipse.osgi.internal.container.InternalUtils.asListRequirement; +import static org.eclipse.osgi.internal.container.InternalUtils.asListWire; + import java.net.URL; import java.util.ArrayList; import java.util.Collection; @@ -27,7 +35,6 @@ import java.util.concurrent.Callable; import java.util.concurrent.atomic.AtomicReference; import org.eclipse.osgi.container.ModuleRevisionBuilder.GenericInfo; import org.eclipse.osgi.internal.container.AtomicLazyInitializer; -import org.eclipse.osgi.internal.container.InternalUtils; import org.eclipse.osgi.internal.container.NamespaceList; import org.osgi.framework.AdminPermission; import org.osgi.framework.Bundle; @@ -108,8 +115,9 @@ public final class ModuleWiring implements BundleWiring { } /** - * Returns the same result as {@link #getCapabilities(String)} except - * uses type ModuleCapability. + * Returns the same result as {@link #getCapabilities(String)} except uses type + * ModuleCapability and the returned list is unmodifiable. + * * @param namespace the namespace * @return the capabilities * @see #getCapabilities(String) @@ -122,8 +130,9 @@ public final class ModuleWiring implements BundleWiring { } /** - * Returns the same result as {@link #getRequirements(String)} except - * uses type ModuleRequirement. + * Returns the same result as {@link #getRequirements(String)} except uses type + * ModuleRequirement and the returned list is unmodifiable. + * * @param namespace the namespace * @return the requirements * @see #getRequirements(String) @@ -153,18 +162,19 @@ public final class ModuleWiring implements BundleWiring { @Override public List<BundleCapability> getCapabilities(String namespace) { - return InternalUtils.asListBundleCapability(getModuleCapabilities(namespace)); + return asCopy(asListBundleCapability(getModuleCapabilities(namespace))); } @Override public List<BundleRequirement> getRequirements(String namespace) { - return InternalUtils.asListBundleRequirement(getModuleRequirements(namespace)); + return asCopy(asListBundleRequirement(getModuleRequirements(namespace))); } /** - * Returns the same result as {@link #getProvidedWires(String)} except - * uses type ModuleWire. + * Returns the same result as {@link #getProvidedWires(String)} except uses type + * ModuleWire and the returned list is unmodifiable. + * * @param namespace the namespace * @return the wires * @see #getProvidedWires(String) @@ -178,8 +188,9 @@ public final class ModuleWiring implements BundleWiring { } /** - * Returns the same result as {@link #getRequiredWires(String)} except - * uses type ModuleWire. + * Returns the same result as {@link #getRequiredWires(String)} except uses type + * ModuleWire and the returned list is unmodifiable. + * * @param namespace the namespace * @return the wires * @see #getRequiredWires(String) @@ -210,12 +221,12 @@ public final class ModuleWiring implements BundleWiring { @Override public List<BundleWire> getProvidedWires(String namespace) { - return InternalUtils.asListBundleWire(getWires(namespace, providedWires)); + return asCopy(asListBundleWire(getWires(namespace, providedWires))); } @Override public List<BundleWire> getRequiredWires(String namespace) { - return InternalUtils.asListBundleWire(getWires(namespace, requiredWires)); + return asCopy(asListBundleWire(getWires(namespace, requiredWires))); } private List<ModuleWire> getWires(String namespace, NamespaceList<ModuleWire> wires) { @@ -297,22 +308,22 @@ public final class ModuleWiring implements BundleWiring { @Override public List<Capability> getResourceCapabilities(String namespace) { - return InternalUtils.asListCapability(getCapabilities(namespace)); + return asCopy(asListCapability(getModuleCapabilities(namespace))); } @Override public List<Requirement> getResourceRequirements(String namespace) { - return InternalUtils.asListRequirement(getRequirements(namespace)); + return asCopy(asListRequirement(getModuleRequirements(namespace))); } @Override public List<Wire> getProvidedResourceWires(String namespace) { - return InternalUtils.asListWire(getWires(namespace, providedWires)); + return asCopy(asListWire(getWires(namespace, providedWires))); } @Override public List<Wire> getRequiredResourceWires(String namespace) { - return InternalUtils.asListWire(getWires(namespace, requiredWires)); + return asCopy(asListWire(getWires(namespace, requiredWires))); } @Override diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/container/InternalUtils.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/container/InternalUtils.java index 3e6626cd7..e9daaac64 100644 --- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/container/InternalUtils.java +++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/container/InternalUtils.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2012, 2013 IBM Corporation and others. + * Copyright (c) 2012, 2021 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -15,6 +15,7 @@ package org.eclipse.osgi.internal.container; import java.security.Permission; import java.security.SecureRandom; +import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import java.util.List; @@ -40,6 +41,10 @@ import org.osgi.resource.Wire; public class InternalUtils { + public static <T> List<T> asCopy(List<T> list) { + return new ArrayList<>(list); + } + /** * Coerce the generic type of a list from List<BundleCapability> * to List<Capability> diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/DTOBuilder.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/DTOBuilder.java index 86ee2d0b1..9a643db01 100644 --- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/DTOBuilder.java +++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/DTOBuilder.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2012, 2016 IBM Corporation and others. + * Copyright (c) 2012, 2021 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -24,6 +24,10 @@ import java.util.List; import java.util.ListIterator; import java.util.Map; import java.util.Set; +import org.eclipse.osgi.container.ModuleCapability; +import org.eclipse.osgi.container.ModuleRequirement; +import org.eclipse.osgi.container.ModuleWire; +import org.eclipse.osgi.container.ModuleWiring; import org.osgi.dto.DTO; import org.osgi.framework.Bundle; import org.osgi.framework.BundleContext; @@ -42,7 +46,6 @@ import org.osgi.framework.wiring.BundleCapability; import org.osgi.framework.wiring.BundleRequirement; import org.osgi.framework.wiring.BundleRevision; import org.osgi.framework.wiring.BundleRevisions; -import org.osgi.framework.wiring.BundleWire; import org.osgi.framework.wiring.BundleWiring; import org.osgi.framework.wiring.dto.BundleRevisionDTO; import org.osgi.framework.wiring.dto.BundleWireDTO; @@ -145,7 +148,7 @@ public class DTOBuilder { return dto; } - private List<CapabilityRefDTO> getListCapabilityRefDTO(List<BundleCapability> caps) { + private List<CapabilityRefDTO> getListCapabilityRefDTO(List<ModuleCapability> caps) { if (caps == null) { return null; } @@ -190,18 +193,18 @@ public class DTOBuilder { return dto; } - private List<RequirementRefDTO> getListRequirementRefDTO(List<BundleRequirement> reqs) { + private List<RequirementRefDTO> getListRequirementRefDTO(List<ModuleRequirement> reqs) { if (reqs == null) { return null; } List<RequirementRefDTO> dtos = newList(reqs.size()); - for (BundleRequirement req : reqs) { + for (ModuleRequirement req : reqs) { dtos.add(getRequirementRefDTO(req)); } return dtos; } - private RequirementRefDTO getRequirementRefDTO(BundleRequirement req) { + private RequirementRefDTO getRequirementRefDTO(ModuleRequirement req) { if (req == null) { return null; } @@ -228,13 +231,13 @@ public class DTOBuilder { if (revision == null) { return null; } - BundleWiringDTO dto = new DTOBuilder().getBundleWiringDTO(revision.getWiring()); + BundleWiringDTO dto = new DTOBuilder().getBundleWiringDTO((ModuleWiring) revision.getWiring()); return dto; } - public static FrameworkWiringDTO newFrameworkWiringDTO(Collection<BundleWiring> allWirings) { + public static FrameworkWiringDTO newFrameworkWiringDTO(Collection<ModuleWiring> allWirings) { DTOBuilder builder = new DTOBuilder(); - for (BundleWiring wiring : allWirings) { + for (ModuleWiring wiring : allWirings) { builder.getBundleWiringNodeDTO(wiring); } FrameworkWiringDTO dto = new FrameworkWiringDTO(); @@ -243,7 +246,7 @@ public class DTOBuilder { return dto; } - private BundleWiringDTO getBundleWiringDTO(BundleWiring wiring) { + private BundleWiringDTO getBundleWiringDTO(ModuleWiring wiring) { if (wiring == null) { return null; } @@ -255,7 +258,7 @@ public class DTOBuilder { return dto; } - private int getWiringId(BundleWiring wiring) { + private int getWiringId(ModuleWiring wiring) { BundleWiringDTO.NodeDTO dto = getBundleWiringNodeDTO(wiring); if (dto == null) { return 0; @@ -263,7 +266,7 @@ public class DTOBuilder { return dto.id; } - private BundleWiringDTO.NodeDTO getBundleWiringNodeDTO(BundleWiring wiring) { + private BundleWiringDTO.NodeDTO getBundleWiringNodeDTO(ModuleWiring wiring) { if (wiring == null) { return null; } @@ -277,25 +280,25 @@ public class DTOBuilder { dto.current = wiring.isCurrent(); dto.inUse = wiring.isInUse(); dto.resource = getResourceId(wiring.getRevision()); - dto.capabilities = getListCapabilityRefDTO(wiring.getCapabilities(null)); - dto.requirements = getListRequirementRefDTO(wiring.getRequirements(null)); - dto.providedWires = getListBundleWireDTO(wiring.getProvidedWires(null)); - dto.requiredWires = getListBundleWireDTO(wiring.getRequiredWires(null)); + dto.capabilities = getListCapabilityRefDTO(wiring.getModuleCapabilities(null)); + dto.requirements = getListRequirementRefDTO(wiring.getModuleRequirements(null)); + dto.providedWires = getListBundleWireDTO(wiring.getProvidedModuleWires(null)); + dto.requiredWires = getListBundleWireDTO(wiring.getRequiredModuleWires(null)); return dto; } - private List<WireDTO> getListBundleWireDTO(List<BundleWire> wires) { + private List<WireDTO> getListBundleWireDTO(List<ModuleWire> wires) { if (wires == null) { return null; } List<WireDTO> dtos = newList(wires.size()); - for (BundleWire wire : wires) { + for (ModuleWire wire : wires) { dtos.add(getBundleWireDTO(wire)); } return dtos; } - private BundleWireDTO getBundleWireDTO(BundleWire wire) { + private BundleWireDTO getBundleWireDTO(ModuleWire wire) { if (wire == null) { return null; } @@ -317,7 +320,7 @@ public class DTOBuilder { final int size = revs.size(); List<BundleWiringDTO> dtos = new ArrayList<>(size); for (int i = 0; i < size; i++) { - BundleWiring wiring = revs.get(i).getWiring(); + ModuleWiring wiring = (ModuleWiring) revs.get(i).getWiring(); if (wiring != null) { dtos.add(new DTOBuilder().getBundleWiringDTO(wiring)); // use new DTOBuilder for each wiring dto } diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/EquinoxBundle.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/EquinoxBundle.java index 9ee0c0e71..6f8e306e9 100644 --- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/EquinoxBundle.java +++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/EquinoxBundle.java @@ -921,17 +921,17 @@ public class EquinoxBundle implements Bundle, BundleReference { if (FrameworkWiringDTO.class.equals(adapterType)) { readLock(); try { - Set<BundleWiring> allWirings = new HashSet<>(); + Set<ModuleWiring> allWirings = new HashSet<>(); for (Module m : module.getContainer().getModules()) { - for (BundleRevision revision : m.getRevisions().getRevisions()) { - BundleWiring wiring = revision.getWiring(); + for (ModuleRevision revision : m.getRevisions().getModuleRevisions()) { + ModuleWiring wiring = revision.getWiring(); if (wiring != null) { allWirings.add(wiring); } } } for (ModuleRevision revision : module.getContainer().getRemovalPending()) { - BundleWiring wiring = revision.getWiring(); + ModuleWiring wiring = revision.getWiring(); if (wiring != null) { allWirings.add(wiring); } diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/legacy/PackageAdminImpl.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/legacy/PackageAdminImpl.java index e78a9c2ce..a4402065a 100644 --- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/legacy/PackageAdminImpl.java +++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/legacy/PackageAdminImpl.java @@ -23,7 +23,9 @@ import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; +import org.eclipse.osgi.container.ModuleCapability; import org.eclipse.osgi.container.ModuleContainer; +import org.eclipse.osgi.container.ModuleWire; import org.eclipse.osgi.container.ModuleWiring; import org.eclipse.osgi.internal.container.Capabilities; import org.eclipse.osgi.internal.container.InternalUtils; @@ -40,8 +42,6 @@ import org.osgi.framework.namespace.PackageNamespace; import org.osgi.framework.wiring.BundleCapability; import org.osgi.framework.wiring.BundleRevision; import org.osgi.framework.wiring.BundleRevisions; -import org.osgi.framework.wiring.BundleWire; -import org.osgi.framework.wiring.BundleWiring; import org.osgi.framework.wiring.FrameworkWiring; import org.osgi.resource.Namespace; import org.osgi.resource.Requirement; @@ -69,11 +69,12 @@ public class PackageAdminImpl implements PackageAdmin { Collection<ExportedPackage> allExports = new ArrayList<>(); for (BundleRevision revision : revisions) { - BundleWiring wiring = revision.getWiring(); + ModuleWiring wiring = (ModuleWiring) revision.getWiring(); if (wiring != null) { - List<BundleCapability> providedPackages = wiring.getCapabilities(PackageNamespace.PACKAGE_NAMESPACE); + List<ModuleCapability> providedPackages = wiring + .getModuleCapabilities(PackageNamespace.PACKAGE_NAMESPACE); if (providedPackages != null) { - for (BundleCapability providedPackage : providedPackages) { + for (ModuleCapability providedPackage : providedPackages) { allExports.add(new ExportedPackageImpl(providedPackage, wiring)); } } @@ -114,16 +115,16 @@ public class PackageAdminImpl implements PackageAdmin { InternalUtils.filterCapabilityPermissions(packageCaps); List<ExportedPackage> result = new ArrayList<>(); for (BundleCapability capability : packageCaps) { - BundleWiring wiring = capability.getRevision().getWiring(); + ModuleWiring wiring = (ModuleWiring) capability.getRevision().getWiring(); if (wiring != null) { - Collection<BundleWiring> wirings = Collections.emptyList(); + Collection<ModuleWiring> wirings = Collections.emptyList(); if ((capability.getRevision().getTypes() & BundleRevision.TYPE_FRAGMENT) != 0) { // This is a fragment, just get all the host wirings - List<BundleWire> hostWires = wiring.getRequiredWires(HostNamespace.HOST_NAMESPACE); + List<ModuleWire> hostWires = wiring.getRequiredModuleWires(HostNamespace.HOST_NAMESPACE); if (hostWires != null && !hostWires.isEmpty()) { wirings = new ArrayList<>(hostWires.size()); - for (BundleWire hostWire : hostWires) { - BundleWiring hostWiring = hostWire.getProviderWiring(); + for (ModuleWire hostWire : hostWires) { + ModuleWiring hostWiring = hostWire.getProviderWiring(); if (hostWiring != null) { wirings.add(hostWiring); } @@ -133,11 +134,11 @@ public class PackageAdminImpl implements PackageAdmin { // just a single host wiring wirings = Collections.singletonList(wiring); } - for (BundleWiring moduleWiring : wirings) { + for (ModuleWiring moduleWiring : wirings) { Object pkgName = capability.getAttributes().get(PackageNamespace.PACKAGE_NAMESPACE); if (pkgName instanceof String - && !((ModuleWiring) moduleWiring).isSubstitutedPackage((String) pkgName)) { - result.add(new ExportedPackageImpl(capability, moduleWiring)); + && !moduleWiring.isSubstitutedPackage((String) pkgName)) { + result.add(new ExportedPackageImpl((ModuleCapability) capability, moduleWiring)); } } } @@ -165,9 +166,9 @@ public class PackageAdminImpl implements PackageAdmin { InternalUtils.filterCapabilityPermissions(bundleCaps); Collection<RequiredBundle> result = new ArrayList<>(); for (BundleCapability capability : bundleCaps) { - BundleWiring wiring = capability.getRevision().getWiring(); + ModuleWiring wiring = (ModuleWiring) capability.getRevision().getWiring(); if (wiring != null) { - result.add(new RequiredBundleImpl(capability, wiring)); + result.add(new RequiredBundleImpl((ModuleCapability) capability, wiring)); } } return result.isEmpty() ? null : result.toArray(new RequiredBundle[result.size()]); @@ -209,17 +210,17 @@ public class PackageAdminImpl implements PackageAdmin { @Override public Bundle[] getFragments(Bundle bundle) { - BundleWiring wiring = getWiring(bundle); + ModuleWiring wiring = getWiring(bundle); if (wiring == null) { return null; } - List<BundleWire> hostWires = wiring.getProvidedWires(HostNamespace.HOST_NAMESPACE); + List<ModuleWire> hostWires = wiring.getProvidedModuleWires(HostNamespace.HOST_NAMESPACE); if (hostWires == null) { // we don't hold locks while checking the graph, just return if no longer valid return null; } Collection<Bundle> fragments = new ArrayList<>(hostWires.size()); - for (BundleWire wire : hostWires) { + for (ModuleWire wire : hostWires) { Bundle fragment = wire.getRequirer().getBundle(); if (fragment != null) { fragments.add(fragment); @@ -230,17 +231,17 @@ public class PackageAdminImpl implements PackageAdmin { @Override public Bundle[] getHosts(Bundle bundle) { - BundleWiring wiring = getWiring(bundle); + ModuleWiring wiring = getWiring(bundle); if (wiring == null) { return null; } - List<BundleWire> hostWires = wiring.getRequiredWires(HostNamespace.HOST_NAMESPACE); + List<ModuleWire> hostWires = wiring.getRequiredModuleWires(HostNamespace.HOST_NAMESPACE); if (hostWires == null) { // we don't hold locks while checking the graph, just return if no longer valid return null; } Collection<Bundle> hosts = new ArrayList<>(hostWires.size()); - for (BundleWire wire : hostWires) { + for (ModuleWire wire : hostWires) { Bundle host = wire.getProvider().getBundle(); if (host != null) { hosts.add(host); @@ -249,12 +250,12 @@ public class PackageAdminImpl implements PackageAdmin { return hosts.isEmpty() ? null : hosts.toArray(new Bundle[hosts.size()]); } - private BundleWiring getWiring(Bundle bundle) { + private ModuleWiring getWiring(Bundle bundle) { BundleRevision current = bundle.adapt(BundleRevision.class); if (current == null) { return null; } - return current.getWiring(); + return (ModuleWiring) current.getWiring(); } @Override @@ -281,10 +282,10 @@ public class PackageAdminImpl implements PackageAdmin { static class ExportedPackageImpl implements ExportedPackage { - private final BundleCapability packageCapability; - private final BundleWiring providerWiring; + private final ModuleCapability packageCapability; + private final ModuleWiring providerWiring; - public ExportedPackageImpl(BundleCapability packageCapability, BundleWiring providerWiring) { + public ExportedPackageImpl(ModuleCapability packageCapability, ModuleWiring providerWiring) { this.packageCapability = packageCapability; this.providerWiring = providerWiring; } @@ -311,15 +312,16 @@ public class PackageAdminImpl implements PackageAdmin { String packageName = getName(); addRequirers(importing, providerWiring, packageName); - List<BundleWire> providedPackages = providerWiring.getProvidedWires(PackageNamespace.PACKAGE_NAMESPACE); + List<ModuleWire> providedPackages = providerWiring + .getProvidedModuleWires(PackageNamespace.PACKAGE_NAMESPACE); if (providedPackages == null) { // we don't hold locks while checking the graph, just return if no longer valid return null; } - for (BundleWire packageWire : providedPackages) { + for (ModuleWire packageWire : providedPackages) { if (packageCapability.equals(packageWire.getCapability())) { importing.add(packageWire.getRequirer().getBundle()); - if (((ModuleWiring) packageWire.getRequirerWiring()).isSubstitutedPackage(packageName)) { + if (packageWire.getRequirerWiring().isSubstitutedPackage(packageName)) { addRequirers(importing, packageWire.getRequirerWiring(), packageName); } } @@ -327,13 +329,13 @@ public class PackageAdminImpl implements PackageAdmin { return importing.toArray(new Bundle[importing.size()]); } - private static void addRequirers(Set<Bundle> importing, BundleWiring wiring, String packageName) { - List<BundleWire> requirerWires = wiring.getProvidedWires(BundleNamespace.BUNDLE_NAMESPACE); + private static void addRequirers(Set<Bundle> importing, ModuleWiring wiring, String packageName) { + List<ModuleWire> requirerWires = wiring.getProvidedModuleWires(BundleNamespace.BUNDLE_NAMESPACE); if (requirerWires == null) { // we don't hold locks while checking the graph, just return if no longer isInUse return; } - for (BundleWire requireBundleWire : requirerWires) { + for (ModuleWire requireBundleWire : requirerWires) { Bundle requirer = requireBundleWire.getRequirer().getBundle(); if (importing.contains(requirer)) { continue; @@ -342,19 +344,19 @@ public class PackageAdminImpl implements PackageAdmin { // if reexported then need to add any requirers of the reexporter String reExport = requireBundleWire.getRequirement().getDirectives().get(BundleNamespace.REQUIREMENT_VISIBILITY_DIRECTIVE); - BundleWiring requirerWiring = requireBundleWire.getRequirerWiring(); + ModuleWiring requirerWiring = requireBundleWire.getRequirerWiring(); if (BundleNamespace.VISIBILITY_REEXPORT.equals(reExport)) { addRequirers(importing, requirerWiring, packageName); } // also need to add any importers of the same package as the wiring exports; case of aggregations if (!requirerWiring.equals(wiring)) { - List<BundleWire> providedPackages = requirerWiring.getProvidedWires(PackageNamespace.PACKAGE_NAMESPACE); + List<ModuleWire> providedPackages = requirerWiring + .getProvidedModuleWires(PackageNamespace.PACKAGE_NAMESPACE); if (providedPackages != null) { - for (BundleWire packageWire : providedPackages) { + for (ModuleWire packageWire : providedPackages) { if (packageName.equals(packageWire.getCapability().getAttributes().get(PackageNamespace.PACKAGE_NAMESPACE))) { importing.add(packageWire.getRequirer().getBundle()); - if (((ModuleWiring) packageWire.getRequirerWiring()) - .isSubstitutedPackage(packageName)) { + if (packageWire.getRequirerWiring().isSubstitutedPackage(packageName)) { addRequirers(importing, packageWire.getRequirerWiring(), packageName); } } @@ -391,10 +393,10 @@ public class PackageAdminImpl implements PackageAdmin { } private static class RequiredBundleImpl implements RequiredBundle { - private final BundleCapability bundleCapability; - private final BundleWiring providerWiring; + private final ModuleCapability bundleCapability; + private final ModuleWiring providerWiring; - public RequiredBundleImpl(BundleCapability bundleCapability, BundleWiring providerWiring) { + public RequiredBundleImpl(ModuleCapability bundleCapability, ModuleWiring providerWiring) { this.bundleCapability = bundleCapability; this.providerWiring = providerWiring; } @@ -423,13 +425,13 @@ public class PackageAdminImpl implements PackageAdmin { return requiring.toArray(new Bundle[requiring.size()]); } - private static void addRequirers(Set<Bundle> requiring, BundleWiring providerWiring) { - List<BundleWire> requirerWires = providerWiring.getProvidedWires(BundleNamespace.BUNDLE_NAMESPACE); + private static void addRequirers(Set<Bundle> requiring, ModuleWiring providerWiring) { + List<ModuleWire> requirerWires = providerWiring.getProvidedModuleWires(BundleNamespace.BUNDLE_NAMESPACE); if (requirerWires == null) { // we don't hold locks while checking the graph, just return if no longer isInUse return; } - for (BundleWire requireBundleWire : requirerWires) { + for (ModuleWire requireBundleWire : requirerWires) { Bundle requirer = requireBundleWire.getRequirer().getBundle(); if (requiring.contains(requirer)) { continue; diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/loader/buddy/GlobalPolicy.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/loader/buddy/GlobalPolicy.java index a346ee2d8..e3b3eda06 100644 --- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/loader/buddy/GlobalPolicy.java +++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/loader/buddy/GlobalPolicy.java @@ -21,6 +21,7 @@ import java.util.Collections; import java.util.Enumeration; import java.util.Map; import org.eclipse.osgi.container.ModuleContainer; +import org.eclipse.osgi.container.ModuleWiring; import org.eclipse.osgi.internal.container.Capabilities; import org.eclipse.osgi.internal.loader.BundleLoader; import org.osgi.framework.Bundle; @@ -29,7 +30,6 @@ import org.osgi.framework.namespace.PackageNamespace; import org.osgi.framework.wiring.BundleCapability; import org.osgi.framework.wiring.BundleRevision; import org.osgi.framework.wiring.BundleWire; -import org.osgi.framework.wiring.BundleWiring; import org.osgi.framework.wiring.FrameworkWiring; import org.osgi.resource.Namespace; @@ -88,8 +88,8 @@ public class GlobalPolicy implements IBuddyPolicy { for (BundleCapability pkg : packages) { if ((pkg.getRevision().getTypes() & BundleRevision.TYPE_FRAGMENT) != 0) { // use the hosts - BundleWiring wiring = pkg.getRevision().getWiring(); - for (BundleWire hostWire : wiring.getRequiredWires(HostNamespace.HOST_NAMESPACE)) { + ModuleWiring wiring = (ModuleWiring) pkg.getRevision().getWiring(); + for (BundleWire hostWire : wiring.getRequiredModuleWires(HostNamespace.HOST_NAMESPACE)) { result.add(hostWire.getProvider().getBundle()); } } else { |