1
+ import java .io .*;
2
+ import java .util .*;
3
+
4
+ public class ClassVersionChecker {
5
+
6
+ private static final HashMap <String , Integer > majorCodeMap = new HashMap <>();
7
+
8
+ public static void main (String [] args ) throws IOException {
9
+ if (args .length != 2 ) {
10
+ throw new RuntimeException ("Expected exactly 2 arguments" );
11
+ }
12
+
13
+ //Adapted from https://docs.oracle.com/javase/specs/jvms/se20/html/jvms-4.html#jvms-4.1
14
+ majorCodeMap .put ("1.0.2" , 45 );
15
+ majorCodeMap .put ("1.1" , 45 );
16
+ majorCodeMap .put ("1.2" , 46 );
17
+ majorCodeMap .put ("1.3" , 47 );
18
+ majorCodeMap .put ("1.4" , 48 );
19
+ majorCodeMap .put ("5.0" , 49 );
20
+ majorCodeMap .put ("6" , 50 );
21
+ majorCodeMap .put ("7" , 51 );
22
+ majorCodeMap .put ("8" , 52 );
23
+ majorCodeMap .put ("9" , 53 );
24
+ majorCodeMap .put ("10" , 54 );
25
+ majorCodeMap .put ("11" , 55 );
26
+ majorCodeMap .put ("12" , 56 );
27
+ majorCodeMap .put ("13" , 57 );
28
+ majorCodeMap .put ("14" , 58 );
29
+ majorCodeMap .put ("15" , 59 );
30
+ majorCodeMap .put ("16" , 60 );
31
+ majorCodeMap .put ("17" , 61 );
32
+ majorCodeMap .put ("18" , 62 );
33
+ majorCodeMap .put ("19" , 63 );
34
+ majorCodeMap .put ("20" , 64 );
35
+ majorCodeMap .put ("21" , 65 );
36
+
37
+ String filename = args [0 ];
38
+ int expected = majorCodeMap .get (args [1 ]);
39
+
40
+ checkClassVersion (filename , expected );
41
+ }
42
+
43
+ private static void checkClassVersion (String filename , int expected ) throws IOException {
44
+ try ( DataInputStream in = new DataInputStream (new FileInputStream (filename )) ) {
45
+ int magic = in .readInt ();
46
+
47
+ if (magic != 0xcafebabe ) {
48
+ System .out .println (filename + " is not a valid class!" );
49
+ }
50
+
51
+ int minor = in .readUnsignedShort ();
52
+ int major = in .readUnsignedShort ();
53
+
54
+ System .out .println ("Major version: " + major );
55
+ System .out .println ("Minor version: " + minor );
56
+
57
+ if (expected != major ) {
58
+ System .out .println ("Expected major version of " + expected + " but got " + major );
59
+ System .exit (1 ); //Failing execution
60
+ }
61
+ }
62
+ }
63
+ }
0 commit comments