01: /***
02: * Retrotranslator: a Java bytecode transformer that translates Java classes
03: * compiled with JDK 5.0 into classes that can be run on JVM 1.4.
04: *
05: * Copyright (c) 2005 - 2008 Taras Puchko
06: * All rights reserved.
07: *
08: * Redistribution and use in source and binary forms, with or without
09: * modification, are permitted provided that the following conditions
10: * are met:
11: * 1. Redistributions of source code must retain the above copyright
12: * notice, this list of conditions and the following disclaimer.
13: * 2. Redistributions in binary form must reproduce the above copyright
14: * notice, this list of conditions and the following disclaimer in the
15: * documentation and/or other materials provided with the distribution.
16: * 3. Neither the name of the copyright holders nor the names of its
17: * contributors may be used to endorse or promote products derived from
18: * this software without specific prior written permission.
19: *
20: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21: * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23: * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
24: * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25: * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26: * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27: * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28: * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29: * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
30: * THE POSSIBILITY OF SUCH DAMAGE.
31: */package net.sf.retrotranslator.transformer;
32:
33: import java.util.*;
34:
35: /**
36: * @author Taras Puchko
37: */
38: class ClassVersion {
39:
40: private static Map<String, ClassVersion> VALUES = new Hashtable<String, ClassVersion>();
41:
42: public static final ClassVersion VERSION_11 = new ClassVersion(
43: "1.1", 45, 3);
44: public static final ClassVersion VERSION_12 = new ClassVersion(
45: "1.2", 46, 0);
46: public static final ClassVersion VERSION_13 = new ClassVersion(
47: "1.3", 47, 0);
48: public static final ClassVersion VERSION_14 = new ClassVersion(
49: "1.4", 48, 0);
50: public static final ClassVersion VERSION_15 = new ClassVersion(
51: "1.5", 49, 0);
52:
53: private String name;
54: private int version;
55:
56: private ClassVersion(String name, int majorVersion, int minorVersion) {
57: this .name = name;
58: this .version = majorVersion | minorVersion << 16;
59: VALUES.put(name, this );
60: }
61:
62: public String getName() {
63: return name;
64: }
65:
66: public int getVersion() {
67: return version;
68: }
69:
70: public static ClassVersion valueOf(String name) {
71: ClassVersion result = VALUES.get(name);
72: if (result == null) {
73: throw new IllegalArgumentException("Unsupported target: "
74: + name);
75: }
76: return result;
77: }
78:
79: public boolean isBefore(ClassVersion classVersion) {
80: return isBefore(classVersion.getVersion());
81: }
82:
83: public boolean isBefore(int other) {
84: return (version & 0xFFFF) < (other & 0xFFFF);
85: }
86:
87: }
|