xref: /aosp_15_r20/external/google-smali/examples/Enums/Enum.smali (revision 37f5703ca959d1ce24046e7595880d209e15c133)
1*37f5703cSAndroid Build Coastguard Worker.class public final enum LEnum;
2*37f5703cSAndroid Build Coastguard Worker.super Ljava/lang/Enum;
3*37f5703cSAndroid Build Coastguard Worker
4*37f5703cSAndroid Build Coastguard Worker#This class is an example of how to define an enum. You have
5*37f5703cSAndroid Build Coastguard Worker#to do all of the work that java normally takes care of
6*37f5703cSAndroid Build Coastguard Worker
7*37f5703cSAndroid Build Coastguard Worker.field private static final synthetic $VALUES:[LEnum;
8*37f5703cSAndroid Build Coastguard Worker
9*37f5703cSAndroid Build Coastguard Worker.field public static final enum VALUE1:LEnum;
10*37f5703cSAndroid Build Coastguard Worker.field public static final enum VALUE2:LEnum;
11*37f5703cSAndroid Build Coastguard Worker
12*37f5703cSAndroid Build Coastguard Worker.method static constructor <clinit>()V
13*37f5703cSAndroid Build Coastguard Worker    .registers 4
14*37f5703cSAndroid Build Coastguard Worker
15*37f5703cSAndroid Build Coastguard Worker    #create an instance of this class for the VALUE1 value
16*37f5703cSAndroid Build Coastguard Worker    new-instance v0, LEnum;
17*37f5703cSAndroid Build Coastguard Worker    const-string v1, "VALUE1"
18*37f5703cSAndroid Build Coastguard Worker    const/4 v2, 0
19*37f5703cSAndroid Build Coastguard Worker    invoke-direct {v0, v1, v2}, LEnum;-><init>(Ljava/lang/String;I)V
20*37f5703cSAndroid Build Coastguard Worker
21*37f5703cSAndroid Build Coastguard Worker    #and store it in VALUE1
22*37f5703cSAndroid Build Coastguard Worker    sput-object v0, LEnum;->VALUE1:LEnum;
23*37f5703cSAndroid Build Coastguard Worker
24*37f5703cSAndroid Build Coastguard Worker    #create an instance of this class for the VALUE2 value
25*37f5703cSAndroid Build Coastguard Worker    new-instance v0, LEnum;
26*37f5703cSAndroid Build Coastguard Worker    const-string v1, "VALUE2"
27*37f5703cSAndroid Build Coastguard Worker    const/4 v3, 1
28*37f5703cSAndroid Build Coastguard Worker    invoke-direct {v0, v1, v3}, LEnum;-><init>(Ljava/lang/String;I)V
29*37f5703cSAndroid Build Coastguard Worker
30*37f5703cSAndroid Build Coastguard Worker    #and store it in VALUE2
31*37f5703cSAndroid Build Coastguard Worker    sput-object v0, LEnum;->VALUE2:LEnum;
32*37f5703cSAndroid Build Coastguard Worker
33*37f5703cSAndroid Build Coastguard Worker    #create an array of Enums, for the $VALUES member
34*37f5703cSAndroid Build Coastguard Worker    const/4 v0, 2
35*37f5703cSAndroid Build Coastguard Worker    new-array v0, v0, [LEnum;
36*37f5703cSAndroid Build Coastguard Worker
37*37f5703cSAndroid Build Coastguard Worker    #add VALUE1 to the array
38*37f5703cSAndroid Build Coastguard Worker    sget-object v1, LEnum;->VALUE1:LEnum;
39*37f5703cSAndroid Build Coastguard Worker    aput-object v1, v0, v2
40*37f5703cSAndroid Build Coastguard Worker
41*37f5703cSAndroid Build Coastguard Worker    #add VALUE2 to the array
42*37f5703cSAndroid Build Coastguard Worker    sget-object v1, LEnum;->VALUE2:LEnum;
43*37f5703cSAndroid Build Coastguard Worker    aput-object v1, v0, v3
44*37f5703cSAndroid Build Coastguard Worker
45*37f5703cSAndroid Build Coastguard Worker    #and store the array in $VALUES
46*37f5703cSAndroid Build Coastguard Worker    sput-object v0, LEnum;->$VALUES:[LEnum;
47*37f5703cSAndroid Build Coastguard Worker
48*37f5703cSAndroid Build Coastguard Worker    return-void
49*37f5703cSAndroid Build Coastguard Worker.end method
50*37f5703cSAndroid Build Coastguard Worker
51*37f5703cSAndroid Build Coastguard Worker.method private constructor <init>(Ljava/lang/String;I)V
52*37f5703cSAndroid Build Coastguard Worker    .registers 3
53*37f5703cSAndroid Build Coastguard Worker    invoke-direct {p0, p1, p2}, Ljava/lang/Enum;-><init>(Ljava/lang/String;I)V
54*37f5703cSAndroid Build Coastguard Worker    return-void
55*37f5703cSAndroid Build Coastguard Worker.end method
56*37f5703cSAndroid Build Coastguard Worker
57*37f5703cSAndroid Build Coastguard Worker.method public static valueof(Ljava/lang/String;)LEnum;
58*37f5703cSAndroid Build Coastguard Worker    .registers 2
59*37f5703cSAndroid Build Coastguard Worker    const-class v0, LEnum;
60*37f5703cSAndroid Build Coastguard Worker    invoke-static {v0, p0}, Ljava/lang/Enum;->valueOf(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/Enum;
61*37f5703cSAndroid Build Coastguard Worker    move-result-object v1
62*37f5703cSAndroid Build Coastguard Worker    check-cast v1, LEnum;
63*37f5703cSAndroid Build Coastguard Worker    return-object v1
64*37f5703cSAndroid Build Coastguard Worker.end method
65*37f5703cSAndroid Build Coastguard Worker
66*37f5703cSAndroid Build Coastguard Worker.method public static values()[LEnum;
67*37f5703cSAndroid Build Coastguard Worker    .registers 1
68*37f5703cSAndroid Build Coastguard Worker    sget-object v0, LEnum;->$VALUES:[LEnum;
69*37f5703cSAndroid Build Coastguard Worker    invoke-virtual {v0}, [LEnum;->clone()Ljava/lang/Object;
70*37f5703cSAndroid Build Coastguard Worker    move-result-object v0
71*37f5703cSAndroid Build Coastguard Worker    check-cast v0, [LEnum;
72*37f5703cSAndroid Build Coastguard Worker    return-object v0
73*37f5703cSAndroid Build Coastguard Worker.end method