From 23d7cdd043a14367f88f8f74a81d6789bf7bbf40 Mon Sep 17 00:00:00 2001 From: Robert Muir Date: Mon, 6 Jun 2016 17:58:00 -0400 Subject: [PATCH] ban slow methods in MethodHandle --- buildSrc/src/main/resources/forbidden/es-core-signatures.txt | 5 +++++ .../main/java/org/elasticsearch/painless/DefBootstrap.java | 3 +++ 2 files changed, 8 insertions(+) diff --git a/buildSrc/src/main/resources/forbidden/es-core-signatures.txt b/buildSrc/src/main/resources/forbidden/es-core-signatures.txt index 059be403a67..31084c7556c 100644 --- a/buildSrc/src/main/resources/forbidden/es-core-signatures.txt +++ b/buildSrc/src/main/resources/forbidden/es-core-signatures.txt @@ -92,3 +92,8 @@ org.joda.time.DateTime#(int, int, int, int, int, int) org.joda.time.DateTime#(int, int, int, int, int, int, int) org.joda.time.DateTime#now() org.joda.time.DateTimeZone#getDefault() + +@defaultMessage Don't use MethodHandles in slow ways, except in tests. +java.lang.invoke.MethodHandle#invoke(java.lang.Object[]) +java.lang.invoke.MethodHandle#invokeWithArguments(java.lang.Object[]) +java.lang.invoke.MethodHandle#invokeWithArguments(java.util.List) diff --git a/modules/lang-painless/src/main/java/org/elasticsearch/painless/DefBootstrap.java b/modules/lang-painless/src/main/java/org/elasticsearch/painless/DefBootstrap.java index 4c30891dd2d..e28dc0242dd 100644 --- a/modules/lang-painless/src/main/java/org/elasticsearch/painless/DefBootstrap.java +++ b/modules/lang-painless/src/main/java/org/elasticsearch/painless/DefBootstrap.java @@ -1,5 +1,7 @@ package org.elasticsearch.painless; +import org.elasticsearch.common.SuppressForbidden; + /* * Licensed to Elasticsearch under one or more contributor * license agreements. See the NOTICE file distributed with @@ -115,6 +117,7 @@ public final class DefBootstrap { * Called when a new type is encountered (or, when we have encountered more than {@code MAX_DEPTH} * types at this call site and given up on caching). */ + @SuppressForbidden(reason = "slow path") Object fallback(Object[] args) throws Throwable { final MethodType type = type(); final Object receiver = args[0];