view graal/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/AbstractExecutionContext.java @ 15450:be0c151d912b

Truffle/Instrumentation: API revisions
author Michael Van De Vanter <michael.van.de.vanter@oracle.com>
date Tue, 29 Apr 2014 12:05:58 -0700
parents 0c6d8a08e31b
children bb9473723904
line wrap: on
line source

/*
 * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 *
 * This code is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License version 2 only, as
 * published by the Free Software Foundation.  Oracle designates this
 * particular file as subject to the "Classpath" exception as provided
 * by Oracle in the LICENSE file that accompanied this code.
 *
 * This code is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 * version 2 for more details (a copy is included in the LICENSE file that
 * accompanied this code).
 *
 * You should have received a copy of the GNU General Public License version
 * 2 along with this work; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 *
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 * or visit www.oracle.com if you need additional information or have any
 * questions.
 */
package com.oracle.truffle.api.impl;

import com.oracle.truffle.api.*;
import com.oracle.truffle.api.instrument.*;
import com.oracle.truffle.api.instrument.impl.*;
import com.oracle.truffle.api.source.*;

public abstract class AbstractExecutionContext implements ExecutionContext {

    private final SourceManager sourceManager = new SourceManager();
    private final Instrumentation instrumentation;
    private Visualizer visualizer = new DefaultVisualizer();
    protected ASTProber astProber = null;

    protected AbstractExecutionContext() {
        this.instrumentation = InstrumentationFactory.create(this);
    }

    public final SourceManager getSourceManager() {
        return sourceManager;
    }

    public final Instrumentation getInstrumentation() {
        return instrumentation;
    }

    public Visualizer getVisualizer() {
        return visualizer;
    }

    public void addNodeProber(ASTNodeProber nodeProber) {
        if (astProber == null) {
            throw new IllegalStateException("No ASTProber installed in context");
        }
        astProber.addNodeProber(nodeProber);
    }

    /**
     * Assign guest language-specific visualization support for tools. This must be assigned outside
     * the implementation context to avoid build circularities.
     */
    public void setVisualizer(Visualizer visualizer) {
        this.visualizer = visualizer;
    }

    /**
     * Assigns a guest language-specific manager for using {@link ASTNodeProber}s added by tools to
     * instrument ASTs with {@link Probe}s at specified nodes. This must be assigned outside the
     * implementation context to avoid build circularities. It must also be set before any
     * instrumentation probe implementations are assigned.
     */
    public void setASTProber(ASTProber astProber) {
        this.astProber = astProber;
    }

    /**
     * Gets a guest language-specific {@link ASTNodeProber} that will apply all that have been
     * added; {@code null} if no instrumentation in AST.
     */
    public ASTNodeProber getCombinedNodeProber() {
        return astProber == null ? null : astProber.getCombinedNodeProber();
    }

    public abstract void setInstrumentEventListener(InstrumentEventListener listener);

    public abstract InstrumentEventListener getInstrumentEventListener();
}