- [x] I have searched the [issues](https://github.com/apache/dubbo/issues) of this repository and believe that this is not a duplicate.
- [x] I have checked the [FAQ](https://github.com/apache/dubbo/blob/master/FAQ.md) of this repository and believe that this is not a duplicate.

### Environment

* Dubbo version: 2.7.3
* Operating System version:  win7
* Java version: jdk8

### Steps to reproduce this issue

1.  define a service Interface like this.
```
public interface HelloBOMService {
  PersonResponseType get(PersonRequestType request) throws Exception;
}
```
2. getServiceDefinition and print Method Parameter
``` 
 ServiceDefinition serviceDefinition = ServiceDefinitionBuilder.build(HelloBOMService.class);
        System.out.println(serviceDefinition.getMethods().get(0).getParameters());
```
3. the methodDefition return  an empty list 

1. Extends TypeBuilder to construct Protobuf typeBuilder and add SPI file.
```
@SPI
public interface TypeBuilder {
```
2. Use serviceDefition.getTypes() to obtains all TypeDefinitions. It is nessary to know which TypeDefinitionBuilder build this TypeDefition.When TypeBuilder generate same ServiceDefinition
use different logic.

### Expected Result
We could get parameter type list from MethodDefition.
We should know which Builder build this TypeDefition.

@Test
    public void testInnerClassType() {
        TypeDefinitionBuilder builder = new TypeDefinitionBuilder();
        TypeDefinition td = builder.build(OuterClass.InnerClass.class, OuterClass.InnerClass.class);
        System.out.println(">> testInnerClassType: " + new Gson().toJson(td));
        Assertions.assertEquals("org.apache.dubbo.metadata.definition.common.OuterClass$InnerClass", td.getType());
        Assertions.assertEquals(1, td.getProperties().size());
        Assertions.assertNotNull(td.getProperties().get("name"));
        ServiceDefinition sd = MetadataUtils.generateMetadata(TestService.class);
        System.out.println(">> testInnerClassType: " + new Gson().toJson(sd));
        Assertions.assertEquals(TestService.class.getName(), sd.getCanonicalName());
        Assertions.assertEquals(TestService.class.getMethods().length, sd.getMethods().size());
        boolean containsType = false;
        for (TypeDefinition type : sd.getTypes()) {
            if (type.getType().equals("org.apache.dubbo.metadata.definition.common.OuterClass$InnerClass")) {
                containsType = true;
                break;
            }
        }
        Assertions.assertTrue(containsType);
    }
    /**
     */
    @Test
    public void testRawMap() {
        TypeDefinitionBuilder builder = new TypeDefinitionBuilder();
        TypeDefinition td = builder.build(ResultWithRawCollections.class, ResultWithRawCollections.class);
        System.out.println(">> testRawMap: " + new Gson().toJson(td));
        Assertions.assertEquals("org.apache.dubbo.metadata.definition.common.ResultWithRawCollections", td.getType());
        Assertions.assertEquals(2, td.getProperties().size());