1/*
2 * ProGuard -- shrinking, optimization, obfuscation, and preverification
3 *             of Java bytecode.
4 *
5 * Copyright (c) 2002-2014 Eric Lafortune (eric@graphics.cornell.edu)
6 *
7 * This program is free software; you can redistribute it and/or modify it
8 * under the terms of the GNU General Public License as published by the Free
9 * Software Foundation; either version 2 of the License, or (at your option)
10 * any later version.
11 *
12 * This program is distributed in the hope that it will be useful, but WITHOUT
13 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
15 * more details.
16 *
17 * You should have received a copy of the GNU General Public License along
18 * with this program; if not, write to the Free Software Foundation, Inc.,
19 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 */
21package proguard.classfile.attribute.preverification;
22
23/**
24 * This class provides methods to create and reuse IntegerType objects.
25 *
26 * @author Eric Lafortune
27 */
28public class VerificationTypeFactory
29{
30    // Shared copies of Type objects, to avoid creating a lot of objects.
31    static final IntegerType           INTEGER_TYPE            = new IntegerType();
32    static final LongType              LONG_TYPE               = new LongType();
33    static final FloatType             FLOAT_TYPE              = new FloatType();
34    static final DoubleType            DOUBLE_TYPE             = new DoubleType();
35    static final TopType               TOP_TYPE                = new TopType();
36    static final NullType              NULL_TYPE               = new NullType();
37    static final UninitializedThisType UNINITIALIZED_THIS_TYPE = new UninitializedThisType();
38
39
40    /**
41     * Creates a new IntegerType.
42     */
43    public static IntegerType createIntegerType()
44    {
45        return INTEGER_TYPE;
46    }
47
48    /**
49     * Creates a new LongType.
50     */
51    public static LongType createLongType()
52    {
53        return LONG_TYPE;
54    }
55
56    /**
57     * Creates a new FloatType.
58     */
59    public static FloatType createFloatType()
60    {
61        return FLOAT_TYPE;
62    }
63
64    /**
65     * Creates a new DoubleType.
66     */
67    public static DoubleType createDoubleType()
68    {
69        return DOUBLE_TYPE;
70    }
71
72    /**
73     * Creates a new TopType.
74     */
75    public static TopType createTopType()
76    {
77        return TOP_TYPE;
78    }
79
80    /**
81     * Creates a new NullType.
82     */
83    public static NullType createNullType()
84    {
85        return NULL_TYPE;
86    }
87
88    /**
89     * Creates a new UninitializedThisType.
90     */
91    public static UninitializedThisType createUninitializedThisType()
92    {
93        return UNINITIALIZED_THIS_TYPE;
94    }
95
96    /**
97     * Creates a new UninitializedType for an instance that was created at
98     * the given offset.
99     */
100    public static UninitializedType createUninitializedType(int newInstructionOffset)
101    {
102        return new UninitializedType(newInstructionOffset);
103    }
104
105    /**
106     * Creates a new ObjectType of the given type.
107     */
108    public static ObjectType createObjectType(int classIndex)
109    {
110        return new ObjectType(classIndex);
111    }
112}
113