001    // Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
002    // for details. All rights reserved. Use of this source code is governed by a
003    // BSD-style license that can be found in the LICENSE file.
004    
005    package com.google.dart.compiler.backend.js.ast;
006    
007    import org.jetbrains.annotations.Nullable;
008    
009    import java.util.List;
010    
011    /**
012     * The context in which a JsNode visitation occurs. This represents the set of
013     * possible operations a JsVisitor subclass can perform on the currently visited
014     * node.
015     */
016    public abstract class JsContext<T extends JsNode> {
017    
018      public <R extends T> void addPrevious(R node) {
019        throw new UnsupportedOperationException();
020      }
021    
022      public <R extends T> void addPrevious(List<R> nodes) {
023        for (R node : nodes) {
024          addPrevious(node);
025        }
026      }
027    
028      public <R extends T> void addNext(R node) {
029        throw new UnsupportedOperationException();
030      }
031    
032      public abstract void removeMe();
033    
034      public abstract <R extends T> void replaceMe(R node);
035    
036      @Nullable
037      public abstract T getCurrentNode();
038    }