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     */
204271adc6d545b5eb1404f1904589ff1abb7ef8b58Sebastien Hertz    public static final class Variable {
2055f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        private long codeIndex;
2065f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
2075f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        private String name;
2085f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
2095f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        private String signature;
2105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
211271adc6d545b5eb1404f1904589ff1abb7ef8b58Sebastien Hertz        private String genericSignature;
212271adc6d545b5eb1404f1904589ff1abb7ef8b58Sebastien Hertz
2135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        private int length;
2145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
2155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        private int slot;
2165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
2175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        private byte tag;
2185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
2195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        private String type;
2205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
2215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        /**
2225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         * Constructor.
2235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         *
2245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         */
2255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        public Variable() {
2265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            codeIndex = -1;
2275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            name = "unknown";
2285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            signature = "unknown";
229271adc6d545b5eb1404f1904589ff1abb7ef8b58Sebastien Hertz            genericSignature = "unknown";
2305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            length = -1;
2315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            slot = -1;
2325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            tag = JDWPConstants.Tag.NO_TAG;
2335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            type = "unknown type";
2345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
2355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
2365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        /**
2375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         * Gets code index of variable.
2385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         *
2395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         * @return long
2405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         */
2415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        public long getCodeIndex() {
2425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            return codeIndex;
2435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
2445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
2455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        /**
2465f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         * Sets new code index for variable.
2475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         *
2485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         * @param codeIndex
2495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         */
2505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        public void setCodeIndex(long codeIndex) {
2515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            this.codeIndex = codeIndex;
2525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
2535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
2545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        /**
2555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         * Gets variable name.
2565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         *
2575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         * @return String
2585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         */
2595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        public String getName() {
2605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            return name;
2615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
2625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
2635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        /**
2645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         * Sets new variable name.
2655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         *
2665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         * @param name
2675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         *            new variable name
2685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         */
2695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        public void setName(String name) {
2705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            this.name = name;
2715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
2725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
2735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        /**
2745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         * Gets signature of the variable reference type.
2755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         *
2765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         * @return String
2775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         */
2785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        public String getSignature() {
2795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            return signature;
2805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
2815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
2825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        /**
2835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         * Sets new signature and detects value of a type tag.
2845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         *
2855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         * @param signature
2865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         */
2875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        public void setSignature(String signature) {
2885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            switch (signature.charAt(0)) {
2895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            case '[':
2905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                tag = JDWPConstants.Tag.ARRAY_TAG;
2915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                break;
2925f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            case 'B':
2935f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                tag = JDWPConstants.Tag.BYTE_TAG;
2945f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                break;
2955f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            case 'C':
2965f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                tag = JDWPConstants.Tag.CHAR_TAG;
2975f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                break;
2985f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            case 'L':
2995f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                tag = JDWPConstants.Tag.OBJECT_TAG;
3005f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                break;
3015f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            case 'F':
3025f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                tag = JDWPConstants.Tag.FLOAT_TAG;
3035f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                break;
3045f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            case 'D':
3055f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                tag = JDWPConstants.Tag.DOUBLE_TAG;
3065f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                break;
3075f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            case 'I':
3085f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                tag = JDWPConstants.Tag.INT_TAG;
3095f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                break;
3105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            case 'J':
3115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                tag = JDWPConstants.Tag.LONG_TAG;
3125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                break;
3135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            case 'S':
3145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                tag = JDWPConstants.Tag.SHORT_TAG;
3155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                break;
3165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            case 'V':
3175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                tag = JDWPConstants.Tag.VOID_TAG;
3185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                break;
3195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            case 'Z':
3205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                tag = JDWPConstants.Tag.BOOLEAN_TAG;
3215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                break;
3225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            case 's':
3235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                tag = JDWPConstants.Tag.STRING_TAG;
3245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                break;
3255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            case 't':
3265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                tag = JDWPConstants.Tag.THREAD_TAG;
3275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                break;
3285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            case 'g':
3295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                tag = JDWPConstants.Tag.THREAD_GROUP_TAG;
3305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                break;
3315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            case 'l':
3325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                tag = JDWPConstants.Tag.CLASS_LOADER_TAG;
3335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                break;
3345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            case 'c':
3355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                tag = JDWPConstants.Tag.CLASS_OBJECT_TAG;
3365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                break;
3375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            }
3385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
3395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            this.signature = signature;
3405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
3415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
3425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        /**
343271adc6d545b5eb1404f1904589ff1abb7ef8b58Sebastien Hertz         * Gets variable generic signature.
344271adc6d545b5eb1404f1904589ff1abb7ef8b58Sebastien Hertz         *
345271adc6d545b5eb1404f1904589ff1abb7ef8b58Sebastien Hertz         * @return the generic signature
346271adc6d545b5eb1404f1904589ff1abb7ef8b58Sebastien Hertz         */
347271adc6d545b5eb1404f1904589ff1abb7ef8b58Sebastien Hertz        public String getGenericSignature() {
348271adc6d545b5eb1404f1904589ff1abb7ef8b58Sebastien Hertz            return genericSignature;
349271adc6d545b5eb1404f1904589ff1abb7ef8b58Sebastien Hertz        }
350271adc6d545b5eb1404f1904589ff1abb7ef8b58Sebastien Hertz
351271adc6d545b5eb1404f1904589ff1abb7ef8b58Sebastien Hertz        /**
352271adc6d545b5eb1404f1904589ff1abb7ef8b58Sebastien Hertz         * Sets new variable generic signature.
353271adc6d545b5eb1404f1904589ff1abb7ef8b58Sebastien Hertz         *
354271adc6d545b5eb1404f1904589ff1abb7ef8b58Sebastien Hertz         * @param genericSignature the generic signature to set
355271adc6d545b5eb1404f1904589ff1abb7ef8b58Sebastien Hertz         */
356271adc6d545b5eb1404f1904589ff1abb7ef8b58Sebastien Hertz        public void setGenericSignature(String genericSignature) {
357271adc6d545b5eb1404f1904589ff1abb7ef8b58Sebastien Hertz            this.genericSignature = genericSignature;
358271adc6d545b5eb1404f1904589ff1abb7ef8b58Sebastien Hertz        }
359271adc6d545b5eb1404f1904589ff1abb7ef8b58Sebastien Hertz
360271adc6d545b5eb1404f1904589ff1abb7ef8b58Sebastien Hertz        /**
3615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         * Gets variable length.
3625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         *
3635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         * @return int
3645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         */
3655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        public int getLength() {
3665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            return length;
3675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
3685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
3695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        /**
3705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         * Sets new variable length.
3715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         *
3725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         * @param length
3735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         *            new variable length
3745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         */
3755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        public void setLength(int length) {
3765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            this.length = length;
3775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
3785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
3795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        /**
3805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         * Returns variable slot value.
3815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         *
3825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         * @return int
3835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         */
3845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        public int getSlot() {
3855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            return slot;
3865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
3875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
3885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        /**
3895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         * Assigns new slot value.
3905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         *
3915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         * @param slot
3925f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         *            new slot value
3935f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         */
3945f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        public void setSlot(int slot) {
3955f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            this.slot = slot;
3965f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
3975f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
3985f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        /**
3995f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         * Gets variable type tag value.
4005f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         *
4015f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         * @return byte
4025f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         */
4035f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        public byte getTag() {
4045f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            return tag;
4055f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
4065f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
4075f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        /**
4085f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         * Gets variable java type.
4095f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         *
4105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         * @return String
4115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         */
4125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        public String getType() {
4135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            switch (tag) {
4145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            case JDWPConstants.Tag.ARRAY_TAG:
4155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                switch (signature.charAt(1)) {
4165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                case 'B':
4175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    type = "byte[]";
4185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    break;
4195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                case 'C':
4205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    type = "char[]";
4215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    break;
4225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                case 'J':
4235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    type = "long[]";
4245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    break;
4255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                case 'F':
4265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    type = "float[]";
4275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    break;
4285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                case 'D':
4295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    type = "double[]";
4305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    break;
4315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                case 'I':
4325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    type = "int[]";
4335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    break;
4345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                case 'S':
4355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    type = "short[]";
4365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    break;
4375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                case 'V':
4385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    type = "void[]";
4395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    break;
4405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                case 'Z':
4415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    type = "boolean[]";
4425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    break;
4435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                case 's':
4445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    type = "java.Lang.String[]";
4455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    break;
4465f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                case 'L':
4475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    type = signature
4485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                            .substring(2, signature.length() - 1 /*
4495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                                                                     * skip
4505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                                                                     * ending
4515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                                                                     * ';'
4525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                                                                     */)
4535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                            .replaceAll("/", ".")
4545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                            + "[]"; // skip ending ';'
4555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    break;
4565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                }
4575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                break;
4585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            case JDWPConstants.Tag.OBJECT_TAG:
4595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                type = signature
4605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                        .substring(1, signature.length() - 1 /*
4615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                                                                 * skip ending
4625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                                                                 * ';'
4635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                                                                 */)
4645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                        .replaceAll("/", "."); // skip ending ';'
4655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                break;
4665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            case JDWPConstants.Tag.BOOLEAN_TAG:
4675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                type = "boolean";
4685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                break;
4695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            case JDWPConstants.Tag.BYTE_TAG:
4705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                type = "byte";
4715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                break;
4725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            case JDWPConstants.Tag.CHAR_TAG:
4735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                type = "char";
4745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                break;
4755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            case JDWPConstants.Tag.DOUBLE_TAG:
4765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                type = "double";
4775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                break;
4785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            case JDWPConstants.Tag.FLOAT_TAG:
4795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                type = "float";
4805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                break;
4815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            case JDWPConstants.Tag.INT_TAG:
4825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                type = "int";
4835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                break;
4845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            case JDWPConstants.Tag.LONG_TAG:
4855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                type = "long";
4865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                break;
4875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            case JDWPConstants.Tag.SHORT_TAG:
4885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                type = "short";
4895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                break;
4905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            case JDWPConstants.Tag.STRING_TAG:
4915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                type = "string";
4925f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                break;
4935f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            default:
4945f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                break;
4955f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            }
4965f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
4975f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            return type;
4985f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
4995f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
5005f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        /**
5015f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         * Converts Variable object to String.
5025f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         *
5035f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         * @see java.lang.Object#toString()
5045f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         * @return String
5055f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         */
506e1833aa2673d4f975ad35e7a39317feeea922fe1Sebastien Hertz        @Override
5075f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        public String toString() {
5085f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            return "Variable: codeIndex=" + codeIndex + ", name=" + name
5095f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    + ", signature=" + signature + ", length=" + length
5105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    + ", slot=" + slot + ", tag="
5115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    + JDWPConstants.Tag.getName(tag) + ", type=" + type;
5125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
5135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
5145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        /**
5155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         * Compares two Variable objects.
5165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         *
5175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         * @see java.lang.Object#equals(java.lang.Object)
5185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         * @return boolean
5195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes         */
520e1833aa2673d4f975ad35e7a39317feeea922fe1Sebastien Hertz        @Override
5215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        public boolean equals(Object obj) {
5225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            if (!(obj instanceof Variable)) {
5235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                return false;
5245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            }
5255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
5265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            if (this.getClass() != obj.getClass()) {
5275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                return false;
5285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            }
5295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
5305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            Variable var = (Variable) obj;
5315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            return this.codeIndex == var.codeIndex
5325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    && this.name.equals(var.name)
5335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    && this.signature.equals(var.signature)
5345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    && this.length == var.length && this.slot == var.slot
5355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    && this.tag == var.tag && this.type.equals(var.type);
5365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
5375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
5385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
5395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes}
540