Home | History | Annotate | Download | only in jdwp
      1 /*
      2  * Licensed to the Apache Software Foundation (ASF) under one or more
      3  * contributor license agreements.  See the NOTICE file distributed with
      4  * this work for additional information regarding copyright ownership.
      5  * The ASF licenses this file to You under the Apache License, Version 2.0
      6  * (the "License"); you may not use this file except in compliance with
      7  * the License.  You may obtain a copy of the License at
      8  *
      9  *     http://www.apache.org/licenses/LICENSE-2.0
     10  *
     11  *  Unless required by applicable law or agreed to in writing, software
     12  *  distributed under the License is distributed on an "AS IS" BASIS,
     13  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     14  *
     15  *  See the License for the specific language governing permissions and
     16  *  limitations under the License.
     17  */
     18 
     19 /**
     20  * @author Aleksey V. Yantsen
     21  */
     22 
     23 /**
     24  * Created on 10.25.2004
     25  */
     26 package org.apache.harmony.jpda.tests.framework.jdwp;
     27 
     28 /**
     29  * This class defines various constants from JDWP specifications.
     30  * Each class has getName function to convert a constant value
     31  * to string equivalent.
     32  */
     33 public class JDWPConstants {
     34 
     35     /**
     36      * JDWP ThreadStatus constants
     37      */
     38     public static class ThreadStatus {
     39 
     40         public static final byte ZOMBIE = 0;
     41 
     42         public static final byte RUNNING = 1;
     43 
     44         public static final byte SLEEPING = 2;
     45 
     46         public static final byte MONITOR = 3;
     47 
     48         public static final byte WAIT = 4;
     49 
     50         /**
     51          * Gets name for corresponding constant value.
     52          *
     53          * @param status
     54          *            a constant from ones declared in this class
     55          * @return String
     56          */
     57         public static String getName(int status) {
     58             switch (status) {
     59             case ZOMBIE:
     60                 return "ZOMBIE";
     61             case RUNNING:
     62                 return "RUNNING";
     63             case SLEEPING:
     64                 return "SLEEPING";
     65             case MONITOR:
     66                 return "MONITOR";
     67             case WAIT:
     68                 return "WAIT";
     69             default:
     70                 return "<unknown>";
     71             }
     72         }
     73     }
     74 
     75     /**
     76      * JDWP SuspendStatus constants
     77      */
     78     public static class SuspendStatus {
     79 
     80         public static final byte SUSPEND_STATUS_SUSPENDED = 1;
     81 
     82         /**
     83          * Gets name for corresponding constant value.
     84          *
     85          * @param status
     86          *            a constant from ones declared in this class
     87          * @return String
     88          */
     89         public static String getName(int status) {
     90             if (status == SUSPEND_STATUS_SUSPENDED)
     91                 return "SUSPENDED";
     92             return "NONE";
     93         }
     94     }
     95 
     96     /**
     97      * JDWP ClassStatus constants
     98      */
     99     public static class ClassStatus {
    100 
    101         public static final byte VERIFIED = 1;
    102 
    103         public static final byte PREPARED = 2;
    104 
    105         public static final byte INITIALIZED = 4;
    106 
    107         public static final byte ERROR = 8;
    108 
    109         // it looks like JDWP spec becomes out of date
    110         // see JVMTI specification for GetClassStatus:
    111         //
    112         public static final byte ARRAY = 16;
    113 
    114         public static final byte PRIMITIVE = 32;
    115 
    116         /**
    117          * Gets name for corresponding constant value.
    118          *
    119          * @param status
    120          *            a constant from ones declared in this class
    121          * @return String
    122          */
    123         public static String getName(int status) {
    124 
    125             String returnValue = "";
    126             if ((status & VERIFIED) == VERIFIED)
    127                 returnValue += "|VERIFIED";
    128             if ((status & PREPARED) == PREPARED)
    129                 returnValue += "|PREPARED";
    130             if ((status & INITIALIZED) == INITIALIZED)
    131                 returnValue += "|INITIALIZED";
    132             if ((status & ERROR) == ERROR)
    133                 returnValue += "|ERROR";
    134             if ((status & ARRAY) == ARRAY)
    135                 returnValue += "|ARRAY";
    136             if ((status & PRIMITIVE) == PRIMITIVE)
    137                 returnValue += "|PRIMITIVE";
    138 
    139             if (returnValue.equals("")) {
    140                 returnValue = "NONE";
    141             } else {
    142                 returnValue = returnValue.substring(1);
    143             }
    144 
    145             return returnValue;
    146         }
    147     }
    148 
    149     /**
    150      * JDWP TypeTag constants
    151      */
    152     public static class TypeTag {
    153 
    154         public static final byte CLASS = 1;
    155 
    156         public static final byte INTERFACE = 2;
    157 
    158         public static final byte ARRAY = 3;
    159 
    160         /**
    161          * Gets name for corresponding constant value.
    162          *
    163          * @param refTypeTag
    164          *            a constant from ones declared in this class
    165          * @return String
    166          */
    167         public static String getName(byte refTypeTag) {
    168             switch (refTypeTag) {
    169             case CLASS:
    170                 return "CLASS";
    171             case INTERFACE:
    172                 return "INTERFACE";
    173             case ARRAY:
    174                 return "ARRAY";
    175             default:
    176                 return "<unknown>";
    177             }
    178         }
    179     }
    180 
    181     /**
    182      * JDWP Tag constants
    183      */
    184     public static class Tag {
    185 
    186         public static final byte ARRAY_TAG = 91;
    187 
    188         public static final byte BYTE_TAG = 66;
    189 
    190         public static final byte CHAR_TAG = 67;
    191 
    192         public static final byte OBJECT_TAG = 76;
    193 
    194         public static final byte FLOAT_TAG = 70;
    195 
    196         public static final byte DOUBLE_TAG = 68;
    197 
    198         public static final byte INT_TAG = 73;
    199 
    200         public static final byte LONG_TAG = 74;
    201 
    202         public static final byte SHORT_TAG = 83;
    203 
    204         public static final byte VOID_TAG = 86;
    205 
    206         public static final byte BOOLEAN_TAG = 90;
    207 
    208         public static final byte STRING_TAG = 115;
    209 
    210         public static final byte THREAD_TAG = 116;
    211 
    212         public static final byte THREAD_GROUP_TAG = 103;
    213 
    214         public static final byte CLASS_LOADER_TAG = 108;
    215 
    216         public static final byte CLASS_OBJECT_TAG = 99;
    217 
    218         public static final byte NO_TAG = 0;
    219 
    220         /**
    221          * Gets name for corresponding constant value.
    222          *
    223          * @param tag
    224          *            a constant from ones declared in this class
    225          * @return String
    226          */
    227         public static String getName(byte tag) {
    228             switch (tag) {
    229             case ARRAY_TAG:
    230                 return "ARRAY_TAG";
    231             case BYTE_TAG:
    232                 return "BYTE_TAG";
    233             case CHAR_TAG:
    234                 return "CHAR_TAG";
    235             case OBJECT_TAG:
    236                 return "OBJECT_TAG";
    237             case FLOAT_TAG:
    238                 return "FLOAT_TAG";
    239             case DOUBLE_TAG:
    240                 return "DOUBLE_TAG";
    241             case INT_TAG:
    242                 return "INT_TAG";
    243             case LONG_TAG:
    244                 return "LONG_TAG";
    245             case SHORT_TAG:
    246                 return "SHORT_TAG";
    247             case VOID_TAG:
    248                 return "VOID_TAG";
    249             case BOOLEAN_TAG:
    250                 return "BOOLEAN_TAG";
    251             case STRING_TAG:
    252                 return "STRING_TAG";
    253             case THREAD_TAG:
    254                 return "THREAD_TAG";
    255             case THREAD_GROUP_TAG:
    256                 return "THREAD_GROUP_TAG";
    257             case CLASS_LOADER_TAG:
    258                 return "CLASS_LOADER_TAG";
    259             case CLASS_OBJECT_TAG:
    260                 return "CLASS_OBJECT_TAG";
    261             case NO_TAG:
    262                 return "NO_TAG";
    263             default:
    264                 return "<unknown>";
    265             }
    266         }
    267     }
    268 
    269     /**
    270      * JDWP EventKind constants
    271      */
    272     public static class EventKind {
    273 
    274         public static final byte SINGLE_STEP = 1;
    275 
    276         public static final byte BREAKPOINT = 2;
    277 
    278         public static final byte FRAME_POP = 3;
    279 
    280         public static final byte EXCEPTION = 4;
    281 
    282         public static final byte USER_DEFINED = 5;
    283 
    284         public static final byte THREAD_START = 6;
    285 
    286         public static final byte THREAD_END = 7;
    287 
    288         public static final byte THREAD_DEATH = THREAD_END;
    289 
    290         public static final byte CLASS_PREPARE = 8;
    291 
    292         public static final byte CLASS_UNLOAD = 9;
    293 
    294         public static final byte CLASS_LOAD = 10;
    295 
    296         public static final byte FIELD_ACCESS = 20;
    297 
    298         public static final byte FIELD_MODIFICATION = 21;
    299 
    300         public static final byte EXCEPTION_CATCH = 30;
    301 
    302         public static final byte METHOD_ENTRY = 40;
    303 
    304         public static final byte METHOD_EXIT = 41;
    305 
    306         // METHOD_EXIT_WITH_RETURN_VALUE
    307         // MONITOR_CONTENDED_ENTER,MONITOR_CONTENDED_ENTER
    308         // MONITOR_WAIT, MONITOR_WAITED are new events for Java 6
    309         public static final byte METHOD_EXIT_WITH_RETURN_VALUE = 42;
    310 
    311         public static final byte MONITOR_CONTENDED_ENTER = 43;
    312 
    313         public static final byte MONITOR_CONTENDED_ENTERED = 44;
    314 
    315         public static final byte MONITOR_WAIT = 45;
    316 
    317         public static final byte MONITOR_WAITED = 46;
    318 
    319         public static final byte VM_INIT = 90;
    320 
    321         public static final byte VM_START = VM_INIT;
    322 
    323         public static final byte VM_DEATH = 99;
    324 
    325         public static final byte VM_DISCONNECTED = 100;
    326 
    327         /**
    328          * Gets name for corresponding constant value.
    329          *
    330          * @param eventKind
    331          *            a constant from ones declared in this class
    332          * @return String
    333          */
    334         public static String getName(byte eventKind) {
    335             switch (eventKind) {
    336             case SINGLE_STEP:
    337                 return "SINGLE_STEP";
    338             case BREAKPOINT:
    339                 return "BREAKPOINT";
    340             case FRAME_POP:
    341                 return "FRAME_POP";
    342             case EXCEPTION:
    343                 return "EXCEPTION";
    344             case USER_DEFINED:
    345                 return "USER_DEFINED";
    346             case THREAD_START:
    347                 return "THREAD_START";
    348             case THREAD_END:
    349                 return "THREAD_END";
    350             case CLASS_PREPARE:
    351                 return "CLASS_PREPARE";
    352             case CLASS_UNLOAD:
    353                 return "CLASS_UNLOAD";
    354             case CLASS_LOAD:
    355                 return "CLASS_LOAD";
    356             case FIELD_ACCESS:
    357                 return "FIELD_ACCESS";
    358             case FIELD_MODIFICATION:
    359                 return "FIELD_MODIFICATION";
    360             case EXCEPTION_CATCH:
    361                 return "EXCEPTION_CATCH";
    362             case METHOD_ENTRY:
    363                 return "METHOD_ENTRY";
    364             case METHOD_EXIT:
    365                 return "METHOD_EXIT";
    366             case METHOD_EXIT_WITH_RETURN_VALUE:
    367                 return "METHOD_EXIT_WITH_RETURN_VALUE";
    368             case MONITOR_CONTENDED_ENTER:
    369                 return "MONITOR_CONTENDED_ENTER";
    370             case MONITOR_CONTENDED_ENTERED:
    371                 return "MONITOR_CONTENDED_ENTERED";
    372             case MONITOR_WAIT:
    373                 return "MONITOR_WAIT";
    374             case MONITOR_WAITED:
    375                 return "MONITOR_WAITED";
    376             case VM_INIT:
    377                 return "VM_INIT";
    378             case VM_DEATH:
    379                 return "VM_DEATH";
    380             case VM_DISCONNECTED:
    381                 return "VM_DISCONNECTED";
    382             default:
    383                 return "<unknown>";
    384             }
    385         }
    386     }
    387 
    388     /**
    389      * JDWP Error constants
    390      */
    391     public static class Error {
    392 
    393         public static final int NONE = 0;
    394 
    395         public static final int INVALID_THREAD = 10;
    396 
    397         public static final int INVALID_THREAD_GROUP = 11;
    398 
    399         public static final int INVALID_PRIORITY = 12;
    400 
    401         public static final int THREAD_NOT_SUSPENDED = 13;
    402 
    403         public static final int THREAD_SUSPENDED = 14;
    404 
    405         public static final int THREAD_NOT_ALIVE = 15;
    406 
    407         public static final int INVALID_OBJECT = 20;
    408 
    409         public static final int INVALID_CLASS = 21;
    410 
    411         public static final int CLASS_NOT_PREPARED = 22;
    412 
    413         public static final int INVALID_METHODID = 23;
    414 
    415         public static final int INVALID_LOCATION = 24;
    416 
    417         public static final int INVALID_FIELDID = 25;
    418 
    419         public static final int INVALID_FRAMEID = 30;
    420 
    421         public static final int NO_MORE_FRAMES = 31;
    422 
    423         public static final int OPAQUE_FRAME = 32;
    424 
    425         public static final int NOT_CURRENT_FRAME = 33;
    426 
    427         public static final int TYPE_MISMATCH = 34;
    428 
    429         public static final int INVALID_SLOT = 35;
    430 
    431         public static final int DUPLICATE = 40;
    432 
    433         public static final int NOT_FOUND = 41;
    434 
    435         public static final int INVALID_MONITOR = 50;
    436 
    437         public static final int NOT_MONITOR_OWNER = 51;
    438 
    439         public static final int INTERRUPT = 52;
    440 
    441         public static final int INVALID_CLASS_FORMAT = 60;
    442 
    443         public static final int CIRCULAR_CLASS_DEFENITION = 61;
    444 
    445         public static final int FAILS_VERIFICATION = 62;
    446 
    447         public static final int ADD_METHOD_NOT_IMPLEMENTED = 63;
    448 
    449         public static final int SCHEMA_CHANGE_NOT_IMPLEMENTED = 64;
    450 
    451         public static final int INVALID_TYPESTATE = 65;
    452 
    453         public static final int HIERARCHY_CHANGE_NOT_IMPLEMENTED = 66;
    454 
    455         public static final int DELETE_METHOD_NOT_IMPLEMENTED = 67;
    456 
    457         public static final int UNSUPPORTED_VERSION = 68;
    458 
    459         public static final int NAMES_DONT_MATCH = 69;
    460 
    461         public static final int CLASS_MODIFIERS_CHANGE_NOT_IMPLEMENTED = 70;
    462 
    463         public static final int METHOD_MODIFIERS_CHANGE_NOT_IMPLEMENTED = 71;
    464 
    465         public static final int NOT_IMPLEMENTED = 99;
    466 
    467         public static final int NULL_POINTER = 100;
    468 
    469         public static final int ABSENT_INFORMATION = 101;
    470 
    471         public static final int INVALID_EVENT_TYPE = 102;
    472 
    473         public static final int ILLEGAL_ARGUMENT = 103;
    474 
    475         public static final int OUT_OF_MEMORY = 110;
    476 
    477         public static final int ACCESS_DENIED = 111;
    478 
    479         public static final int VM_DEAD = 112;
    480 
    481         public static final int INTERNAL = 113;
    482 
    483         public static final int UNATTACHED_THREAD = 115;
    484 
    485         public static final int INVALID_TAG = 500;
    486 
    487         public static final int ALREADY_INVOKING = 502;
    488 
    489         public static final int INVALID_INDEX = 503;
    490 
    491         public static final int INVALID_LENGTH = 504;
    492 
    493         public static final int INVALID_STRING = 506;
    494 
    495         public static final int INVALID_CLASS_LOADER = 507;
    496 
    497         public static final int INVALID_ARRAY = 508;
    498 
    499         public static final int TRANSPORT_LOAD = 509;
    500 
    501         public static final int TRANSPORT_INIT = 510;
    502 
    503         public static final int NATIVE_METHOD = 511;
    504 
    505         public static final int INVALID_COUNT = 512;
    506 
    507         /**
    508          * Gets name for corresponding constant value.
    509          *
    510          * @param errorCode
    511          *            a constant from ones declared in this class
    512          * @return String
    513          */
    514         public static String getName(int errorCode) {
    515             switch (errorCode) {
    516             case NONE:
    517                 return "NONE";
    518             case INVALID_THREAD:
    519                 return "INVALID_THREAD";
    520             case INVALID_THREAD_GROUP:
    521                 return "INVALID_THREAD_GROUP";
    522             case INVALID_PRIORITY:
    523                 return "INVALID_PRIORITY";
    524             case THREAD_NOT_SUSPENDED:
    525                 return "THREAD_NOT_SUSPENDED";
    526             case THREAD_SUSPENDED:
    527                 return "THREAD_SUSPENDED";
    528             case THREAD_NOT_ALIVE:
    529                 return "THREAD_NOT_ALIVE";
    530             case INVALID_OBJECT:
    531                 return "INVALID_OBJECT";
    532             case INVALID_CLASS:
    533                 return "INVALID_CLASS";
    534             case CLASS_NOT_PREPARED:
    535                 return "CLASS_NOT_PREPARED";
    536             case INVALID_METHODID:
    537                 return "INVALID_METHODID";
    538             case INVALID_LOCATION:
    539                 return "INVALID_LOCATION";
    540             case INVALID_FIELDID:
    541                 return "INVALID_FIELDID";
    542             case INVALID_FRAMEID:
    543                 return "INVALID_FRAMEID";
    544             case NO_MORE_FRAMES:
    545                 return "NO_MORE_FRAMES";
    546             case OPAQUE_FRAME:
    547                 return "OPAQUE_FRAME";
    548             case NOT_CURRENT_FRAME:
    549                 return "NOT_CURRENT_FRAME";
    550             case TYPE_MISMATCH:
    551                 return "TYPE_MISMATCH";
    552             case INVALID_SLOT:
    553                 return "INVALID_SLOT";
    554             case DUPLICATE:
    555                 return "DUPLICATE";
    556             case NOT_FOUND:
    557                 return "NOT_FOUND";
    558             case INVALID_MONITOR:
    559                 return "INVALID_MONITOR";
    560             case NOT_MONITOR_OWNER:
    561                 return "NOT_MONITOR_OWNER";
    562             case INTERRUPT:
    563                 return "INTERRUPT";
    564             case INVALID_CLASS_FORMAT:
    565                 return "INVALID_CLASS_FORMAT";
    566             case CIRCULAR_CLASS_DEFENITION:
    567                 return "CIRCULAR_CLASS_DEFENITION";
    568             case FAILS_VERIFICATION:
    569                 return "FAILS_VERIFICATION";
    570             case ADD_METHOD_NOT_IMPLEMENTED:
    571                 return "ADD_METHOD_NOT_IMPLEMENTED";
    572             case SCHEMA_CHANGE_NOT_IMPLEMENTED:
    573                 return "SCHEMA_CHANGE_NOT_IMPLEMENTED";
    574             case INVALID_TYPESTATE:
    575                 return "INVALID_TYPESTATE";
    576             case HIERARCHY_CHANGE_NOT_IMPLEMENTED:
    577                 return "HIERARCHY_CHANGE_NOT_IMPLEMENTED";
    578             case DELETE_METHOD_NOT_IMPLEMENTED:
    579                 return "DELETE_METHOD_NOT_IMPLEMENTED";
    580             case UNSUPPORTED_VERSION:
    581                 return "UNSUPPORTED_VERSION";
    582             case NAMES_DONT_MATCH:
    583                 return "NAMES_DONT_MATCH";
    584             case CLASS_MODIFIERS_CHANGE_NOT_IMPLEMENTED:
    585                 return "CLASS_MODIFIERS_CHANGE_NOT_IMPLEMENTED";
    586             case METHOD_MODIFIERS_CHANGE_NOT_IMPLEMENTED:
    587                 return "METHOD_MODIFIERS_CHANGE_NOT_IMPLEMENTED";
    588             case NOT_IMPLEMENTED:
    589                 return "NOT_IMPLEMENTED";
    590             case NULL_POINTER:
    591                 return "NULL_POINTER";
    592             case ABSENT_INFORMATION:
    593                 return "ABSENT_INFORMATION";
    594             case INVALID_EVENT_TYPE:
    595                 return "INVALID_EVENT_TYPE";
    596             case ILLEGAL_ARGUMENT:
    597                 return "ILLEGAL_ARGUMENT";
    598             case OUT_OF_MEMORY:
    599                 return "OUT_OF_MEMORY";
    600             case ACCESS_DENIED:
    601                 return "ACCESS_DENIED";
    602             case VM_DEAD:
    603                 return "VM_DEAD";
    604             case INTERNAL:
    605                 return "INTERNAL";
    606             case UNATTACHED_THREAD:
    607                 return "UNATTACHED_THREAD";
    608             case INVALID_TAG:
    609                 return "INVALID_TAG";
    610             case ALREADY_INVOKING:
    611                 return "ALREADY_INVOKING";
    612             case INVALID_INDEX:
    613                 return "INVALID_INDEX";
    614             case INVALID_LENGTH:
    615                 return "INVALID_LENGTH";
    616             case INVALID_STRING:
    617                 return "INVALID_STRING";
    618             case INVALID_CLASS_LOADER:
    619                 return "INVALID_CLASS_LOADER";
    620             case INVALID_ARRAY:
    621                 return "INVALID_ARRAY";
    622             case TRANSPORT_LOAD:
    623                 return "TRANSPORT_LOAD";
    624             case TRANSPORT_INIT:
    625                 return "TRANSPORT_INIT";
    626             case NATIVE_METHOD:
    627                 return "NATIVE_METHOD";
    628             case INVALID_COUNT:
    629                 return "INVALID_COUNT";
    630             default:
    631                 return "<unknown>";
    632             }
    633         }
    634     }
    635 
    636     /**
    637      * JDWP StepDepth constants
    638      */
    639     public static class StepDepth {
    640 
    641         public static final byte INTO = 0;
    642 
    643         public static final byte OVER = 1;
    644 
    645         public static final byte OUT = 2;
    646 
    647         /**
    648          * Gets name for corresponding constant value.
    649          *
    650          * @param code
    651          *            a constant from ones declared in this class
    652          * @return String
    653          */
    654         public static String getName(int code) {
    655             switch (code) {
    656             case INTO:
    657                 return "INTO";
    658             case OVER:
    659                 return "OVER";
    660             case OUT:
    661                 return "OUT";
    662             default:
    663                 return "<unknown>";
    664             }
    665         }
    666     }
    667 
    668     /**
    669      * JDWP StepSize constants
    670      */
    671     public static class StepSize {
    672 
    673         public static final byte MIN = 0;
    674 
    675         public static final byte LINE = 1;
    676 
    677         /**
    678          * Gets name for corresponding constant value.
    679          *
    680          * @param code
    681          *            a constant from ones declared in this class
    682          * @return String
    683          */
    684         public static String getName(int code) {
    685             switch (code) {
    686             case MIN:
    687                 return "MIN";
    688             case LINE:
    689                 return "LINE";
    690             default:
    691                 return "<unknown>";
    692             }
    693         }
    694     }
    695 
    696     /**
    697      * JDWP SuspendPolicy constants
    698      */
    699     public static class SuspendPolicy {
    700 
    701         public static final byte NONE = 0;
    702 
    703         public static final byte EVENT_THREAD = 1;
    704 
    705         public static final byte ALL = 2;
    706 
    707         /**
    708          * Gets name for corresponding constant value.
    709          *
    710          * @param code
    711          *            a constant from ones declared in this class
    712          * @return String
    713          */
    714         public static String getName(int code) {
    715             switch (code) {
    716             case NONE:
    717                 return "NONE";
    718             case EVENT_THREAD:
    719                 return "EVENT_THREAD";
    720             case ALL:
    721                 return "ALL";
    722             default:
    723                 return "<unknown>";
    724             }
    725         }
    726     }
    727 
    728     /**
    729      * JDWP InvokeOptions constants
    730      */
    731     public static class InvokeOptions {
    732         public static final byte INVOKE_SINGLE_THREADED = 0x01;
    733 
    734         public static final byte INVOKE_NONVIRTUAL = 0x02;
    735 
    736         /**
    737          * Gets name for corresponding constant value.
    738          *
    739          * @param code
    740          *            a constant from ones declared in this class
    741          * @return String
    742          */
    743         public static String getName(int code) {
    744             String buf = "NONE";
    745             if ((code & INVOKE_SINGLE_THREADED) != 0) {
    746                 buf += "|INVOKE_SINGLE_THREADED";
    747             }
    748             if ((code & INVOKE_NONVIRTUAL) != 0) {
    749                 buf += "|INVOKE_NONVIRTUAL";
    750             }
    751             if ((code & ~(INVOKE_SINGLE_THREADED | INVOKE_NONVIRTUAL)) != 0) {
    752                 buf += "|<unknown>";
    753             }
    754             return buf;
    755         }
    756     }
    757 
    758     /**
    759      * Field access flags
    760      */
    761     public static class FieldAccess {
    762 
    763         /**
    764          * Is public; may be accessed from outside its package; Any field.
    765          */
    766         public static final int ACC_PUBLIC = 0x0001;
    767 
    768         /**
    769          * Is private; usable only within the defining class; Class field.
    770          */
    771         public static final int ACC_PRIVATE = 0x0002;
    772 
    773         /**
    774          * Is protected; may be accessed within subclasses; Class field.
    775          */
    776         public static final int ACC_PROTECTED = 0x0004;
    777 
    778         /**
    779          * Is static; Any field.
    780          */
    781         public static final int ACC_STATIC = 0x0008;
    782 
    783         /**
    784          * Is final; no further overriding or assignment after initialization;
    785          * Any field.
    786          */
    787         public static final int ACC_FINAL = 0x0010;
    788 
    789         /**
    790          * Is volatile; cannot be cached; Class field.
    791          */
    792         public static final int ACC_VOLATILE = 0x0040;
    793 
    794         /**
    795          * Is transient; not written or read by a persistent object manager;
    796          * Class field.
    797          */
    798         public static final int ACC_TRANSIENT = 0x0080;
    799 
    800         /**
    801          * Gets name for corresponding constant value.
    802          *
    803          * @param code
    804          *            a constant from ones declared in this class
    805          * @return String
    806          */
    807         public static String getName(int code) {
    808             switch (code) {
    809             case ACC_PUBLIC:
    810                 return "ACC_PUBLIC";
    811             case ACC_PRIVATE:
    812                 return "ACC_PRIVATE";
    813             case ACC_PROTECTED:
    814                 return "ACC_PROTECTED";
    815             case ACC_STATIC:
    816                 return "ACC_STATIC";
    817             case ACC_FINAL:
    818                 return "ACC_FINAL";
    819             case ACC_VOLATILE:
    820                 return "ACC_VOLATILE";
    821             case ACC_TRANSIENT:
    822                 return "ACC_TRANSIENT";
    823             default:
    824                 return "<unknown>";
    825             }
    826         }
    827     }
    828 }
    829