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