Skip to content

Instantly share code, notes, and snippets.

@KengoTODA
Last active June 13, 2021 09:05
Show Gist options
  • Save KengoTODA/16533b8a0422719e7104d92fd9da5c94 to your computer and use it in GitHub Desktop.
Save KengoTODA/16533b8a0422719e7104d92fd9da5c94 to your computer and use it in GitHub Desktop.
Classfile /Users/kengo/Downloads/PatternMatchingForSwitch.class
Last modified Jun 13, 2021; size 2141 bytes
MD5 checksum 5049ca7e9689aad18b98cb25608936e1
Compiled from "PatternMatchingForSwitch.java"
public class PatternMatchingForSwitch
minor version: 65535
major version: 61
flags: (0x0021) ACC_PUBLIC, ACC_SUPER
this_class: #68 // PatternMatchingForSwitch
super_class: #2 // java/lang/Object
interfaces: 0, fields: 0, methods: 3, attributes: 3
Constant pool:
#1 = Methodref #2.#3 // java/lang/Object."<init>":()V
#2 = Class #4 // java/lang/Object
#3 = NameAndType #5:#6 // "<init>":()V
#4 = Utf8 java/lang/Object
#5 = Utf8 <init>
#6 = Utf8 ()V
#7 = InvokeDynamic #0:#8 // #0:typeSwitch:(Ljava/lang/Object;I)I
#8 = NameAndType #9:#10 // typeSwitch:(Ljava/lang/Object;I)I
#9 = Utf8 typeSwitch
#10 = Utf8 (Ljava/lang/Object;I)I
#11 = Class #12 // java/lang/Integer
#12 = Utf8 java/lang/Integer
#13 = String #14 // int %d
#14 = Utf8 int %d
#15 = Methodref #16.#17 // java/lang/String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
#16 = Class #18 // java/lang/String
#17 = NameAndType #19:#20 // format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
#18 = Utf8 java/lang/String
#19 = Utf8 format
#20 = Utf8 (Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
#21 = Class #22 // java/lang/Long
#22 = Utf8 java/lang/Long
#23 = String #24 // long %d
#24 = Utf8 long %d
#25 = Class #26 // java/lang/Double
#26 = Utf8 java/lang/Double
#27 = String #28 // double %f
#28 = Utf8 double %f
#29 = String #30 // String %s
#30 = Utf8 String %s
#31 = String #32 // null
#32 = Utf8 null
#33 = Methodref #2.#34 // java/lang/Object.toString:()Ljava/lang/String;
#34 = NameAndType #35:#36 // toString:()Ljava/lang/String;
#35 = Utf8 toString
#36 = Utf8 ()Ljava/lang/String;
#37 = Methodref #38.#39 // java/util/Objects.requireNonNull:(Ljava/lang/Object;)Ljava/lang/Object;
#38 = Class #40 // java/util/Objects
#39 = NameAndType #41:#42 // requireNonNull:(Ljava/lang/Object;)Ljava/lang/Object;
#40 = Utf8 java/util/Objects
#41 = Utf8 requireNonNull
#42 = Utf8 (Ljava/lang/Object;)Ljava/lang/Object;
#43 = InvokeDynamic #1:#8 // #1:typeSwitch:(Ljava/lang/Object;I)I
#44 = Class #45 // Triangle
#45 = Utf8 Triangle
#46 = Methodref #44.#47 // Triangle.calculateArea:()I
#47 = NameAndType #48:#49 // calculateArea:()I
#48 = Utf8 calculateArea
#49 = Utf8 ()I
#50 = Fieldref #51.#52 // java/lang/System.out:Ljava/io/PrintStream;
#51 = Class #53 // java/lang/System
#52 = NameAndType #54:#55 // out:Ljava/io/PrintStream;
#53 = Utf8 java/lang/System
#54 = Utf8 out
#55 = Utf8 Ljava/io/PrintStream;
#56 = String #57 // Large triangle
#57 = Utf8 Large triangle
#58 = Methodref #59.#60 // java/io/PrintStream.println:(Ljava/lang/String;)V
#59 = Class #61 // java/io/PrintStream
#60 = NameAndType #62:#63 // println:(Ljava/lang/String;)V
#61 = Utf8 java/io/PrintStream
#62 = Utf8 println
#63 = Utf8 (Ljava/lang/String;)V
#64 = String #65 // Small triangle
#65 = Utf8 Small triangle
#66 = String #67 // Non-triangle
#67 = Utf8 Non-triangle
#68 = Class #69 // PatternMatchingForSwitch
#69 = Utf8 PatternMatchingForSwitch
#70 = Utf8 Code
#71 = Utf8 LineNumberTable
#72 = Utf8 LocalVariableTable
#73 = Utf8 this
#74 = Utf8 LPatternMatchingForSwitch;
#75 = Utf8 formatterPatternSwitch
#76 = Utf8 (Ljava/lang/Object;)Ljava/lang/String;
#77 = Utf8 i
#78 = Utf8 Ljava/lang/Integer;
#79 = Utf8 l
#80 = Utf8 Ljava/lang/Long;
#81 = Utf8 d
#82 = Utf8 Ljava/lang/Double;
#83 = Utf8 s
#84 = Utf8 Ljava/lang/String;
#85 = Utf8 o
#86 = Utf8 Ljava/lang/Object;
#87 = Utf8 StackMapTable
#88 = Utf8 testTriangle
#89 = Utf8 (LShape;)V
#90 = Utf8 t
#91 = Utf8 LTriangle;
#92 = Utf8 LShape;
#93 = Class #94 // Shape
#94 = Utf8 Shape
#95 = Utf8 SourceFile
#96 = Utf8 PatternMatchingForSwitch.java
#97 = Utf8 BootstrapMethods
#98 = MethodHandle 6:#99 // REF_invokeStatic java/lang/runtime/SwitchBootstraps.typeSwitch:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;[Ljava/lang/Object;)Ljava/lang/invoke/CallSite;
#99 = Methodref #100.#101 // java/lang/runtime/SwitchBootstraps.typeSwitch:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;[Ljava/lang/Object;)Ljava/lang/invoke/CallSite;
#100 = Class #102 // java/lang/runtime/SwitchBootstraps
#101 = NameAndType #9:#103 // typeSwitch:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;[Ljava/lang/Object;)Ljava/lang/invoke/CallSite;
#102 = Utf8 java/lang/runtime/SwitchBootstraps
#103 = Utf8 (Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;[Ljava/lang/Object;)Ljava/lang/invoke/CallSite;
#104 = Utf8 InnerClasses
#105 = Class #106 // java/lang/invoke/MethodHandles$Lookup
#106 = Utf8 java/lang/invoke/MethodHandles$Lookup
#107 = Class #108 // java/lang/invoke/MethodHandles
#108 = Utf8 java/lang/invoke/MethodHandles
#109 = Utf8 Lookup
{
public PatternMatchingForSwitch();
descriptor: ()V
flags: (0x0001) ACC_PUBLIC
Code:
stack=1, locals=1, args_size=1
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: return
LineNumberTable:
line 16: 0
LocalVariableTable:
Start Length Slot Name Signature
0 5 0 this LPatternMatchingForSwitch;
java.lang.String formatterPatternSwitch(java.lang.Object);
descriptor: (Ljava/lang/Object;)Ljava/lang/String;
flags: (0x0000)
Code:
stack=5, locals=8, args_size=2
0: aload_1
1: astore_2
2: iconst_0
3: istore_3
4: aload_2
5: iload_3
6: invokedynamic #7, 0 // InvokeDynamic #0:typeSwitch:(Ljava/lang/Object;I)I
11: tableswitch { // -1 to 3
-1: 136
0: 44
1: 67
2: 90
3: 113
default: 141
}
44: aload_2
45: checkcast #11 // class java/lang/Integer
48: astore 4
50: ldc #13 // String int %d
52: iconst_1
53: anewarray #2 // class java/lang/Object
56: dup
57: iconst_0
58: aload 4
60: aastore
61: invokestatic #15 // Method java/lang/String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
64: goto 145
67: aload_2
68: checkcast #21 // class java/lang/Long
71: astore 5
73: ldc #23 // String long %d
75: iconst_1
76: anewarray #2 // class java/lang/Object
79: dup
80: iconst_0
81: aload 5
83: aastore
84: invokestatic #15 // Method java/lang/String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
87: goto 145
90: aload_2
91: checkcast #25 // class java/lang/Double
94: astore 6
96: ldc #27 // String double %f
98: iconst_1
99: anewarray #2 // class java/lang/Object
102: dup
103: iconst_0
104: aload 6
106: aastore
107: invokestatic #15 // Method java/lang/String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
110: goto 145
113: aload_2
114: checkcast #16 // class java/lang/String
117: astore 7
119: ldc #29 // String String %s
121: iconst_1
122: anewarray #2 // class java/lang/Object
125: dup
126: iconst_0
127: aload 7
129: aastore
130: invokestatic #15 // Method java/lang/String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
133: goto 145
136: ldc #31 // String null
138: goto 145
141: aload_1
142: invokevirtual #33 // Method java/lang/Object.toString:()Ljava/lang/String;
145: areturn
LineNumberTable:
line 18: 0
line 19: 44
line 20: 67
line 21: 90
line 22: 113
line 23: 136
line 24: 141
line 18: 145
LocalVariableTable:
Start Length Slot Name Signature
50 17 4 i Ljava/lang/Integer;
73 17 5 l Ljava/lang/Long;
96 17 6 d Ljava/lang/Double;
119 17 7 s Ljava/lang/String;
0 146 0 this LPatternMatchingForSwitch;
0 146 1 o Ljava/lang/Object;
StackMapTable: number_of_entries = 8
frame_type = 253 /* append */
offset_delta = 4
locals = [ class java/lang/Object, int ]
frame_type = 39 /* same */
frame_type = 22 /* same */
frame_type = 22 /* same */
frame_type = 22 /* same */
frame_type = 22 /* same */
frame_type = 4 /* same */
frame_type = 255 /* full_frame */
offset_delta = 3
locals = [ class PatternMatchingForSwitch, class java/lang/Object ]
stack = [ class java/lang/String ]
void testTriangle(Shape);
descriptor: (LShape;)V
flags: (0x0000)
Code:
stack=2, locals=6, args_size=2
0: aload_1
1: dup
2: invokestatic #37 // Method java/util/Objects.requireNonNull:(Ljava/lang/Object;)Ljava/lang/Object;
5: pop
6: astore_2
7: iconst_0
8: istore_3
9: aload_2
10: iload_3
11: invokedynamic #43, 0 // InvokeDynamic #1:typeSwitch:(Ljava/lang/Object;I)I
16: lookupswitch { // 2
0: 44
1: 76
default: 93
}
44: aload_2
45: checkcast #44 // class Triangle
48: astore 4
50: aload 4
52: invokevirtual #46 // Method Triangle.calculateArea:()I
55: bipush 100
57: if_icmpgt 65
60: iconst_1
61: istore_3
62: goto 9
65: getstatic #50 // Field java/lang/System.out:Ljava/io/PrintStream;
68: ldc #56 // String Large triangle
70: invokevirtual #58 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
73: goto 104
76: aload_2
77: checkcast #44 // class Triangle
80: astore 5
82: getstatic #50 // Field java/lang/System.out:Ljava/io/PrintStream;
85: ldc #64 // String Small triangle
87: invokevirtual #58 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
90: goto 104
93: getstatic #50 // Field java/lang/System.out:Ljava/io/PrintStream;
96: ldc #66 // String Non-triangle
98: invokevirtual #58 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
101: goto 104
104: return
LineNumberTable:
line 29: 0
line 30: 44
line 31: 65
line 32: 76
line 33: 82
line 34: 93
line 36: 104
LocalVariableTable:
Start Length Slot Name Signature
50 26 4 t LTriangle;
82 11 5 t LTriangle;
0 105 0 this LPatternMatchingForSwitch;
0 105 1 s LShape;
StackMapTable: number_of_entries = 6
frame_type = 253 /* append */
offset_delta = 9
locals = [ class Shape, int ]
frame_type = 34 /* same */
frame_type = 252 /* append */
offset_delta = 20
locals = [ class Triangle ]
frame_type = 250 /* chop */
offset_delta = 10
frame_type = 16 /* same */
frame_type = 249 /* chop */
offset_delta = 10
}
SourceFile: "PatternMatchingForSwitch.java"
BootstrapMethods:
0: #98 REF_invokeStatic java/lang/runtime/SwitchBootstraps.typeSwitch:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;[Ljava/lang/Object;)Ljava/lang/invoke/CallSite;
Method arguments:
#11 java/lang/Integer
#21 java/lang/Long
#25 java/lang/Double
#16 java/lang/String
1: #98 REF_invokeStatic java/lang/runtime/SwitchBootstraps.typeSwitch:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;[Ljava/lang/Object;)Ljava/lang/invoke/CallSite;
Method arguments:
#44 Triangle
#44 Triangle
InnerClasses:
public static final #109= #105 of #107; // Lookup=class java/lang/invoke/MethodHandles$Lookup of class java/lang/invoke/MethodHandles
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment