Merge pull request #8 from rotty3000/ARIES-1952
ARIES-1952 SpiLoader should implement BundleReference
diff --git a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/loader/BundleClassLoader.java b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/loader/BundleClassLoader.java
index 404681a..14b2876 100644
--- a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/loader/BundleClassLoader.java
+++ b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/loader/BundleClassLoader.java
@@ -34,13 +34,19 @@
public final class BundleClassLoader extends SpiLoader {
public BundleClassLoader(Bundle cdiBundle, Bundle extenderBundle) {
+ _bundle = cdiBundle;
_bundles.add(requireNonNull(cdiBundle));
_bundles.add(requireNonNull(extenderBundle));
}
@Override
+ public Bundle getBundle() {
+ return _bundle;
+ }
+
+ @Override
public URL findResource(String name) {
- for (Bundle bundle : _bundles) {
+ for (Bundle bundle : getBundles()) {
if ((bundle.getState() & Bundle.UNINSTALLED) == Bundle.UNINSTALLED) {
continue;
}
@@ -56,7 +62,7 @@
@Override
public Enumeration<URL> findResources(String name) {
- for (Bundle bundle : _bundles) {
+ for (Bundle bundle : getBundles()) {
if ((bundle.getState() & Bundle.UNINSTALLED) == Bundle.UNINSTALLED) {
continue;
}
@@ -80,6 +86,9 @@
@Override
public List<Bundle> getBundles() {
+ if (!_bundles.contains(_bundle)) {
+ _bundles.add(0, _bundle);
+ }
return _bundles;
}
@@ -118,7 +127,7 @@
Object classLoadingLock = getClassLoadingLock(name);
synchronized (classLoadingLock) {
- for (Bundle bundle : _bundles) {
+ for (Bundle bundle : getBundles()) {
if ((bundle.getState() & Bundle.UNINSTALLED) == Bundle.UNINSTALLED) {
continue;
}
@@ -212,6 +221,7 @@
}
}
+ private final Bundle _bundle;
private final List<Bundle> _bundles = new CopyOnWriteArrayList<>();
private final ConcurrentMap<String, Class<?>> _cache = new ConcurrentHashMap<>();
private volatile Predicate<String> classPredicate;
diff --git a/cdi-spi/src/main/java/org/apache/aries/cdi/spi/loader/SpiLoader.java b/cdi-spi/src/main/java/org/apache/aries/cdi/spi/loader/SpiLoader.java
index 69360ad..c434983 100644
--- a/cdi-spi/src/main/java/org/apache/aries/cdi/spi/loader/SpiLoader.java
+++ b/cdi-spi/src/main/java/org/apache/aries/cdi/spi/loader/SpiLoader.java
@@ -22,8 +22,9 @@
import java.util.function.Predicate;
import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleReference;
-public abstract class SpiLoader extends ClassLoader {
+public abstract class SpiLoader extends ClassLoader implements BundleReference {
public abstract List<Bundle> getBundles();