xref: /aosp_15_r20/art/test/2280-const-method-handle-validation/src/PlainGet.java (revision 795d594fd825385562da6b089ea9b2033f3abf5a)
1 /*
2  * Copyright (C) 2024 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 import java.lang.invoke.MethodHandle;
18 
19 import annotations.ConstantMethodHandle;
20 
21 public class PlainGet {
22 
23     private static int STATIC_FIELD;
24 
unreachable()25     private static void unreachable() {
26         throw new AssertionError("unreachable!");
27     }
28 
29     @ConstantMethodHandle(
30         kind = ConstantMethodHandle.INSTANCE_GET,
31         owner = "PlainGet",
32         fieldOrMethodName = "STATIC_FIELD",
33         descriptor = "I")
forStaticField()34     private static MethodHandle forStaticField() {
35         unreachable();
36         return null;
37     }
38 
39     @ConstantMethodHandle(
40         kind = ConstantMethodHandle.INSTANCE_GET,
41         owner = "Main",
42         fieldOrMethodName = "privateField",
43         descriptor = "I")
inaccessibleInstanceField()44     private static MethodHandle inaccessibleInstanceField() {
45         unreachable();
46         return null;
47     }
48 
49     @ConstantMethodHandle(
50         kind = ConstantMethodHandle.INSTANCE_GET,
51         owner = "Main",
52         fieldOrMethodName = "PRIVATE_STATIC_FIELD",
53         descriptor = "I")
inaccessibleStaticField()54     private static MethodHandle inaccessibleStaticField() {
55         unreachable();
56         return null;
57     }
58 
runTests()59     public static void runTests() {
60         try {
61             forStaticField();
62             unreachable();
63         } catch (IncompatibleClassChangeError expected) {}
64 
65         try {
66             inaccessibleInstanceField();
67             unreachable();
68         } catch (IncompatibleClassChangeError expected) {}
69 
70         try {
71             inaccessibleStaticField();
72             unreachable();
73         } catch (IncompatibleClassChangeError expected) {}
74     }
75 
76 }
77