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