From 8eea25bd3e54bb8538a9256b8c04594c48d430fe Mon Sep 17 00:00:00 2001 From: wangd Date: Wed, 4 Jun 2025 11:15:23 +0800 Subject: [PATCH] Move Bootstrap.class to presto-bytecode to avoid duplicate definitions --- .../facebook/presto/bytecode}/Bootstrap.java | 4 +- .../functions/gen/AccumulatorCompiler.java | 2 +- .../presto/hive/functions/gen/Bootstrap.java | 55 ------------------- .../gen/SqlTypeBytecodeExpression.java | 2 +- .../aggregation/AccumulatorCompiler.java | 2 +- .../presto/sql/gen/BytecodeUtils.java | 2 +- .../sql/gen/SqlTypeBytecodeExpression.java | 2 +- 7 files changed, 6 insertions(+), 63 deletions(-) rename {presto-main-base/src/main/java/com/facebook/presto/sql/gen => presto-bytecode/src/main/java/com/facebook/presto/bytecode}/Bootstrap.java (95%) delete mode 100644 presto-hive-function-namespace/src/main/java/com/facebook/presto/hive/functions/gen/Bootstrap.java diff --git a/presto-main-base/src/main/java/com/facebook/presto/sql/gen/Bootstrap.java b/presto-bytecode/src/main/java/com/facebook/presto/bytecode/Bootstrap.java similarity index 95% rename from presto-main-base/src/main/java/com/facebook/presto/sql/gen/Bootstrap.java rename to presto-bytecode/src/main/java/com/facebook/presto/bytecode/Bootstrap.java index 7a007bea6e0c3..670c619ece3fb 100644 --- a/presto-main-base/src/main/java/com/facebook/presto/sql/gen/Bootstrap.java +++ b/presto-bytecode/src/main/java/com/facebook/presto/bytecode/Bootstrap.java @@ -11,9 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.facebook.presto.sql.gen; - -import com.facebook.presto.bytecode.DynamicClassLoader; +package com.facebook.presto.bytecode; import java.lang.invoke.CallSite; import java.lang.invoke.ConstantCallSite; diff --git a/presto-hive-function-namespace/src/main/java/com/facebook/presto/hive/functions/gen/AccumulatorCompiler.java b/presto-hive-function-namespace/src/main/java/com/facebook/presto/hive/functions/gen/AccumulatorCompiler.java index d65a297591eaa..1fe70511f8e55 100644 --- a/presto-hive-function-namespace/src/main/java/com/facebook/presto/hive/functions/gen/AccumulatorCompiler.java +++ b/presto-hive-function-namespace/src/main/java/com/facebook/presto/hive/functions/gen/AccumulatorCompiler.java @@ -55,6 +55,7 @@ import static com.facebook.presto.bytecode.Access.PRIVATE; import static com.facebook.presto.bytecode.Access.PUBLIC; import static com.facebook.presto.bytecode.Access.a; +import static com.facebook.presto.bytecode.Bootstrap.BOOTSTRAP_METHOD; import static com.facebook.presto.bytecode.Parameter.arg; import static com.facebook.presto.bytecode.ParameterizedType.type; import static com.facebook.presto.bytecode.expression.BytecodeExpressions.and; @@ -65,7 +66,6 @@ import static com.facebook.presto.bytecode.expression.BytecodeExpressions.invokeDynamic; import static com.facebook.presto.bytecode.expression.BytecodeExpressions.invokeStatic; import static com.facebook.presto.bytecode.expression.BytecodeExpressions.not; -import static com.facebook.presto.hive.functions.gen.Bootstrap.BOOTSTRAP_METHOD; import static com.facebook.presto.hive.functions.gen.CompilerUtils.defineClass; import static com.facebook.presto.hive.functions.gen.CompilerUtils.makeClassName; import static com.facebook.presto.hive.functions.gen.SqlTypeBytecodeExpression.constantType; diff --git a/presto-hive-function-namespace/src/main/java/com/facebook/presto/hive/functions/gen/Bootstrap.java b/presto-hive-function-namespace/src/main/java/com/facebook/presto/hive/functions/gen/Bootstrap.java deleted file mode 100644 index a6a9966670823..0000000000000 --- a/presto-hive-function-namespace/src/main/java/com/facebook/presto/hive/functions/gen/Bootstrap.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.facebook.presto.hive.functions.gen; - -import com.facebook.presto.bytecode.DynamicClassLoader; - -import java.lang.invoke.CallSite; -import java.lang.invoke.ConstantCallSite; -import java.lang.invoke.MethodHandle; -import java.lang.invoke.MethodHandles; -import java.lang.invoke.MethodType; -import java.lang.reflect.Method; - -import static com.google.common.base.Preconditions.checkArgument; - -public final class Bootstrap -{ - public static final Method BOOTSTRAP_METHOD; - - static { - try { - BOOTSTRAP_METHOD = Bootstrap.class.getMethod("bootstrap", MethodHandles.Lookup.class, String.class, MethodType.class, long.class); - } - catch (NoSuchMethodException e) { - throw new AssertionError(e); - } - } - - private Bootstrap() - { - } - - public static CallSite bootstrap(MethodHandles.Lookup callerLookup, String name, MethodType type, long bindingId) - { - ClassLoader classLoader = callerLookup.lookupClass().getClassLoader(); - checkArgument(classLoader instanceof DynamicClassLoader, "Expected %s's classloader to be of type %s", callerLookup.lookupClass().getName(), DynamicClassLoader.class.getName()); - - DynamicClassLoader dynamicClassLoader = (DynamicClassLoader) classLoader; - MethodHandle target = dynamicClassLoader.getCallSiteBindings().get(bindingId); - checkArgument(target != null, "Binding %s for function %s%s not found", bindingId, name, type.parameterList()); - - return new ConstantCallSite(target); - } -} diff --git a/presto-hive-function-namespace/src/main/java/com/facebook/presto/hive/functions/gen/SqlTypeBytecodeExpression.java b/presto-hive-function-namespace/src/main/java/com/facebook/presto/hive/functions/gen/SqlTypeBytecodeExpression.java index 72e952cebffcb..0ad381158afc7 100644 --- a/presto-hive-function-namespace/src/main/java/com/facebook/presto/hive/functions/gen/SqlTypeBytecodeExpression.java +++ b/presto-hive-function-namespace/src/main/java/com/facebook/presto/hive/functions/gen/SqlTypeBytecodeExpression.java @@ -26,8 +26,8 @@ import java.lang.reflect.Method; import java.util.List; +import static com.facebook.presto.bytecode.Bootstrap.BOOTSTRAP_METHOD; import static com.facebook.presto.bytecode.ParameterizedType.type; -import static com.facebook.presto.hive.functions.gen.Bootstrap.BOOTSTRAP_METHOD; import static java.util.Objects.requireNonNull; public class SqlTypeBytecodeExpression diff --git a/presto-main-base/src/main/java/com/facebook/presto/operator/aggregation/AccumulatorCompiler.java b/presto-main-base/src/main/java/com/facebook/presto/operator/aggregation/AccumulatorCompiler.java index 5aad4992981df..c79f93c41e37c 100644 --- a/presto-main-base/src/main/java/com/facebook/presto/operator/aggregation/AccumulatorCompiler.java +++ b/presto-main-base/src/main/java/com/facebook/presto/operator/aggregation/AccumulatorCompiler.java @@ -57,6 +57,7 @@ import static com.facebook.presto.bytecode.Access.PRIVATE; import static com.facebook.presto.bytecode.Access.PUBLIC; import static com.facebook.presto.bytecode.Access.a; +import static com.facebook.presto.bytecode.Bootstrap.BOOTSTRAP_METHOD; import static com.facebook.presto.bytecode.Parameter.arg; import static com.facebook.presto.bytecode.ParameterizedType.type; import static com.facebook.presto.bytecode.expression.BytecodeExpressions.and; @@ -69,7 +70,6 @@ import static com.facebook.presto.bytecode.expression.BytecodeExpressions.not; import static com.facebook.presto.spi.function.aggregation.AggregationMetadata.ParameterMetadata; import static com.facebook.presto.spi.function.aggregation.AggregationMetadata.countInputChannels; -import static com.facebook.presto.sql.gen.Bootstrap.BOOTSTRAP_METHOD; import static com.facebook.presto.sql.gen.BytecodeUtils.invoke; import static com.facebook.presto.sql.gen.SqlTypeBytecodeExpression.constantType; import static com.facebook.presto.util.CompilerUtils.defineClass; diff --git a/presto-main-base/src/main/java/com/facebook/presto/sql/gen/BytecodeUtils.java b/presto-main-base/src/main/java/com/facebook/presto/sql/gen/BytecodeUtils.java index 63d31b24b430c..47d02274cea79 100644 --- a/presto-main-base/src/main/java/com/facebook/presto/sql/gen/BytecodeUtils.java +++ b/presto-main-base/src/main/java/com/facebook/presto/sql/gen/BytecodeUtils.java @@ -42,6 +42,7 @@ import java.util.List; import java.util.Optional; +import static com.facebook.presto.bytecode.Bootstrap.BOOTSTRAP_METHOD; import static com.facebook.presto.bytecode.OpCode.NOP; import static com.facebook.presto.bytecode.expression.BytecodeExpressions.constantFalse; import static com.facebook.presto.bytecode.expression.BytecodeExpressions.constantTrue; @@ -50,7 +51,6 @@ import static com.facebook.presto.operator.scalar.ScalarFunctionImplementationChoice.NullConvention.BLOCK_AND_POSITION; import static com.facebook.presto.operator.scalar.ScalarFunctionImplementationChoice.ReturnPlaceConvention.PROVIDED_BLOCKBUILDER; import static com.facebook.presto.operator.scalar.ScalarFunctionImplementationChoice.ReturnPlaceConvention.STACK; -import static com.facebook.presto.sql.gen.Bootstrap.BOOTSTRAP_METHOD; import static com.google.common.base.Preconditions.checkArgument; import static com.google.common.base.Preconditions.checkState; import static com.google.common.collect.ImmutableList.toImmutableList; diff --git a/presto-main-base/src/main/java/com/facebook/presto/sql/gen/SqlTypeBytecodeExpression.java b/presto-main-base/src/main/java/com/facebook/presto/sql/gen/SqlTypeBytecodeExpression.java index 23c49fd5f6382..c91f33dc0f4f4 100644 --- a/presto-main-base/src/main/java/com/facebook/presto/sql/gen/SqlTypeBytecodeExpression.java +++ b/presto-main-base/src/main/java/com/facebook/presto/sql/gen/SqlTypeBytecodeExpression.java @@ -26,8 +26,8 @@ import java.lang.reflect.Method; import java.util.List; +import static com.facebook.presto.bytecode.Bootstrap.BOOTSTRAP_METHOD; import static com.facebook.presto.bytecode.ParameterizedType.type; -import static com.facebook.presto.sql.gen.Bootstrap.BOOTSTRAP_METHOD; import static java.util.Objects.requireNonNull; public class SqlTypeBytecodeExpression