1674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen/***
2674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * ASM: a very small and fast Java bytecode manipulation framework
3674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * Copyright (c) 2000-2007 INRIA, France Telecom
4674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * All rights reserved.
5674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen *
6674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * Redistribution and use in source and binary forms, with or without
7674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * modification, are permitted provided that the following conditions
8674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * are met:
9674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * 1. Redistributions of source code must retain the above copyright
10674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen *    notice, this list of conditions and the following disclaimer.
11674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * 2. Redistributions in binary form must reproduce the above copyright
12674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen *    notice, this list of conditions and the following disclaimer in the
13674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen *    documentation and/or other materials provided with the distribution.
14674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * 3. Neither the name of the copyright holders nor the names of its
15674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen *    contributors may be used to endorse or promote products derived from
16674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen *    this software without specific prior written permission.
17674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen *
18674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
22674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
28674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * THE POSSIBILITY OF SUCH DAMAGE.
29674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen */
30674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogenpackage org.mockito.asm;
31674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
32674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen/**
33674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * A constant pool item. Constant pool items can be created with the 'newXXX'
34674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * methods in the {@link ClassWriter} class.
35674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen *
36674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * @author Eric Bruneton
37674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen */
38674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogenfinal class Item {
39674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
40674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    /**
41674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen     * Index of this item in the constant pool.
42674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen     */
43674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    int index;
44674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
45674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    /**
46674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen     * Type of this constant pool item. A single class is used to represent all
47674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen     * constant pool item types, in order to minimize the bytecode size of this
48674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen     * package. The value of this field is one of {@link ClassWriter#INT},
49674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen     * {@link ClassWriter#LONG}, {@link ClassWriter#FLOAT},
50674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen     * {@link ClassWriter#DOUBLE}, {@link ClassWriter#UTF8},
51674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen     * {@link ClassWriter#STR}, {@link ClassWriter#CLASS},
52674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen     * {@link ClassWriter#NAME_TYPE}, {@link ClassWriter#FIELD},
53674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen     * {@link ClassWriter#METH}, {@link ClassWriter#IMETH}.
54674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen     *
55674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen     * Special Item types are used for Items that are stored in the ClassWriter
56674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen     * {@link ClassWriter#typeTable}, instead of the constant pool, in order to
57674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen     * avoid clashes with normal constant pool items in the ClassWriter constant
58674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen     * pool's hash table. These special item types are
59674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen     * {@link ClassWriter#TYPE_NORMAL}, {@link ClassWriter#TYPE_UNINIT} and
60674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen     * {@link ClassWriter#TYPE_MERGED}.
61674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen     */
62674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    int type;
63674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
64674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    /**
65674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen     * Value of this item, for an integer item.
66674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen     */
67674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    int intVal;
68674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
69674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    /**
70674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen     * Value of this item, for a long item.
71674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen     */
72674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    long longVal;
73674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
74674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    /**
75674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen     * First part of the value of this item, for items that do not hold a
76674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen     * primitive value.
77674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen     */
78674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    String strVal1;
79674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
80674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    /**
81674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen     * Second part of the value of this item, for items that do not hold a
82674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen     * primitive value.
83674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen     */
84674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    String strVal2;
85674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
86674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    /**
87674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen     * Third part of the value of this item, for items that do not hold a
88674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen     * primitive value.
89674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen     */
90674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    String strVal3;
91674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
92674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    /**
93674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen     * The hash code value of this constant pool item.
94674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen     */
95674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    int hashCode;
96674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
97674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    /**
98674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen     * Link to another constant pool item, used for collision lists in the
99674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen     * constant pool's hash table.
100674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen     */
101674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    Item next;
102674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
103674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    /**
104674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen     * Constructs an uninitialized {@link Item}.
105674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen     */
106674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    Item() {
107674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    }
108674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
109674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    /**
110674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen     * Constructs an uninitialized {@link Item} for constant pool element at
111674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen     * given position.
112674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen     *
113674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen     * @param index index of the item to be constructed.
114674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen     */
115674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    Item(final int index) {
116674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        this.index = index;
117674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    }
118674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
119674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    /**
120674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen     * Constructs a copy of the given item.
121674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen     *
122674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen     * @param index index of the item to be constructed.
123674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen     * @param i the item that must be copied into the item to be constructed.
124674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen     */
125674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    Item(final int index, final Item i) {
126674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        this.index = index;
127674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        type = i.type;
128674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        intVal = i.intVal;
129674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        longVal = i.longVal;
130674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        strVal1 = i.strVal1;
131674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        strVal2 = i.strVal2;
132674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        strVal3 = i.strVal3;
133674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        hashCode = i.hashCode;
134674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    }
135674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
136674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    /**
137674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen     * Sets this item to an integer item.
138674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen     *
139674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen     * @param intVal the value of this item.
140674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen     */
141674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    void set(final int intVal) {
142674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        this.type = ClassWriter.INT;
143674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        this.intVal = intVal;
144674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        this.hashCode = 0x7FFFFFFF & (type + intVal);
145674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    }
146674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
147674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    /**
148674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen     * Sets this item to a long item.
149674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen     *
150674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen     * @param longVal the value of this item.
151674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen     */
152674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    void set(final long longVal) {
153674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        this.type = ClassWriter.LONG;
154674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        this.longVal = longVal;
155674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        this.hashCode = 0x7FFFFFFF & (type + (int) longVal);
156674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    }
157674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
158674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    /**
159674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen     * Sets this item to a float item.
160674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen     *
161674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen     * @param floatVal the value of this item.
162674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen     */
163674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    void set(final float floatVal) {
164674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        this.type = ClassWriter.FLOAT;
165674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        this.intVal = Float.floatToRawIntBits(floatVal);
166674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        this.hashCode = 0x7FFFFFFF & (type + (int) floatVal);
167674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    }
168674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
169674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    /**
170674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen     * Sets this item to a double item.
171674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen     *
172674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen     * @param doubleVal the value of this item.
173674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen     */
174674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    void set(final double doubleVal) {
175674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        this.type = ClassWriter.DOUBLE;
176674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        this.longVal = Double.doubleToRawLongBits(doubleVal);
177674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        this.hashCode = 0x7FFFFFFF & (type + (int) doubleVal);
178674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    }
179674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
180674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    /**
181674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen     * Sets this item to an item that do not hold a primitive value.
182674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen     *
183674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen     * @param type the type of this item.
184674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen     * @param strVal1 first part of the value of this item.
185674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen     * @param strVal2 second part of the value of this item.
186674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen     * @param strVal3 third part of the value of this item.
187674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen     */
188674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    void set(
189674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        final int type,
190674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        final String strVal1,
191674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        final String strVal2,
192674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        final String strVal3)
193674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    {
194674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        this.type = type;
195674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        this.strVal1 = strVal1;
196674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        this.strVal2 = strVal2;
197674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        this.strVal3 = strVal3;
198674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        switch (type) {
199674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen            case ClassWriter.UTF8:
200674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen            case ClassWriter.STR:
201674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen            case ClassWriter.CLASS:
202674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen            case ClassWriter.TYPE_NORMAL:
203674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen                hashCode = 0x7FFFFFFF & (type + strVal1.hashCode());
204674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen                return;
205674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen            case ClassWriter.NAME_TYPE:
206674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen                hashCode = 0x7FFFFFFF & (type + strVal1.hashCode()
207674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen                        * strVal2.hashCode());
208674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen                return;
209674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen                // ClassWriter.FIELD:
210674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen                // ClassWriter.METH:
211674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen                // ClassWriter.IMETH:
212674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen            default:
213674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen                hashCode = 0x7FFFFFFF & (type + strVal1.hashCode()
214674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen                        * strVal2.hashCode() * strVal3.hashCode());
215674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        }
216674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    }
217674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
218674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    /**
219674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen     * Indicates if the given item is equal to this one.
220674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen     *
221674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen     * @param i the item to be compared to this one.
222674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen     * @return <tt>true</tt> if the given item if equal to this one,
223674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen     *         <tt>false</tt> otherwise.
224674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen     */
225674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    boolean isEqualTo(final Item i) {
226674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        if (i.type == type) {
227674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen            switch (type) {
228674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen                case ClassWriter.INT:
229674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen                case ClassWriter.FLOAT:
230674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen                    return i.intVal == intVal;
231674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen                case ClassWriter.TYPE_MERGED:
232674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen                case ClassWriter.LONG:
233674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen                case ClassWriter.DOUBLE:
234674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen                    return i.longVal == longVal;
235674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen                case ClassWriter.UTF8:
236674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen                case ClassWriter.STR:
237674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen                case ClassWriter.CLASS:
238674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen                case ClassWriter.TYPE_NORMAL:
239674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen                    return i.strVal1.equals(strVal1);
240674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen                case ClassWriter.TYPE_UNINIT:
241674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen                    return i.intVal == intVal && i.strVal1.equals(strVal1);
242674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen                case ClassWriter.NAME_TYPE:
243674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen                    return i.strVal1.equals(strVal1)
244674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen                            && i.strVal2.equals(strVal2);
245674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen                    // ClassWriter.FIELD:
246674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen                    // ClassWriter.METH:
247674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen                    // ClassWriter.IMETH:
248674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen                default:
249674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen                    return i.strVal1.equals(strVal1)
250674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen                            && i.strVal2.equals(strVal2)
251674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen                            && i.strVal3.equals(strVal3);
252674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen            }
253674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        }
254674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        return false;
255674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    }
256674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen}
257