aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorXavier Ducrohet <xav@android.com>2009-08-05 17:09:35 -0700
committerXavier Ducrohet <xav@android.com>2009-08-05 17:13:00 -0700
commit282a182fbd3da8bc987ce10e21d2841dde236d06 (patch)
tree598bb28ca1fcd1bd6ec320ce225e4dc67e43b42b
parenta9d4c4084f42f8a5be299ee4069dc8792723ba82 (diff)
downloadsdk-282a182fbd3da8bc987ce10e21d2841dde236d06.zip
sdk-282a182fbd3da8bc987ce10e21d2841dde236d06.tar.gz
sdk-282a182fbd3da8bc987ce10e21d2841dde236d06.tar.bz2
Fix NPE that prevented any package w/o license to be installed.
java.util.Properties#setProperty() doesn't like it when the value is null which was the case when a package had no license. Made sure it won't happen on other properties than the license as well. Also improved error display when an unexpected Throwable is thrown during install (Stack Call is now display if the Throwable has no message). BUG:2037085
-rwxr-xr-xsdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/AddonPackage.java8
-rwxr-xr-xsdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/Package.java12
-rwxr-xr-xsdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/PlatformPackage.java4
-rwxr-xr-xsdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/UpdaterData.java19
4 files changed, 35 insertions, 8 deletions
diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/AddonPackage.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/AddonPackage.java
index 4a19206..3c7b8c6 100755
--- a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/AddonPackage.java
+++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/AddonPackage.java
@@ -126,8 +126,12 @@ public class AddonPackage extends Package {
super.saveProperties(props);
mVersion.saveProperties(props);
- props.setProperty(PROP_NAME, mName);
- props.setProperty(PROP_VENDOR, mVendor);
+ if (mName != null) {
+ props.setProperty(PROP_NAME, mName);
+ }
+ if (mVendor != null) {
+ props.setProperty(PROP_VENDOR, mVendor);
+ }
}
/**
diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/Package.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/Package.java
index 1fcd6b1..a637fde 100755
--- a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/Package.java
+++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/Package.java
@@ -145,9 +145,15 @@ public abstract class Package implements IDescription {
*/
void saveProperties(Properties props) {
props.setProperty(PROP_REVISION, Integer.toString(mRevision));
- props.setProperty(PROP_LICENSE, mLicense);
- props.setProperty(PROP_DESC, mDescription);
- props.setProperty(PROP_DESC_URL, mDescUrl);
+ if (mLicense != null) {
+ props.setProperty(PROP_LICENSE, mLicense);
+ }
+ if (mDescription != null) {
+ props.setProperty(PROP_DESC, mDescription);
+ }
+ if (mDescUrl != null) {
+ props.setProperty(PROP_DESC_URL, mDescUrl);
+ }
if (mSource != null) {
props.setProperty(PROP_SOURCE_URL, mSource.getUrl());
diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/PlatformPackage.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/PlatformPackage.java
index 324f51d..c9a58f7 100755
--- a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/PlatformPackage.java
+++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/PlatformPackage.java
@@ -87,7 +87,9 @@ public class PlatformPackage extends Package {
super.saveProperties(props);
mVersion.saveProperties(props);
- props.setProperty(PROP_VERSION, mVersionName);
+ if (mVersionName != null) {
+ props.setProperty(PROP_VERSION, mVersionName);
+ }
}
/** Returns the version, a string, for platform packages. */
diff --git a/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/UpdaterData.java b/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/UpdaterData.java
index 321f5ca..a9e8afa 100755
--- a/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/UpdaterData.java
+++ b/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/UpdaterData.java
@@ -36,6 +36,8 @@ import com.android.sdkuilib.repository.UpdaterWindow.ISdkListener;
import org.eclipse.swt.widgets.Shell;
+import java.io.ByteArrayOutputStream;
+import java.io.PrintStream;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
@@ -304,8 +306,21 @@ class UpdaterData {
} catch (Throwable t) {
// Display anything unexpected in the monitor.
- monitor.setResult("Unexpected Error: %1$s", t.getMessage());
-
+ String msg = t.getMessage();
+ if (msg != null) {
+ monitor.setResult("Unexpected Error installing '%1%s: %2$s",
+ archive.getParentPackage().getShortDescription(), msg);
+ } else {
+ // no error info? get the stack call to display it
+ // At least that'll give us a better bug report.
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ t.printStackTrace(new PrintStream(baos));
+
+ // and display it
+ monitor.setResult("Unexpected Error installing '%1$s\n%2$s",
+ archive.getParentPackage().getShortDescription(),
+ baos.toString());
+ }
} finally {
// Always move the progress bar to the desired position.