changeset 20844:e807c6f675de

changed InvocationPlugin.execute to be a default method instead of a static method
author Doug Simon <doug.simon@oracle.com>
date Mon, 06 Apr 2015 13:14:01 +0200
parents 30ba345cffeb
children a2cd0e7072e2
files graal/com.oracle.graal.graphbuilderconf/src/com/oracle/graal/graphbuilderconf/InvocationPlugin.java graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/IntrinsicGraphBuilder.java
diffstat 3 files changed, 25 insertions(+), 24 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.graphbuilderconf/src/com/oracle/graal/graphbuilderconf/InvocationPlugin.java	Mon Apr 06 00:19:30 2015 +0200
+++ b/graal/com.oracle.graal.graphbuilderconf/src/com/oracle/graal/graphbuilderconf/InvocationPlugin.java	Mon Apr 06 13:14:01 2015 +0200
@@ -102,55 +102,56 @@
     }
 
     /**
-     * Executes a given plugin against a set of invocation arguments by dispatching to the
-     * {@code apply(...)} method that matches the number of arguments or to
-     * {@link #applyPolymorphic} if {@code plugin} is {@linkplain #isSignaturePolymorphic()
-     * signature polymorphic}.
+     * Executes this plugin against a set of invocation arguments.
      *
-     * @param targetMethod the method for which plugin is being applied
+     * The default implementation in {@link InvocationPlugin} dispatches to the {@code apply(...)}
+     * method that matches the number of arguments or to {@link #applyPolymorphic} if {@code plugin}
+     * is {@linkplain #isSignaturePolymorphic() signature polymorphic}.
+     *
+     * @param targetMethod the method for which this plugin is being applied
      * @param receiver access to the receiver, {@code null} if {@code targetMethod} is static
      * @param argsIncludingReceiver all arguments to the invocation include the receiver in position
      *            0 if {@code targetMethod} is not static
-     * @return {@code true} if the plugin handled the invocation of {@code targetMethod}
+     * @return {@code true} if this plugin handled the invocation of {@code targetMethod}
      *         {@code false} if the graph builder should process the invoke further (e.g., by
      *         inlining it or creating an {@link Invoke} node). A plugin that does not handle an
      *         invocation must not modify the graph being constructed.
      */
