You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by pa...@apache.org on 2023/05/08 07:38:44 UTC
[shardingsphere] branch master updated: Revise InlineExpressionParser (#25517)
This is an automated email from the ASF dual-hosted git repository.
panjuan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git
The following commit(s) were added to refs/heads/master by this push:
new 651df1abbd2 Revise InlineExpressionParser (#25517)
651df1abbd2 is described below
commit 651df1abbd260fb897167119e541155412914f64
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Mon May 8 15:38:37 2023 +0800
Revise InlineExpressionParser (#25517)
* Revise InlineExpressionParser
* Revise InlineExpressionParser
---
.../infra/expr/core/InlineExpressionParser.java | 12 ++---------
.../espresso/EspressoInlineExpressionParser.java | 25 ++++++++++------------
.../hotsopt/HotspotInlineExpressionParser.java | 22 +++++++++----------
.../infra/expr/spi/JVMInlineExpressionParser.java | 2 ++
4 files changed, 25 insertions(+), 36 deletions(-)
diff --git a/infra/expr/core/src/main/java/org/apache/shardingsphere/infra/expr/core/InlineExpressionParser.java b/infra/expr/core/src/main/java/org/apache/shardingsphere/infra/expr/core/InlineExpressionParser.java
index c731378ac2d..45df3230d16 100644
--- a/infra/expr/core/src/main/java/org/apache/shardingsphere/infra/expr/core/InlineExpressionParser.java
+++ b/infra/expr/core/src/main/java/org/apache/shardingsphere/infra/expr/core/InlineExpressionParser.java
@@ -38,11 +38,7 @@ public final class InlineExpressionParser {
}
public InlineExpressionParser() {
- if (IS_SUBSTRATE_VM) {
- jvmInlineExpressionParser = TypedSPILoader.getService(JVMInlineExpressionParser.class, "ESPRESSO");
- } else {
- jvmInlineExpressionParser = TypedSPILoader.getService(JVMInlineExpressionParser.class, "HOTSPOT");
- }
+ jvmInlineExpressionParser = TypedSPILoader.getService(JVMInlineExpressionParser.class, IS_SUBSTRATE_VM ? "ESPRESSO" : "HOTSPOT");
}
/**
@@ -52,11 +48,7 @@ public final class InlineExpressionParser {
* @return result inline expression with {@code $}
*/
public String handlePlaceHolder(final String inlineExpression) {
- if (IS_SUBSTRATE_VM) {
- return TypedSPILoader.getService(JVMInlineExpressionParser.class, "ESPRESSO").handlePlaceHolder(inlineExpression);
- } else {
- return TypedSPILoader.getService(JVMInlineExpressionParser.class, "HOTSPOT").handlePlaceHolder(inlineExpression);
- }
+ return jvmInlineExpressionParser.handlePlaceHolder(inlineExpression);
}
/**
diff --git a/infra/expr/espresso/src/main/java/org/apache/shardingsphere/infra/expr/espresso/EspressoInlineExpressionParser.java b/infra/expr/espresso/src/main/java/org/apache/shardingsphere/infra/expr/espresso/EspressoInlineExpressionParser.java
index e9def8450b0..422723d4095 100644
--- a/infra/expr/espresso/src/main/java/org/apache/shardingsphere/infra/expr/espresso/EspressoInlineExpressionParser.java
+++ b/infra/expr/espresso/src/main/java/org/apache/shardingsphere/infra/expr/espresso/EspressoInlineExpressionParser.java
@@ -18,6 +18,7 @@
package org.apache.shardingsphere.infra.expr.espresso;
import groovy.lang.Closure;
+import org.apache.shardingsphere.infra.expr.hotsopt.HotspotInlineExpressionParser;
import org.apache.shardingsphere.infra.expr.spi.JVMInlineExpressionParser;
import org.apache.shardingsphere.infra.util.exception.ShardingSpherePreconditions;
import org.graalvm.polyglot.Context;
@@ -33,9 +34,9 @@ import java.util.Objects;
* Espresso inline expression parser.
*/
public final class EspressoInlineExpressionParser implements JVMInlineExpressionParser {
-
+
private static final String JAVA_CLASSPATH;
-
+
static {
// TODO https://github.com/oracle/graal/issues/4555 not yet closed
if ("Substrate VM".equals(System.getProperty("java.vm.name"))) {
@@ -50,9 +51,7 @@ public final class EspressoInlineExpressionParser implements JVMInlineExpression
@Override
public String handlePlaceHolder(final String inlineExpression) {
try (Context context = getContext()) {
- return context.getBindings("java")
- .getMember("org.apache.shardingsphere.infra.expr.hotsopt.HotspotInlineExpressionParser")
- .invokeMember("handlePlaceHolder", inlineExpression).asString();
+ return context.getBindings("java").getMember(HotspotInlineExpressionParser.class.getName()).invokeMember("handlePlaceHolder", inlineExpression).asString();
}
}
@@ -69,19 +68,12 @@ public final class EspressoInlineExpressionParser implements JVMInlineExpression
return getInlineExpressionParser().invokeMember("evaluateClosure", inlineExpression).as(Closure.class);
}
- @Override
- public String getType() {
- return "ESPRESSO";
- }
-
private Value getInlineExpressionParser() {
try (Context context = getContext()) {
- return context.getBindings("java")
- .getMember("org.apache.shardingsphere.infra.expr.hotsopt.HotspotInlineExpressionParser")
- .newInstance();
+ return context.getBindings("java").getMember(HotspotInlineExpressionParser.class.getName()).newInstance();
}
}
-
+
private Context getContext() {
return Context.newBuilder().allowAllAccess(true)
.option("java.Properties.org.graalvm.home", System.getenv("JAVA_HOME"))
@@ -89,4 +81,9 @@ public final class EspressoInlineExpressionParser implements JVMInlineExpression
.option("java.Classpath", JAVA_CLASSPATH)
.build();
}
+
+ @Override
+ public String getType() {
+ return "ESPRESSO";
+ }
}
diff --git a/infra/expr/hotsopt/src/main/java/org/apache/shardingsphere/infra/expr/hotsopt/HotspotInlineExpressionParser.java b/infra/expr/hotsopt/src/main/java/org/apache/shardingsphere/infra/expr/hotsopt/HotspotInlineExpressionParser.java
index a27af55ac10..f70ffdc200f 100644
--- a/infra/expr/hotsopt/src/main/java/org/apache/shardingsphere/infra/expr/hotsopt/HotspotInlineExpressionParser.java
+++ b/infra/expr/hotsopt/src/main/java/org/apache/shardingsphere/infra/expr/hotsopt/HotspotInlineExpressionParser.java
@@ -23,7 +23,6 @@ import groovy.lang.Closure;
import groovy.lang.GString;
import groovy.lang.GroovyShell;
import groovy.lang.Script;
-import lombok.RequiredArgsConstructor;
import org.apache.shardingsphere.infra.expr.spi.JVMInlineExpressionParser;
import java.util.ArrayList;
@@ -39,7 +38,6 @@ import java.util.stream.Collectors;
/**
* Hotspot inline expression parser.
*/
-@RequiredArgsConstructor
public final class HotspotInlineExpressionParser implements JVMInlineExpressionParser {
private static final char SPLITTER = ',';
@@ -63,16 +61,6 @@ public final class HotspotInlineExpressionParser implements JVMInlineExpressionP
return (Closure<?>) evaluate("{it -> \"" + inlineExpression + "\"}");
}
- @Override
- public String getType() {
- return "HOTSPOT";
- }
-
- @Override
- public boolean isDefault() {
- return true;
- }
-
private List<Object> evaluate(final List<String> inlineExpressions) {
List<Object> result = new ArrayList<>(inlineExpressions.size());
for (String each : inlineExpressions) {
@@ -187,4 +175,14 @@ public final class HotspotInlineExpressionParser implements JVMInlineExpressionP
}
return result.toString();
}
+
+ @Override
+ public String getType() {
+ return "HOTSPOT";
+ }
+
+ @Override
+ public boolean isDefault() {
+ return true;
+ }
}
diff --git a/infra/expr/spi/src/main/java/org/apache/shardingsphere/infra/expr/spi/JVMInlineExpressionParser.java b/infra/expr/spi/src/main/java/org/apache/shardingsphere/infra/expr/spi/JVMInlineExpressionParser.java
index 1c1f09cf1eb..9b395abcb85 100644
--- a/infra/expr/spi/src/main/java/org/apache/shardingsphere/infra/expr/spi/JVMInlineExpressionParser.java
+++ b/infra/expr/spi/src/main/java/org/apache/shardingsphere/infra/expr/spi/JVMInlineExpressionParser.java
@@ -18,6 +18,7 @@
package org.apache.shardingsphere.infra.expr.spi;
import groovy.lang.Closure;
+import org.apache.shardingsphere.infra.util.spi.annotation.SingletonSPI;
import org.apache.shardingsphere.infra.util.spi.type.typed.TypedSPI;
import java.util.List;
@@ -25,6 +26,7 @@ import java.util.List;
/**
* JVM inline expression parser.
*/
+@SingletonSPI
public interface JVMInlineExpressionParser extends TypedSPI {
/**