/*
 * Copyright (c) 2011, 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.
 *
 * 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.graal.nodes;

import com.oracle.graal.graph.*;
import com.oracle.graal.nodes.extended.*;
import com.oracle.graal.nodes.spi.*;

public interface Invoke extends StateSplit, Lowerable, DeoptimizingNode.DeoptDuring, GuardedNode {

    FixedNode next();

    void setNext(FixedNode x);

    CallTargetNode callTarget();

    int bci();

    FixedNode asNode();

    Node predecessor();

    void intrinsify(Node node);

    boolean useForInlining();

    void setUseForInlining(boolean value);

    /**
     * True if this invocation is almost certainly polymorphic, false when in doubt.
     */
    boolean isPolymorphic();

    void setPolymorphic(boolean value);
}

@@ -1077,16 +1077,52 @@
 nodes;%0A%0A
+import com.oracle.graal.api.meta.*;%0A
 import c
@@ -1759,11 +1759,865 @@
  value);
+%0A%0A    /**%0A     * Returns the %7B@linkplain ResolvedJavaMethod method%7D from which this invoke is executed. This%0A     * is the caller method and in the case of inlining may be different from the method of the%0A     * graph this node is in.%0A     *%0A     * @return the method from which this invoke is executed.%0A     */%0A    default ResolvedJavaMethod getContextMethod() %7B%0A        FrameState state = stateAfter();%0A        if (state == null) %7B%0A            state = stateDuring();%0A        %7D%0A        return state.method();%0A    %7D%0A%0A    /**%0A     * Returns the %7B@linkplain ResolvedJavaType type%7D from which this invoke is executed. This is%0A     * the declaring type of the caller method.%0A     *%0A     * @return the type from which this invoke is executed.%0A     */%0A    default ResolvedJavaType getContextType() %7B%0A        return getContextMethod().getDeclaringClass();%0A    %7D
 %0A%7D%0A

Add Invoke.getContextMethod and Invoke.getContextType