-    static boolean execute(GraphBuilderContext b, ResolvedJavaMethod targetMethod, InvocationPlugin plugin, Receiver receiver, ValueNode[] argsIncludingReceiver) {
-        if (plugin.isSignaturePolymorphic()) {
-            return plugin.applyPolymorphic(b, targetMethod, receiver, argsIncludingReceiver);
+    default boolean execute(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver receiver, ValueNode[] argsIncludingReceiver) {
+        if (isSignaturePolymorphic()) {
+            return applyPolymorphic(b, targetMethod, receiver, argsIncludingReceiver);
         } else if (receiver != null) {
             assert !targetMethod.isStatic();
             assert argsIncludingReceiver.length > 0;
             if (argsIncludingReceiver.length == 1) {
-                return plugin.apply(b, targetMethod, receiver);
+                return apply(b, targetMethod, receiver);
             } else if (argsIncludingReceiver.length == 2) {
-                return plugin.apply(b, targetMethod, receiver, argsIncludingReceiver[1]);
+                return apply(b, targetMethod, receiver, argsIncludingReceiver[1]);
             } else if (argsIncludingReceiver.length == 3) {
-                return plugin.apply(b, targetMethod, receiver, argsIncludingReceiver[1], argsIncludingReceiver[2]);
+                return apply(b, targetMethod, receiver, argsIncludingReceiver[1], argsIncludingReceiver[2]);
             } else if (argsIncludingReceiver.length == 4) {
-                return plugin.apply(b, targetMethod, receiver, argsIncludingReceiver[1], argsIncludingReceiver[2], argsIncludingReceiver[3]);
+                return apply(b, targetMethod, receiver, argsIncludingReceiver[1], argsIncludingReceiver[2], argsIncludingReceiver[3]);
             } else if (argsIncludingReceiver.length == 5) {
-                return plugin.apply(b, targetMethod, receiver, argsIncludingReceiver[1], argsIncludingReceiver[2], argsIncludingReceiver[3], argsIncludingReceiver[4]);
+                return apply(b, targetMethod, receiver, argsIncludingReceiver[1], argsIncludingReceiver[2], argsIncludingReceiver[3], argsIncludingReceiver[4]);
             } else {
-                return plugin.defaultHandler(b, targetMethod, receiver, argsIncludingReceiver);
+                return defaultHandler(b, targetMethod, receiver, argsIncludingReceiver);
             }
         } else {
             assert targetMethod.isStatic();
             if (argsIncludingReceiver.length == 0) {
-                return plugin.apply(b, targetMethod, null);
+                return apply(b, targetMethod, null);
             } else if (argsIncludingReceiver.length == 1) {
-                return plugin.apply(b, targetMethod, null, argsIncludingReceiver[0]);
+                return apply(b, targetMethod, null, argsIncludingReceiver[0]);
             } else if (argsIncludingReceiver.length == 2) {
-                return plugin.apply(b, targetMethod, null, argsIncludingReceiver[0], argsIncludingReceiver[1]);
+                return apply(b, targetMethod, null, argsIncludingReceiver[0], argsIncludingReceiver[1]);
             } else if (argsIncludingReceiver.length == 3) {
-                return plugin.apply(b, targetMethod, null, argsIncludingReceiver[0], argsIncludingReceiver[1], argsIncludingReceiver[2]);
+                return apply(b, targetMethod, null, argsIncludingReceiver[0], argsIncludingReceiver[1], argsIncludingReceiver[2]);
             } else if (argsIncludingReceiver.length == 4) {
-                return plugin.apply(b, targetMethod, null, argsIncludingReceiver[0], argsIncludingReceiver[1], argsIncludingReceiver[2], argsIncludingReceiver[3]);
+                return apply(b, targetMethod, null, argsIncludingReceiver[0], argsIncludingReceiver[1], argsIncludingReceiver[2], argsIncludingReceiver[3]);
             } else if (argsIncludingReceiver.length == 5) {
-                return plugin.apply(b, targetMethod, null, argsIncludingReceiver[0], argsIncludingReceiver[1], argsIncludingReceiver[2], argsIncludingReceiver[3], argsIncludingReceiver[4]);
+                return apply(b, targetMethod, null, argsIncludingReceiver[0], argsIncludingReceiver[1], argsIncludingReceiver[2], argsIncludingReceiver[3], argsIncludingReceiver[4]);
             } else {
-                return plugin.defaultHandler(b, targetMethod, receiver, argsIncludingReceiver);
+                return defaultHandler(b, targetMethod, receiver, argsIncludingReceiver);
             }
 
         }
--- a/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java	Mon Apr 06 00:19:30 2015 +0200
+++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java	Mon Apr 06 13:14:01 2015 +0200
@@ -1243,7 +1243,7 @@
                     }
 
                     InvocationPluginAssertions assertions = assertionsEnabled() ? new InvocationPluginAssertions(plugin, args, targetMethod, resultType) : null;
-                    if (InvocationPlugin.execute(this, targetMethod, plugin, invocationPluginReceiver.init(targetMethod, args), args)) {
+                    if (plugin.execute(this, targetMethod, invocationPluginReceiver.init(targetMethod, args), args)) {
                         assert assertions.check(true);
                         return true;
                     }
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/IntrinsicGraphBuilder.java	Mon Apr 06 00:19:30 2015 +0200
+++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/IntrinsicGraphBuilder.java	Mon Apr 06 13:14:01 2015 +0200
@@ -200,7 +200,7 @@
 
     public StructuredGraph buildGraph(InvocationPlugin plugin) {
         Receiver receiver = method.isStatic() ? null : this;
-        if (InvocationPlugin.execute(this, method, plugin, receiver, arguments)) {
+        if (plugin.execute(this, method, receiver, arguments)) {
             assert (returnValue != null) == (method.getSignature().getReturnKind() != Kind.Void) : method;
             append(new ReturnNode(returnValue));
             return graph;