Mercurial > hg > graal-compiler
changeset 22678:f3ebbebef617
Allow overwriting of invocation plugins
author | Christian Wimmer <christian.wimmer@oracle.com> |
---|---|
date | Tue, 22 Sep 2015 17:35:52 -0700 |
parents | ce2b71115ade |
children | 152f2a7c46d8 |
files | graal/com.oracle.graal.graphbuilderconf/src/com/oracle/graal/graphbuilderconf/InvocationPlugin.java graal/com.oracle.graal.graphbuilderconf/src/com/oracle/graal/graphbuilderconf/InvocationPlugins.java |
diffstat | 2 files changed, 26 insertions(+), 17 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.graphbuilderconf/src/com/oracle/graal/graphbuilderconf/InvocationPlugin.java Fri Aug 28 11:23:08 2015 -0700 +++ b/graal/com.oracle.graal.graphbuilderconf/src/com/oracle/graal/graphbuilderconf/InvocationPlugin.java Tue Sep 22 17:35:52 2015 -0700 @@ -38,8 +38,8 @@ /** * The receiver in a non-static method. The class literal for this interface must be used with - * {@link InvocationPlugins#put(InvocationPlugin, boolean, boolean, Class, String, Class...)} to - * denote the receiver argument for such a non-static method. + * {@link InvocationPlugins#put(InvocationPlugin, boolean, boolean, boolean, Class, String, Class...)} + * to denote the receiver argument for such a non-static method. */ public interface Receiver { /**
--- a/graal/com.oracle.graal.graphbuilderconf/src/com/oracle/graal/graphbuilderconf/InvocationPlugins.java Fri Aug 28 11:23:08 2015 -0700 +++ b/graal/com.oracle.graal.graphbuilderconf/src/com/oracle/graal/graphbuilderconf/InvocationPlugins.java Tue Sep 22 17:35:52 2015 -0700 @@ -84,6 +84,7 @@ private final InvocationPlugins plugins; private final Class<?> declaringClass; + private boolean allowOverwrite; /** * Creates an object for registering {@link InvocationPlugin}s for methods declared by a @@ -99,13 +100,21 @@ } /** + * Configures this registration to allow or disallow overwriting of invocation plugins. + */ + public Registration setAllowOverwrite(boolean allowOverwrite) { + this.allowOverwrite = allowOverwrite; + return this; + } + + /** * Registers a plugin for a method with no arguments. * * @param name the name of the method * @param plugin the plugin to be registered */ public void register0(String name, InvocationPlugin plugin) { - plugins.register(plugin, declaringClass, name); + plugins.register(plugin, false, allowOverwrite, declaringClass, name); } /** @@ -115,7 +124,7 @@ * @param plugin the plugin to be registered */ public void register1(String name, Class<?> arg, InvocationPlugin plugin) { - plugins.register(plugin, declaringClass, name, arg); + plugins.register(plugin, false, allowOverwrite, declaringClass, name, arg); } /** @@ -125,7 +134,7 @@ * @param plugin the plugin to be registered */ public void register2(String name, Class<?> arg1, Class<?> arg2, InvocationPlugin plugin) { - plugins.register(plugin, declaringClass, name, arg1, arg2); + plugins.register(plugin, false, allowOverwrite, declaringClass, name, arg1, arg2); } /** @@ -135,7 +144,7 @@ * @param plugin the plugin to be registered */ public void register3(String name, Class<?> arg1, Class<?> arg2, Class<?> arg3, InvocationPlugin plugin) { - plugins.register(plugin, declaringClass, name, arg1, arg2, arg3); + plugins.register(plugin, false, allowOverwrite, declaringClass, name, arg1, arg2, arg3); } /** @@ -145,7 +154,7 @@ * @param plugin the plugin to be registered */ public void register4(String name, Class<?> arg1, Class<?> arg2, Class<?> arg3, Class<?> arg4, InvocationPlugin plugin) { - plugins.register(plugin, declaringClass, name, arg1, arg2, arg3, arg4); + plugins.register(plugin, false, allowOverwrite, declaringClass, name, arg1, arg2, arg3, arg4); } /** @@ -155,7 +164,7 @@ * @param plugin the plugin to be registered */ public void register5(String name, Class<?> arg1, Class<?> arg2, Class<?> arg3, Class<?> arg4, Class<?> arg5, InvocationPlugin plugin) { - plugins.register(plugin, declaringClass, name, arg1, arg2, arg3, arg4, arg5); + plugins.register(plugin, false, allowOverwrite, declaringClass, name, arg1, arg2, arg3, arg4, arg5); } /** @@ -165,7 +174,7 @@ * @param plugin the plugin to be registered */ public void registerOptional3(String name, Class<?> arg1, Class<?> arg2, Class<?> arg3, InvocationPlugin plugin) { - plugins.registerOptional(plugin, declaringClass, name, arg1, arg2, arg3); + plugins.register(plugin, true, allowOverwrite, declaringClass, name, arg1, arg2, arg3); } /** @@ -175,7 +184,7 @@ * @param plugin the plugin to be registered */ public void registerOptional4(String name, Class<?> arg1, Class<?> arg2, Class<?> arg3, Class<?> arg4, InvocationPlugin plugin) { - plugins.registerOptional(plugin, declaringClass, name, arg1, arg2, arg3, arg4); + plugins.register(plugin, true, allowOverwrite, declaringClass, name, arg1, arg2, arg3, arg4); } /** @@ -190,7 +199,7 @@ */ public void registerMethodSubstitution(Class<?> substituteDeclaringClass, String name, Class<?>... argumentTypes) { MethodSubstitutionPlugin plugin = new MethodSubstitutionPlugin(substituteDeclaringClass, name, argumentTypes); - plugins.register(plugin, declaringClass, name, argumentTypes); + plugins.register(plugin, false, allowOverwrite, declaringClass, name, argumentTypes); } } @@ -311,11 +320,11 @@ * {@code declaringClass} iff the method is non-static. * @return an object representing the method */ - MethodKey put(InvocationPlugin value, boolean isStatic, boolean isOptional, Class<?> declaringClass, String name, Class<?>... argumentTypes) { + MethodKey put(InvocationPlugin value, boolean isStatic, boolean isOptional, boolean allowOverwrite, Class<?> declaringClass, String name, Class<?>... argumentTypes) { assert isStatic || argumentTypes[0] == declaringClass; MethodKey methodKey = new MethodKey(value, isStatic, isOptional, declaringClass, name, argumentTypes); assert entries == null : "registration is closed"; - assert !registrations.contains(methodKey) : "a value is already registered for " + methodKey; + assert allowOverwrite || !registrations.contains(methodKey) : "a value is already registered for " + methodKey; registrations.add(methodKey); return methodKey; } @@ -393,12 +402,12 @@ this(null, metaAccess); } - private void register(InvocationPlugin plugin, boolean isOptional, Class<?> declaringClass, String name, Class<?>... argumentTypes) { + private void register(InvocationPlugin plugin, boolean isOptional, boolean allowOverwrite, Class<?> declaringClass, String name, Class<?>... argumentTypes) { boolean isStatic = argumentTypes.length == 0 || argumentTypes[0] != InvocationPlugin.Receiver.class; if (!isStatic) { argumentTypes[0] = declaringClass; } - MethodKey methodInfo = put(plugin, isStatic, isOptional, declaringClass, name, argumentTypes); + MethodKey methodInfo = put(plugin, isStatic, isOptional, allowOverwrite, declaringClass, name, argumentTypes); assert Checker.check(this, methodInfo, plugin); } @@ -412,7 +421,7 @@ * {@code declaringClass} */ public void register(InvocationPlugin plugin, Class<?> declaringClass, String name, Class<?>... argumentTypes) { - register(plugin, false, declaringClass, name, argumentTypes); + register(plugin, false, false, declaringClass, name, argumentTypes); } /** @@ -425,7 +434,7 @@ * {@code declaringClass} */ public void registerOptional(InvocationPlugin plugin, Class<?> declaringClass, String name, Class<?>... argumentTypes) { - register(plugin, true, declaringClass, name, argumentTypes); + register(plugin, true, false, declaringClass, name, argumentTypes); } /**