blob: e4d63cfa24778456bb7ceffb70da96ad3d71ad33 [file] [log] [blame]
Alex Light9139e002015-10-09 15:59:48 -07001# /*
2# * Copyright (C) 2015 The Android Open Source Project
3# *
4# * Licensed under the Apache License, Version 2.0 (the "License");
5# * you may not use this file except in compliance with the License.
6# * You may obtain a copy of the License at
7# *
8# * http://www.apache.org/licenses/LICENSE-2.0
9# *
10# * Unless required by applicable law or agreed to in writing, software
11# * distributed under the License is distributed on an "AS IS" BASIS,
12# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13# * See the License for the specific language governing permissions and
14# * limitations under the License.
15# */
16#
17# class Main implements Iface, Iface2, Iface3 {
18# public static void main(String[] args) {
19# System.out.println("Create Main instance");
20# Main m = new Main();
21# System.out.println("Calling functions on concrete Main");
22# callMain(m);
23# System.out.println("Calling functions on interface Iface");
24# callIface(m);
25# System.out.println("Calling functions on interface Iface2");
26# callIface2(m);
27# }
28#
29# public static void callMain(Main m) {
30# System.out.println("Calling non-abstract function on Main");
31# System.out.println(m.charge());
32# System.out.println("Calling abstract function on Main");
33# try {
34# System.out.println(m.sayHi());
35# System.out.println("Unexpected no error Thrown on Main");
36# } catch (AbstractMethodError e) {
37# System.out.println("Expected AME Thrown on Main");
38# } catch (IncompatibleClassChangeError e) {
39# System.out.println("Unexpected ICCE Thrown on Main");
40# }
41# System.out.println("Calling non-abstract function on Main");
42# System.out.println(m.charge());
43# return;
44# }
45#
46# public static void callIface(Iface m) {
47# System.out.println("Calling non-abstract function on Iface");
48# System.out.println(m.charge());
49# System.out.println("Calling abstract function on Iface");
50# try {
51# System.out.println(m.sayHi());
52# System.out.println("Unexpected no error Thrown on Iface");
53# } catch (AbstractMethodError e) {
54# System.out.println("Expected AME Thrown on Iface");
55# } catch (IncompatibleClassChangeError e) {
56# System.out.println("Unexpected ICCE Thrown on Iface");
57# }
58# System.out.println("Calling non-abstract function on Iface");
59# System.out.println(m.charge());
60# return;
61# }
62#
63# public static void callIface2(Iface2 m) {
64# System.out.println("Calling abstract function on Iface2");
65# try {
66# System.out.println(m.sayHi());
67# System.out.println("Unexpected no error Thrown on Iface2");
68# } catch (AbstractMethodError e) {
69# System.out.println("Expected AME Thrown on Iface2");
70# } catch (IncompatibleClassChangeError e) {
71# System.out.println("Unexpected ICCE Thrown on Iface2");
72# }
73# return;
74# }
75# }
76
77.class public LMain;
78.super Ljava/lang/Object;
79.implements LIface;
80.implements LIface2;
81.implements LIface3;
82
83.method public constructor <init>()V
84 .registers 1
85 invoke-direct {p0}, Ljava/lang/Object;-><init>()V
86 return-void
87.end method
88
89.method public static main([Ljava/lang/String;)V
90 .locals 3
91 sget-object v1, Ljava/lang/System;->out:Ljava/io/PrintStream;
92
93 const-string v0, "Create Main instance"
94 invoke-virtual {v1,v0}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
95
96 new-instance v2, LMain;
97 invoke-direct {v2}, LMain;-><init>()V
98
99 const-string v0, "Calling functions on concrete Main"
100 invoke-virtual {v1,v0}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
101 invoke-static {v2}, LMain;->callMain(LMain;)V
102
103 const-string v0, "Calling functions on interface Iface"
104 invoke-virtual {v1,v0}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
105 invoke-static {v2}, LMain;->callIface(LIface;)V
106
107 const-string v0, "Calling functions on interface Iface2"
108 invoke-virtual {v1,v0}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
109 invoke-static {v2}, LMain;->callIface2(LIface2;)V
110
111 return-void
112.end method
113
114.method public static callIface(LIface;)V
115 .locals 2
116 sget-object v1, Ljava/lang/System;->out:Ljava/io/PrintStream;
117 const-string v0, "Calling non-abstract function on Iface"
118 invoke-virtual {v1,v0}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
119
120 invoke-interface {p0}, LIface;->charge()Ljava/lang/String;
121 move-result-object v0
122 invoke-virtual {v1,v0}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
123
124 const-string v0, "Calling abstract function on Iface"
125 invoke-virtual {v1,v0}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
126 :try_start
127 invoke-interface {p0}, LIface;->sayHi()Ljava/lang/String;
128 move-result-object v0
129 invoke-virtual {v1,v0}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
130
131 const-string v0, "Unexpected no error Thrown on Iface"
132 invoke-virtual {v1,v0}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
133
134 goto :error_end
135 :try_end
136 .catch Ljava/lang/AbstractMethodError; {:try_start .. :try_end} :AME_error_start
137 .catch Ljava/lang/IncompatibleClassChangeError; {:try_start .. :try_end} :ICCE_error_start
138 :AME_error_start
139 const-string v0, "Expected AME Thrown on Iface"
140 invoke-virtual {v1,v0}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
141 goto :error_end
142 :ICCE_error_start
143 const-string v0, "Unexpected ICCE Thrown on Iface"
144 invoke-virtual {v1,v0}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
145 goto :error_end
146 :error_end
147 const-string v0, "Calling non-abstract function on Iface"
148 invoke-virtual {v1,v0}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
149
150 invoke-interface {p0}, LIface;->charge()Ljava/lang/String;
151 move-result-object v0
152 invoke-virtual {v1,v0}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
153
154 return-void
155.end method
156
157.method public static callIface2(LIface2;)V
158 .locals 2
159 sget-object v1, Ljava/lang/System;->out:Ljava/io/PrintStream;
160 const-string v0, "Calling abstract function on Iface2"
161 invoke-virtual {v1,v0}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
162 :try_start
163 invoke-interface {p0}, LIface2;->sayHi()Ljava/lang/String;
164 move-result-object v0
165 invoke-virtual {v1,v0}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
166
167 const-string v0, "Unexpected no error Thrown on Iface2"
168 invoke-virtual {v1,v0}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
169
170 goto :error_end
171 :try_end
172 .catch Ljava/lang/AbstractMethodError; {:try_start .. :try_end} :AME_error_start
173 .catch Ljava/lang/IncompatibleClassChangeError; {:try_start .. :try_end} :ICCE_error_start
174 :AME_error_start
175 const-string v0, "Expected AME Thrown on Iface2"
176 invoke-virtual {v1,v0}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
177 goto :error_end
178 :ICCE_error_start
179 const-string v0, "Unexpected ICCE Thrown on Iface2"
180 invoke-virtual {v1,v0}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
181 goto :error_end
182 :error_end
183
184 return-void
185.end method
186
187.method public static callMain(LMain;)V
188 .locals 2
189 sget-object v1, Ljava/lang/System;->out:Ljava/io/PrintStream;
190 const-string v0, "Calling non-abstract function on Main"
191 invoke-virtual {v1,v0}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
192
193 invoke-virtual {p0}, LMain;->charge()Ljava/lang/String;
194 move-result-object v0
195 invoke-virtual {v1,v0}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
196
197 const-string v0, "Calling abstract function on Main"
198 invoke-virtual {v1,v0}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
199 :try_start
200 invoke-virtual {p0}, LMain;->sayHi()Ljava/lang/String;
201 move-result-object v0
202 invoke-virtual {v1,v0}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
203
204 const-string v0, "Unexpected no error Thrown on Main"
205 invoke-virtual {v1,v0}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
206
207 goto :error_end
208 :try_end
209 .catch Ljava/lang/AbstractMethodError; {:try_start .. :try_end} :AME_error_start
210 .catch Ljava/lang/IncompatibleClassChangeError; {:try_start .. :try_end} :ICCE_error_start
211 :AME_error_start
212 const-string v0, "Expected AME Thrown on Main"
213 invoke-virtual {v1,v0}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
214 goto :error_end
215 :ICCE_error_start
216 const-string v0, "Unexpected ICCE Thrown on Main"
217 invoke-virtual {v1,v0}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
218 goto :error_end
219 :error_end
220 const-string v0, "Calling non-abstract function on Main"
221 invoke-virtual {v1,v0}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
222
223 invoke-virtual {p0}, LMain;->charge()Ljava/lang/String;
224 move-result-object v0
225 invoke-virtual {v1,v0}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
226
227 return-void
228.end method