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

Reply via email to