From 21b564573327b1ed2f7e06146b8a01c47ede3089 Mon Sep 17 00:00:00 2001 From: Deepanshu Gupta Date: Tue, 19 May 2015 11:55:15 -0700 Subject: Fix include tag rendering. A missing catch clause caused rendering to be failed when there is an include tag that doesn't specify layout_width and layout_height. Also improve the error messages to make debugging easier next time. Change-Id: I617762636973a010b34da167c7b5fcd328b7d178 --- .../bridge/src/android/content/res/BridgeTypedArray.java | 14 +++++++++----- .../bridge/src/android/view/LayoutInflater_Delegate.java | 3 ++- 2 files changed, 11 insertions(+), 6 deletions(-) (limited to 'tools') diff --git a/tools/layoutlib/bridge/src/android/content/res/BridgeTypedArray.java b/tools/layoutlib/bridge/src/android/content/res/BridgeTypedArray.java index 572fdc9..771cf57 100644 --- a/tools/layoutlib/bridge/src/android/content/res/BridgeTypedArray.java +++ b/tools/layoutlib/bridge/src/android/content/res/BridgeTypedArray.java @@ -444,7 +444,7 @@ public final class BridgeTypedArray extends TypedArray { @Override public int getDimensionPixelSize(int index, int defValue) { try { - return getDimension(index); + return getDimension(index, null); } catch (RuntimeException e) { String s = getString(index); @@ -474,12 +474,12 @@ public final class BridgeTypedArray extends TypedArray { @Override public int getLayoutDimension(int index, String name) { try { - // this will throw an exception - return getDimension(index); + // this will throw an exception if not found. + return getDimension(index, name); } catch (RuntimeException e) { if (LayoutInflater_Delegate.sIsInInclude) { - throw new RuntimeException(); + throw new RuntimeException("Layout Dimension '" + name + "' not found."); } Bridge.getLog().warning(LayoutLog.TAG_RESOURCES_FORMAT, @@ -494,9 +494,13 @@ public final class BridgeTypedArray extends TypedArray { return getDimensionPixelSize(index, defValue); } - private int getDimension(int index) { + /** @param name attribute name, used for error reporting. */ + private int getDimension(int index, @Nullable String name) { String s = getString(index); if (s == null) { + if (name != null) { + throw new RuntimeException("Attribute '" + name + "' not found"); + } throw new RuntimeException(); } // Check if the value is a magic constant that doesn't require a unit. diff --git a/tools/layoutlib/bridge/src/android/view/LayoutInflater_Delegate.java b/tools/layoutlib/bridge/src/android/view/LayoutInflater_Delegate.java index 4072302..27b406a 100644 --- a/tools/layoutlib/bridge/src/android/view/LayoutInflater_Delegate.java +++ b/tools/layoutlib/bridge/src/android/view/LayoutInflater_Delegate.java @@ -181,7 +181,8 @@ public class LayoutInflater_Delegate { // ---- END CHANGES params = group.generateLayoutParams(attrs); - + } catch (RuntimeException ignored) { + // Ignore, just fail over to child attrs. } finally { // ---- START CHANGES sIsInInclude = false; -- cgit v1.1