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 Hughes
315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes/**
325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * This class provides description of frame.
335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *
345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */
355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughespublic class Frame {
365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    protected long threadID;
385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    protected Location loc;
405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    protected long id;
425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
43e1833aa2673d4f975ad35e7a39317feeea922fe1Sebastien Hertz    protected ArrayList<Variable> vars;
445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
465f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Default constructor.
475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public Frame() {
495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        threadID = -1;
505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        id = -1L;
515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        loc = new Location();
525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        vars = null;
535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Constructor initializing all members of the Frame instance.
575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @param threadID
595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *            thread id
605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @param id
615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *            frame id
625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @param location
635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *            frame location
645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @param vars
655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *            list of variables
665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
67e1833aa2673d4f975ad35e7a39317feeea922fe1Sebastien Hertz    Frame(long threadID, long id, Location location, ArrayList<Variable> vars) {
685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        this.threadID = threadID;
695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        this.id = id;
705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        this.loc = location;
715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        this.vars = vars;
725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Gets thread id.
765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return long
785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public long getThreadID() {
805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return threadID;
815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Sets new thread id.
855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @param threadID
875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *            new thread id
885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public void setThreadID(long threadID) {
905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        this.threadID = threadID;
915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
925f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
935f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
945f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Gets frame id.
955f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
965f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return long
975f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
985f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public long getID() {
995f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return id;
1005f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
1015f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1025f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
1035f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Sets new frame id.
1045f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
1055f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @param id
1065f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *            new frame id
1075f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
1085f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public void setID(long id) {
1095f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        this.id = id;
1105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
1115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
1135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Gets frame location.
1145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
1155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return Location
1165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
1175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public Location getLocation() {
1185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return loc;
1195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
1205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
1225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Sets new frame location.
1235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
1245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @param location
1255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *            new frame location
1265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
1275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public void setLocation(Location location) {
1285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        this.loc = location;
1295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
1305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
1325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Gets frame variables.
1335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
1345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return list of frame variables
1355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
136e1833aa2673d4f975ad35e7a39317feeea922fe1Sebastien Hertz    public ArrayList<Variable> getVars() {
1375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return vars;
1385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
1395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
1415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Sets new frame variables.
1425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
1435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @param vars
1445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *            list of new frame variables
1455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
146e1833aa2673d4f975ad35e7a39317feeea922fe1Sebastien Hertz    public void setVars(ArrayList<Variable> vars) {
1475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        this.vars = vars;
1485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
1495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
1515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Converts Frame object to String.
1525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
1535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @see java.lang.Object#toString()
1545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return String
1555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
156e1833aa2673d4f975ad35e7a39317feeea922fe1Sebastien Hertz    @Override
1575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public String toString() {
1585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        String string = "Frame: id=" + id + ", threadID=" + threadID
1595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                + ", location=" + loc.toString() + "\n";
1605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        string += "--- Variables ---";
161e1833aa2673d4f975ad35e7a39317feeea922fe1Sebastien Hertz        for (Variable var : vars) {
162e1833aa2673d4f975ad35e7a39317feeea922fe1Sebastien Hertz            string += var.toString();
1635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
1645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return string;
1655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
1665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
1685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Compares two Frame objects.
1695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
1705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @see java.lang.Object#equals(java.lang.Object)
1715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return boolean
1725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
173e1833aa2673d4f975ad35e7a39317feeea922fe1Sebastien Hertz    @Override
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         */
485e1833aa2673d4f975ad35e7a39317feeea922fe1Sebastien Hertz        @Override
4865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        public String toString() {
4875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            return "Variable: codeIndex=" + codeIndex + ", name=" + name
4885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    + ", signature=" + signature + ", length=" + length
4895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    + ", slot=" + slot + ", tag="
4905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    + JDWPConstants.Tag.getName(tag) + ", type=" + type;
4915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
4925f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
4935f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        /**
4945f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         * Compares two Variable objects.
4955f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         *
4965f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         * @see java.lang.Object#equals(java.lang.Object)
4975f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         * @return boolean
4985f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         */
499e1833aa2673d4f975ad35e7a39317feeea922fe1Sebastien Hertz        @Override
5005f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        public boolean equals(Object obj) {
5015f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            if (!(obj instanceof Variable)) {
5025f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                return false;
5035f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            }
5045f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
5055f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            if (this.getClass() != obj.getClass()) {
5065f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                return false;
5075f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            }
5085f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
5095f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            Variable var = (Variable) obj;
5105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            return this.codeIndex == var.codeIndex
5115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    && this.name.equals(var.name)
5125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    && this.signature.equals(var.signature)
5135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    && this.length == var.length && this.slot == var.slot
5145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    && this.tag == var.tag && this.type.equals(var.type);
5155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
5165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
5175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
5185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes}
519