16e45e10b03bafdc125c46a4864ba802c24d6bc7duke/* 2f3d11f63158c54533cba0c17f4d5a4b02ebf0de6lana * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved. 36e45e10b03bafdc125c46a4864ba802c24d6bc7duke * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 46e45e10b03bafdc125c46a4864ba802c24d6bc7duke * 56e45e10b03bafdc125c46a4864ba802c24d6bc7duke * This code is free software; you can redistribute it and/or modify it 66e45e10b03bafdc125c46a4864ba802c24d6bc7duke * under the terms of the GNU General Public License version 2 only, as 72283b9d1d8f03fea8fa192c248b58726a66a6eafohair * published by the Free Software Foundation. Oracle designates this 86e45e10b03bafdc125c46a4864ba802c24d6bc7duke * particular file as subject to the "Classpath" exception as provided 92283b9d1d8f03fea8fa192c248b58726a66a6eafohair * by Oracle in the LICENSE file that accompanied this code. 106e45e10b03bafdc125c46a4864ba802c24d6bc7duke * 116e45e10b03bafdc125c46a4864ba802c24d6bc7duke * This code is distributed in the hope that it will be useful, but WITHOUT 126e45e10b03bafdc125c46a4864ba802c24d6bc7duke * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 136e45e10b03bafdc125c46a4864ba802c24d6bc7duke * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 146e45e10b03bafdc125c46a4864ba802c24d6bc7duke * version 2 for more details (a copy is included in the LICENSE file that 156e45e10b03bafdc125c46a4864ba802c24d6bc7duke * accompanied this code). 166e45e10b03bafdc125c46a4864ba802c24d6bc7duke * 176e45e10b03bafdc125c46a4864ba802c24d6bc7duke * You should have received a copy of the GNU General Public License version 186e45e10b03bafdc125c46a4864ba802c24d6bc7duke * 2 along with this work; if not, write to the Free Software Foundation, 196e45e10b03bafdc125c46a4864ba802c24d6bc7duke * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 206e45e10b03bafdc125c46a4864ba802c24d6bc7duke * 212283b9d1d8f03fea8fa192c248b58726a66a6eafohair * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 222283b9d1d8f03fea8fa192c248b58726a66a6eafohair * or visit www.oracle.com if you need additional information or have any 232283b9d1d8f03fea8fa192c248b58726a66a6eafohair * questions. 246e45e10b03bafdc125c46a4864ba802c24d6bc7duke */ 256e45e10b03bafdc125c46a4864ba802c24d6bc7duke 266e45e10b03bafdc125c46a4864ba802c24d6bc7dukepackage build.tools.jdwpgen; 276e45e10b03bafdc125c46a4864ba802c24d6bc7duke 286e45e10b03bafdc125c46a4864ba802c24d6bc7dukeimport java.util.*; 296e45e10b03bafdc125c46a4864ba802c24d6bc7duke 306e45e10b03bafdc125c46a4864ba802c24d6bc7dukeclass Context { 316e45e10b03bafdc125c46a4864ba802c24d6bc7duke 326e45e10b03bafdc125c46a4864ba802c24d6bc7duke static final int outer = 0; 336e45e10b03bafdc125c46a4864ba802c24d6bc7duke static final int readingReply = 1; 346e45e10b03bafdc125c46a4864ba802c24d6bc7duke static final int writingCommand = 2; 356e45e10b03bafdc125c46a4864ba802c24d6bc7duke 366e45e10b03bafdc125c46a4864ba802c24d6bc7duke final String whereJava; 376e45e10b03bafdc125c46a4864ba802c24d6bc7duke final String whereC; 386e45e10b03bafdc125c46a4864ba802c24d6bc7duke 396e45e10b03bafdc125c46a4864ba802c24d6bc7duke int state = outer; 406e45e10b03bafdc125c46a4864ba802c24d6bc7duke private boolean inEvent = false; 416e45e10b03bafdc125c46a4864ba802c24d6bc7duke 426e45e10b03bafdc125c46a4864ba802c24d6bc7duke Context() { 436e45e10b03bafdc125c46a4864ba802c24d6bc7duke whereJava = ""; 446e45e10b03bafdc125c46a4864ba802c24d6bc7duke whereC = ""; 456e45e10b03bafdc125c46a4864ba802c24d6bc7duke } 466e45e10b03bafdc125c46a4864ba802c24d6bc7duke 476e45e10b03bafdc125c46a4864ba802c24d6bc7duke private Context(String whereJava, String whereC) { 486e45e10b03bafdc125c46a4864ba802c24d6bc7duke this.whereJava = whereJava; 496e45e10b03bafdc125c46a4864ba802c24d6bc7duke this.whereC = whereC; 506e45e10b03bafdc125c46a4864ba802c24d6bc7duke } 516e45e10b03bafdc125c46a4864ba802c24d6bc7duke 526e45e10b03bafdc125c46a4864ba802c24d6bc7duke Context subcontext(String level) { 536e45e10b03bafdc125c46a4864ba802c24d6bc7duke Context ctx; 546e45e10b03bafdc125c46a4864ba802c24d6bc7duke if (whereC.length() == 0) { 556e45e10b03bafdc125c46a4864ba802c24d6bc7duke ctx = new Context(level, level); 566e45e10b03bafdc125c46a4864ba802c24d6bc7duke } else { 576e45e10b03bafdc125c46a4864ba802c24d6bc7duke ctx = new Context(whereJava + "." + level, whereC + "_" + level); 586e45e10b03bafdc125c46a4864ba802c24d6bc7duke } 596e45e10b03bafdc125c46a4864ba802c24d6bc7duke ctx.state = state; 606e45e10b03bafdc125c46a4864ba802c24d6bc7duke ctx.inEvent = inEvent; 616e45e10b03bafdc125c46a4864ba802c24d6bc7duke return ctx; 626e45e10b03bafdc125c46a4864ba802c24d6bc7duke } 636e45e10b03bafdc125c46a4864ba802c24d6bc7duke 646e45e10b03bafdc125c46a4864ba802c24d6bc7duke private Context cloneContext() { 656e45e10b03bafdc125c46a4864ba802c24d6bc7duke Context ctx = new Context(whereJava, whereC); 666e45e10b03bafdc125c46a4864ba802c24d6bc7duke ctx.state = state; 676e45e10b03bafdc125c46a4864ba802c24d6bc7duke ctx.inEvent = inEvent; 686e45e10b03bafdc125c46a4864ba802c24d6bc7duke return ctx; 696e45e10b03bafdc125c46a4864ba802c24d6bc7duke } 706e45e10b03bafdc125c46a4864ba802c24d6bc7duke 716e45e10b03bafdc125c46a4864ba802c24d6bc7duke Context replyReadingSubcontext() { 726e45e10b03bafdc125c46a4864ba802c24d6bc7duke Context ctx = cloneContext(); 736e45e10b03bafdc125c46a4864ba802c24d6bc7duke ctx.state = readingReply; 746e45e10b03bafdc125c46a4864ba802c24d6bc7duke return ctx; 756e45e10b03bafdc125c46a4864ba802c24d6bc7duke } 766e45e10b03bafdc125c46a4864ba802c24d6bc7duke 776e45e10b03bafdc125c46a4864ba802c24d6bc7duke Context commandWritingSubcontext() { 786e45e10b03bafdc125c46a4864ba802c24d6bc7duke Context ctx = cloneContext(); 796e45e10b03bafdc125c46a4864ba802c24d6bc7duke ctx.state = writingCommand; 806e45e10b03bafdc125c46a4864ba802c24d6bc7duke return ctx; 816e45e10b03bafdc125c46a4864ba802c24d6bc7duke } 826e45e10b03bafdc125c46a4864ba802c24d6bc7duke 836e45e10b03bafdc125c46a4864ba802c24d6bc7duke Context inEventSubcontext() { 846e45e10b03bafdc125c46a4864ba802c24d6bc7duke Context ctx = cloneContext(); 856e45e10b03bafdc125c46a4864ba802c24d6bc7duke ctx.inEvent = true; 866e45e10b03bafdc125c46a4864ba802c24d6bc7duke return ctx; 876e45e10b03bafdc125c46a4864ba802c24d6bc7duke } 886e45e10b03bafdc125c46a4864ba802c24d6bc7duke 896e45e10b03bafdc125c46a4864ba802c24d6bc7duke boolean inEvent() { 906e45e10b03bafdc125c46a4864ba802c24d6bc7duke return inEvent; 916e45e10b03bafdc125c46a4864ba802c24d6bc7duke } 926e45e10b03bafdc125c46a4864ba802c24d6bc7duke 936e45e10b03bafdc125c46a4864ba802c24d6bc7duke boolean isWritingCommand() { 946e45e10b03bafdc125c46a4864ba802c24d6bc7duke return state == writingCommand; 956e45e10b03bafdc125c46a4864ba802c24d6bc7duke } 966e45e10b03bafdc125c46a4864ba802c24d6bc7duke 976e45e10b03bafdc125c46a4864ba802c24d6bc7duke boolean isReadingReply() { 986e45e10b03bafdc125c46a4864ba802c24d6bc7duke return state == readingReply; 996e45e10b03bafdc125c46a4864ba802c24d6bc7duke } 1006e45e10b03bafdc125c46a4864ba802c24d6bc7duke} 101