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 {
     
     /**