xref: /aosp_15_r20/art/test/939-hello-transformation-bcp/src/Main.java (revision 795d594fd825385562da6b089ea9b2033f3abf5a)
1*795d594fSAndroid Build Coastguard Worker /*
2*795d594fSAndroid Build Coastguard Worker  * Copyright (C) 2016 The Android Open Source Project
3*795d594fSAndroid Build Coastguard Worker  *
4*795d594fSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*795d594fSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*795d594fSAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*795d594fSAndroid Build Coastguard Worker  *
8*795d594fSAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*795d594fSAndroid Build Coastguard Worker  *
10*795d594fSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*795d594fSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*795d594fSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*795d594fSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*795d594fSAndroid Build Coastguard Worker  * limitations under the License.
15*795d594fSAndroid Build Coastguard Worker  */
16*795d594fSAndroid Build Coastguard Worker 
17*795d594fSAndroid Build Coastguard Worker import static art.Redefinition.doCommonClassRedefinition;
18*795d594fSAndroid Build Coastguard Worker import java.util.Base64;
19*795d594fSAndroid Build Coastguard Worker import java.util.OptionalLong;
20*795d594fSAndroid Build Coastguard Worker public class Main {
21*795d594fSAndroid Build Coastguard Worker 
22*795d594fSAndroid Build Coastguard Worker   /**
23*795d594fSAndroid Build Coastguard Worker    * This is the base64 encoded class/dex.
24*795d594fSAndroid Build Coastguard Worker    *
25*795d594fSAndroid Build Coastguard Worker    * To regenerate these constants:
26*795d594fSAndroid Build Coastguard Worker    *  1) Update src-optional/java/util/OptionalLong.java
27*795d594fSAndroid Build Coastguard Worker    *  2) run convert-to-base64.sh script, specifying
28*795d594fSAndroid Build Coastguard Worker    *     required parameters (path to d8 tool and path to android.jar;
29*795d594fSAndroid Build Coastguard Worker    *     both can be found in Android sdk)
30*795d594fSAndroid Build Coastguard Worker    *  3) copy and paste base64 text below
31*795d594fSAndroid Build Coastguard Worker    *
32*795d594fSAndroid Build Coastguard Worker    */
33*795d594fSAndroid Build Coastguard Worker   private static final byte[] CLASS_BYTES = Base64.getDecoder().decode(
34*795d594fSAndroid Build Coastguard Worker       "LyoKICogQ29weXJpZ2h0IChDKSAyMDIxIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QK" +
35*795d594fSAndroid Build Coastguard Worker       "ICoKICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhl" +
36*795d594fSAndroid Build Coastguard Worker       "ICJMaWNlbnNlIik7CiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBs" +
37*795d594fSAndroid Build Coastguard Worker       "aWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBM" +
38*795d594fSAndroid Build Coastguard Worker       "aWNlbnNlIGF0CiAqCiAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VO" +
39*795d594fSAndroid Build Coastguard Worker       "U0UtMi4wCiAqCiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQg" +
40*795d594fSAndroid Build Coastguard Worker       "dG8gaW4gd3JpdGluZywgc29mdHdhcmUKICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2Ug" +
41*795d594fSAndroid Build Coastguard Worker       "aXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKICogV0lUSE9VVCBXQVJSQU5USUVT" +
42*795d594fSAndroid Build Coastguard Worker       "IE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiAq" +
43*795d594fSAndroid Build Coastguard Worker       "IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJt" +
44*795d594fSAndroid Build Coastguard Worker       "aXNzaW9ucyBhbmQKICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAqLwpwYWNrYWdl" +
45*795d594fSAndroid Build Coastguard Worker       "IGphdmEudXRpbDsKaW1wb3J0IGphdmEudXRpbC5mdW5jdGlvbi5Mb25nQ29uc3VtZXI7CmltcG9y" +
46*795d594fSAndroid Build Coastguard Worker       "dCBqYXZhLnV0aWwuZnVuY3Rpb24uTG9uZ1N1cHBsaWVyOwppbXBvcnQgamF2YS51dGlsLmZ1bmN0" +
47*795d594fSAndroid Build Coastguard Worker       "aW9uLlN1cHBsaWVyOwppbXBvcnQgamF2YS51dGlsLnN0cmVhbS5Mb25nU3RyZWFtOwpwdWJsaWMg" +
48*795d594fSAndroid Build Coastguard Worker       "ZmluYWwgY2xhc3MgT3B0aW9uYWxMb25nIHsKICAvLyBNYWtlIHN1cmUgd2UgaGF2ZSBhIDxjbGlu" +
49*795d594fSAndroid Build Coastguard Worker       "aXQ+IGZ1bmN0aW9uIHNpbmNlIHRoZSByZWFsIGltcGxlbWVudGF0aW9uIG9mIE9wdGlvbmFsTG9u" +
50*795d594fSAndroid Build Coastguard Worker       "ZyBkb2VzLgogIHN0YXRpYyB7IEVNUFRZID0gbnVsbDsgfQogIHByaXZhdGUgc3RhdGljIGZpbmFs" +
51*795d594fSAndroid Build Coastguard Worker       "IE9wdGlvbmFsTG9uZyBFTVBUWTsKICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gaXNQcmVzZW50Owog" +
52*795d594fSAndroid Build Coastguard Worker       "IHByaXZhdGUgZmluYWwgbG9uZyB2YWx1ZTsKICBwcml2YXRlIE9wdGlvbmFsTG9uZygpIHsgaXNQ" +
53*795d594fSAndroid Build Coastguard Worker       "cmVzZW50ID0gZmFsc2U7IHZhbHVlID0gMDsgfQogIHByaXZhdGUgT3B0aW9uYWxMb25nKGxvbmcg" +
54*795d594fSAndroid Build Coastguard Worker       "bCkgeyB0aGlzKCk7IH0KICBwdWJsaWMgc3RhdGljIE9wdGlvbmFsTG9uZyBlbXB0eSgpIHsgcmV0" +
55*795d594fSAndroid Build Coastguard Worker       "dXJuIG51bGw7IH0KICBwdWJsaWMgc3RhdGljIE9wdGlvbmFsTG9uZyBvZihsb25nIHZhbHVlKSB7" +
56*795d594fSAndroid Build Coastguard Worker       "IHJldHVybiBudWxsOyB9CiAgcHVibGljIGxvbmcgZ2V0QXNMb25nKCkgeyByZXR1cm4gMDsgfQog" +
57*795d594fSAndroid Build Coastguard Worker       "IHB1YmxpYyBib29sZWFuIGlzUHJlc2VudCgpIHsgcmV0dXJuIGZhbHNlOyB9CiAgcHVibGljIGJv" +
58*795d594fSAndroid Build Coastguard Worker       "b2xlYW4gaXNFbXB0eSgpIHsgcmV0dXJuIGZhbHNlOyB9CiAgcHVibGljIHZvaWQgaWZQcmVzZW50" +
59*795d594fSAndroid Build Coastguard Worker       "KExvbmdDb25zdW1lciBjKSB7IH0KICBwdWJsaWMgdm9pZCBpZlByZXNlbnRPckVsc2UoTG9uZ0Nv" +
60*795d594fSAndroid Build Coastguard Worker       "bnN1bWVyIGFjdGlvbiwgUnVubmFibGUgZW1wdHlBY3Rpb24pIHsgfQogIHB1YmxpYyBMb25nU3Ry" +
61*795d594fSAndroid Build Coastguard Worker       "ZWFtIHN0cmVhbSgpIHsgcmV0dXJuIG51bGw7IH0KICBwdWJsaWMgbG9uZyBvckVsc2UobG9uZyBs" +
62*795d594fSAndroid Build Coastguard Worker       "KSB7IHJldHVybiAwOyB9CiAgcHVibGljIGxvbmcgb3JFbHNlR2V0KExvbmdTdXBwbGllciBzKSB7" +
63*795d594fSAndroid Build Coastguard Worker       "IHJldHVybiAwOyB9CiAgcHVibGljIGxvbmcgb3JFbHNlVGhyb3coKSB7IHJldHVybiAwOyB9CiAg" +
64*795d594fSAndroid Build Coastguard Worker       "cHVibGljPFggZXh0ZW5kcyBUaHJvd2FibGU+IGxvbmcgb3JFbHNlVGhyb3coU3VwcGxpZXI8PyBl" +
65*795d594fSAndroid Build Coastguard Worker       "eHRlbmRzIFg+IHMpIHRocm93cyBYIHsgcmV0dXJuIDA7IH0KICBwdWJsaWMgYm9vbGVhbiBlcXVh" +
66*795d594fSAndroid Build Coastguard Worker       "bHMoT2JqZWN0IG8pIHsgcmV0dXJuIGZhbHNlOyB9CiAgcHVibGljIGludCBoYXNoQ29kZSgpIHsg" +
67*795d594fSAndroid Build Coastguard Worker       "cmV0dXJuIDA7IH0KICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeyByZXR1cm4gIlJlZGVmaW5l" +
68*795d594fSAndroid Build Coastguard Worker       "ZCBPcHRpb25hbExvbmchIjsgfQp9Cg==");
69*795d594fSAndroid Build Coastguard Worker   private static final byte[] DEX_BYTES = Base64.getDecoder().decode(
70*795d594fSAndroid Build Coastguard Worker       "ZGV4CjAzNQBVWRCACMU+HJ9PqTkRRt+Gpa1jx32x1C8kCQAAcAAAAHhWNBIAAAAAAAAAAGAIAAAw" +
71*795d594fSAndroid Build Coastguard Worker       "AAAAcAAAAA8AAAAwAQAADwAAAGwBAAADAAAAIAIAABMAAAA4AgAAAQAAANACAAA0BgAA8AIAAL4E" +
72*795d594fSAndroid Build Coastguard Worker       "AADMBAAA0QQAANsEAADjBAAA5wQAAO4EAADxBAAA9AQAAPgEAAD8BAAA/wQAAAMFAAAiBQAAPgUA" +
73*795d594fSAndroid Build Coastguard Worker       "AFIFAABoBQAAfAUAAJMFAACtBQAA0AUAAPMFAAASBgAAMQYAAFAGAABjBgAAfAYAAH8GAACDBgAA" +
74*795d594fSAndroid Build Coastguard Worker       "hwYAAIwGAACPBgAAkwYAAJoGAACiBgAArQYAALcGAADCBgAA0wYAANwGAADnBgAA6wYAAPMGAAD+" +
75*795d594fSAndroid Build Coastguard Worker       "BgAACwcAABMHAAAdBwAAJAcAAAYAAAAHAAAADAAAAA0AAAAOAAAADwAAABAAAAARAAAAEgAAABMA" +
76*795d594fSAndroid Build Coastguard Worker       "AAAUAAAAFQAAABcAAAAaAAAAHgAAAAYAAAAAAAAAAAAAAAcAAAABAAAAAAAAAAgAAAABAAAAkAQA" +
77*795d594fSAndroid Build Coastguard Worker       "AAkAAAABAAAAmAQAAAkAAAABAAAAoAQAAAoAAAAGAAAAAAAAAAoAAAAIAAAAAAAAAAsAAAAIAAAA" +
78*795d594fSAndroid Build Coastguard Worker       "kAQAAAoAAAAMAAAAAAAAABoAAAANAAAAAAAAABsAAAANAAAAkAQAABwAAAANAAAAqAQAAB0AAAAN" +
79*795d594fSAndroid Build Coastguard Worker       "AAAAsAQAAB4AAAAOAAAAAAAAAB8AAAAOAAAAuAQAAAgACAAFAAAACAAOACcAAAAIAAEALgAAAAQA" +
80*795d594fSAndroid Build Coastguard Worker       "CQADAAAACAAJAAIAAAAIAAkAAwAAAAgACgADAAAACAAGACAAAAAIAA4AIQAAAAgAAQAiAAAACAAA" +
81*795d594fSAndroid Build Coastguard Worker       "ACMAAAAIAAsAJAAAAAgADAAlAAAACAANACYAAAAIAA0AJwAAAAgABwAoAAAACAACACkAAAAIAAMA" +
82*795d594fSAndroid Build Coastguard Worker       "KgAAAAgAAQArAAAACAAEACsAAAAIAAgALAAAAAgABQAtAAAACAAAABEAAAAEAAAAAAAAABgAAABI" +
83*795d594fSAndroid Build Coastguard Worker       "CAAA3QcAAAAAAAACAAIAAAAAAAAAAAACAAAAEgEPAQIAAQAAAAAAAAAAAAIAAAASAA8AAgABAAAA" +
84*795d594fSAndroid Build Coastguard Worker       "AAAAAAAAAgAAABIADwACAAEAAAAAAAAAAAACAAAAEgAPAAIAAQAAAAAAAAAAAAMAAAAaABkAEQAA" +
85*795d594fSAndroid Build Coastguard Worker       "AAEAAAAAAAAAAAAAAAIAAAASABEAAgACAAAAAAAAAAAAAgAAABIAEQACAAEAAAAAAAAAAAACAAAA" +
86*795d594fSAndroid Build Coastguard Worker       "EgARAAMAAQAAAAAAAAAAAAMAAAAWAAAAEAAAAAMAAwAAAAAAAAAAAAMAAAAWAQAAEAEAAAQAAgAA" +
87*795d594fSAndroid Build Coastguard Worker       "AAAAAAAAAAMAAAAWAAAAEAAAAAMAAQAAAAAAAAAAAAMAAAAWAAAAEAAAAAQAAgAAAAAAAAAAAAMA" +
88*795d594fSAndroid Build Coastguard Worker       "AAAWAAAAEAAAAAAAAAAAAAAAAAAAAAEAAAAOAAAAAwABAAEAAACGBAAACwAAAHAQAAACABIAXCAB" +
89*795d594fSAndroid Build Coastguard Worker       "ABYAAABaIAIADgAAAAMAAwABAAAAigQAAAQAAABwEAIAAAAOAAIAAgAAAAAAAAAAAAEAAAAOAAAA" +
90*795d594fSAndroid Build Coastguard Worker       "AwADAAAAAAAAAAAAAQAAAA4AGwAOABwBAA4AAAEAAAABAAAAAQAAAAoAAAABAAAACwAAAAEAAAAJ" +
91*795d594fSAndroid Build Coastguard Worker       "AAAAAgAAAAkABQABAAAABAAMK1RYOz47KUpeVFg7AAM8WDoACDxjbGluaXQ+AAY8aW5pdD4AAj4o" +
92*795d594fSAndroid Build Coastguard Worker       "AAVFTVBUWQABSQABSgACSkoAAkpMAAFMAAJMSgAdTGRhbHZpay9hbm5vdGF0aW9uL1NpZ25hdHVy" +
93*795d594fSAndroid Build Coastguard Worker       "ZTsAGkxkYWx2aWsvYW5ub3RhdGlvbi9UaHJvd3M7ABJMamF2YS9sYW5nL09iamVjdDsAFExqYXZh" +
94*795d594fSAndroid Build Coastguard Worker       "L2xhbmcvUnVubmFibGU7ABJMamF2YS9sYW5nL1N0cmluZzsAFUxqYXZhL2xhbmcvVGhyb3dhYmxl" +
95*795d594fSAndroid Build Coastguard Worker       "OwAYTGphdmEvdXRpbC9PcHRpb25hbExvbmc7ACFMamF2YS91dGlsL2Z1bmN0aW9uL0xvbmdDb25z" +
96*795d594fSAndroid Build Coastguard Worker       "dW1lcjsAIUxqYXZhL3V0aWwvZnVuY3Rpb24vTG9uZ1N1cHBsaWVyOwAdTGphdmEvdXRpbC9mdW5j" +
97*795d594fSAndroid Build Coastguard Worker       "dGlvbi9TdXBwbGllcjsAHUxqYXZhL3V0aWwvZnVuY3Rpb24vU3VwcGxpZXI8AB1MamF2YS91dGls" +
98*795d594fSAndroid Build Coastguard Worker       "L3N0cmVhbS9Mb25nU3RyZWFtOwART3B0aW9uYWxMb25nLmphdmEAF1JlZGVmaW5lZCBPcHRpb25h" +
99*795d594fSAndroid Build Coastguard Worker       "bExvbmchAAFWAAJWSgACVkwAA1ZMTAABWgACWkwABWVtcHR5AAZlcXVhbHMACWdldEFzTG9uZwAI" +
100*795d594fSAndroid Build Coastguard Worker       "aGFzaENvZGUACWlmUHJlc2VudAAPaWZQcmVzZW50T3JFbHNlAAdpc0VtcHR5AAlpc1ByZXNlbnQA" +
101*795d594fSAndroid Build Coastguard Worker       "Am9mAAZvckVsc2UACW9yRWxzZUdldAALb3JFbHNlVGhyb3cABnN0cmVhbQAIdG9TdHJpbmcABXZh" +
102*795d594fSAndroid Build Coastguard Worker       "bHVlAJ4Bfn5EOHsiYmFja2VuZCI6ImRleCIsImNvbXBpbGF0aW9uLW1vZGUiOiJyZWxlYXNlIiwi" +
103*795d594fSAndroid Build Coastguard Worker       "aGFzLWNoZWNrc3VtcyI6ZmFsc2UsIm1pbi1hcGkiOjEsInNoYS0xIjoiOWM5OGM2ZGRmZDc0ZGVj" +
104*795d594fSAndroid Build Coastguard Worker       "ZThiOTdlOGEyODc4ZDIwOGEwNjJmZGJmNCIsInZlcnNpb24iOiIzLjAuNDEtZGV2In0AAgIBLhwF" +
105*795d594fSAndroid Build Coastguard Worker       "FwEXERcEFxYXAAIDAS4cARgHAQIFDQAaARIBEgGIgASMCAGCgASgCAGCgATICAEJ2AYICewGBQHw" +
106*795d594fSAndroid Build Coastguard Worker       "BQEBlAcBAawGAQHgCAEB9AgBAYQGAQGYBgIBrAcBAcQHAQHcBwEB9AcBAYAHAQHABgAAAAAAAAAC" +
107*795d594fSAndroid Build Coastguard Worker       "AAAAxQcAANUHAAA4CAAAAAAAAAEAAAAAAAAAEAAAADwIAAAQAAAAAAAAAAEAAAAAAAAAAQAAADAA" +
108*795d594fSAndroid Build Coastguard Worker       "AABwAAAAAgAAAA8AAAAwAQAAAwAAAA8AAABsAQAABAAAAAMAAAAgAgAABQAAABMAAAA4AgAABgAA" +
109*795d594fSAndroid Build Coastguard Worker       "AAEAAADQAgAAASAAABIAAADwAgAAAyAAAAIAAACGBAAAARAAAAYAAACQBAAAAiAAADAAAAC+BAAA" +
110*795d594fSAndroid Build Coastguard Worker       "BCAAAAIAAADFBwAAACAAAAEAAADdBwAAAxAAAAIAAAA4CAAABiAAAAEAAABICAAAABAAAAEAAABg" +
111*795d594fSAndroid Build Coastguard Worker       "CAAA");
112*795d594fSAndroid Build Coastguard Worker 
main(String[] args)113*795d594fSAndroid Build Coastguard Worker   public static void main(String[] args) {
114*795d594fSAndroid Build Coastguard Worker     // OptionalLong is a class that is unlikely to be used by the time this test starts and is not
115*795d594fSAndroid Build Coastguard Worker     // likely to be changed in any meaningful way in the future.
116*795d594fSAndroid Build Coastguard Worker     OptionalLong ol = OptionalLong.of(0xDEADBEEF);
117*795d594fSAndroid Build Coastguard Worker     System.out.println("ol.toString() -> '" + ol.toString() + "'");
118*795d594fSAndroid Build Coastguard Worker     System.out.println("Redefining OptionalLong!");
119*795d594fSAndroid Build Coastguard Worker     doCommonClassRedefinition(OptionalLong.class, CLASS_BYTES, DEX_BYTES);
120*795d594fSAndroid Build Coastguard Worker     System.out.println("ol.toString() -> '" + ol.toString() + "'");
121*795d594fSAndroid Build Coastguard Worker   }
122*795d594fSAndroid Build Coastguard Worker }
123