diff options
author | Thomas Watson | 2006-03-28 23:28:21 +0000 |
---|---|---|
committer | Thomas Watson | 2006-03-28 23:28:21 +0000 |
commit | 444975e6f67fb6675469cc590d2c6b29ae230d81 (patch) | |
tree | 8863182af5b618d004270b86d76b695553aa6cc9 | |
parent | 435ca9a3b533f7147a1ed5d8fc94fccae01c4556 (diff) | |
download | rt.equinox.framework-444975e6f67fb6675469cc590d2c6b29ae230d81.tar.gz rt.equinox.framework-444975e6f67fb6675469cc590d2c6b29ae230d81.tar.xz rt.equinox.framework-444975e6f67fb6675469cc590d2c6b29ae230d81.zip |
Bug 133374 NPE on PackageAdminImpl.setResolved
4 files changed, 17 insertions, 12 deletions
diff --git a/bundles/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/baseadaptor/BaseAdaptor.java b/bundles/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/baseadaptor/BaseAdaptor.java index cd37654d5..158a738bc 100644 --- a/bundles/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/baseadaptor/BaseAdaptor.java +++ b/bundles/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/baseadaptor/BaseAdaptor.java @@ -98,6 +98,7 @@ public class BaseAdaptor implements FrameworkAdaptor{ if (errors.length > 0) for (int i = 0; i < errors.length; i++) getFrameworkLog().log(errors[i]); + // get the storage after the registry has been initialized storage = getStorage(); // TODO consider passing args to BaseAdaptorHooks } @@ -504,8 +505,14 @@ public class BaseAdaptor implements FrameworkAdaptor{ * @return a base storage object. */ protected BaseStorage getStorage() { - if (storage == null) - storage = BaseStorage.getInstance(); + if (storage != null) + return storage; + // this bit of code assumes the registry is initialized with a BaseStorageHook + // we want to make sure we are using the same BaseStorage instance as the BaseStorageHook + StorageHook[] hooks = hookRegistry.getStorageHooks(); + for (int i = 0; i < hooks.length && storage == null; i++) + if (hooks[i] instanceof BaseStorageHook) + storage = ((BaseStorageHook)hooks[i]).getStorage(); return storage; } } diff --git a/bundles/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/BaseHookConfigurator.java b/bundles/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/BaseHookConfigurator.java index 4249ea687..9e25d1e09 100644 --- a/bundles/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/BaseHookConfigurator.java +++ b/bundles/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/BaseHookConfigurator.java @@ -21,7 +21,7 @@ public class BaseHookConfigurator implements HookConfigurator { public void addHooks(HookRegistry registry) { // always add the BaseStorageHook and BaseClassLoadingHook; it is required for the storage implementation - BaseStorageHook hook = new BaseStorageHook(BaseStorage.getInstance()); + BaseStorageHook hook = new BaseStorageHook(new BaseStorage()); registry.addStorageHook(hook); registry.addAdaptorHook(hook); registry.addClassLoadingHook(new BaseClassLoadingHook()); diff --git a/bundles/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/BaseStorage.java b/bundles/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/BaseStorage.java index 45640a840..19709c76d 100644 --- a/bundles/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/BaseStorage.java +++ b/bundles/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/BaseStorage.java @@ -19,8 +19,7 @@ import java.util.*; import org.eclipse.core.runtime.adaptor.EclipseStarter; import org.eclipse.core.runtime.adaptor.LocationManager; import org.eclipse.core.runtime.internal.adaptor.EclipseAdaptorMsg; -import org.eclipse.osgi.baseadaptor.BaseAdaptor; -import org.eclipse.osgi.baseadaptor.BaseData; +import org.eclipse.osgi.baseadaptor.*; import org.eclipse.osgi.baseadaptor.bundlefile.*; import org.eclipse.osgi.baseadaptor.hooks.*; import org.eclipse.osgi.framework.adaptor.*; @@ -75,8 +74,6 @@ public class BaseStorage { private static final String PERM_DATA_FILE = ".permdata"; //$NON-NLS-1$ private static final byte PERMDATA_VERSION = 1; - private static final BaseStorage INSTANCE = new BaseStorage(); - private BaseAdaptor adaptor; // assume a file: installURL private String installPath; @@ -106,8 +103,8 @@ public class BaseStorage { private StateSaver stateSaver; private boolean invalidState; - private BaseStorage() { - // make constructor private + BaseStorage() { + // make constructor package private } public void initialize(BaseAdaptor adaptor) throws IOException { @@ -1118,7 +1115,4 @@ public class BaseStorage { return nextId++; } - public static BaseStorage getInstance() { - return INSTANCE; - } } diff --git a/bundles/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/BaseStorageHook.java b/bundles/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/BaseStorageHook.java index b68fe94d5..d3537ae1b 100644 --- a/bundles/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/BaseStorageHook.java +++ b/bundles/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/BaseStorageHook.java @@ -354,4 +354,8 @@ public class BaseStorageHook implements StorageHook, AdaptorHook{ // do nothing return null; } + + public BaseStorage getStorage() { + return storage; + } } |