Home | History | Annotate | Download | only in jdwpgen
      1 /*
      2  * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
      3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
      4  *
      5  * This code is free software; you can redistribute it and/or modify it
      6  * under the terms of the GNU General Public License version 2 only, as
      7  * published by the Free Software Foundation.  Oracle designates this
      8  * particular file as subject to the "Classpath" exception as provided
      9  * by Oracle in the LICENSE file that accompanied this code.
     10  *
     11  * This code is distributed in the hope that it will be useful, but WITHOUT
     12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
     13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
     14  * version 2 for more details (a copy is included in the LICENSE file that
     15  * accompanied this code).
     16  *
     17  * You should have received a copy of the GNU General Public License version
     18  * 2 along with this work; if not, write to the Free Software Foundation,
     19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
     20  *
     21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
     22  * or visit www.oracle.com if you need additional information or have any
     23  * questions.
     24  */
     25 
     26 package build.tools.jdwpgen;
     27 
     28 import java.util.*;
     29 
     30 class Context {
     31 
     32     static final int outer = 0;
     33     static final int readingReply = 1;
     34     static final int writingCommand = 2;
     35 
     36     final String whereJava;
     37     final String whereC;
     38 
     39     int state = outer;
     40     private boolean inEvent = false;
     41 
     42     Context() {
     43         whereJava = "";
     44         whereC = "";
     45     }
     46 
     47     private Context(String whereJava, String whereC) {
     48         this.whereJava = whereJava;
     49         this.whereC = whereC;
     50     }
     51 
     52     Context subcontext(String level) {
     53         Context ctx;
     54         if (whereC.length() == 0) {
     55             ctx = new Context(level, level);
     56         } else {
     57             ctx = new Context(whereJava + "." + level, whereC + "_" + level);
     58         }
     59         ctx.state = state;
     60         ctx.inEvent = inEvent;
     61         return ctx;
     62     }
     63 
     64     private Context cloneContext() {
     65         Context ctx = new Context(whereJava, whereC);
     66         ctx.state = state;
     67         ctx.inEvent = inEvent;
     68         return ctx;
     69     }
     70 
     71     Context replyReadingSubcontext() {
     72         Context ctx = cloneContext();
     73         ctx.state = readingReply;
     74         return ctx;
     75     }
     76 
     77     Context commandWritingSubcontext() {
     78         Context ctx = cloneContext();
     79         ctx.state = writingCommand;
     80         return ctx;
     81     }
     82 
     83     Context inEventSubcontext() {
     84         Context ctx = cloneContext();
     85         ctx.inEvent = true;
     86         return ctx;
     87     }
     88 
     89     boolean inEvent() {
     90         return inEvent;
     91     }
     92 
     93     boolean isWritingCommand() {
     94         return state == writingCommand;
     95     }
     96 
     97     boolean isReadingReply() {
     98         return state == readingReply;
     99     }
    100 }
    101