xref: /aosp_15_r20/art/test/1988-multi-structural-redefine/src/art/Test1988.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 package art;
18*795d594fSAndroid Build Coastguard Worker 
19*795d594fSAndroid Build Coastguard Worker import java.util.Base64;
20*795d594fSAndroid Build Coastguard Worker 
21*795d594fSAndroid Build Coastguard Worker public class Test1988 {
22*795d594fSAndroid Build Coastguard Worker   static class Transform1 {
sayHi()23*795d594fSAndroid Build Coastguard Worker     public static void sayHi() {
24*795d594fSAndroid Build Coastguard Worker       System.out.println("hello - Transform 1");
25*795d594fSAndroid Build Coastguard Worker     }
26*795d594fSAndroid Build Coastguard Worker   }
27*795d594fSAndroid Build Coastguard Worker   static class Transform2 {
sayHi()28*795d594fSAndroid Build Coastguard Worker     public static void sayHi() {
29*795d594fSAndroid Build Coastguard Worker       System.out.println("hello - Transform 2");
30*795d594fSAndroid Build Coastguard Worker     }
31*795d594fSAndroid Build Coastguard Worker   }
32*795d594fSAndroid Build Coastguard Worker 
33*795d594fSAndroid Build Coastguard Worker   /** Base64 encoded dex file for
34*795d594fSAndroid Build Coastguard Worker    *
35*795d594fSAndroid Build Coastguard Worker    * static class Trasnform1 {
36*795d594fSAndroid Build Coastguard Worker    *   public static void sayHi() {
37*795d594fSAndroid Build Coastguard Worker    *     System.out.println("Transform1 says hi and " + Transform2.getBye());
38*795d594fSAndroid Build Coastguard Worker    *   }
39*795d594fSAndroid Build Coastguard Worker    *   public static String getBye() {
40*795d594fSAndroid Build Coastguard Worker    *     return "Transform1 says bye!";
41*795d594fSAndroid Build Coastguard Worker    *   }
42*795d594fSAndroid Build Coastguard Worker    * }
43*795d594fSAndroid Build Coastguard Worker    */
44*795d594fSAndroid Build Coastguard Worker   public static final byte[] T1_BYTES = Base64.getDecoder().decode(
45*795d594fSAndroid Build Coastguard Worker     "ZGV4CjAzNQAU4pPI4BKgrMtz7s1Ogc8in1PQhazaRWBcBQAAcAAAAHhWNBIAAAAAAAAAAJgEAAAd" +
46*795d594fSAndroid Build Coastguard Worker     "AAAAcAAAAAsAAADkAAAABAAAABABAAABAAAAQAEAAAkAAABIAQAAAQAAAJABAACsAwAAsAEAAD4C" +
47*795d594fSAndroid Build Coastguard Worker     "AABGAgAASQIAAE0CAABoAgAAgwIAAJMCAAC3AgAA1wIAAO4CAAACAwAAFgMAADEDAABFAwAAVAMA" +
48*795d594fSAndroid Build Coastguard Worker     "AGADAAB2AwAAjwMAAJIDAACWAwAAowMAAKsDAACzAwAAuQMAAL4DAADHAwAAzgMAANgDAADfAwAA" +
49*795d594fSAndroid Build Coastguard Worker     "AwAAAAQAAAAFAAAABgAAAAcAAAAIAAAACQAAAAoAAAALAAAADAAAABEAAAABAAAABwAAAAAAAAAC" +
50*795d594fSAndroid Build Coastguard Worker     "AAAACAAAADgCAAARAAAACgAAAAAAAAASAAAACgAAADgCAAAJAAUAFwAAAAAAAgAAAAAAAAAAABUA" +
51*795d594fSAndroid Build Coastguard Worker     "AAAAAAIAGQAAAAEAAAAVAAAABQADABgAAAAGAAIAAAAAAAgAAgAAAAAACAABABQAAAAIAAAAGgAA" +
52*795d594fSAndroid Build Coastguard Worker     "AAAAAAAAAAAABgAAAAAAAAANAAAAiAQAAGUEAAAAAAAAAQAAAAAAAAAqAgAAAwAAABoADwARAAAA" +
53*795d594fSAndroid Build Coastguard Worker     "AQABAAEAAAAmAgAABAAAAHAQBQAAAA4ABAAAAAIAAAAuAgAAGwAAAGIAAABxAAMAAAAMASICCABw" +
54*795d594fSAndroid Build Coastguard Worker     "EAYAAgAaAxAAbiAHADIAbiAHABIAbhAIAAIADAFuIAQAEAAOAAYADgALAA4ACAAOARoPAAAAAAEA" +
55*795d594fSAndroid Build Coastguard Worker     "AAAHAAY8aW5pdD4AAUwAAkxMABlMYXJ0L1Rlc3QxOTg4JFRyYW5zZm9ybTE7ABlMYXJ0L1Rlc3Qx" +
56*795d594fSAndroid Build Coastguard Worker     "OTg4JFRyYW5zZm9ybTI7AA5MYXJ0L1Rlc3QxOTg4OwAiTGRhbHZpay9hbm5vdGF0aW9uL0VuY2xv" +
57*795d594fSAndroid Build Coastguard Worker     "c2luZ0NsYXNzOwAeTGRhbHZpay9hbm5vdGF0aW9uL0lubmVyQ2xhc3M7ABVMamF2YS9pby9Qcmlu" +
58*795d594fSAndroid Build Coastguard Worker     "dFN0cmVhbTsAEkxqYXZhL2xhbmcvT2JqZWN0OwASTGphdmEvbGFuZy9TdHJpbmc7ABlMamF2YS9s" +
59*795d594fSAndroid Build Coastguard Worker     "YW5nL1N0cmluZ0J1aWxkZXI7ABJMamF2YS9sYW5nL1N5c3RlbTsADVRlc3QxOTg4LmphdmEAClRy" +
60*795d594fSAndroid Build Coastguard Worker     "YW5zZm9ybTEAFFRyYW5zZm9ybTEgc2F5cyBieWUhABdUcmFuc2Zvcm0xIHNheXMgaGkgYW5kIAAB" +
61*795d594fSAndroid Build Coastguard Worker     "VgACVkwAC2FjY2Vzc0ZsYWdzAAZhcHBlbmQABmdldEJ5ZQAEbmFtZQADb3V0AAdwcmludGxuAAVz" +
62*795d594fSAndroid Build Coastguard Worker     "YXlIaQAIdG9TdHJpbmcABXZhbHVlAHV+fkQ4eyJjb21waWxhdGlvbi1tb2RlIjoiZGVidWciLCJt" +
63*795d594fSAndroid Build Coastguard Worker     "aW4tYXBpIjoxLCJzaGEtMSI6IjY4NjQ4NTU3NTM0MDJiYmFjODk2Nzc2YjAzN2RlYmJjOTM4YzQ5" +
64*795d594fSAndroid Build Coastguard Worker     "NTMiLCJ2ZXJzaW9uIjoiMS43LjYtZGV2In0AAgMBGxgCAgQCEwQIFhcOAAADAACAgATIAwEJsAMB" +
65*795d594fSAndroid Build Coastguard Worker     "CeADAAAAAAACAAAAVgQAAFwEAAB8BAAAAAAAAAAAAAAAAAAAEAAAAAAAAAABAAAAAAAAAAEAAAAd" +
66*795d594fSAndroid Build Coastguard Worker     "AAAAcAAAAAIAAAALAAAA5AAAAAMAAAAEAAAAEAEAAAQAAAABAAAAQAEAAAUAAAAJAAAASAEAAAYA" +
67*795d594fSAndroid Build Coastguard Worker     "AAABAAAAkAEAAAEgAAADAAAAsAEAAAMgAAADAAAAJgIAAAEQAAABAAAAOAIAAAIgAAAdAAAAPgIA" +
68*795d594fSAndroid Build Coastguard Worker     "AAQgAAACAAAAVgQAAAAgAAABAAAAZQQAAAMQAAACAAAAeAQAAAYgAAABAAAAiAQAAAAQAAABAAAA" +
69*795d594fSAndroid Build Coastguard Worker     "mAQAAA==");
70*795d594fSAndroid Build Coastguard Worker 
71*795d594fSAndroid Build Coastguard Worker 
72*795d594fSAndroid Build Coastguard Worker   /** Base64 encoded dex file for
73*795d594fSAndroid Build Coastguard Worker    *
74*795d594fSAndroid Build Coastguard Worker    * static class Trasnform2 {
75*795d594fSAndroid Build Coastguard Worker    *   public static void sayHi() {
76*795d594fSAndroid Build Coastguard Worker    *     System.out.println("Transform2 says hi and " + Transform1.getBye());
77*795d594fSAndroid Build Coastguard Worker    *   }
78*795d594fSAndroid Build Coastguard Worker    *   public static String getBye() {
79*795d594fSAndroid Build Coastguard Worker    *     return "Transform2 says bye!";
80*795d594fSAndroid Build Coastguard Worker    *   }
81*795d594fSAndroid Build Coastguard Worker    * }
82*795d594fSAndroid Build Coastguard Worker    */
83*795d594fSAndroid Build Coastguard Worker   public static final byte[] T2_BYTES = Base64.getDecoder().decode(
84*795d594fSAndroid Build Coastguard Worker     "ZGV4CjAzNQD94cwR+R7Yw7VMom5CwuQd5mZlsV2xrVFcBQAAcAAAAHhWNBIAAAAAAAAAAJgEAAAd" +
85*795d594fSAndroid Build Coastguard Worker     "AAAAcAAAAAsAAADkAAAABAAAABABAAABAAAAQAEAAAkAAABIAQAAAQAAAJABAACsAwAAsAEAAD4C" +
86*795d594fSAndroid Build Coastguard Worker     "AABGAgAASQIAAE0CAABoAgAAgwIAAJMCAAC3AgAA1wIAAO4CAAACAwAAFgMAADEDAABFAwAAVAMA" +
87*795d594fSAndroid Build Coastguard Worker     "AGADAAB2AwAAjwMAAJIDAACWAwAAowMAAKsDAACzAwAAuQMAAL4DAADHAwAAzgMAANgDAADfAwAA" +
88*795d594fSAndroid Build Coastguard Worker     "AwAAAAQAAAAFAAAABgAAAAcAAAAIAAAACQAAAAoAAAALAAAADAAAABEAAAABAAAABwAAAAAAAAAC" +
89*795d594fSAndroid Build Coastguard Worker     "AAAACAAAADgCAAARAAAACgAAAAAAAAASAAAACgAAADgCAAAJAAUAFwAAAAAAAAAVAAAAAQACAAAA" +
90*795d594fSAndroid Build Coastguard Worker     "AAABAAAAFQAAAAEAAgAZAAAABQADABgAAAAGAAIAAAAAAAgAAgAAAAAACAABABQAAAAIAAAAGgAA" +
91*795d594fSAndroid Build Coastguard Worker     "AAEAAAAAAAAABgAAAAAAAAANAAAAiAQAAGUEAAAAAAAAAQAAAAAAAAAqAgAAAwAAABoADwARAAAA" +
92*795d594fSAndroid Build Coastguard Worker     "AQABAAEAAAAmAgAABAAAAHAQBQAAAA4ABAAAAAIAAAAuAgAAGwAAAGIAAABxAAAAAAAMASICCABw" +
93*795d594fSAndroid Build Coastguard Worker     "EAYAAgAaAxAAbiAHADIAbiAHABIAbhAIAAIADAFuIAQAEAAOAA4ADgATAA4AEAAOARoPAAAAAAEA" +
94*795d594fSAndroid Build Coastguard Worker     "AAAHAAY8aW5pdD4AAUwAAkxMABlMYXJ0L1Rlc3QxOTg4JFRyYW5zZm9ybTE7ABlMYXJ0L1Rlc3Qx" +
95*795d594fSAndroid Build Coastguard Worker     "OTg4JFRyYW5zZm9ybTI7AA5MYXJ0L1Rlc3QxOTg4OwAiTGRhbHZpay9hbm5vdGF0aW9uL0VuY2xv" +
96*795d594fSAndroid Build Coastguard Worker     "c2luZ0NsYXNzOwAeTGRhbHZpay9hbm5vdGF0aW9uL0lubmVyQ2xhc3M7ABVMamF2YS9pby9Qcmlu" +
97*795d594fSAndroid Build Coastguard Worker     "dFN0cmVhbTsAEkxqYXZhL2xhbmcvT2JqZWN0OwASTGphdmEvbGFuZy9TdHJpbmc7ABlMamF2YS9s" +
98*795d594fSAndroid Build Coastguard Worker     "YW5nL1N0cmluZ0J1aWxkZXI7ABJMamF2YS9sYW5nL1N5c3RlbTsADVRlc3QxOTg4LmphdmEAClRy" +
99*795d594fSAndroid Build Coastguard Worker     "YW5zZm9ybTIAFFRyYW5zZm9ybTIgc2F5cyBieWUhABdUcmFuc2Zvcm0yIHNheXMgaGkgYW5kIAAB" +
100*795d594fSAndroid Build Coastguard Worker     "VgACVkwAC2FjY2Vzc0ZsYWdzAAZhcHBlbmQABmdldEJ5ZQAEbmFtZQADb3V0AAdwcmludGxuAAVz" +
101*795d594fSAndroid Build Coastguard Worker     "YXlIaQAIdG9TdHJpbmcABXZhbHVlAHV+fkQ4eyJjb21waWxhdGlvbi1tb2RlIjoiZGVidWciLCJt" +
102*795d594fSAndroid Build Coastguard Worker     "aW4tYXBpIjoxLCJzaGEtMSI6IjY4NjQ4NTU3NTM0MDJiYmFjODk2Nzc2YjAzN2RlYmJjOTM4YzQ5" +
103*795d594fSAndroid Build Coastguard Worker     "NTMiLCJ2ZXJzaW9uIjoiMS43LjYtZGV2In0AAgMBGxgCAgQCEwQIFhcOAAADAAGAgATIAwEJsAMB" +
104*795d594fSAndroid Build Coastguard Worker     "CeADAAAAAAACAAAAVgQAAFwEAAB8BAAAAAAAAAAAAAAAAAAAEAAAAAAAAAABAAAAAAAAAAEAAAAd" +
105*795d594fSAndroid Build Coastguard Worker     "AAAAcAAAAAIAAAALAAAA5AAAAAMAAAAEAAAAEAEAAAQAAAABAAAAQAEAAAUAAAAJAAAASAEAAAYA" +
106*795d594fSAndroid Build Coastguard Worker     "AAABAAAAkAEAAAEgAAADAAAAsAEAAAMgAAADAAAAJgIAAAEQAAABAAAAOAIAAAIgAAAdAAAAPgIA" +
107*795d594fSAndroid Build Coastguard Worker     "AAQgAAACAAAAVgQAAAAgAAABAAAAZQQAAAMQAAACAAAAeAQAAAYgAAABAAAAiAQAAAAQAAABAAAA" +
108*795d594fSAndroid Build Coastguard Worker     "mAQAAA==");
109*795d594fSAndroid Build Coastguard Worker 
110*795d594fSAndroid Build Coastguard Worker 
run()111*795d594fSAndroid Build Coastguard Worker   public static void run() {
112*795d594fSAndroid Build Coastguard Worker     doTest();
113*795d594fSAndroid Build Coastguard Worker   }
114*795d594fSAndroid Build Coastguard Worker 
doTest()115*795d594fSAndroid Build Coastguard Worker   public static void doTest() {
116*795d594fSAndroid Build Coastguard Worker     Transform1.sayHi();
117*795d594fSAndroid Build Coastguard Worker     Transform2.sayHi();
118*795d594fSAndroid Build Coastguard Worker     System.out.println(
119*795d594fSAndroid Build Coastguard Worker         "Redefining both " + Transform1.class + " and " + Transform2.class + " to use each other.");
120*795d594fSAndroid Build Coastguard Worker     Redefinition.doMultiStructuralClassRedefinition(
121*795d594fSAndroid Build Coastguard Worker         new Redefinition.DexOnlyClassDefinition(Transform1.class, T1_BYTES),
122*795d594fSAndroid Build Coastguard Worker         new Redefinition.DexOnlyClassDefinition(Transform2.class, T2_BYTES));
123*795d594fSAndroid Build Coastguard Worker     Transform1.sayHi();
124*795d594fSAndroid Build Coastguard Worker     Transform2.sayHi();
125*795d594fSAndroid Build Coastguard Worker   }
126*795d594fSAndroid Build Coastguard Worker }
127