diff options
Diffstat (limited to 'compiler')
-rw-r--r-- | compiler/src/main/java/android/databinding/tool/reflection/SdkUtil.java | 20 | ||||
-rw-r--r-- | compiler/src/test/java/android/databinding/tool/reflection/SdkVersionTest.java | 8 |
2 files changed, 19 insertions, 9 deletions
diff --git a/compiler/src/main/java/android/databinding/tool/reflection/SdkUtil.java b/compiler/src/main/java/android/databinding/tool/reflection/SdkUtil.java index 4b5e09fc..e8c962ef 100644 --- a/compiler/src/main/java/android/databinding/tool/reflection/SdkUtil.java +++ b/compiler/src/main/java/android/databinding/tool/reflection/SdkUtil.java @@ -64,7 +64,7 @@ public class SdkUtil { int result = sApiChecker.getMinApi(classDesc, methodDesc); L.d("checking method api for %s, class:%s method:%s. result: %d", modelMethod.getName(), classDesc, methodDesc, result); - if (result > 1) { + if (result > 0) { return result; } declaringClass = declaringClass.getSuperclass(); @@ -74,7 +74,7 @@ public class SdkUtil { static class ApiChecker { - private Map<String, Integer> mFullLookup = new HashMap<String, Integer>(); + private Map<String, Integer> mFullLookup; private Document mDoc; @@ -103,6 +103,7 @@ public class SdkUtil { private void buildFullLookup() throws XPathExpressionException { NodeList allClasses = mDoc.getChildNodes().item(0).getChildNodes(); + mFullLookup = new HashMap<>(allClasses.getLength() * 4); for (int j = 0; j < allClasses.getLength(); j++) { Node node = allClasses.item(j); if (node.getNodeType() != Node.ELEMENT_NODE || !"class" @@ -122,16 +123,17 @@ public class SdkUtil { } int methodSince = getSince(child); int since = Math.max(classSince, methodSince); - if (since > SdkUtil.sMinSdk) { - String methodDesc = child.getAttributes().getNamedItem("name") - .getNodeValue(); - String key = cacheKey(classDesc, methodDesc); - mFullLookup.put(key, since); - } + String methodDesc = child.getAttributes().getNamedItem("name") + .getNodeValue(); + String key = cacheKey(classDesc, methodDesc); + mFullLookup.put(key, since); } } } + /** + * Returns 0 if we cannot find the API level for the method. + */ public int getMinApi(String classDesc, String methodOrFieldDesc) { if (mDoc == null || mXPath == null) { return 1; @@ -141,7 +143,7 @@ public class SdkUtil { } final String key = cacheKey(classDesc, methodOrFieldDesc); Integer since = mFullLookup.get(key); - return since == null ? 1 : since; + return since == null ? 0 : since; } private static String cacheKey(String classDesc, String methodOrFieldDesc) { diff --git a/compiler/src/test/java/android/databinding/tool/reflection/SdkVersionTest.java b/compiler/src/test/java/android/databinding/tool/reflection/SdkVersionTest.java index 00456645..b4ecb019 100644 --- a/compiler/src/test/java/android/databinding/tool/reflection/SdkVersionTest.java +++ b/compiler/src/test/java/android/databinding/tool/reflection/SdkVersionTest.java @@ -56,4 +56,12 @@ public class SdkVersionTest { ModelMethod setElevation = view.getMethods("testCustomCode", 0)[0]; assertEquals(1, SdkUtil.getMinApi(setElevation)); } + + @Test + public void testSetForeground() { + ModelClass view = ModelAnalyzer.getInstance() + .findClass("android.widget.FrameLayout", null); + ModelMethod setForeground = view.getMethods("setForeground", 1)[0]; + assertEquals(1, SdkUtil.getMinApi(setForeground)); + } } |