summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Deepanshu Gupta <deepanshu@google.com> 2015-03-12 00:39:25 +0000
committer Android Git Automerger <android-git-automerger@android.com> 2015-03-12 00:39:25 +0000
commitd44af6108b18f3de05ed3f61d056d9c5b36ff8be (patch)
treeef155c37a82c43a912f90b9142c9b87e78973258
parentfa3c665019ace11140b3c5677d02c9711fc4d86d (diff)
parentb3cfb334893a0b302cd6a0a998f27ca2e8ba7f9d (diff)
am b3cfb334: Merge "Fix rare NPE in BridgeContext." into lmp-mr1-dev
* commit 'b3cfb334893a0b302cd6a0a998f27ca2e8ba7f9d': Fix rare NPE in BridgeContext.
-rw-r--r--tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java55
1 files changed, 32 insertions, 23 deletions
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java
index 2f62b93ede6a..aa4b560e4c78 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java
@@ -94,6 +94,7 @@ import java.util.Map;
/**
* Custom implementation of Context/Activity to handle non compiled resources.
*/
+@SuppressWarnings("deprecation") // For use of Pair.
public final class BridgeContext extends Context {
/** The map adds cookies to each view so that IDE can link xml tags to views. */
@@ -569,7 +570,7 @@ public final class BridgeContext extends Context {
// Hint: for XmlPullParser, attach source //DEVICE_SRC/dalvik/libcore/xml/src/java
if (set instanceof BridgeXmlBlockParser) {
- BridgeXmlBlockParser parser = null;
+ BridgeXmlBlockParser parser;
parser = (BridgeXmlBlockParser)set;
isPlatformFile = parser.isPlatformFile();
@@ -590,7 +591,7 @@ public final class BridgeContext extends Context {
} else if (set != null) { // null parser is ok
// really this should not be happening since its instantiated in Bridge
Bridge.getLog().error(LayoutLog.TAG_BROKEN,
- "Parser is not a BridgeXmlBlockParser!", null /*data*/);
+ "Parser is not a BridgeXmlBlockParser!", null);
return null;
}
@@ -602,7 +603,7 @@ public final class BridgeContext extends Context {
// look for a custom style.
String customStyle = null;
if (set != null) {
- customStyle = set.getAttributeValue(null /* namespace*/, "style");
+ customStyle = set.getAttributeValue(null, "style");
}
StyleResourceValue customStyleValues = null;
@@ -625,31 +626,39 @@ public final class BridgeContext extends Context {
// get the name from the int.
Pair<String, Boolean> defStyleAttribute = searchAttr(defStyleAttr);
- if (defaultPropMap != null) {
- String defStyleName = defStyleAttribute.getFirst();
- if (defStyleAttribute.getSecond()) {
- defStyleName = "android:" + defStyleName;
+ if (defStyleAttribute == null) {
+ // This should be rare. Happens trying to map R.style.foo to @style/foo fails.
+ // This will happen if the user explicitly used a non existing int value for
+ // defStyleAttr or there's something wrong with the project structure/build.
+ Bridge.getLog().error(LayoutLog.TAG_RESOURCES_RESOLVE,
+ "Failed to find the style corresponding to the id " + defStyleAttr, null);
+ } else {
+ if (defaultPropMap != null) {
+ String defStyleName = defStyleAttribute.getFirst();
+ if (defStyleAttribute.getSecond()) {
+ defStyleName = "android:" + defStyleName;
+ }
+ defaultPropMap.put("style", defStyleName);
}
- defaultPropMap.put("style", defStyleName);
- }
- // look for the style in the current theme, and its parent:
- ResourceValue item = mRenderResources.findItemInTheme(defStyleAttribute.getFirst(),
- defStyleAttribute.getSecond());
+ // look for the style in the current theme, and its parent:
+ ResourceValue item = mRenderResources.findItemInTheme(defStyleAttribute.getFirst(),
+ defStyleAttribute.getSecond());
- if (item != null) {
- // item is a reference to a style entry. Search for it.
- item = mRenderResources.findResValue(item.getValue(), item.isFramework());
+ if (item != null) {
+ // item is a reference to a style entry. Search for it.
+ item = mRenderResources.findResValue(item.getValue(), item.isFramework());
- if (item instanceof StyleResourceValue) {
- defStyleValues = (StyleResourceValue)item;
+ if (item instanceof StyleResourceValue) {
+ defStyleValues = (StyleResourceValue) item;
+ }
+ } else {
+ Bridge.getLog().error(LayoutLog.TAG_RESOURCES_RESOLVE_THEME_ATTR,
+ String.format(
+ "Failed to find style '%s' in current theme",
+ defStyleAttribute.getFirst()),
+ null);
}
- } else {
- Bridge.getLog().error(LayoutLog.TAG_RESOURCES_RESOLVE_THEME_ATTR,
- String.format(
- "Failed to find style '%s' in current theme",
- defStyleAttribute.getFirst()),
- null /*data*/);
}
} else if (defStyleRes != 0) {
boolean isFrameworkRes = true;