diff options
author | Deepanshu Gupta <deepanshu@google.com> | 2015-03-11 15:41:47 -0700 |
---|---|---|
committer | Deepanshu Gupta <deepanshu@google.com> | 2015-03-11 15:56:30 -0700 |
commit | 85d72c4535003af3b9df77bd6eaa2b33e8a7cba2 (patch) | |
tree | c26e858d396b5b140ffa78cafefada6fc638b4b2 /tools/layoutlib/bridge/src/com | |
parent | 7b2cae5072321da5d67f9d12dea10871326f3477 (diff) | |
download | frameworks_base-85d72c4535003af3b9df77bd6eaa2b33e8a7cba2.zip frameworks_base-85d72c4535003af3b9df77bd6eaa2b33e8a7cba2.tar.gz frameworks_base-85d72c4535003af3b9df77bd6eaa2b33e8a7cba2.tar.bz2 |
Fix rare NPE in BridgeContext.
Also fixed some deprecation warnings.
Change-Id: I2fa00996dab0b008b9ca07a5382a059e5780529d
Diffstat (limited to 'tools/layoutlib/bridge/src/com')
-rw-r--r-- | tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java | 55 |
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 2f62b93..aa4b560 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; |