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 03.05.2005
255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */
265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughespackage org.apache.harmony.jpda.tests.framework.jdwp;
285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes/**
305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * This class provides description of class field.
315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *
325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */
335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughespublic final class Field {
345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    private long id;
365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    private long classID;
385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    private String name;
405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    private String signature;
425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    private int modBits;
445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    private byte tag;
465f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Default constructor.
495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public Field() {
515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        id = -1;
525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        classID = -1;
535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        name = "unknown";
545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        signature = "unknown";
555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        modBits = -1;
565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Constructor initializing all members of the Field instance.
605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @param id
625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *            field id
635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @param classID
645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *            class id
655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @param name
665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *            field name
675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @param signature
685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *            signature signature of the field class
695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @param modBits
705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *            field modifiers
715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public Field(long id, long classID, String name, String signature,
735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            int modBits) {
745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        this.id = id;
755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        this.classID = classID;
765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        this.name = name;
775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        this.modBits = modBits;
785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        setSignature(signature);
795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Sets signature and detects type tag from it.
835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @param signature
855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *            signature of the field class
865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    private void setSignature(String signature) {
885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        switch (signature.charAt(0)) {
895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case '[':
905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            tag = JDWPConstants.Tag.ARRAY_TAG;
915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            break;
925f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case 'B':
935f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            tag = JDWPConstants.Tag.BYTE_TAG;
945f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            break;
955f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case 'C':
965f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            tag = JDWPConstants.Tag.CHAR_TAG;
975f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            break;
985f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case 'L':
995f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            tag = JDWPConstants.Tag.OBJECT_TAG;
1005f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            break;
1015f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case 'F':
1025f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            tag = JDWPConstants.Tag.FLOAT_TAG;
1035f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            break;
1045f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case 'D':
1055f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            tag = JDWPConstants.Tag.DOUBLE_TAG;
1065f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            break;
1075f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case 'I':
1085f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            tag = JDWPConstants.Tag.INT_TAG;
1095f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            break;
1105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case 'J':
1115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            tag = JDWPConstants.Tag.LONG_TAG;
1125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            break;
1135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case 'S':
1145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            tag = JDWPConstants.Tag.SHORT_TAG;
1155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            break;
1165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case 'V':
1175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            tag = JDWPConstants.Tag.VOID_TAG;
1185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            break;
1195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case 'Z':
1205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            tag = JDWPConstants.Tag.BOOLEAN_TAG;
1215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            break;
1225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case 's':
1235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            tag = JDWPConstants.Tag.STRING_TAG;
1245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            break;
1255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case 't':
1265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            tag = JDWPConstants.Tag.THREAD_TAG;
1275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            break;
1285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case 'g':
1295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            tag = JDWPConstants.Tag.THREAD_GROUP_TAG;
1305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            break;
1315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case 'l':
1325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            tag = JDWPConstants.Tag.CLASS_LOADER_TAG;
1335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            break;
1345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case 'c':
1355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            tag = JDWPConstants.Tag.CLASS_OBJECT_TAG;
1365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            break;
1375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
1385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        this.signature = signature;
1405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
1415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
1435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Gets field id.
1445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
1455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return long
1465f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
1475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public long getID() {
1485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return this.id;
1495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
1505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
1525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Gets id of the field reference type.
1535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
1545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return long
1555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
1565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public long getClassID() {
1575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return classID;
1585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
1595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
1615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Gets field name.
1625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
1635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return String
1645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
1655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public String getName() {
1665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return name;
1675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
1685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
1705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Gets signature of field type.
1715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
1725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return String
1735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
1745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public String getSignature() {
1755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return signature;
1765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
1775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
1795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Gets field modifiers.
1805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
1815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return int
1825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
1835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public int getModBits() {
1845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return modBits;
1855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
1865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
1885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Gets field java type.
1895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
1905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return String
1915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
1925f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public String getType() {
1935f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        String type = "unknown type";
1945f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        switch (tag) {
1955f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.ARRAY_TAG:
1965f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            switch (signature.charAt(1)) {
1975f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            case 'B':
1985f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                type = "byte[]";
1995f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                break;
2005f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            case 'C':
2015f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                type = "char[]";
2025f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                break;
2035f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            case 'J':
2045f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                type = "long[]";
2055f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                break;
2065f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            case 'F':
2075f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                type = "float[]";
2085f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                break;
2095f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            case 'D':
2105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                type = "double[]";
2115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                break;
2125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            case 'I':
2135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                type = "int[]";
2145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                break;
2155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            case 'S':
2165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                type = "short[]";
2175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                break;
2185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            case 'V':
2195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                type = "void[]";
2205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                break;
2215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            case 'Z':
2225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                type = "boolean[]";
2235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                break;
2245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            case 's':
2255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                type = "java.Lang.String[]";
2265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                break;
2275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            case 'L':
2285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                type = signature
2295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                        .substring(2, signature.length() - 1 /*
2305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                                                                 * skip ending
2315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                                                                 * ';'
2325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                                                                 */)
2335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                        .replaceAll("/", ".")
2345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                        + "[]"; // skip ending ';'
2355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                break;
2365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            }
2375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            break;
2385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.OBJECT_TAG:
2395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            type = signature
2405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    .substring(1, signature.length() - 1 /* skip ending ';' */)
2415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    .replaceAll("/", "."); // skip ending ';'
2425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            break;
2435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.BOOLEAN_TAG:
2445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            type = "boolean";
2455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            break;
2465f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.BYTE_TAG:
2475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            type = "byte";
2485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            break;
2495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.CHAR_TAG:
2505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            type = "char";
2515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            break;
2525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.DOUBLE_TAG:
2535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            type = "double";
2545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            break;
2555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.FLOAT_TAG:
2565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            type = "float";
2575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            break;
2585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.INT_TAG:
2595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            type = "int";
2605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            break;
2615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.LONG_TAG:
2625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            type = "long";
2635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            break;
2645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.SHORT_TAG:
2655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            type = "short";
2665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            break;
2675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        case JDWPConstants.Tag.STRING_TAG:
2685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            type = "string";
2695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            break;
2705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        default:
2715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            break;
2725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
2735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
2745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return type;
2755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
2765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
2775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
2785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Compares two Field objects.
2795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
2805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @see java.lang.Object#equals(java.lang.Object)
2815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return boolean
2825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
2835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public boolean equals(Object obj) {
2845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        if (!(obj instanceof Field)) {
2855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            return false;
2865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
2875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
2885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        if (this.getClass() != obj.getClass()) {
2895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            return false;
2905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
2915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
2925f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        Field field = (Field) obj;
2935f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return this.id == field.id && this.classID == field.classID
2945f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                && this.name.equals(field.name)
2955f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                && this.signature.equals(field.signature)
2965f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                && this.modBits == field.modBits;
2975f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
2985f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
2995f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
3005f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Converts Field object to String.
3015f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
3025f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @see java.lang.Object#toString()
3035f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return String
3045f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
3055f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public String toString() {
3065f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        String str = "Field: id=" + id + ", classID=" + classID + ", name='"
3075f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                + name + "', signature='" + signature + "', modBits=";
3085f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        String access = "";
3095f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        if ((this.modBits & JDWPConstants.FieldAccess.ACC_PRIVATE) == JDWPConstants.FieldAccess.ACC_PRIVATE) {
3105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            access += JDWPConstants.FieldAccess
3115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    .getName(JDWPConstants.FieldAccess.ACC_PRIVATE)
3125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    + " ";
3135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        } else if ((this.modBits & JDWPConstants.FieldAccess.ACC_PROTECTED) == JDWPConstants.FieldAccess.ACC_PROTECTED) {
3145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            access += JDWPConstants.FieldAccess
3155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    .getName(JDWPConstants.FieldAccess.ACC_PROTECTED)
3165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    + " ";
3175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        } else if ((this.modBits & JDWPConstants.FieldAccess.ACC_PUBLIC) == JDWPConstants.FieldAccess.ACC_PUBLIC) {
3185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            access += JDWPConstants.FieldAccess
3195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    .getName(JDWPConstants.FieldAccess.ACC_PUBLIC)
3205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    + " ";
3215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
3225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        if ((this.modBits & JDWPConstants.FieldAccess.ACC_FINAL) == JDWPConstants.FieldAccess.ACC_FINAL) {
3235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            access += JDWPConstants.FieldAccess
3245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    .getName(JDWPConstants.FieldAccess.ACC_FINAL)
3255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    + " ";
3265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
3275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        if ((this.modBits & JDWPConstants.FieldAccess.ACC_STATIC) == JDWPConstants.FieldAccess.ACC_STATIC) {
3285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            access += JDWPConstants.FieldAccess
3295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    .getName(JDWPConstants.FieldAccess.ACC_STATIC)
3305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    + " ";
3315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
3325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        if ((this.modBits & JDWPConstants.FieldAccess.ACC_TRANSIENT) == JDWPConstants.FieldAccess.ACC_TRANSIENT) {
3335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            access += JDWPConstants.FieldAccess
3345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    .getName(JDWPConstants.FieldAccess.ACC_TRANSIENT)
3355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    + " ";
3365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
3375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        if ((this.modBits & JDWPConstants.FieldAccess.ACC_VOLATILE) == JDWPConstants.FieldAccess.ACC_VOLATILE) {
3385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            access += JDWPConstants.FieldAccess
3395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    .getName(JDWPConstants.FieldAccess.ACC_VOLATILE)
3405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    + " ";
3415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
3425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
3435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return str + access;
3445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
3455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
3465f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
3475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Tells whether this field is private.
3485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
3495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return boolean
3505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
3515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public boolean isPrivate() {
3525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return (modBits & JDWPConstants.FieldAccess.ACC_PRIVATE) == JDWPConstants.FieldAccess.ACC_PRIVATE;
3535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
3545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
3555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
3565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Tells whether this field is protected.
3575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
3585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return boolean
3595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
3605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public boolean isProtected() {
3615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return (modBits & JDWPConstants.FieldAccess.ACC_PROTECTED) == JDWPConstants.FieldAccess.ACC_PROTECTED;
3625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
3635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
3645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
3655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Tells whether this field is public.
3665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
3675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return boolean
3685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
3695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public boolean isPublic() {
3705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return (modBits & JDWPConstants.FieldAccess.ACC_PUBLIC) == JDWPConstants.FieldAccess.ACC_PUBLIC;
3715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
3725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
3735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
3745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Tells whether this field is final.
3755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
3765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return boolean
3775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
3785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public boolean isFinal() {
3795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return (modBits & JDWPConstants.FieldAccess.ACC_FINAL) == JDWPConstants.FieldAccess.ACC_FINAL;
3805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
3815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
3825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
3835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Tells whether this field is static.
3845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
3855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return boolean
3865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
3875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public boolean isStatic() {
3885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return (modBits & JDWPConstants.FieldAccess.ACC_STATIC) == JDWPConstants.FieldAccess.ACC_STATIC;
3895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
3905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes}
391