Skip to content

Commit

Permalink
fix apache#6306. support TypeBuilder sort
Browse files Browse the repository at this point in the history
  • Loading branch information
cvictory committed Jun 24, 2020
1 parent 5230444 commit c01cc6c
Show file tree
Hide file tree
Showing 6 changed files with 61 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@

import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
Expand All @@ -36,14 +37,20 @@
*/
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.sort(new Comparator<TypeBuilder>() {
@Override
public int compare(TypeBuilder o1, TypeBuilder o2) {
return o1.order() - o2.order();
}
});
BUILDERS = builders;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,11 @@
*/
public class CollectionTypeBuilder implements TypeBuilder {

@Override
public int order(){
return 99;
}

@Override
public boolean accept(Type type, Class<?> clazz) {
if (clazz == null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,11 @@
@SPI
public interface TypeBuilder {

// the smaller, it is have much more priority
default int order(){
return 100;
}

/**
* Whether the build accept the type or class passed in.
*/
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package org.apache.dubbo.metadata.definition;

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;

/**
* test for sort
*/
public class TestTypeBuilder implements TypeBuilder {
// it is smaller than the implements of TypeBuilder
public int order(){
return 10;
}

@Override
public boolean accept(Type type, Class<?> clazz) {
return false;
}

@Override
public TypeDefinition build(Type type, Class<?> clazz, Map<Class<?>, TypeDefinition> typeCache) {
return null;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package org.apache.dubbo.metadata.definition;

import org.apache.dubbo.metadata.definition.builder.TypeBuilder;

import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;

public class TypeDefinitionBuilderTest {

@Test
public void testSortTypeBuilder(){
TypeBuilder tb = TypeDefinitionBuilder.BUILDERS.get(0);
Assertions.assertTrue(tb instanceof TestTypeBuilder);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
test=org.apache.dubbo.metadata.definition.TestTypeBuilder

0 comments on commit c01cc6c

Please sign in to comment.