15f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes/*
25f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Licensed to the Apache Software Foundation (ASF) under one or more
35f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * contributor license agreements.  See the NOTICE file distributed with
45f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * this work for additional information regarding copyright ownership.
55f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * The ASF licenses this file to You under the Apache License, Version 2.0
65f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * (the "License"); you may not use this file except in compliance with
75f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * the License.  You may obtain a copy of the License at
85f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *
95f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *     http://www.apache.org/licenses/LICENSE-2.0
105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *
115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *  Unless required by applicable law or agreed to in writing, software
125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *  distributed under the License is distributed on an "AS IS" BASIS,
135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *
155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *  See the License for the specific language governing permissions and
165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *  limitations under the License.
175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */
185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes/**
205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @author Alexei S. Vaskin
215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */
225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes/**
245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Created on 22.04.2005
255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */
265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughespackage org.apache.harmony.jpda.tests.framework.jdwp;
285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport java.util.ArrayList;
305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport java.util.Iterator;
315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes/**
335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * This class provides description of frame.
345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *
355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */
365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughespublic class Frame {
375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    protected long threadID;
395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    protected Location loc;
415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    protected long id;
435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    protected ArrayList vars;
455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
465f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Default constructor.
485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public Frame() {
505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        threadID = -1;
515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        id = -1L;
525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        loc = new Location();
535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        vars = null;
545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Constructor initializing all members of the Frame instance.
585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @param threadID
605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *            thread id
615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @param id
625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *            frame id
635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @param location
645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *            frame location
655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @param vars
665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *            list of variables
675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    Frame(long threadID, long id, Location location, ArrayList vars) {
695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        this.threadID = threadID;
705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        this.id = id;
715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        this.loc = location;
725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        this.vars = vars;
735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Gets thread id.
775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return long
795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public long getThreadID() {
815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return threadID;
825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Sets new thread id.
865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @param threadID
885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *            new thread id
895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public void setThreadID(long threadID) {
915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        this.threadID = threadID;
925f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
935f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
945f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
955f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Gets frame id.
965f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
975f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return long
985f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
995f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public long getID() {
1005f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return id;
1015f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
1025f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1035f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
1045f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Sets new frame id.
1055f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
1065f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @param id
1075f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *            new frame id
1085f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
1095f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public void setID(long id) {
1105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        this.id = id;
1115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
1125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
1145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Gets frame location.
1155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
1165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return Location
1175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
1185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public Location getLocation() {
1195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return loc;
1205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
1215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
1235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Sets new frame location.
1245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
1255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @param location
1265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *            new frame location
1275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
1285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public void setLocation(Location location) {
1295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        this.loc = location;
1305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
1315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
1335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Gets frame variables.
1345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
1355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return list of frame variables
1365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
1375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public ArrayList getVars() {
1385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return vars;
1395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
1405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
1425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Sets new frame variables.
1435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
1445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @param vars
1455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *            list of new frame variables
1465f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
1475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public void setVars(ArrayList vars) {
1485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        this.vars = vars;
1495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
1505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
1525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Converts Frame object to String.
1535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
1545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @see java.lang.Object#toString()
1555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return String
1565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
1575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public String toString() {
1585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        String string = "Frame: id=" + id + ", threadID=" + threadID
1595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                + ", location=" + loc.toString() + "\n";
1605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        string += "--- Variables ---";
1615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        Iterator it = vars.iterator();
1625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        while (it.hasNext()) {
1635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            string += ((Variable) it.next()).toString();
1645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
1655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return string;
1665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
1675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
1695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Compares two Frame objects.
1705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
1715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @see java.lang.Object#equals(java.lang.Object)
1725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return boolean
1735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
1745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public boolean equals(Object obj) {
1755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        if (!(obj instanceof Frame)) {
1765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            return false;
1775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
1785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        if (this.getClass() != obj.getClass()) {
1805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            return false;
1815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
1825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        Frame frame = (Frame) obj;
1845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        if (this.threadID != frame.threadID || this.id != frame.id
1855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                || !(this.loc.equals(frame.loc))) {
1865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            return false;
1875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
1885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        if (vars.size() != frame.vars.size()) {
1905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            return false;
1915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
1925f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1935f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        if (!vars.equals(frame.vars)) {
1945f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            return false;
1955f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
1965f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1975f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return true;
1985f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
1995f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
2005f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
2015f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * This describing frame variable.
2025f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
2035f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
2045f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public final class Variable {
2055f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        private long codeIndex;
2065f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
2075f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        private String name;
2085f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
2095f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        private String signature;
2105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
2115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        private int length;
2125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
2135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        private int slot;
2145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
2155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        private byte tag;
2165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
2175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        private String type;
2185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
2195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        /**
2205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         * Constructor.
2215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         *
2225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         */
2235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        public Variable() {
2245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            codeIndex = -1;
2255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            name = "unknown";
2265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            signature = "unknown";
2275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            length = -1;
2285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            slot = -1;
2295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            tag = JDWPConstants.Tag.NO_TAG;
2305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            type = "unknown type";
2315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
2325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
2335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        /**
2345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         * Gets code index of variable.
2355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         *
2365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         * @return long
2375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         */
2385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        public long getCodeIndex() {
2395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            return codeIndex;
2405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
2415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
2425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        /**
2435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         * Sets new code index for variable.
2445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         *
2455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         * @param codeIndex
2465f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         */
2475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        public void setCodeIndex(long codeIndex) {
2485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            this.codeIndex = codeIndex;
2495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
2505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
2515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        /**
2525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         * Gets variable name.
2535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         *
2545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         * @return String
2555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         */
2565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        public String getName() {
2575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            return name;
2585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
2595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
2605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        /**
2615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         * Sets new variable name.
2625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         *
2635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         * @param name
2645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         *            new variable name
2655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         */
2665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        public void setName(String name) {
2675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            this.name = name;
2685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
2695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
2705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        /**
2715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         * Gets signature of the variable reference type.
2725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         *
2735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         * @return String
2745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         */
2755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        public String getSignature() {
2765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            return signature;
2775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
2785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
2795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        /**
2805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         * Sets new signature and detects value of a type tag.
2815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         *
2825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         * @param signature
2835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         */
2845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        public void setSignature(String signature) {
2855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            switch (signature.charAt(0)) {
2865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            case '[':
2875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                tag = JDWPConstants.Tag.ARRAY_TAG;
2885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                break;
2895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            case 'B':
2905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                tag = JDWPConstants.Tag.BYTE_TAG;
2915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                break;
2925f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            case 'C':
2935f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                tag = JDWPConstants.Tag.CHAR_TAG;
2945f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                break;
2955f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            case 'L':
2965f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                tag = JDWPConstants.Tag.OBJECT_TAG;
2975f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                break;
2985f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            case 'F':
2995f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                tag = JDWPConstants.Tag.FLOAT_TAG;
3005f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                break;
3015f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            case 'D':
3025f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                tag = JDWPConstants.Tag.DOUBLE_TAG;
3035f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                break;
3045f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            case 'I':
3055f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                tag = JDWPConstants.Tag.INT_TAG;
3065f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                break;
3075f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            case 'J':
3085f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                tag = JDWPConstants.Tag.LONG_TAG;
3095f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                break;
3105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            case 'S':
3115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                tag = JDWPConstants.Tag.SHORT_TAG;
3125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                break;
3135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            case 'V':
3145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                tag = JDWPConstants.Tag.VOID_TAG;
3155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                break;
3165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            case 'Z':
3175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                tag = JDWPConstants.Tag.BOOLEAN_TAG;
3185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                break;
3195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            case 's':
3205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                tag = JDWPConstants.Tag.STRING_TAG;
3215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                break;
3225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            case 't':
3235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                tag = JDWPConstants.Tag.THREAD_TAG;
3245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                break;
3255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            case 'g':
3265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                tag = JDWPConstants.Tag.THREAD_GROUP_TAG;
3275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                break;
3285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            case 'l':
3295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                tag = JDWPConstants.Tag.CLASS_LOADER_TAG;
3305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                break;
3315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            case 'c':
3325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                tag = JDWPConstants.Tag.CLASS_OBJECT_TAG;
3335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                break;
3345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            }
3355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
3365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            this.signature = signature;
3375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
3385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
3395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        /**
3405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         * Gets variable length.
3415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         *
3425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         * @return int
3435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         */
3445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        public int getLength() {
3455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            return length;
3465f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
3475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
3485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        /**
3495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         * Sets new variable length.
3505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         *
3515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         * @param length
3525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         *            new variable length
3535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         */
3545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        public void setLength(int length) {
3555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            this.length = length;
3565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
3575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
3585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        /**
3595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         * Returns variable slot value.
3605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         *
3615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         * @return int
3625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         */
3635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        public int getSlot() {
3645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            return slot;
3655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
3665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
3675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        /**
3685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         * Assigns new slot value.
3695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         *
3705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         * @param slot
3715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         *            new slot value
3725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         */
3735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        public void setSlot(int slot) {
3745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            this.slot = slot;
3755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
3765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
3775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        /**
3785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         * Gets variable type tag value.
3795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         *
3805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         * @return byte
3815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         */
3825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        public byte getTag() {
3835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            return tag;
3845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
3855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
3865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        /**
3875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         * Gets variable java type.
3885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         *
3895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         * @return String
3905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         */
3915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        public String getType() {
3925f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            switch (tag) {
3935f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            case JDWPConstants.Tag.ARRAY_TAG:
3945f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                switch (signature.charAt(1)) {
3955f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                case 'B':
3965f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    type = "byte[]";
3975f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    break;
3985f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                case 'C':
3995f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    type = "char[]";
4005f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    break;
4015f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                case 'J':
4025f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    type = "long[]";
4035f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    break;
4045f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                case 'F':
4055f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    type = "float[]";
4065f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    break;
4075f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                case 'D':
4085f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    type = "double[]";
4095f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    break;
4105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                case 'I':
4115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    type = "int[]";
4125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    break;
4135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                case 'S':
4145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    type = "short[]";
4155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    break;
4165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                case 'V':
4175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    type = "void[]";
4185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    break;
4195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                case 'Z':
4205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    type = "boolean[]";
4215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    break;
4225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                case 's':
4235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    type = "java.Lang.String[]";
4245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    break;
4255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                case 'L':
4265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    type = signature
4275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                            .substring(2, signature.length() - 1 /*
4285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                                                                     * skip
4295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                                                                     * ending
4305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                                                                     * ';'
4315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                                                                     */)
4325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                            .replaceAll("/", ".")
4335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                            + "[]"; // skip ending ';'
4345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    break;
4355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                }
4365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                break;
4375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            case JDWPConstants.Tag.OBJECT_TAG:
4385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                type = signature
4395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                        .substring(1, signature.length() - 1 /*
4405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                                                                 * skip ending
4415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                                                                 * ';'
4425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                                                                 */)
4435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                        .replaceAll("/", "."); // skip ending ';'
4445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                break;
4455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            case JDWPConstants.Tag.BOOLEAN_TAG:
4465f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                type = "boolean";
4475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                break;
4485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            case JDWPConstants.Tag.BYTE_TAG:
4495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                type = "byte";
4505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                break;
4515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            case JDWPConstants.Tag.CHAR_TAG:
4525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                type = "char";
4535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                break;
4545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            case JDWPConstants.Tag.DOUBLE_TAG:
4555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                type = "double";
4565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                break;
4575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            case JDWPConstants.Tag.FLOAT_TAG:
4585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                type = "float";
4595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                break;
4605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            case JDWPConstants.Tag.INT_TAG:
4615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                type = "int";
4625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                break;
4635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            case JDWPConstants.Tag.LONG_TAG:
4645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                type = "long";
4655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                break;
4665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            case JDWPConstants.Tag.SHORT_TAG:
4675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                type = "short";
4685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                break;
4695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            case JDWPConstants.Tag.STRING_TAG:
4705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                type = "string";
4715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                break;
4725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            default:
4735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                break;
4745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            }
4755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
4765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            return type;
4775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
4785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
4795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        /**
4805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         * Converts Variable object to String.
4815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         *
4825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         * @see java.lang.Object#toString()
4835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         * @return String
4845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         */
4855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        public String toString() {
4865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            return "Variable: codeIndex=" + codeIndex + ", name=" + name
4875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    + ", signature=" + signature + ", length=" + length
4885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    + ", slot=" + slot + ", tag="
4895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    + JDWPConstants.Tag.getName(tag) + ", type=" + type;
4905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
4915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
4925f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        /**
4935f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         * Compares two Variable objects.
4945f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         *
4955f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         * @see java.lang.Object#equals(java.lang.Object)
4965f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         * @return boolean
4975f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         */
4985f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        public boolean equals(Object obj) {
4995f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            if (!(obj instanceof Variable)) {
5005f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                return false;
5015f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            }
5025f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
5035f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            if (this.getClass() != obj.getClass()) {
5045f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                return false;
5055f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            }
5065f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
5075f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            Variable var = (Variable) obj;
5085f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            return this.codeIndex == var.codeIndex
5095f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    && this.name.equals(var.name)
5105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    && this.signature.equals(var.signature)
5115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    && this.length == var.length && this.slot == var.slot
5125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    && this.tag == var.tag && this.type.equals(var.type);
5135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
5145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
5155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
5165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes}
517