This is an automated email from the ASF dual-hosted git repository. mercyblitz pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/dubbo.git
The following commit(s) were added to refs/heads/master by this push: new 80acc24 fix #6306. support TypeBuilder sort (#6365) 80acc24 is described below commit 80acc241da3dd50f4eb66cc1b8ae7e2a88d9fe2c Author: cvictory <shenglic...@gmail.com> AuthorDate: Mon Jun 29 14:42:23 2020 +0800 fix #6306. support TypeBuilder sort (#6365) * fix #6306. support TypeBuilder sort * fix #6306. support TypeBuilder sort * fix #6306. support TypeBuilder sort * remove unused import * add license for test file --- .../metadata/definition/TypeDefinitionBuilder.java | 10 +++---- .../metadata/definition/builder/TypeBuilder.java | 3 ++- .../metadata/definition/Test3TypeBuilder.java} | 30 +++++++++++---------- .../metadata/definition/TestTypeBuilder.java} | 30 +++++++++++---------- .../definition/TypeDefinitionBuilderTest.java} | 31 +++++++++------------- ...e.dubbo.metadata.definition.builder.TypeBuilder | 2 ++ 6 files changed, 52 insertions(+), 54 deletions(-) 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 d1275e7..fe99d2e 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 @@ -28,6 +28,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Set; import static org.apache.dubbo.common.utils.ClassUtils.isSimpleType; @@ -36,15 +37,12 @@ import static org.apache.dubbo.common.utils.ClassUtils.isSimpleType; */ public class TypeDefinitionBuilder { private static final Logger logger = LoggerFactory.getLogger(TypeDefinitionBuilder.class); - private static final List<TypeBuilder> BUILDERS; + static final List<TypeBuilder> BUILDERS; static { - List<TypeBuilder> builders = new ArrayList<>(); ExtensionLoader<TypeBuilder> extensionLoader = ExtensionLoader.getExtensionLoader(TypeBuilder.class); - for (String extensionName : extensionLoader.getSupportedExtensions()) { - builders.add(extensionLoader.getExtension(extensionName)); - } - BUILDERS = builders; + Set<TypeBuilder> tbs = extensionLoader.getSupportedExtensionInstances(); + BUILDERS = new ArrayList<>(tbs); } public static TypeDefinition build(Type type, Class<?> clazz, Map<Class<?>, TypeDefinition> typeCache) { 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 d7022bd..57673fe 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 @@ -17,6 +17,7 @@ package org.apache.dubbo.metadata.definition.builder; import org.apache.dubbo.common.extension.SPI; +import org.apache.dubbo.common.lang.Prioritized; import org.apache.dubbo.metadata.definition.model.TypeDefinition; import java.lang.reflect.Type; @@ -26,7 +27,7 @@ import java.util.Map; * 2015/1/27. */ @SPI -public interface TypeBuilder { +public interface TypeBuilder extends Prioritized { /** * Whether the build accept the type or class passed in. 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/test/java/org/apache/dubbo/metadata/definition/Test3TypeBuilder.java old mode 100755 new mode 100644 similarity index 63% copy from dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/definition/builder/TypeBuilder.java copy to dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/definition/Test3TypeBuilder.java index d7022bd..075a69e --- a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/definition/builder/TypeBuilder.java +++ b/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/definition/Test3TypeBuilder.java @@ -14,28 +14,30 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.dubbo.metadata.definition.builder; +package org.apache.dubbo.metadata.definition; -import org.apache.dubbo.common.extension.SPI; +import org.apache.dubbo.metadata.definition.builder.TypeBuilder; import org.apache.dubbo.metadata.definition.model.TypeDefinition; import java.lang.reflect.Type; import java.util.Map; /** - * 2015/1/27. + * test for sort */ -@SPI -public interface TypeBuilder { +public class Test3TypeBuilder implements TypeBuilder { + // it is smaller than the implements of TypeBuilder + public int getPriority(){ + return 10; + } - /** - * Whether the build accept the type or class passed in. - */ - boolean accept(Type type, Class<?> clazz); - - /** - * Build type definition with the type or class. - */ - TypeDefinition build(Type type, Class<?> clazz, Map<Class<?>, TypeDefinition> typeCache); + @Override + public boolean accept(Type type, Class<?> clazz) { + return false; + } + @Override + public TypeDefinition build(Type type, Class<?> clazz, Map<Class<?>, TypeDefinition> typeCache) { + return null; + } } 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/test/java/org/apache/dubbo/metadata/definition/TestTypeBuilder.java old mode 100755 new mode 100644 similarity index 63% copy from dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/definition/builder/TypeBuilder.java copy to dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/definition/TestTypeBuilder.java index d7022bd..bf7e9c6 --- a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/definition/builder/TypeBuilder.java +++ b/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/definition/TestTypeBuilder.java @@ -14,28 +14,30 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.dubbo.metadata.definition.builder; +package org.apache.dubbo.metadata.definition; -import org.apache.dubbo.common.extension.SPI; +import org.apache.dubbo.metadata.definition.builder.TypeBuilder; import org.apache.dubbo.metadata.definition.model.TypeDefinition; import java.lang.reflect.Type; import java.util.Map; /** - * 2015/1/27. + * test for sort */ -@SPI -public interface TypeBuilder { +public class TestTypeBuilder implements TypeBuilder { + // it is smaller than the implements of TypeBuilder + public int getPriority(){ + return -3; + } - /** - * Whether the build accept the type or class passed in. - */ - boolean accept(Type type, Class<?> clazz); - - /** - * Build type definition with the type or class. - */ - TypeDefinition build(Type type, Class<?> clazz, Map<Class<?>, TypeDefinition> typeCache); + @Override + public boolean accept(Type type, Class<?> clazz) { + return false; + } + @Override + public TypeDefinition build(Type type, Class<?> clazz, Map<Class<?>, TypeDefinition> typeCache) { + return null; + } } 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/test/java/org/apache/dubbo/metadata/definition/TypeDefinitionBuilderTest.java old mode 100755 new mode 100644 similarity index 58% copy from dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/definition/builder/TypeBuilder.java copy to dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/definition/TypeDefinitionBuilderTest.java index d7022bd..11d03a1 --- a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/definition/builder/TypeBuilder.java +++ b/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/definition/TypeDefinitionBuilderTest.java @@ -14,28 +14,21 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.dubbo.metadata.definition.builder; +package org.apache.dubbo.metadata.definition; -import org.apache.dubbo.common.extension.SPI; -import org.apache.dubbo.metadata.definition.model.TypeDefinition; +import org.apache.dubbo.metadata.definition.builder.TypeBuilder; -import java.lang.reflect.Type; -import java.util.Map; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; -/** - * 2015/1/27. - */ -@SPI -public interface TypeBuilder { - - /** - * Whether the build accept the type or class passed in. - */ - boolean accept(Type type, Class<?> clazz); +public class TypeDefinitionBuilderTest { - /** - * Build type definition with the type or class. - */ - TypeDefinition build(Type type, Class<?> clazz, Map<Class<?>, TypeDefinition> typeCache); + @Test + public void testSortTypeBuilder(){ + TypeBuilder tb = TypeDefinitionBuilder.BUILDERS.get(0); + Assertions.assertTrue(tb instanceof TestTypeBuilder); + tb = TypeDefinitionBuilder.BUILDERS.get(TypeDefinitionBuilder.BUILDERS.size()-1); + Assertions.assertTrue(tb instanceof Test3TypeBuilder); + } } diff --git a/dubbo-metadata/dubbo-metadata-api/src/test/resources/META-INF/dubbo/internal/org.apache.dubbo.metadata.definition.builder.TypeBuilder b/dubbo-metadata/dubbo-metadata-api/src/test/resources/META-INF/dubbo/internal/org.apache.dubbo.metadata.definition.builder.TypeBuilder new file mode 100644 index 0000000..1b1b7d2 --- /dev/null +++ b/dubbo-metadata/dubbo-metadata-api/src/test/resources/META-INF/dubbo/internal/org.apache.dubbo.metadata.definition.builder.TypeBuilder @@ -0,0 +1,2 @@ +test=org.apache.dubbo.metadata.definition.TestTypeBuilder +test3=org.apache.dubbo.metadata.definition.Test3TypeBuilder