Linking.java revision 11b67b201adb173d5f6f1b7a3fd337fda91e200f
1c371a02e7cf504e9a926ca29c33e63b658c2cef7James Dong/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2018 The Android Open Source Project
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License.
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License.
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.lang.reflect.InvocationTargetException;
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class Linking {
209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  public static boolean canAccess(String className, boolean takesParameter) throws Exception {
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    try {
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      Class<?> c = Class.forName(className);
2320cb94eeb5b9672573fc86bf51e09bd66a774581Nicolas Catania      if (takesParameter) {
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        c.getDeclaredMethod("access", Integer.TYPE).invoke(null, 42);
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      } else {
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        c.getDeclaredMethod("access").invoke(null);
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      }
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      return true;
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    } catch (InvocationTargetException ex) {
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      if (ex.getCause() instanceof IllegalAccessError) {
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return false;
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      } else {
331ee60119c4fa51ebfa781cf5fdc33f192e8551b8Ted Bonkenburg        throw ex;
3487eac99a21772ae56018cb81db6966557b459554Ruben Brunk      }
354df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project    }
36256430093679e1d62b54fb0c852126e54d162f6fAndreas Huber  }
37256430093679e1d62b54fb0c852126e54d162f6fAndreas Huber}
3879f407cc6c5ae34fc6f04d52fd034b49d1f002c4James Dong
3979f407cc6c5ae34fc6f04d52fd034b49d1f002c4James Dong// INSTANCE FIELD GET
40d84e1ce0b535128f03416145554fb405f9fade3eJeff Sharkey
4120cb94eeb5b9672573fc86bf51e09bd66a774581Nicolas Cataniaclass LinkFieldGetWhitelist {
4220cb94eeb5b9672573fc86bf51e09bd66a774581Nicolas Catania  public static int access() {
43d47f7d8b5fe3a3861d7cbdc5f912235407823c8eAndy McFadden    return new ParentClass().fieldPublicWhitelist;
448335f1ccccedb6655d96d9d5b697a7f0938235ddMathias Agopian  }
45d211f41f764fe81fe00b10a99b4b44cb84479cbeGloria Wang}
46d211f41f764fe81fe00b10a99b4b44cb84479cbeGloria Wang
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass LinkFieldGetLightGreylist {
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  public static int access() {
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return new ParentClass().fieldPublicLightGreylist;
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  }
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass LinkFieldGetDarkGreylist {
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  public static int access() {
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return new ParentClass().fieldPublicDarkGreylist;
561ee60119c4fa51ebfa781cf5fdc33f192e8551b8Ted Bonkenburg  }
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
59d5f9fa574da2ee210ac86154ab0aea9fee5e8278Andreas Huberclass LinkFieldGetBlacklist {
60d5f9fa574da2ee210ac86154ab0aea9fee5e8278Andreas Huber  public static int access() {
61d5f9fa574da2ee210ac86154ab0aea9fee5e8278Andreas Huber    return new ParentClass().fieldPublicBlacklist;
62d5f9fa574da2ee210ac86154ab0aea9fee5e8278Andreas Huber  }
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// INSTANCE FIELD SET
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass LinkFieldSetWhitelist {
689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  public static void access(int x) {
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    new ParentClass().fieldPublicWhitelist = x;
709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  }
719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass LinkFieldSetLightGreylist {
749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  public static void access(int x) {
75162ee49e1ce8800de80697fdd0e0e42ad7e9374eGloria Wang    new ParentClass().fieldPublicLightGreylist = x;
769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  }
779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass LinkFieldSetDarkGreylist {
809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  public static void access(int x) {
819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    new ParentClass().fieldPublicDarkGreylist = x;
829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  }
839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass LinkFieldSetBlacklist {
869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  public static void access(int x) {
879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    new ParentClass().fieldPublicBlacklist = x;
889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  }
893762c311729fe9f3af085c14c5c1fb471d994c03Steve Block}
909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// STATIC FIELD GET
929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass LinkFieldGetStaticWhitelist {
949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  public static int access() {
959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return ParentClass.fieldPublicStaticWhitelist;
969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  }
979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass LinkFieldGetStaticLightGreylist {
1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  public static int access() {
1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return ParentClass.fieldPublicStaticLightGreylist;
1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  }
1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass LinkFieldGetStaticDarkGreylist {
1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  public static int access() {
1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return ParentClass.fieldPublicStaticDarkGreylist;
108162ee49e1ce8800de80697fdd0e0e42ad7e9374eGloria Wang  }
1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
111162ee49e1ce8800de80697fdd0e0e42ad7e9374eGloria Wangclass LinkFieldGetStaticBlacklist {
112333c09945e7399c6a2b1f4d9fdf981508e38db52Insun Kang  public static int access() {
113333c09945e7399c6a2b1f4d9fdf981508e38db52Insun Kang    return ParentClass.fieldPublicStaticBlacklist;
114333c09945e7399c6a2b1f4d9fdf981508e38db52Insun Kang  }
1158902097bb686752ff207e3bda12713be1a8c74ebInsun Kang}
116162ee49e1ce8800de80697fdd0e0e42ad7e9374eGloria Wang
117333c09945e7399c6a2b1f4d9fdf981508e38db52Insun Kang// STATIC FIELD SET
118162ee49e1ce8800de80697fdd0e0e42ad7e9374eGloria Wang
119162ee49e1ce8800de80697fdd0e0e42ad7e9374eGloria Wangclass LinkFieldSetStaticWhitelist {
120162ee49e1ce8800de80697fdd0e0e42ad7e9374eGloria Wang  public static void access(int x) {
121162ee49e1ce8800de80697fdd0e0e42ad7e9374eGloria Wang    ParentClass.fieldPublicStaticWhitelist = x;
122162ee49e1ce8800de80697fdd0e0e42ad7e9374eGloria Wang  }
1238902097bb686752ff207e3bda12713be1a8c74ebInsun Kang}
1248902097bb686752ff207e3bda12713be1a8c74ebInsun Kang
1258902097bb686752ff207e3bda12713be1a8c74ebInsun Kangclass LinkFieldSetStaticLightGreylist {
1268902097bb686752ff207e3bda12713be1a8c74ebInsun Kang  public static void access(int x) {
1278902097bb686752ff207e3bda12713be1a8c74ebInsun Kang    ParentClass.fieldPublicStaticLightGreylist = x;
1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  }
1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass LinkFieldSetStaticDarkGreylist {
1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  public static void access(int x) {
1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ParentClass.fieldPublicStaticDarkGreylist = x;
1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  }
1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass LinkFieldSetStaticBlacklist {
1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  public static void access(int x) {
1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ParentClass.fieldPublicStaticBlacklist = x;
1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  }
1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// INVOKE INSTANCE METHOD
144b1d90c8f60f71422196c337f1d078b68867f5710Mathias Agopian
1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass LinkMethodWhitelist {
1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  public static int access() {
147b1d90c8f60f71422196c337f1d078b68867f5710Mathias Agopian    return new ParentClass().methodPublicWhitelist();
1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  }
1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass LinkMethodLightGreylist {
1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  public static int access() {
15332f82774884bdd709789ab9f3ccdf5b972ff7681Nicolas Catania    return new ParentClass().methodPublicLightGreylist();
15432f82774884bdd709789ab9f3ccdf5b972ff7681Nicolas Catania  }
1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass LinkMethodDarkGreylist {
1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  public static int access() {
1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return new ParentClass().methodPublicDarkGreylist();
1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  }
1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass LinkMethodBlacklist {
1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  public static int access() {
1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return new ParentClass().methodPublicBlacklist();
1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  }
167fc301b0bb5c635c6bb51b48c504a8db5f9010e5cDave Burke}
168fc301b0bb5c635c6bb51b48c504a8db5f9010e5cDave Burke
1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// INVOKE STATIC METHOD
1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass LinkMethodStaticWhitelist {
1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  public static int access() {
1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return ParentClass.methodPublicStaticWhitelist();
1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  }
1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass LinkMethodStaticLightGreylist {
1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  public static int access() {
1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return ParentClass.methodPublicStaticLightGreylist();
1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  }
1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass LinkMethodStaticDarkGreylist {
184256430093679e1d62b54fb0c852126e54d162f6fAndreas Huber  public static int access() {
18517524dc0d296146c8ffb3f692dc8ab05fee5b1e0James Dong    return ParentClass.methodPublicStaticDarkGreylist();
18617524dc0d296146c8ffb3f692dc8ab05fee5b1e0James Dong  }
18717524dc0d296146c8ffb3f692dc8ab05fee5b1e0James Dong}
1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass LinkMethodStaticBlacklist {
1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  public static int access() {
1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return ParentClass.methodPublicStaticBlacklist();
1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  }
1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project