From 50debcd020600b5cbcec57827f95dd812fc78810 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=8B=E9=A3=8E?= Date: Mon, 21 Aug 2023 17:30:47 +0800 Subject: [PATCH] feat: support non http annotation --- connector-api/pom.xml | 2 +- .../api/core/delegate/RetrofitDelegate.java | 1 - .../ApiAnnotationHandlerDispatcher.java | 29 ++++++++++++++++++- .../api/annotations/AnnotationConnector.java | 3 ++ connector-messaging/pom.xml | 2 +- .../pom.xml | 2 +- .../connector-spring-boot-starter/pom.xml | 2 +- connector-spring-boot/pom.xml | 2 +- connector-spring/pom.xml | 2 +- pom.xml | 2 +- 10 files changed, 38 insertions(+), 9 deletions(-) diff --git a/connector-api/pom.xml b/connector-api/pom.xml index 7607a33..b8f9063 100644 --- a/connector-api/pom.xml +++ b/connector-api/pom.xml @@ -6,7 +6,7 @@ connector com.tuya - 1.3.1 + 1.3.2 connector-api diff --git a/connector-api/src/main/java/com/tuya/connector/api/core/delegate/RetrofitDelegate.java b/connector-api/src/main/java/com/tuya/connector/api/core/delegate/RetrofitDelegate.java index b195299..c18f3e3 100644 --- a/connector-api/src/main/java/com/tuya/connector/api/core/delegate/RetrofitDelegate.java +++ b/connector-api/src/main/java/com/tuya/connector/api/core/delegate/RetrofitDelegate.java @@ -196,7 +196,6 @@ private Class deriveFrom(Class connectorInterface) { service.addMethod(serviceMethod); } - return service.toClass(configuration.getClass().getClassLoader(), null); } diff --git a/connector-api/src/main/java/com/tuya/connector/api/handler/ApiAnnotationHandlerDispatcher.java b/connector-api/src/main/java/com/tuya/connector/api/handler/ApiAnnotationHandlerDispatcher.java index 793507d..eddf701 100644 --- a/connector-api/src/main/java/com/tuya/connector/api/handler/ApiAnnotationHandlerDispatcher.java +++ b/connector-api/src/main/java/com/tuya/connector/api/handler/ApiAnnotationHandlerDispatcher.java @@ -5,6 +5,9 @@ import com.tuya.connector.api.utils.Utils; import javassist.CtClass; import javassist.CtMethod; +import javassist.bytecode.AnnotationsAttribute; +import javassist.bytecode.AttributeInfo; +import javassist.bytecode.ConstPool; import lombok.SneakyThrows; import java.lang.annotation.Annotation; @@ -45,7 +48,9 @@ public class ApiAnnotationHandlerDispatcher { public static Object dispatchAndHandle(Annotation annotation, CtClass ctClass, CtMethod ctMethod) { try { BaseAnnotationHandler handler = KNOWN_HANDLERS.get(annotation.annotationType()); - Objects.requireNonNull(handler, String.format("Handler is null for annotation: %s", annotation.getClass().getName())); + if (Objects.isNull(handler)) { + return otherAnnotations(annotation, ctClass, ctMethod); + } return handler.handle(annotation, ctClass, ctMethod); } catch (Exception e) { throw new ConnectorAnnotationException( @@ -55,4 +60,26 @@ public static Object dispatchAndHandle(Annotation annotation, CtClass ctClass, C ); } } + + /** + * 非 HTTP 相关直接返回原注解 + * @param annotation + * @param ctClass + * @param ctMethod + * @return + */ + private static Object otherAnnotations(Annotation annotation, CtClass ctClass, CtMethod ctMethod) { + ConstPool constPool = ctClass.getClassFile().getConstPool(); + AnnotationsAttribute methodAttribute; + AttributeInfo attribute = ctMethod.getMethodInfo().getAttribute(AnnotationsAttribute.visibleTag); + if (Objects.nonNull(attribute)) { + methodAttribute = (AnnotationsAttribute) attribute; + } else { + methodAttribute = new AnnotationsAttribute(constPool, AnnotationsAttribute.visibleTag); + } + javassist.bytecode.annotation.Annotation ctAnnotation = new javassist.bytecode.annotation.Annotation(annotation.annotationType().getTypeName(), constPool); + methodAttribute.addAnnotation(ctAnnotation); + ctMethod.getMethodInfo().addAttribute(methodAttribute); + return true; + } } diff --git a/connector-api/src/test/java/com/tuya/connector/api/annotations/AnnotationConnector.java b/connector-api/src/test/java/com/tuya/connector/api/annotations/AnnotationConnector.java index da6ed4e..f67b367 100644 --- a/connector-api/src/test/java/com/tuya/connector/api/annotations/AnnotationConnector.java +++ b/connector-api/src/test/java/com/tuya/connector/api/annotations/AnnotationConnector.java @@ -1,5 +1,7 @@ package com.tuya.connector.api.annotations; +import lombok.NonNull; + import java.util.List; import java.util.Map; @@ -70,5 +72,6 @@ public interface AnnotationConnector extends AnnotationAbility{ @Override @GET("/test/annotations/url-object") + @NonNull List urlPost(); } diff --git a/connector-messaging/pom.xml b/connector-messaging/pom.xml index dbac7fa..8d92565 100644 --- a/connector-messaging/pom.xml +++ b/connector-messaging/pom.xml @@ -6,7 +6,7 @@ connector com.tuya - 1.3.1 + 1.3.2 connector-messaging diff --git a/connector-spring-boot/connector-spring-boot-autoconfigure/pom.xml b/connector-spring-boot/connector-spring-boot-autoconfigure/pom.xml index dd7a54a..d5b4b2d 100644 --- a/connector-spring-boot/connector-spring-boot-autoconfigure/pom.xml +++ b/connector-spring-boot/connector-spring-boot-autoconfigure/pom.xml @@ -6,7 +6,7 @@ connector-spring-boot com.tuya - 1.3.1 + 1.3.2 connector-spring-boot-autoconfigure diff --git a/connector-spring-boot/connector-spring-boot-starter/pom.xml b/connector-spring-boot/connector-spring-boot-starter/pom.xml index 7057450..544c071 100644 --- a/connector-spring-boot/connector-spring-boot-starter/pom.xml +++ b/connector-spring-boot/connector-spring-boot-starter/pom.xml @@ -6,7 +6,7 @@ connector-spring-boot com.tuya - 1.3.1 + 1.3.2 connector-spring-boot-starter diff --git a/connector-spring-boot/pom.xml b/connector-spring-boot/pom.xml index ca7279b..74b7609 100644 --- a/connector-spring-boot/pom.xml +++ b/connector-spring-boot/pom.xml @@ -6,7 +6,7 @@ connector com.tuya - 1.3.1 + 1.3.2 connector-spring-boot diff --git a/connector-spring/pom.xml b/connector-spring/pom.xml index b72e5b0..1f3b0ee 100644 --- a/connector-spring/pom.xml +++ b/connector-spring/pom.xml @@ -6,7 +6,7 @@ connector com.tuya - 1.3.1 + 1.3.2 connector-spring diff --git a/pom.xml b/pom.xml index ca3ea52..3c71e8e 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ com.tuya connector pom - 1.3.1 + 1.3.2 connector-api