From f2c5eb9372bb70b6bc191906fd1c292b8a44cd25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=81=BC=E5=8D=8E?= <43363120+BurningCN@users.noreply.github.com> Date: Mon, 20 Sep 2021 23:01:11 +0800 Subject: [PATCH] Add [annotation] test case for ServiceDefinitionBuilderTest & remove unused parameter (#8788) * Add [annotation] test case for ServiceDefinitionBuilderTest & remove unused parameter * Fix ut * Fix ut --- .../definition/TypeDefinitionBuilder.java | 6 ++-- .../definition/builder/ArrayTypeBuilder.java | 4 +-- .../builder/CollectionTypeBuilder.java | 2 +- .../definition/builder/EnumTypeBuilder.java | 2 +- .../definition/builder/MapTypeBuilder.java | 2 +- .../definition/builder/TypeBuilder.java | 4 +-- .../metadata/definition/util/ClassUtils.java | 2 +- .../ServiceDefinitionBuilderTest.java | 20 ++++++++++--- .../metadata/definition/Test3TypeBuilder.java | 2 +- .../metadata/definition/TestTypeBuilder.java | 2 +- .../definition/service/DemoService.java | 8 ++++++ .../annotation/MockMethodAnnotation.java | 28 +++++++++++++++++++ .../annotation/MockMethodAnnotation2.java | 28 +++++++++++++++++++ .../annotation/MockTypeAnnotation.java | 28 +++++++++++++++++++ .../protobuf/ProtobufTypeBuilder.java | 2 +- 15 files changed, 122 insertions(+), 18 deletions(-) create mode 100644 dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/definition/service/annotation/MockMethodAnnotation.java create mode 100644 dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/definition/service/annotation/MockMethodAnnotation2.java create mode 100644 dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/definition/service/annotation/MockTypeAnnotation.java diff --git a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/definition/TypeDefinitionBuilder.java b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/definition/TypeDefinitionBuilder.java index 25cea8652f..b2758e39b2 100755 --- a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/definition/TypeDefinitionBuilder.java +++ b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/definition/TypeDefinitionBuilder.java @@ -46,7 +46,7 @@ public class TypeDefinitionBuilder { } public static TypeDefinition build(Type type, Class clazz, Map typeCache) { - TypeBuilder builder = getGenericTypeBuilder(type, clazz); + TypeBuilder builder = getGenericTypeBuilder(clazz); TypeDefinition td; if (clazz.isPrimitive() || ClassUtils.isSimpleType(clazz)) { // changed since 2.7.6 @@ -60,10 +60,10 @@ public class TypeDefinitionBuilder { return td; } - private static TypeBuilder getGenericTypeBuilder(Type type, Class clazz) { + private static TypeBuilder getGenericTypeBuilder(Class clazz) { for (TypeBuilder builder : BUILDERS) { try { - if (builder.accept(type, clazz)) { + if (builder.accept(clazz)) { return builder; } } catch (NoClassDefFoundError cnfe) { diff --git a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/definition/builder/ArrayTypeBuilder.java b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/definition/builder/ArrayTypeBuilder.java index e5191a1350..78cc7a5a10 100755 --- a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/definition/builder/ArrayTypeBuilder.java +++ b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/definition/builder/ArrayTypeBuilder.java @@ -28,7 +28,7 @@ import java.util.Map; public class ArrayTypeBuilder implements TypeBuilder { @Override - public boolean accept(Type type, Class clazz) { + public boolean accept(Class clazz) { if (clazz == null) { return false; } @@ -44,7 +44,7 @@ public class ArrayTypeBuilder implements TypeBuilder { } td = new TypeDefinition(canonicalName); typeCache.put(canonicalName, td); - // Process the component type of an array. + // Process the component type of array. Class componentType = clazz.getComponentType(); TypeDefinition itemTd = TypeDefinitionBuilder.build(componentType, componentType, typeCache); if (itemTd != null) { diff --git a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/definition/builder/CollectionTypeBuilder.java b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/definition/builder/CollectionTypeBuilder.java index 4e28e65f78..6c6ee11010 100755 --- a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/definition/builder/CollectionTypeBuilder.java +++ b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/definition/builder/CollectionTypeBuilder.java @@ -33,7 +33,7 @@ import java.util.Map; public class CollectionTypeBuilder implements TypeBuilder { @Override - public boolean accept(Type type, Class clazz) { + public boolean accept(Class clazz) { if (clazz == null) { return false; } diff --git a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/definition/builder/EnumTypeBuilder.java b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/definition/builder/EnumTypeBuilder.java index 4cfdc97e7f..1f5d52a43d 100755 --- a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/definition/builder/EnumTypeBuilder.java +++ b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/definition/builder/EnumTypeBuilder.java @@ -32,7 +32,7 @@ public class EnumTypeBuilder implements TypeBuilder { private static final Logger logger = LoggerFactory.getLogger(TypeDefinitionBuilder.class); @Override - public boolean accept(Type type, Class clazz) { + public boolean accept(Class clazz) { if (clazz == null) { return false; } diff --git a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/definition/builder/MapTypeBuilder.java b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/definition/builder/MapTypeBuilder.java index cac87d2979..fc13ff2885 100755 --- a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/definition/builder/MapTypeBuilder.java +++ b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/definition/builder/MapTypeBuilder.java @@ -35,7 +35,7 @@ import static org.apache.dubbo.common.utils.TypeUtils.isParameterizedType; public class MapTypeBuilder implements TypeBuilder { @Override - public boolean accept(Type type, Class clazz) { + public boolean accept(Class clazz) { if (clazz == null) { return false; } diff --git a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/definition/builder/TypeBuilder.java b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/definition/builder/TypeBuilder.java index 0bd48d34c6..050de3c459 100755 --- a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/definition/builder/TypeBuilder.java +++ b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/definition/builder/TypeBuilder.java @@ -30,9 +30,9 @@ import java.util.Map; public interface TypeBuilder extends Prioritized { /** - * Whether the build accept the type or class passed in. + * Whether the build accept the class passed in. */ - boolean accept(Type type, Class clazz); + boolean accept(Class clazz); /** * Build type definition with the type or class. diff --git a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/definition/util/ClassUtils.java b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/definition/util/ClassUtils.java index 3c9c50e551..f09deab283 100755 --- a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/definition/util/ClassUtils.java +++ b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/definition/util/ClassUtils.java @@ -50,7 +50,7 @@ public final class ClassUtils { return null; } - String path = codeSource.getLocation().toExternalForm(); + String path = location.toExternalForm(); if (path.endsWith(".jar") && path.contains("/")) { return path.substring(path.lastIndexOf('/') + 1); diff --git a/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/definition/ServiceDefinitionBuilderTest.java b/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/definition/ServiceDefinitionBuilderTest.java index 24868e9d29..91d65bf857 100644 --- a/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/definition/ServiceDefinitionBuilderTest.java +++ b/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/definition/ServiceDefinitionBuilderTest.java @@ -33,30 +33,42 @@ import java.util.List; public class ServiceDefinitionBuilderTest { @Test - public void testBuilderComplextObject() { + public void testBuilderComplexObject() { FullServiceDefinition fullServiceDefinition = ServiceDefinitionBuilder.buildFullDefinition(DemoService.class); - checkComplextObjectAsParam(fullServiceDefinition); + checkComplexObjectAsParam(fullServiceDefinition); } - void checkComplextObjectAsParam(FullServiceDefinition fullServiceDefinition) { + void checkComplexObjectAsParam(FullServiceDefinition fullServiceDefinition) { + Assertions.assertEquals(fullServiceDefinition.getAnnotations(), + Arrays.asList("@org.apache.dubbo.metadata.definition.service.annotation.MockTypeAnnotation(value=666)")); + List methodDefinitions = fullServiceDefinition.getMethods(); MethodDefinition complexCompute = null; MethodDefinition findComplexObject = null; + MethodDefinition testAnnotation = null; for (MethodDefinition methodDefinition : methodDefinitions) { if ("complexCompute".equals(methodDefinition.getName())) { complexCompute = methodDefinition; } else if ("findComplexObject".equals(methodDefinition.getName())) { findComplexObject = methodDefinition; + } else if ("testAnnotation".equals(methodDefinition.getName())) { + testAnnotation = methodDefinition; } } Assertions.assertTrue(Arrays.equals(complexCompute.getParameterTypes(), new String[]{String.class.getName(), ComplexObject.class.getName()})); Assertions.assertEquals(complexCompute.getReturnType(), String.class.getName()); Assertions.assertTrue(Arrays.equals(findComplexObject.getParameterTypes(), new String[]{String.class.getName(), "int", "long", - String[].class.getCanonicalName(), "java.util.List", ComplexObject.TestEnum.class.getCanonicalName()})); + String[].class.getCanonicalName(), "java.util.List", ComplexObject.TestEnum.class.getCanonicalName()})); Assertions.assertEquals(findComplexObject.getReturnType(), ComplexObject.class.getCanonicalName()); + Assertions.assertEquals(testAnnotation.getAnnotations(), Arrays.asList( + "@org.apache.dubbo.metadata.definition.service.annotation.MockMethodAnnotation(value=777)", + "@org.apache.dubbo.metadata.definition.service.annotation.MockMethodAnnotation2(value=888)")); + Assertions.assertEquals(testAnnotation.getReturnType(), "void"); + + List typeDefinitions = fullServiceDefinition.getTypes(); TypeDefinition topTypeDefinition = null; diff --git a/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/definition/Test3TypeBuilder.java b/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/definition/Test3TypeBuilder.java index b74e8cd48c..e142786120 100644 --- a/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/definition/Test3TypeBuilder.java +++ b/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/definition/Test3TypeBuilder.java @@ -33,7 +33,7 @@ public class Test3TypeBuilder implements TypeBuilder { } @Override - public boolean accept(Type type, Class clazz) { + public boolean accept (Class clazz) { return false; } diff --git a/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/definition/TestTypeBuilder.java b/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/definition/TestTypeBuilder.java index 9a1feab5d9..393e773405 100644 --- a/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/definition/TestTypeBuilder.java +++ b/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/definition/TestTypeBuilder.java @@ -33,7 +33,7 @@ public class TestTypeBuilder implements TypeBuilder { } @Override - public boolean accept(Type type, Class clazz) { + public boolean accept(Class clazz) { return false; } diff --git a/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/definition/service/DemoService.java b/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/definition/service/DemoService.java index c839c6645d..cd24b03e62 100644 --- a/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/definition/service/DemoService.java +++ b/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/definition/service/DemoService.java @@ -16,15 +16,23 @@ */ package org.apache.dubbo.metadata.definition.service; +import org.apache.dubbo.metadata.definition.service.annotation.MockMethodAnnotation; +import org.apache.dubbo.metadata.definition.service.annotation.MockMethodAnnotation2; +import org.apache.dubbo.metadata.definition.service.annotation.MockTypeAnnotation; + import java.util.List; /** * for test */ +@MockTypeAnnotation(666) public interface DemoService { String complexCompute(String input, ComplexObject co); ComplexObject findComplexObject(String var1, int var2, long l, String[] var3, List var4, ComplexObject.TestEnum testEnum); + @MockMethodAnnotation(777) + @MockMethodAnnotation2(888) + void testAnnotation(boolean flag); } diff --git a/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/definition/service/annotation/MockMethodAnnotation.java b/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/definition/service/annotation/MockMethodAnnotation.java new file mode 100644 index 0000000000..63351f150d --- /dev/null +++ b/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/definition/service/annotation/MockMethodAnnotation.java @@ -0,0 +1,28 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.dubbo.metadata.definition.service.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +public @interface MockMethodAnnotation { + int value(); +} diff --git a/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/definition/service/annotation/MockMethodAnnotation2.java b/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/definition/service/annotation/MockMethodAnnotation2.java new file mode 100644 index 0000000000..e845a00c69 --- /dev/null +++ b/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/definition/service/annotation/MockMethodAnnotation2.java @@ -0,0 +1,28 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.dubbo.metadata.definition.service.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +public @interface MockMethodAnnotation2 { + int value(); +} diff --git a/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/definition/service/annotation/MockTypeAnnotation.java b/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/definition/service/annotation/MockTypeAnnotation.java new file mode 100644 index 0000000000..d718090e31 --- /dev/null +++ b/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/definition/service/annotation/MockTypeAnnotation.java @@ -0,0 +1,28 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.dubbo.metadata.definition.service.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +public @interface MockTypeAnnotation { + int value(); +} diff --git a/dubbo-metadata/dubbo-metadata-definition-protobuf/src/main/java/org/apache/dubbo/metadata/definition/protobuf/ProtobufTypeBuilder.java b/dubbo-metadata/dubbo-metadata-definition-protobuf/src/main/java/org/apache/dubbo/metadata/definition/protobuf/ProtobufTypeBuilder.java index 7161dd2e88..13adf95938 100644 --- a/dubbo-metadata/dubbo-metadata-definition-protobuf/src/main/java/org/apache/dubbo/metadata/definition/protobuf/ProtobufTypeBuilder.java +++ b/dubbo-metadata/dubbo-metadata-definition-protobuf/src/main/java/org/apache/dubbo/metadata/definition/protobuf/ProtobufTypeBuilder.java @@ -61,7 +61,7 @@ public class ProtobufTypeBuilder implements TypeBuilder, Prioritized { } @Override - public boolean accept(Type type, Class clazz) { + public boolean accept(Class clazz) { if (clazz == null) { return false; }