This is an automated email from the ASF dual-hosted git repository.

crazyhzm pushed a commit to branch 3.3
in repository https://gitbox.apache.org/repos/asf/dubbo.git


The following commit(s) were added to refs/heads/3.3 by this push:
     new c8f7269e41 Fix method annotation compile failed in native (#13490)
c8f7269e41 is described below

commit c8f7269e41b6f509cfb14a45334521bd15a0944c
Author: huazhongming <[email protected]>
AuthorDate: Tue Dec 12 17:54:32 2023 +0800

    Fix method annotation compile failed in native (#13490)
    
    Signed-off-by: crazyhzm <[email protected]>
---
 .../java/org/apache/dubbo/config/AbstractInterfaceConfig.java | 11 +++++++++++
 .../src/main/java/org/apache/dubbo/config/MethodConfig.java   |  3 +--
 .../apache/dubbo/config/spring/aot/AotWithSpringDetector.java |  6 ++++++
 .../factory/annotation/ServiceAnnotationPostProcessor.java    |  9 ++++++++-
 4 files changed, 26 insertions(+), 3 deletions(-)

diff --git 
a/dubbo-common/src/main/java/org/apache/dubbo/config/AbstractInterfaceConfig.java
 
b/dubbo-common/src/main/java/org/apache/dubbo/config/AbstractInterfaceConfig.java
index 53b3eadb35..fe25f46f1e 100644
--- 
a/dubbo-common/src/main/java/org/apache/dubbo/config/AbstractInterfaceConfig.java
+++ 
b/dubbo-common/src/main/java/org/apache/dubbo/config/AbstractInterfaceConfig.java
@@ -27,6 +27,7 @@ import org.apache.dubbo.common.utils.Assert;
 import org.apache.dubbo.common.utils.ClassUtils;
 import org.apache.dubbo.common.utils.CollectionUtils;
 import org.apache.dubbo.common.utils.ConfigUtils;
+import org.apache.dubbo.common.utils.JsonUtils;
 import org.apache.dubbo.common.utils.ReflectUtils;
 import org.apache.dubbo.common.utils.StringUtils;
 import org.apache.dubbo.config.support.Parameter;
@@ -758,6 +759,16 @@ public abstract class AbstractInterfaceConfig extends 
AbstractMethodConfig {
         this.methods = (methods != null) ? new ArrayList<>(methods) : null;
     }
 
+    public void setMethodsJson(List<String> methodsJson) {
+        if (methodsJson != null) {
+            this.methods = new ArrayList<>();
+            methodsJson.forEach(
+                    (methodConfigJson) -> 
methods.add(JsonUtils.toJavaObject(methodConfigJson, MethodConfig.class)));
+        } else {
+            this.methods = null;
+        }
+    }
+
     public void addMethod(MethodConfig methodConfig) {
         if (this.methods == null) {
             this.methods = new ArrayList<>();
diff --git 
a/dubbo-common/src/main/java/org/apache/dubbo/config/MethodConfig.java 
b/dubbo-common/src/main/java/org/apache/dubbo/config/MethodConfig.java
index 000b447cac..7cdc83db9b 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/config/MethodConfig.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/config/MethodConfig.java
@@ -217,9 +217,8 @@ public class MethodConfig extends AbstractMethodConfig {
             List<String> prefixes = new ArrayList<>();
             prefixes.add(parentPrefix + "." + this.getName());
             return prefixes;
-        } else {
-            throw new IllegalStateException("The parent prefix of MethodConfig 
is null");
         }
+        return null;
     }
 
     @Override
diff --git 
a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/aot/AotWithSpringDetector.java
 
b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/aot/AotWithSpringDetector.java
index 3bda2719d0..1ee9ef3f2e 100644
--- 
a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/aot/AotWithSpringDetector.java
+++ 
b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/aot/AotWithSpringDetector.java
@@ -30,6 +30,8 @@ public abstract class AotWithSpringDetector {
      */
     public static final String AOT_ENABLED = "spring.aot.enabled";
 
+    private static final String AOT_PROCESSING = "spring.aot.processing";
+
     /**
      * Determine whether AOT optimizations must be considered at runtime. This
      * is mandatory in a native image but can be triggered on the JVM using
@@ -40,4 +42,8 @@ public abstract class AotWithSpringDetector {
     public static boolean useGeneratedArtifacts() {
         return (NativeDetector.inNativeImage() || 
SpringProperties.getFlag(AOT_ENABLED));
     }
+
+    public static boolean isAotProcessing() {
+        return (NativeDetector.inNativeImage() || 
SpringProperties.getFlag(AOT_PROCESSING));
+    }
 }
diff --git 
a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/beans/factory/annotation/ServiceAnnotationPostProcessor.java
 
b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/beans/factory/annotation/ServiceAnnotationPostProcessor.java
index ddfc9424da..0c0af139cd 100644
--- 
a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/beans/factory/annotation/ServiceAnnotationPostProcessor.java
+++ 
b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/beans/factory/annotation/ServiceAnnotationPostProcessor.java
@@ -21,6 +21,7 @@ import org.apache.dubbo.common.logger.ErrorTypeAwareLogger;
 import org.apache.dubbo.common.logger.LoggerFactory;
 import org.apache.dubbo.common.utils.AnnotationUtils;
 import org.apache.dubbo.common.utils.ClassUtils;
+import org.apache.dubbo.common.utils.JsonUtils;
 import org.apache.dubbo.common.utils.ReflectUtils;
 import org.apache.dubbo.common.utils.StringUtils;
 import org.apache.dubbo.config.Constants;
@@ -486,7 +487,13 @@ public class ServiceAnnotationPostProcessor
         // Add methods parameters
         List<MethodConfig> methodConfigs = 
convertMethodConfigs(serviceAnnotationAttributes.get("methods"));
         if (!methodConfigs.isEmpty()) {
-            builder.addPropertyValue("methods", methodConfigs);
+            if (AotWithSpringDetector.isAotProcessing()) {
+                List<String> methodsJson = new ArrayList<>();
+                methodConfigs.forEach(methodConfig -> 
methodsJson.add(JsonUtils.toJson(methodConfig)));
+                builder.addPropertyValue("methodsJson", methodsJson);
+            } else {
+                builder.addPropertyValue("methods", methodConfigs);
+            }
         }
 
         // convert provider to providerIds

Reply via email to