diff options
author | Deepanshu Gupta <deepanshu@google.com> | 2015-08-26 05:55:14 +0000 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2015-08-26 05:55:14 +0000 |
commit | 1754824c2835d6f3a17c4a2c0ab668991797fcf9 (patch) | |
tree | 1ec43369118d5bd1608823c5aa697a56fd6a4a58 | |
parent | 678f0ea2ba47f06387670e9f75b13637a6446899 (diff) | |
parent | c96ef95285e935034377dee30f3b8a0329f6c3a2 (diff) | |
download | frameworks_base-1754824c2835d6f3a17c4a2c0ab668991797fcf9.zip frameworks_base-1754824c2835d6f3a17c4a2c0ab668991797fcf9.tar.gz frameworks_base-1754824c2835d6f3a17c4a2c0ab668991797fcf9.tar.bz2 |
am c96ef952: Add documentation about hack in commit: f8ea750455 [DO NOT MERGE]
* commit 'c96ef95285e935034377dee30f3b8a0329f6c3a2':
Add documentation about hack in commit: f8ea750455 [DO NOT MERGE]
-rw-r--r-- | tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java | 14 |
1 files changed, 14 insertions, 0 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 6ef0b79..6b54cb6 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 @@ -464,6 +464,20 @@ public final class BridgeContext extends Context { @Override public ClassLoader getClassLoader() { + // The documentation for this method states that it should return a class loader one can + // use to retrieve classes in this package. However, when called by LayoutInflater, we do + // not want the class loader to return app's custom views. + // This is so that the IDE can instantiate the custom views and also generate proper error + // messages in case of failure. This also enables the IDE to fallback to MockView in case + // there's an exception thrown when trying to inflate the custom view. + // To work around this issue, LayoutInflater is modified via LayoutLib Create tool to + // replace invocations of this method to a new method: getFrameworkClassLoader(). Also, + // the method is injected into Context. The implementation of getFrameworkClassLoader() is: + // "return getClass().getClassLoader();". This means that when LayoutInflater asks for + // the context ClassLoader, it gets only LayoutLib's ClassLoader which doesn't have + // access to the apps's custom views. + // This method can now return the right ClassLoader, which CustomViews can use to do the + // right thing. if (mClassLoader == null) { mClassLoader = new ClassLoader(getClass().getClassLoader()) { @Override |