Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Watson2006-03-28 23:28:21 +0000
committerThomas Watson2006-03-28 23:28:21 +0000
commit444975e6f67fb6675469cc590d2c6b29ae230d81 (patch)
tree8863182af5b618d004270b86d76b695553aa6cc9
parent435ca9a3b533f7147a1ed5d8fc94fccae01c4556 (diff)
downloadrt.equinox.framework-444975e6f67fb6675469cc590d2c6b29ae230d81.tar.gz
rt.equinox.framework-444975e6f67fb6675469cc590d2c6b29ae230d81.tar.xz
rt.equinox.framework-444975e6f67fb6675469cc590d2c6b29ae230d81.zip
Bug 133374 NPE on PackageAdminImpl.setResolved
-rw-r--r--bundles/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/baseadaptor/BaseAdaptor.java11
-rw-r--r--bundles/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/BaseHookConfigurator.java2
-rw-r--r--bundles/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/BaseStorage.java12
-rw-r--r--bundles/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/BaseStorageHook.java4
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;
+ }
}

Back to the top