Update api generation database to check for missing and removed
Bug: 190326408
Change-Id: I60e550f794b4786cc57f9bbd2b7b5ebc371accb0
diff --git a/src/main/resources/api_database/api_database_ambiguous.txt b/src/main/resources/api_database/api_database_ambiguous.txt
index 5c4f00c..47dfde9 100644
--- a/src/main/resources/api_database/api_database_ambiguous.txt
+++ b/src/main/resources/api_database/api_database_ambiguous.txt
@@ -1,113 +1,33 @@
-ebf47efadc4c50002b13da0b1cef0646:18
-106de6ca4d0e49988f3328ce380ff517:18
-2f4aedd17528c30f8a9f16b030ff708b:18
-93aca156e3f15799914f868852723e47:18
-17cbc97604a781acb78c668b2437ffbd:18
-1709449e191fe131236bd0b8c1928b71:18
-a6cf882fc575147513b7b1b505fdd335:18
-1587f690fd5c0c886630334e89e397ff:18
-dc6ad4bf6892204b9fca73d1ee9cab04:18
-9ae673cfbb5d90688edafbf7ec2862e4:18
-acf250fcdbf54725219af8c6a8a614d9:18
-07319a58381faa784dda046d5e8fd8ae:18
-77e978f6318d01be894de8944fdc05b4:18
-81be9a78d26d25c6ff47c7e9af30a92e:18
-e87bf9d0084b39c443e421cdb5d3fc43:18
-9e973ee7f4f5ad967d2ba5bf5d88911c:18
-b47e7bbf50ad208599056f8d0f1cc5ba:18
-47a9e25289b4ece230adcc3b60797712:18
-42e4cc1882d334757afbe74f4d8cec8e:18
-024481748991b858bf7e03b0b87ce125:18
-b6ced7e04b527d83cd660894a0059ea7:18
-717e536c3a13f3602fbaf1f607ee2963:18
-18b540e31006aad6ae7a26d967ec0e0e:18
-f1483fe126d64bd7544dba7fdf0559f4:18
-3c4a0d8270a52e43316a711a2fe83268:18
-2e13bb1bfba423473a6efba65d9c8190:18
-47a5d9010bdeb561176cf070ef483e91:18
-4f2e7d32ed2c7ead316770fbe84d8aae:18
-c625e1090fc4d72afd0673839af5d46f:18
-4cc2dc623ee702db7a5899c5c401a98c:18
-780c7e0f80b5479d00e2c3679974644d:18
-eff51a62305642c720d163085061ed63:18
-69e416f1afc250d6239788b4b1fb9bb4:18
-d71a32697989404ae782e105a5eb5e4c:18
-6d60d78c1ce897131dcf45743a8d6e49:18
-e16e8dcca650cf79557cb76a86edb4e9:18
-bfebe4871ed9c4b5f3300fe8dfa2a0a3:18
-93e215f230901f20bdca460cfe8c42af:18
-8efacada80287ebb7607758a0a82b0a0:18
-487bc1228fd817b641056a1a008984f8:18
-dc6c2915cd6f0a6fd0ab01365349599d:18
-1a3dbf72e4bd135a621b8ad78a7151c1:18
-01fd60d48ba7e1434bb72696282c7113:18
-83c42b475763d64935a9ddfc6a374b64:18
-ed9a26aaf7ddb748bd1e624aeb4fdb81:18
-eeb05b41976f7bb96572330854aaab34:18
-3c17437ba337e7ce8edad092f745a363:18
-8d8fd1ffc3ae24cb43798f4eb41fc4de:18
-003f7ab7088710994a289bab815aacbf:18
-488d943cdcedfca2b076152769fc3c51:18
-cab779407e29ba3377e6a47a4f842ec5:18
-a0ddcf0f7bb4aa9d38db983941f6908d:18
-b64b41d26010783cae2dff88c7e21f1d:18
-aac6d054ad0f9bea1f64702aea698ee3:18
-90b4163293f9e35f7091692b31d3b5d7:18
-9d66fceb1054d5e2ff207591ec216b70:18
-93a65566b576af220207e30cc89ef490:18
-b3248e6a2d819bd8bb42a15179188c52:18
-f95f0545feb040d2d6bfcad6897364d0:18
-058ec3044e95ed7fcaff93a2f3105d6f:18
-39ef3516cb80752cac1c541b43a1c2fa:18
-c1295d79d79340152c6b98f1c9003e8c:18
-c4b4a2994711cb342b0c8c8ef409ce8b:18
-719c3b73816fa0db79747ea264abab5a:18
-1d7847b88e0feaecd299b3c5c18be763:18
-1211e656a8eaa4423e7678533a1e7e2a:18
-e0c7417a74df21b55367f9e1ea6c2d37:18
-e49b0a2bd830bb3b96934490b2bc6ebe:18
-91790d7c5cf146ab3936919184a70015:18
-ec36ea4bb9634f7ec5c4d3c1cc9dd71b:18
-860e7b1a68c02eef7d2e2d7b6a3e13b5:18
-458fda8d9863be24862bb62c910f427d:18
-e05ed0452c12e62ef74e9161159b1231:18
-9419764761c059b9c2f9cf640abfdeb0:18
-ea02175c4ef64b6370f619acd84f3c3c:18
-0b01d40e1ca37aa854e77c98cc153e77:18
-eb12f3e690b201aa171d794a8288af10:18
-b955e5418d490425f99d58f441ba4525:18
-b36bec8fd49158c020b6d8c09cc02baf:26
-e7ca6d1abe4cd55a491cdf58eb8f4602:17
d8c43560e159bcb899c2180b8e01d8e3:24
-12233f83b06081671815562dce938d3b:24
ae9c7aee12dfaaa56e43834dcea91f5f:24
106252e3f31ee17239e1ee4184147deb:24
+12233f83b06081671815562dce938d3b:24
1fb2cd38813bad6e5eeef74bcbcb133d:24
c5bbd4174eee5cb68830801317071dd5:24
b876313caea388f03200ac720ed528af:24
-dc32c09ecdd9bda4703aa944cf1eb4ca:24
f4fa53a97c83899fd2da9f4112f35339:24
+dc32c09ecdd9bda4703aa944cf1eb4ca:24
07a59dae4166f6d504bb0793c5e75178:24
efcb5024ce3514453d44735222903a55:24
43445dc9e50e2c4fc327097d07ff749a:24
bcb1787dd2def454fd3f31d1b2c0967a:24
-2cc65559141cece33ffdbc4e34a2ce3b:24
cace738770550444ee1f91000c32c147:24
+2cc65559141cece33ffdbc4e34a2ce3b:24
b55a09768f05f29b15e1ff3a9feb7c92:24
54282406a85f4410d4dfc72d5873ee96:24
1c38913c447705e315ec4486da558c9d:24
ca3f30645fa7b480b213f4228386a09a:24
6d8800c5cc8ad9e4f3f28e777207a870:24
b8dc6f9b9587159f978d643aeb8e4d07:24
-91eb697571f68f5850875286c5e36080:24
44c0d27dc28d4da28655c3c62a0d7cac:24
+91eb697571f68f5850875286c5e36080:24
ae908f7abd7d347b0bf39fead3531c12:24
145e730e204fdca9cf169521a3812ed1:24
d27ceaaa92270c450aeee582cc17b985:24
294141fdc8f17ac3c7e4d8687d8ad389:24
48de820418038280f70eca64f878c67b:24
-8569110aa82eb44ff0b12819867c66f8:24
cfde9ea95c663bed6d56df8778b01b79:24
+8569110aa82eb44ff0b12819867c66f8:24
f389ac23dc4ef6641321adf43d712c32:24
46de27224f4cf6fb745e30bbd6aad267:24
ef4661e0074b431762177e10c2ac8570:24
@@ -116,14 +36,14 @@
e9d59e0325c6dd1dd78a998365435fac:24
0a1d88442fc34d0081115d949f1c5fa9:24
0a7ef5f8b75fa2dd79787b03dff923c9:24
-b247285b58ca44aad532b1c3b5a5dacf:24
63f61697ff1319a76632338fe0c13ae9:24
+b247285b58ca44aad532b1c3b5a5dacf:24
e8df9edc7e29252645d2b8a6a55c4e0f:24
aaba729f45b1617d59cec26aa41937e3:24
7e7ae6228d4ab54b90f0f580731941d7:24
de1c84862deb139962240505133690f0:24
-9dbabf8883b7a4e120fcbceb00face40:24
9660da0a81f885de5a3b16f1f07a1067:24
+9dbabf8883b7a4e120fcbceb00face40:24
c3f5202b30c04801da693013368a0da2:24
b73113e1f7c2702cfd997dd84e5ac003:24
9b5946e54278b49302da6ccd2a3a06e1:24
@@ -143,29 +63,79 @@
76fd080fdaa80390ca05399f4d0b49ae:24
d49bee1da6282ff1efd4017e2c26ff55:24
94bf636e74064a1f45c5e81777a8b541:24
+b502fdd440592e2d637704ebef9baf01:24
67395fd629dae7b237421aa91bc12150:24
b69dd3d2f26fc766f3b4193b089fa71e:24
-b502fdd440592e2d637704ebef9baf01:24
5a13a7fac55b3378629744099623199b:24
-6c21462d7f8529e6d017e054b02d96d3:24
-ef1a937ed3ed1277a46cbbfb589bcc7c:24
a9446b05afd48f274f6469e9617dadde:24
+ef1a937ed3ed1277a46cbbfb589bcc7c:24
+6c21462d7f8529e6d017e054b02d96d3:24
03b1c2c2b9e04b66ace80c8d891dad71:24
-5af3ef227d419594dc0316392c0fd762:24
b4146bc53ba79957adf0bf7306b2212c:24
+5af3ef227d419594dc0316392c0fd762:24
f1136465059f10586c4fb8379126e010:24
8796edfd2200b66560e180ecf2c8bd3a:24
-a4fc9c89f980d489cd69b5a9a5379279:28
-beef3d82791567a66852903d9acde2d8:14
-8f8e727dba622a81127060f53efbaf60:14
-a58ec4e669821ad885c5e539bea8f8c0:14
-c183aebc8596eae7dbaf32f831d4bf1a:14
-579a40bd08705acc7099b631706917cd:14
-c979623104ac1df2ff0b56f2eb8f40a3:14
-4a406313d3d1fc7c56f2e4ae88033ef5:14
-0534bb586552faf59923fcbb66c5c9a8:14
+b63216a8584c12bf002f4ee8c3b0ac3e:19
+1ad1cfa76f9692958656f17b710a0ecc:19
828623182530e5b5c55265b6a20263be:9
-027b76c362f10b646fce08dd34457533:29
+b36bec8fd49158c020b6d8c09cc02baf:26
+e7e718f70ee49560800db2d60270603f:11
+61c32de62fbec72e56083dade766f0f9:11
+f9684960dbadc5206f33484afeba57e1:11
+f849d1e2b1fbe25e1c88aa103ce68255:11
+1186fd5fd194d7f5c3c1b19aa753d315:11
+c74e6a2c593956c2e74a9f89dac73eeb:11
+e528c2b6258e260f575488c35f7683fb:11
+e5c61babf2a6ff8f6939b7a1db7e621f:11
+48921ae81d5ad84778fd75c9f58e1bf9:11
+92e7e194987c3b4db1a4a129af2cd05f:11
+f1d93cdeba77ba27e048fd0fbc6b0bad:11
+2cb543910592d445cf09fec159d0b421:11
+cd3bfb7c471b99eb7b7acb8011e4687f:11
+df936e8a13b49cdb9b5f82e150aca29b:11
+0e452471f905f2fb311c6146b31b5705:11
+b78f4f3edd36b6326873eea475ef2476:11
+fa0bc15e6c1bcb787bdea1073a4e2709:11
+417ebe49420a8d103b8b65c5d574fd84:11
+18f7890363dbd6262668cdcffb0f3a8d:11
+28c73ab584871ffb89a5304f87335f95:11
+aa4a8bfad0ec9e57489297bc67664cfd:11
+9a5dd5c667e21679c42fc7b2cd79769c:11
+59654e2c6df1b6a8a77928223e2ab332:11
+fea47d75f1c8cdb3a12de27678c005b6:11
+c6dd561601e904cee3707ba4cfe1350f:11
+02ceeb351445bd756a73fd5ab2a3d0c4:11
+3a3e699a3fdaaaf0b0d809d114c54e19:11
+ccad7981fb017550a8f7b8925a1d0648:11
+0803d11e374ba9493cfdd8fc17f7d34c:11
+31b7ca8caafc4ac8fd6ab18a01f5e9f5:11
+762dbaa4b1beab4b7113a750639d7f6f:11
+cf1b9fa0beb54f8f57c79446a3186baa:11
+13c8db7cad8e47068720c9f9b9d8213c:11
+d942884e00b9f288de96a8b0733372d9:11
+cd5c01104e0c46080a8d499f87de4991:11
+799e6e8b1fe3f2c45ec9703491bd67d5:8
+12011f7bb75e99008d3ef5bbe9087e6f:8
+53737c53af7f40961557a85fb4d11b55:8
+9fac9097934ab48cd9de3d124943c3fd:8
+a85598686e913ff9a84c078990e2b74f:8
+9389bbac5d37c3655c2d112b5fb15d79:8
+c7143cf932c4620b38f241a67c698de7:8
+d5360a8c6fd960a52c125ad6ee65b369:8
+6bb42f291857bf93ef2407e3fe8910b3:8
+4c0513c3ea8aa4e0d1671697ade55dc0:8
+9ab999023c47266804e1c23912c49590:8
+c83ba14b99739545b5611680823c5e64:8
+6c3b66ed41f23693ee6ed1a2f74383ca:8
+e064938f6319932b4685797aa810233f:8
+edf457cbc465fa576479f66ed5689a8e:8
+befe448f726cd55c55d708a8ed55b087:8
+4a35639e3583bbc1b36b56f0b50a2849:8
+a2c469af732e034c5017e1fbcbb6fba0:8
+47ef9cb8fb8fa55cfe73612c56fc5a0d:8
+58e29b4d0c775a250e2751d3cb70e44b:8
+2248103eacf690b2060d9f624dee5e41:8
+7aaff576c6f4f28ee8d80236c3943c3a:8
850665aac5116ea7c5dd3ed4d672cc68:1
d853b59bd420a046a715750d924360d0:1
1a9e947630aeed44da4b6e668e8ac214:1
@@ -241,165 +211,100 @@
83255b102f7327ffe0819cc9d48d764a:1
a159e58a81a5d7e46b1d44f845486c25:1
c9a7fe526ed238e56f029bdd9eadd4a8:1
-b63216a8584c12bf002f4ee8c3b0ac3e:19
-1ad1cfa76f9692958656f17b710a0ecc:19
-e7e718f70ee49560800db2d60270603f:11
-61c32de62fbec72e56083dade766f0f9:11
-f9684960dbadc5206f33484afeba57e1:11
-f849d1e2b1fbe25e1c88aa103ce68255:11
-1186fd5fd194d7f5c3c1b19aa753d315:11
-c74e6a2c593956c2e74a9f89dac73eeb:11
-e528c2b6258e260f575488c35f7683fb:11
-e5c61babf2a6ff8f6939b7a1db7e621f:11
-48921ae81d5ad84778fd75c9f58e1bf9:11
-92e7e194987c3b4db1a4a129af2cd05f:11
-f1d93cdeba77ba27e048fd0fbc6b0bad:11
-2cb543910592d445cf09fec159d0b421:11
-cd3bfb7c471b99eb7b7acb8011e4687f:11
-df936e8a13b49cdb9b5f82e150aca29b:11
-0e452471f905f2fb311c6146b31b5705:11
-b78f4f3edd36b6326873eea475ef2476:11
-fa0bc15e6c1bcb787bdea1073a4e2709:11
-417ebe49420a8d103b8b65c5d574fd84:11
-18f7890363dbd6262668cdcffb0f3a8d:11
-28c73ab584871ffb89a5304f87335f95:11
-aa4a8bfad0ec9e57489297bc67664cfd:11
-9a5dd5c667e21679c42fc7b2cd79769c:11
-59654e2c6df1b6a8a77928223e2ab332:11
-fea47d75f1c8cdb3a12de27678c005b6:11
-c6dd561601e904cee3707ba4cfe1350f:11
-02ceeb351445bd756a73fd5ab2a3d0c4:11
-3a3e699a3fdaaaf0b0d809d114c54e19:11
-ccad7981fb017550a8f7b8925a1d0648:11
-0803d11e374ba9493cfdd8fc17f7d34c:11
-31b7ca8caafc4ac8fd6ab18a01f5e9f5:11
-762dbaa4b1beab4b7113a750639d7f6f:11
-cf1b9fa0beb54f8f57c79446a3186baa:11
-13c8db7cad8e47068720c9f9b9d8213c:11
-d942884e00b9f288de96a8b0733372d9:11
-cd5c01104e0c46080a8d499f87de4991:11
-799e6e8b1fe3f2c45ec9703491bd67d5:8
-12011f7bb75e99008d3ef5bbe9087e6f:8
-53737c53af7f40961557a85fb4d11b55:8
-9fac9097934ab48cd9de3d124943c3fd:8
-a85598686e913ff9a84c078990e2b74f:8
-9389bbac5d37c3655c2d112b5fb15d79:8
-c7143cf932c4620b38f241a67c698de7:8
-d5360a8c6fd960a52c125ad6ee65b369:8
-6bb42f291857bf93ef2407e3fe8910b3:8
-4c0513c3ea8aa4e0d1671697ade55dc0:8
-9ab999023c47266804e1c23912c49590:8
-c83ba14b99739545b5611680823c5e64:8
-6c3b66ed41f23693ee6ed1a2f74383ca:8
-e064938f6319932b4685797aa810233f:8
-edf457cbc465fa576479f66ed5689a8e:8
-befe448f726cd55c55d708a8ed55b087:8
-4a35639e3583bbc1b36b56f0b50a2849:8
-a2c469af732e034c5017e1fbcbb6fba0:8
-47ef9cb8fb8fa55cfe73612c56fc5a0d:8
-58e29b4d0c775a250e2751d3cb70e44b:8
-2248103eacf690b2060d9f624dee5e41:8
-7aaff576c6f4f28ee8d80236c3943c3a:8
+beef3d82791567a66852903d9acde2d8:14
+8f8e727dba622a81127060f53efbaf60:14
+a58ec4e669821ad885c5e539bea8f8c0:14
+c183aebc8596eae7dbaf32f831d4bf1a:14
+579a40bd08705acc7099b631706917cd:14
+c979623104ac1df2ff0b56f2eb8f40a3:14
+4a406313d3d1fc7c56f2e4ae88033ef5:14
+0534bb586552faf59923fcbb66c5c9a8:14
+ebf47efadc4c50002b13da0b1cef0646:18
+106de6ca4d0e49988f3328ce380ff517:18
+93aca156e3f15799914f868852723e47:18
+2f4aedd17528c30f8a9f16b030ff708b:18
+17cbc97604a781acb78c668b2437ffbd:18
+1709449e191fe131236bd0b8c1928b71:18
+a6cf882fc575147513b7b1b505fdd335:18
+1587f690fd5c0c886630334e89e397ff:18
+dc6ad4bf6892204b9fca73d1ee9cab04:18
+9ae673cfbb5d90688edafbf7ec2862e4:18
+acf250fcdbf54725219af8c6a8a614d9:18
+77e978f6318d01be894de8944fdc05b4:18
+07319a58381faa784dda046d5e8fd8ae:18
+81be9a78d26d25c6ff47c7e9af30a92e:18
+e87bf9d0084b39c443e421cdb5d3fc43:18
+9e973ee7f4f5ad967d2ba5bf5d88911c:18
+b47e7bbf50ad208599056f8d0f1cc5ba:18
+47a9e25289b4ece230adcc3b60797712:18
+42e4cc1882d334757afbe74f4d8cec8e:18
+024481748991b858bf7e03b0b87ce125:18
+b6ced7e04b527d83cd660894a0059ea7:18
+717e536c3a13f3602fbaf1f607ee2963:18
+f1483fe126d64bd7544dba7fdf0559f4:18
+18b540e31006aad6ae7a26d967ec0e0e:18
+3c4a0d8270a52e43316a711a2fe83268:18
+2e13bb1bfba423473a6efba65d9c8190:18
+47a5d9010bdeb561176cf070ef483e91:18
+4f2e7d32ed2c7ead316770fbe84d8aae:18
+c625e1090fc4d72afd0673839af5d46f:18
+780c7e0f80b5479d00e2c3679974644d:18
+eff51a62305642c720d163085061ed63:18
+4cc2dc623ee702db7a5899c5c401a98c:18
+69e416f1afc250d6239788b4b1fb9bb4:18
+d71a32697989404ae782e105a5eb5e4c:18
+e16e8dcca650cf79557cb76a86edb4e9:18
+6d60d78c1ce897131dcf45743a8d6e49:18
+bfebe4871ed9c4b5f3300fe8dfa2a0a3:18
+93e215f230901f20bdca460cfe8c42af:18
+8efacada80287ebb7607758a0a82b0a0:18
+487bc1228fd817b641056a1a008984f8:18
+dc6c2915cd6f0a6fd0ab01365349599d:18
+1a3dbf72e4bd135a621b8ad78a7151c1:18
+83c42b475763d64935a9ddfc6a374b64:18
+01fd60d48ba7e1434bb72696282c7113:18
+eeb05b41976f7bb96572330854aaab34:18
+ed9a26aaf7ddb748bd1e624aeb4fdb81:18
+3c17437ba337e7ce8edad092f745a363:18
+8d8fd1ffc3ae24cb43798f4eb41fc4de:18
+003f7ab7088710994a289bab815aacbf:18
+cab779407e29ba3377e6a47a4f842ec5:18
+488d943cdcedfca2b076152769fc3c51:18
+a0ddcf0f7bb4aa9d38db983941f6908d:18
+b64b41d26010783cae2dff88c7e21f1d:18
+aac6d054ad0f9bea1f64702aea698ee3:18
+90b4163293f9e35f7091692b31d3b5d7:18
+9d66fceb1054d5e2ff207591ec216b70:18
+93a65566b576af220207e30cc89ef490:18
+b3248e6a2d819bd8bb42a15179188c52:18
+f95f0545feb040d2d6bfcad6897364d0:18
+058ec3044e95ed7fcaff93a2f3105d6f:18
+39ef3516cb80752cac1c541b43a1c2fa:18
+c1295d79d79340152c6b98f1c9003e8c:18
+c4b4a2994711cb342b0c8c8ef409ce8b:18
+719c3b73816fa0db79747ea264abab5a:18
+1211e656a8eaa4423e7678533a1e7e2a:18
+1d7847b88e0feaecd299b3c5c18be763:18
+e0c7417a74df21b55367f9e1ea6c2d37:18
+e49b0a2bd830bb3b96934490b2bc6ebe:18
+91790d7c5cf146ab3936919184a70015:18
+ec36ea4bb9634f7ec5c4d3c1cc9dd71b:18
+458fda8d9863be24862bb62c910f427d:18
+860e7b1a68c02eef7d2e2d7b6a3e13b5:18
+e05ed0452c12e62ef74e9161159b1231:18
+9419764761c059b9c2f9cf640abfdeb0:18
+ea02175c4ef64b6370f619acd84f3c3c:18
+0b01d40e1ca37aa854e77c98cc153e77:18
+eb12f3e690b201aa171d794a8288af10:18
+b955e5418d490425f99d58f441ba4525:18
62068b685c80a1da76ef1824af304e47:5
-a5352e6f5efd89293cad68bde5359174:21
-0873c171286bf72adca073b8232909ad:21
-75fcc63a7299ec405cbbbae6c6f4124a:21
-4242f75bd579b5860e448896bd97161e:21
-f8e3f0c3200fb1dd44acfbd301d96bed:21
-3e972f384811f77fd62ce384910c7605:21
-746752a0385785d6c4a6af907b506ff8:21
-e40adee8247464101fcb01d083025c31:21
-f2c67cccefcb8826a54b39122e002062:21
-d96183e4ed9b9b2b075bd5f8c4364100:21
-0a8ab6673c7b4e87cb2faf2d7005362a:21
-810a68c672694a924abe0f0c59a9a394:21
-fe284dc96dc744beee1ddbb1a8e4c4ee:21
-d34d323d00595f4051cfe0621331317d:21
-711a52bc9e3eafe73e0c64c4ae6d5e6a:21
-542566d5040f1a84a95caf3c78e8d54f:21
-fadc0a0d51e6ccdc60992c058edd2711:21
-ccb12040fbbda66de180c11e6251049d:21
-052dc8ce89610356ae4c22dacb2668f6:21
-eb911a19cc8e2139a72a6bf025f0ef92:21
-8a9b11e0d4a3993f76485c069942489c:21
-b50ba38de9db0ecba8a7618f6138380b:21
-5a50c9965f9cd4ee5a321bbd530cc5b2:21
-301f4d37021f2c80999eedb2219554bd:21
-391832837fd0c5bd42b6d5d58dcd80f6:21
-535462c1df188932ba4375a241ac0a3b:21
-517cb4d902b3c235f31b41bcd012b184:21
-dd9d0f0182859fbb91bfe9cb3504becf:21
-4634339ec4a3dfef9d6a8a22e18c1354:21
-4015e477f56bfed839fc88a1ba749750:21
-be73d1320eb5c1229bc65e73f82039f3:21
-1c2ab72e50012527678e434999c9044a:21
-a09c3b287f292693c49b6ac6139f3aca:21
-67ce8616e53660f5898eaa146c7f3835:21
-5b728323f7668ae4ff0e895afaf15cea:21
-eadaf0fe065d92924ebd1cade7c57e35:21
-b070068bc98b0eafc27ab9bb38e7cfbb:21
-eea2af8f17a87b391353b3878325bbd1:21
-724567eb08f8a1a1dba97c82bd0a8d00:21
-06065f8f4550b0f3530468ae56e4437b:21
-aa462a0178a7561e7c756b157cbeeb38:21
-3af411c682f8264bb7c70794211c6248:21
-b972f761c2e0edfca60661ae2abf0218:21
-da13bac632b4f32422190d415f31bab8:21
-a7c7530bd46ed4e558e4d448f1ab9b7c:21
-e2c48e8e5e90a5dcc4cd070af2c1b20e:21
-0fc8da4c46369ca9dbcee59fb490681c:21
-5bb64f5d5c0764c9c1076e2c00ee3b3c:21
-f92f02539108f4c7034055e630ce5b1b:21
-21206168597de4cc003cf94bb2476441:21
-80ffcde01a4a187455c15c7b11ae7c33:21
-5adbafe8f34e077daeacc70305eed4f1:21
-d7d607c796c81475b0c57f2646b7e662:21
-4f89f7e86a6cb4ab329ea69918ae6f49:21
-0f88600ff268e2f32d56c63ce955aeba:21
-aeb824437b0a504c4a1a3109729a8817:21
-bd00bb3c1478ff33a781c1b48bfa9112:21
-eabb0f12ea319b61bdf53d9f4a6d7044:21
-b5653063b6061db848ef666076d4a44b:21
-71ae94c8959d23501b3a25269ed58f50:21
-1bf6b15eb573dea85120bcc84f419023:21
-c0673d423ec86b469092b2eedbf4e8db:21
-52986dd229c1677a8a8fea05023f7625:21
-364cf0eb88afb77fbc7209d2c1c7273e:21
-072b20ca146065654d29d72fa24fc89a:21
-50ddd3dc05b1198214cb57e9250d7076:21
-3eb1459c5b79cc1a562b145846a1b957:21
-d84c006146e1a54bba7a7122983ef085:21
-3a16ed65c968daf194834ce7a0225b8a:21
-6321e1881f171dc79e50d8e0cbc6ce7d:21
-5800fc71343c619b5e005bbab60912e0:21
-8e087b8bbcd92fe9389bf2f469f383f6:21
-e7e98eb2a51cc3cbf30bd532d8942294:21
-ba7c51aed579c0f1b473ef2035b15a17:21
-c173773ee22e94ab734c05bd504d3325:21
-5bef782b74608c4de25f4d053ae543a9:21
-169dfedc30ae5b95af848f3184206b4b:21
-668fa5f927950cbb34952cdb7e631eb8:21
-549d9811413f0c4b84cd1e84290127f1:21
-580fe13c6b95c05247c1770fff6d0fe9:21
-68749591b1210c540ab306d416f49c68:21
-02d6383509108efe665de4a2aff24702:21
-75269722fb78a1b61a850da9a73984fc:21
-58c819dd55c2558fed93faef88f45e89:21
-e479c8a303ccdaf45f673c78971d6a44:21
-cd94f79ea296e6126eb563a6e82a73b3:21
-ab652b1e99797dd3cc3bfb7e48db5d18:21
-4d3ab1362ff964f3947b437b16aba576:21
-53dea4d4defbb7512a31f4fa659437ae:21
-252e68c63ccea47b1d02a47837383c4e:21
-a9fff0b0f85b598b277aaf29fe537ad8:21
-caf732f52661f4c573b342a3d1da85bc:21
-9401285d5c41e4e0ee4581c62f4a2fc4:21
-5d0c7f0ad2c60ef78ae47f854b90a194:21
-983db0abe1d8976946a8a19eee412c9d:21
-34305e28da7351c9fe8a69e055e1c250:4
-f9a8c4364b7598dbeca0186f60e71ea6:4
+027b76c362f10b646fce08dd34457533:29
+a4fc9c89f980d489cd69b5a9a5379279:28
+e7ca6d1abe4cd55a491cdf58eb8f4602:17
6a6e8a76be9fd95bf68f4be6f6cf1bbf:4
14a880d95891af72380815d1c91baf73:4
+34305e28da7351c9fe8a69e055e1c250:4
+f9a8c4364b7598dbeca0186f60e71ea6:4
a2fa13ef7ba19d24adf59f8ecc12f0b4:4
acd568e2592b223aaec17240031ed688:4
cf994432aef1a88d7b82ffeecbbb96dc:4
@@ -417,24 +322,24 @@
4f7b3ab75c9ad8d5b10fec60265a3809:4
5123777f5c011dbd46ae38689b72a7d4:4
38c98f315f4b01c1aa53a76a214a919e:4
-25989076c985cb6136599803fbcb48d5:4
-a96139fddc921f9c720e39737bfc1e23:4
5cc99cf3cb2f9f5b2f3da2068a3c3b14:4
9d57682c086fd2c37173c59f7df7f7f1:4
-e2babe17ce0f4f5b30fee91c06c0e8fa:4
-d1c3eecefff445a312cfee0fa59d1431:4
+25989076c985cb6136599803fbcb48d5:4
+a96139fddc921f9c720e39737bfc1e23:4
bae7808504fe1ce016d86125d969287f:4
b0767396a0f7f31b48ac96880c9cbf8b:4
+e2babe17ce0f4f5b30fee91c06c0e8fa:4
+d1c3eecefff445a312cfee0fa59d1431:4
d5702e33cc1c8a04039657bec033a3e8:4
1449b4ca79da7eaf4a3e04a2aa7b764d:4
f50415b6582d0e25f6949d844bf93ee8:4
3fef2395a8a091e7dea7a3b99dfeaea6:4
03e302c7776c88610dafb333323263af:4
b7d9936f2c7c87d2edac782f5403001b:4
-affb389d45f01bc18197bf0f49f4b118:4
-a4eb5a999085dfe2424b2896e38b25d1:4
9cc9248b4494b77d7b40bbbf4dcef8b3:4
043d915c3e3d58cb001a8b32deaffea3:4
+affb389d45f01bc18197bf0f49f4b118:4
+a4eb5a999085dfe2424b2896e38b25d1:4
f9d3d4bc8a5944b63f51ae472e86813d:4
a5e0393e11eadd75dd36fb5379ae018c:4
5980bcaa38c00e4b837f2e9785bda3d2:4
@@ -449,20 +354,20 @@
7ef43aabb95d2f3ad79438accc09cb4c:4
aa6a754d71d091d666fea53f8769dfe9:4
c8341c7fe17e7ae1484fdc25aef13df9:4
-500d600d630b1130b906355e694caf25:4
-e2f20c930af14f873866419d98bb33c5:4
4b6c6d5caf6e3d47ffd3dfdb329842f2:4
a93c08a489709b0b6402127f3287a0a2:4
+500d600d630b1130b906355e694caf25:4
+e2f20c930af14f873866419d98bb33c5:4
4f67d44d8a9c73b20f9dccb0fe708910:4
3207a78e01966b63f857a845d312c5db:4
dc772adf9d92e1330e1e6c1bc8bbdbea:4
9a0f97a242e5b5c8bf70dd24775d973a:4
c51604fe4030e75ce4ed3f545e470eee:4
e8627b4481475f494ae99206e4d614a4:4
-a3abcd010f778136d77b5c00575faa93:4
-d806274a83ce72b89939c7e1fcc7dbf1:4
e42535765b64f8f96c6a5b13c5aa30e9:4
0389b0ce442166bc4298bd49f8ecfbff:4
+a3abcd010f778136d77b5c00575faa93:4
+d806274a83ce72b89939c7e1fcc7dbf1:4
e6c5da69c2396e1a4c404a82509edb1e:4
d62e86b3047119ec0941418ab6365bd4:4
3c957e719e0ffce99b544fcc9a97ab3a:4
@@ -471,3 +376,98 @@
15884ea4526d7af7c6dd5c5c89b81c97:4
23fb4c5f959189ae9c90b968647934f3:4
6b538e97c482ee0993607820484dcb08:4
+a5352e6f5efd89293cad68bde5359174:21
+4242f75bd579b5860e448896bd97161e:21
+0873c171286bf72adca073b8232909ad:21
+75fcc63a7299ec405cbbbae6c6f4124a:21
+f8e3f0c3200fb1dd44acfbd301d96bed:21
+3e972f384811f77fd62ce384910c7605:21
+746752a0385785d6c4a6af907b506ff8:21
+e40adee8247464101fcb01d083025c31:21
+f2c67cccefcb8826a54b39122e002062:21
+d96183e4ed9b9b2b075bd5f8c4364100:21
+0a8ab6673c7b4e87cb2faf2d7005362a:21
+810a68c672694a924abe0f0c59a9a394:21
+fe284dc96dc744beee1ddbb1a8e4c4ee:21
+711a52bc9e3eafe73e0c64c4ae6d5e6a:21
+d34d323d00595f4051cfe0621331317d:21
+542566d5040f1a84a95caf3c78e8d54f:21
+fadc0a0d51e6ccdc60992c058edd2711:21
+ccb12040fbbda66de180c11e6251049d:21
+052dc8ce89610356ae4c22dacb2668f6:21
+eb911a19cc8e2139a72a6bf025f0ef92:21
+8a9b11e0d4a3993f76485c069942489c:21
+b50ba38de9db0ecba8a7618f6138380b:21
+5a50c9965f9cd4ee5a321bbd530cc5b2:21
+301f4d37021f2c80999eedb2219554bd:21
+391832837fd0c5bd42b6d5d58dcd80f6:21
+535462c1df188932ba4375a241ac0a3b:21
+dd9d0f0182859fbb91bfe9cb3504becf:21
+517cb4d902b3c235f31b41bcd012b184:21
+4634339ec4a3dfef9d6a8a22e18c1354:21
+4015e477f56bfed839fc88a1ba749750:21
+be73d1320eb5c1229bc65e73f82039f3:21
+1c2ab72e50012527678e434999c9044a:21
+a09c3b287f292693c49b6ac6139f3aca:21
+67ce8616e53660f5898eaa146c7f3835:21
+eadaf0fe065d92924ebd1cade7c57e35:21
+b070068bc98b0eafc27ab9bb38e7cfbb:21
+5b728323f7668ae4ff0e895afaf15cea:21
+eea2af8f17a87b391353b3878325bbd1:21
+06065f8f4550b0f3530468ae56e4437b:21
+724567eb08f8a1a1dba97c82bd0a8d00:21
+aa462a0178a7561e7c756b157cbeeb38:21
+3af411c682f8264bb7c70794211c6248:21
+b972f761c2e0edfca60661ae2abf0218:21
+da13bac632b4f32422190d415f31bab8:21
+a7c7530bd46ed4e558e4d448f1ab9b7c:21
+e2c48e8e5e90a5dcc4cd070af2c1b20e:21
+0fc8da4c46369ca9dbcee59fb490681c:21
+5bb64f5d5c0764c9c1076e2c00ee3b3c:21
+f92f02539108f4c7034055e630ce5b1b:21
+21206168597de4cc003cf94bb2476441:21
+5adbafe8f34e077daeacc70305eed4f1:21
+80ffcde01a4a187455c15c7b11ae7c33:21
+4f89f7e86a6cb4ab329ea69918ae6f49:21
+d7d607c796c81475b0c57f2646b7e662:21
+0f88600ff268e2f32d56c63ce955aeba:21
+aeb824437b0a504c4a1a3109729a8817:21
+bd00bb3c1478ff33a781c1b48bfa9112:21
+b5653063b6061db848ef666076d4a44b:21
+eabb0f12ea319b61bdf53d9f4a6d7044:21
+1bf6b15eb573dea85120bcc84f419023:21
+71ae94c8959d23501b3a25269ed58f50:21
+c0673d423ec86b469092b2eedbf4e8db:21
+52986dd229c1677a8a8fea05023f7625:21
+364cf0eb88afb77fbc7209d2c1c7273e:21
+072b20ca146065654d29d72fa24fc89a:21
+50ddd3dc05b1198214cb57e9250d7076:21
+3eb1459c5b79cc1a562b145846a1b957:21
+d84c006146e1a54bba7a7122983ef085:21
+3a16ed65c968daf194834ce7a0225b8a:21
+6321e1881f171dc79e50d8e0cbc6ce7d:21
+5800fc71343c619b5e005bbab60912e0:21
+8e087b8bbcd92fe9389bf2f469f383f6:21
+e7e98eb2a51cc3cbf30bd532d8942294:21
+ba7c51aed579c0f1b473ef2035b15a17:21
+c173773ee22e94ab734c05bd504d3325:21
+5bef782b74608c4de25f4d053ae543a9:21
+169dfedc30ae5b95af848f3184206b4b:21
+549d9811413f0c4b84cd1e84290127f1:21
+668fa5f927950cbb34952cdb7e631eb8:21
+580fe13c6b95c05247c1770fff6d0fe9:21
+02d6383509108efe665de4a2aff24702:21
+68749591b1210c540ab306d416f49c68:21
+75269722fb78a1b61a850da9a73984fc:21
+58c819dd55c2558fed93faef88f45e89:21
+cd94f79ea296e6126eb563a6e82a73b3:21
+e479c8a303ccdaf45f673c78971d6a44:21
+ab652b1e99797dd3cc3bfb7e48db5d18:21
+4d3ab1362ff964f3947b437b16aba576:21
+53dea4d4defbb7512a31f4fa659437ae:21
+252e68c63ccea47b1d02a47837383c4e:21
+a9fff0b0f85b598b277aaf29fe537ad8:21
+caf732f52661f4c573b342a3d1da85bc:21
+9401285d5c41e4e0ee4581c62f4a2fc4:21
+5d0c7f0ad2c60ef78ae47f854b90a194:21
+983db0abe1d8976946a8a19eee412c9d:21
diff --git a/src/main/resources/api_database/api_database_api_level.ser b/src/main/resources/api_database/api_database_api_level.ser
index ab078a7..984e786 100644
--- a/src/main/resources/api_database/api_database_api_level.ser
+++ b/src/main/resources/api_database/api_database_api_level.ser
Binary files differ
diff --git a/src/main/resources/api_database/api_database_hash_lookup.ser b/src/main/resources/api_database/api_database_hash_lookup.ser
index b332706..d49a7f3 100644
--- a/src/main/resources/api_database/api_database_hash_lookup.ser
+++ b/src/main/resources/api_database/api_database_hash_lookup.ser
Binary files differ
diff --git a/src/test/java/com/android/tools/r8/ToolHelper.java b/src/test/java/com/android/tools/r8/ToolHelper.java
index 1534edb..2d8ebe3 100644
--- a/src/test/java/com/android/tools/r8/ToolHelper.java
+++ b/src/test/java/com/android/tools/r8/ToolHelper.java
@@ -144,6 +144,8 @@
public static final String RHINO_JAR = "third_party/rhino-1.7.10/rhino-1.7.10.jar";
public static final String K2JVMCompiler = "org.jetbrains.kotlin.cli.jvm.K2JVMCompiler";
private static final String ANDROID_JAR_PATTERN = "third_party/android_jar/lib-v%d/android.jar";
+ private static final String ANDROID_API_VERSIONS_XML_PATTERN =
+ "third_party/android_jar/lib-v%d/api-versions.xml";
private static final AndroidApiLevel DEFAULT_MIN_SDK = AndroidApiLevel.I;
public static final String JDK_11_TESTS_DIR = "third_party/openjdk/jdk-11-test/";
@@ -837,6 +839,12 @@
return getAndroidJar(AndroidApiLevel.getAndroidApiLevel(apiLevel));
}
+ public static Path getApiVersionsXmlFile(AndroidApiLevel apiLevel) {
+ // We only store api-versions.xml from S and up.
+ assert apiLevel.isGreaterThanOrEqualTo(AndroidApiLevel.S);
+ return Paths.get(String.format(ANDROID_API_VERSIONS_XML_PATTERN, apiLevel.getLevel()));
+ }
+
private static Path getAndroidJarPath(AndroidApiLevel apiLevel) {
String jar = String.format(
ANDROID_JAR_PATTERN,
diff --git a/src/test/java/com/android/tools/r8/apimodel/AndroidApiHashingDatabaseBuilderGenerator.java b/src/test/java/com/android/tools/r8/apimodel/AndroidApiHashingDatabaseBuilderGenerator.java
index 300eed5..6c3d36e 100644
--- a/src/test/java/com/android/tools/r8/apimodel/AndroidApiHashingDatabaseBuilderGenerator.java
+++ b/src/test/java/com/android/tools/r8/apimodel/AndroidApiHashingDatabaseBuilderGenerator.java
@@ -5,16 +5,21 @@
package com.android.tools.r8.apimodel;
import com.android.tools.r8.TestBase;
+import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.androidapi.AndroidApiLevelHashingDatabaseImpl;
import com.android.tools.r8.apimodel.AndroidApiVersionsXmlParser.ParsedApiClass;
+import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexField;
import com.android.tools.r8.graph.DexItemFactory;
import com.android.tools.r8.graph.DexMember;
import com.android.tools.r8.graph.DexMethod;
import com.android.tools.r8.graph.DexReference;
import com.android.tools.r8.graph.DexType;
+import com.android.tools.r8.graph.LibraryClass;
import com.android.tools.r8.references.ClassReference;
+import com.android.tools.r8.shaking.AppInfoWithLiveness;
import com.android.tools.r8.utils.AndroidApiLevel;
+import com.android.tools.r8.utils.AndroidApp;
import com.android.tools.r8.utils.Pair;
import com.android.tools.r8.utils.structural.DefaultHashingVisitor;
import com.android.tools.r8.utils.structural.HasherWrapper;
@@ -30,6 +35,7 @@
import java.util.IdentityHashMap;
import java.util.List;
import java.util.Map;
+import java.util.Map.Entry;
import java.util.Set;
import java.util.function.BiConsumer;
@@ -48,12 +54,16 @@
List<ParsedApiClass> apiClasses,
Path pathToIndices,
Path pathToApiLevels,
- Path ambiguousDefinitions)
+ Path ambiguousDefinitions,
+ AndroidApiLevel androidJarApiLevel)
throws Exception {
Map<ClassReference, Map<DexMethod, AndroidApiLevel>> methodMap = new HashMap<>();
Map<ClassReference, Map<DexField, AndroidApiLevel>> fieldMap = new HashMap<>();
Map<ClassReference, ParsedApiClass> lookupMap = new HashMap<>();
- DexItemFactory factory = new DexItemFactory();
+ Path androidJar = ToolHelper.getAndroidJar(androidJarApiLevel);
+ AppView<AppInfoWithLiveness> appView =
+ computeAppViewWithLiveness(AndroidApp.builder().addLibraryFile(androidJar).build());
+ DexItemFactory factory = appView.dexItemFactory();
Map<Integer, AndroidApiLevel> apiLevelMap = new HashMap<>();
Map<Integer, Pair<DexReference, AndroidApiLevel>> reverseMap = new HashMap<>();
@@ -97,13 +107,58 @@
.forEach(addConsumer);
}
+ Map<DexType, String> missingMemberInformation = new IdentityHashMap<>();
+ for (LibraryClass clazz : appView.app().asDirect().libraryClasses()) {
+ ParsedApiClass parsedApiClass = lookupMap.get(clazz.getClassReference());
+ if (parsedApiClass == null) {
+ missingMemberInformation.put(clazz.getType(), "Could not be found in " + androidJar);
+ continue;
+ }
+ StringBuilder classBuilder = new StringBuilder();
+ Map<DexField, AndroidApiLevel> fieldMapForClass = fieldMap.get(clazz.getClassReference());
+ assert fieldMapForClass != null;
+ clazz.forEachClassField(
+ field -> {
+ if (field.getAccessFlags().isPublic()
+ && getApiLevelFromReference(field.getReference(), apiLevelMap, ambiguousMap) == null
+ && field.toSourceString().contains("this$0")) {
+ classBuilder.append(" ").append(field).append(" is missing\n");
+ }
+ });
+ Map<DexMethod, AndroidApiLevel> methodMapForClass = methodMap.get(clazz.getClassReference());
+ assert methodMapForClass != null;
+ clazz.forEachClassMethod(
+ method -> {
+ if (method.getAccessFlags().isPublic()
+ && getApiLevelFromReference(method.getReference(), apiLevelMap, ambiguousMap)
+ == null
+ && !factory.objectMembers.isObjectMember(method.getReference())) {
+ classBuilder.append(" ").append(method).append(" is missing\n");
+ }
+ });
+ if (classBuilder.length() > 0) {
+ missingMemberInformation.put(clazz.getType(), classBuilder.toString());
+ }
+ }
+
+ // api-versions.xml do not encode all members of StringBuffers and StringBuilders, check that we
+ // only have missing definitions for those two classes.
+ assert missingMemberInformation.size() == 2;
+ assert missingMemberInformation.containsKey(factory.stringBufferType);
+ assert missingMemberInformation.containsKey(factory.stringBuilderType);
+
int[] indices = new int[apiLevelMap.size()];
byte[] apiLevel = new byte[apiLevelMap.size()];
ArrayList<Integer> integers = new ArrayList<>(apiLevelMap.keySet());
for (int i = 0; i < integers.size(); i++) {
indices[i] = integers.get(i);
AndroidApiLevel androidApiLevel = apiLevelMap.get(integers.get(i));
- apiLevel[i] = (byte) (androidApiLevel == null ? -1 : androidApiLevel.getLevel());
+ assert androidApiLevel != null;
+ apiLevel[i] =
+ (byte)
+ (androidApiLevel == AndroidApiLevel.ANDROID_PLATFORM
+ ? -1
+ : androidApiLevel.getLevel());
}
try (FileOutputStream fileOutputStream = new FileOutputStream(pathToIndices.toFile());
@@ -152,14 +207,37 @@
return sb.toString();
}
+ private static AndroidApiLevel getApiLevelFromReference(
+ DexReference reference,
+ Map<Integer, AndroidApiLevel> apiLevelMap,
+ Map<AndroidApiLevel, Set<DexReference>> ambiguousMap) {
+ int hashCode = reference.hashCode();
+ AndroidApiLevel androidApiLevel = apiLevelMap.get(hashCode);
+ if (androidApiLevel == null) {
+ return null;
+ }
+ if (androidApiLevel == AndroidApiLevel.ANDROID_PLATFORM) {
+ for (Entry<AndroidApiLevel, Set<DexReference>> apiAmbiguousSet : ambiguousMap.entrySet()) {
+ if (apiAmbiguousSet.getValue().contains(reference)) {
+ return apiAmbiguousSet.getKey();
+ }
+ }
+ return null;
+ } else {
+ return androidApiLevel;
+ }
+ }
+
private static BiConsumer<DexReference, AndroidApiLevel> addReferenceToMaps(
Map<Integer, AndroidApiLevel> apiLevelMap,
Map<Integer, Pair<DexReference, AndroidApiLevel>> reverseMap,
Map<AndroidApiLevel, Set<DexReference>> ambiguousMap) {
return ((reference, apiLevel) -> {
AndroidApiLevel existingMethod = apiLevelMap.put(reference.hashCode(), apiLevel);
- if (existingMethod != null) {
- apiLevelMap.put(reference.hashCode(), null);
+ if (existingMethod == AndroidApiLevel.ANDROID_PLATFORM) {
+ addAmbiguousEntry(apiLevel, reference, ambiguousMap);
+ } else if (existingMethod != null) {
+ apiLevelMap.put(reference.hashCode(), AndroidApiLevel.ANDROID_PLATFORM);
Pair<DexReference, AndroidApiLevel> existingPair = reverseMap.get(reference.hashCode());
addAmbiguousEntry(existingPair.getSecond(), existingPair.getFirst(), ambiguousMap);
addAmbiguousEntry(apiLevel, reference, ambiguousMap);
diff --git a/src/test/java/com/android/tools/r8/apimodel/AndroidApiHashingDatabaseBuilderGeneratorTest.java b/src/test/java/com/android/tools/r8/apimodel/AndroidApiHashingDatabaseBuilderGeneratorTest.java
index 9bbc751..599829b 100644
--- a/src/test/java/com/android/tools/r8/apimodel/AndroidApiHashingDatabaseBuilderGeneratorTest.java
+++ b/src/test/java/com/android/tools/r8/apimodel/AndroidApiHashingDatabaseBuilderGeneratorTest.java
@@ -39,14 +39,14 @@
public class AndroidApiHashingDatabaseBuilderGeneratorTest extends TestBase {
protected final TestParameters parameters;
- private static final Path API_VERSIONS_XML =
- Paths.get(ToolHelper.THIRD_PARTY_DIR, "android_jar", "api-versions", "api-versions.xml");
private static final Path API_DATABASE_HASH_LOOKUP =
Paths.get(ToolHelper.RESOURCES_DIR, "api_database", "api_database_hash_lookup.ser");
private static final Path API_DATABASE_API_LEVEL =
Paths.get(ToolHelper.RESOURCES_DIR, "api_database", "api_database_api_level.ser");
private static final Path API_DATABASE_AMBIGUOUS =
Paths.get(ToolHelper.RESOURCES_DIR, "api_database", "api_database_ambiguous.txt");
+
+ // Update the API_LEVEL below to have the database generated for a new api level.
private static final AndroidApiLevel API_LEVEL = AndroidApiLevel.S;
@Parameters(name = "{0}")
@@ -73,17 +73,20 @@
private static GenerateDatabaseResourceFilesResult generateResourcesFiles() throws Exception {
return generateResourcesFiles(
- AndroidApiVersionsXmlParser.getParsedApiClasses(API_VERSIONS_XML.toFile(), API_LEVEL));
+ AndroidApiVersionsXmlParser.getParsedApiClasses(
+ ToolHelper.getApiVersionsXmlFile(API_LEVEL).toFile(), API_LEVEL),
+ API_LEVEL);
}
private static GenerateDatabaseResourceFilesResult generateResourcesFiles(
- List<ParsedApiClass> apiClasses) throws Exception {
+ List<ParsedApiClass> apiClasses, AndroidApiLevel androidJarApiLevel) throws Exception {
TemporaryFolder temp = new TemporaryFolder();
temp.create();
Path indices = temp.newFile("indices.ser").toPath();
Path apiLevels = temp.newFile("apiLevels.ser").toPath();
Path ambiguous = temp.newFile("ambiguous.ser").toPath();
- AndroidApiHashingDatabaseBuilderGenerator.generate(apiClasses, indices, apiLevels, ambiguous);
+ AndroidApiHashingDatabaseBuilderGenerator.generate(
+ apiClasses, indices, apiLevels, ambiguous, androidJarApiLevel);
return new GenerateDatabaseResourceFilesResult(indices, apiLevels, ambiguous);
}
@@ -92,7 +95,8 @@
// This tests makes a rudimentary check on the number of classes, fields and methods in
// api-versions.xml to ensure that the runtime tests do not vacuously succeed.
List<ParsedApiClass> parsedApiClasses =
- AndroidApiVersionsXmlParser.getParsedApiClasses(API_VERSIONS_XML.toFile(), API_LEVEL);
+ AndroidApiVersionsXmlParser.getParsedApiClasses(
+ ToolHelper.getApiVersionsXmlFile(API_LEVEL).toFile(), API_LEVEL);
IntBox numberOfFields = new IntBox(0);
IntBox numberOfMethods = new IntBox(0);
parsedApiClasses.forEach(
@@ -107,9 +111,9 @@
}));
});
// These numbers will change when updating api-versions.xml
- assertEquals(5037, parsedApiClasses.size());
- assertEquals(26362, numberOfFields.get());
- assertEquals(40416, numberOfMethods.get());
+ assertEquals(5065, parsedApiClasses.size());
+ assertEquals(26492, numberOfFields.get());
+ assertEquals(40475, numberOfMethods.get());
}
@Test
@@ -123,7 +127,8 @@
@Test
public void testCanLookUpAllParsedApiClassesAndMembers() throws Exception {
List<ParsedApiClass> parsedApiClasses =
- AndroidApiVersionsXmlParser.getParsedApiClasses(API_VERSIONS_XML.toFile(), API_LEVEL);
+ AndroidApiVersionsXmlParser.getParsedApiClasses(
+ ToolHelper.getApiVersionsXmlFile(API_LEVEL).toFile(), API_LEVEL);
DexItemFactory factory = new DexItemFactory();
AndroidApiLevelHashingDatabaseImpl androidApiLevelDatabase =
new AndroidApiLevelHashingDatabaseImpl(ImmutableList.of());
@@ -168,9 +173,7 @@
* and override the current file in there.
*/
public static void main(String[] args) throws Exception {
- List<ParsedApiClass> parsedApiClasses =
- AndroidApiVersionsXmlParser.getParsedApiClasses(API_VERSIONS_XML.toFile(), API_LEVEL);
- GenerateDatabaseResourceFilesResult result = generateResourcesFiles(parsedApiClasses);
+ GenerateDatabaseResourceFilesResult result = generateResourcesFiles();
verifyNoDuplicateHashes(result.indices);
Files.move(result.indices, API_DATABASE_HASH_LOOKUP, REPLACE_EXISTING);
Files.move(result.apiLevels, API_DATABASE_API_LEVEL, REPLACE_EXISTING);
diff --git a/src/test/java/com/android/tools/r8/apimodel/AndroidApiVersionsXmlParser.java b/src/test/java/com/android/tools/r8/apimodel/AndroidApiVersionsXmlParser.java
index 24b9613..4a3cfa2 100644
--- a/src/test/java/com/android/tools/r8/apimodel/AndroidApiVersionsXmlParser.java
+++ b/src/test/java/com/android/tools/r8/apimodel/AndroidApiVersionsXmlParser.java
@@ -60,7 +60,11 @@
String type = DescriptorUtils.getJavaTypeFromBinaryName(getName(node));
ClassSubject clazz = inspector.clazz(type);
if (!clazz.isPresent()) {
- // TODO(b/190326408): Investigate why the class is not present.
+ if (!clazz.getOriginalName().startsWith("android.test")
+ && !clazz.getOriginalName().startsWith("junit")) {
+ assert hasRemoved(node);
+ assert getRemoved(node).isLessThanOrEqualTo(maxApiLevel);
+ }
continue;
}
ClassReference originalReference = clazz.getOriginalReference();
@@ -77,7 +81,6 @@
Reference.classFromBinaryName(getName(memberNode)),
hasSince(memberNode) ? getSince(memberNode) : apiLevel);
} else if (isMethod(memberNode)) {
- // TODO(b/190326408): Check for existence.
parsedApiClass.register(
getMethodReference(originalReference, memberNode),
getMaxAndroidApiLevelFromNode(memberNode, apiLevel));
@@ -85,7 +88,8 @@
// The field do not have descriptors and are supposed to be unique.
FieldSubject fieldSubject = clazz.uniqueFieldWithName(getName(memberNode));
if (!fieldSubject.isPresent()) {
- // TODO(b/190326408): Investigate why the member is not present.
+ assert hasRemoved(memberNode);
+ assert getRemoved(memberNode).isLessThanOrEqualTo(maxApiLevel);
continue;
}
parsedApiClass.register(
@@ -131,12 +135,22 @@
return node.getAttributes().getNamedItem("since") != null;
}
+ private boolean hasRemoved(Node node) {
+ return node.getAttributes().getNamedItem("removed") != null;
+ }
+
private AndroidApiLevel getSince(Node node) {
assert hasSince(node);
Node since = node.getAttributes().getNamedItem("since");
return AndroidApiLevel.getAndroidApiLevel(Integer.parseInt(since.getNodeValue()));
}
+ private AndroidApiLevel getRemoved(Node node) {
+ assert hasRemoved(node);
+ Node removed = node.getAttributes().getNamedItem("removed");
+ return AndroidApiLevel.getAndroidApiLevel(Integer.parseInt(removed.getNodeValue()));
+ }
+
private AndroidApiLevel getMaxAndroidApiLevelFromNode(Node node, AndroidApiLevel defaultValue) {
if (node == null || !hasSince(node)) {
return defaultValue;