You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by li...@apache.org on 2019/01/14 03:18:10 UTC

[servicecomb-java-chassis] 04/16: [SCB-1071][WIP] change BeanDescriptor to use generic Getter/Setter

This is an automated email from the ASF dual-hosted git repository.

liubao pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/servicecomb-java-chassis.git

commit 40091144b6b375914253c72973b18dccde701aeb
Author: wujimin <wu...@huawei.com>
AuthorDate: Sat Jan 5 19:50:59 2019 +0800

    [SCB-1071][WIP] change BeanDescriptor to use generic Getter/Setter
---
 .../protobuf/internal/bean/BeanDescriptor.java     |  22 +----
 .../protobuf/internal/bean/BeanFactory.java        | 104 ---------------------
 .../protobuf/internal/bean/PropertyDescriptor.java |  32 ++-----
 3 files changed, 14 insertions(+), 144 deletions(-)

diff --git a/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/bean/BeanDescriptor.java b/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/bean/BeanDescriptor.java
index 868d151..fa8ceaa 100644
--- a/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/bean/BeanDescriptor.java
+++ b/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/bean/BeanDescriptor.java
@@ -20,8 +20,6 @@ import java.util.HashMap;
 import java.util.Map;
 
 import org.apache.servicecomb.foundation.common.utils.LambdaMetafactoryUtils;
-import org.apache.servicecomb.foundation.common.utils.bean.Getter;
-import org.apache.servicecomb.foundation.common.utils.bean.Setter;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -35,18 +33,12 @@ public class BeanDescriptor {
 
   private JavaType javaType;
 
-  private BeanFactory factory;
-
   private Map<String, PropertyDescriptor> propertyDescriptors = new HashMap<>();
 
   public JavaType getJavaType() {
     return javaType;
   }
 
-  public BeanFactory getFactory() {
-    return factory;
-  }
-
   public Map<String, PropertyDescriptor> getPropertyDescriptors() {
     return propertyDescriptors;
   }
@@ -54,14 +46,11 @@ public class BeanDescriptor {
   public void init(SerializationConfig serializationConfig, JavaType javaType) {
     this.javaType = javaType;
 
-    this.factory = BeanFactory.createFactory(javaType);
-
     BeanDescription beanDescription = serializationConfig.introspect(javaType);
     for (BeanPropertyDefinition propertyDefinition : beanDescription.findProperties()) {
       PropertyDescriptor propertyDescriptor = new PropertyDescriptor();
       propertyDescriptor.setName(propertyDefinition.getName());
       propertyDescriptor.setJavaType(propertyDefinition.getPrimaryType());
-      propertyDescriptor.setFactory(BeanFactory.createFactory(propertyDefinition.getPrimaryType()));
 
       try {
         propertyDescriptor.setGetter(initGetter(propertyDefinition));
@@ -81,19 +70,20 @@ public class BeanDescriptor {
     }
   }
 
-  protected Getter initGetter(BeanPropertyDefinition propertyDefinition) throws Throwable {
+  @SuppressWarnings("unchecked")
+  public static <T> T initGetter(BeanPropertyDefinition propertyDefinition) {
     if (propertyDefinition.hasGetter()) {
       return LambdaMetafactoryUtils.createGetter(propertyDefinition.getGetter().getAnnotated());
     }
 
     if (propertyDefinition.hasField() && propertyDefinition.getField().isPublic()) {
-      return LambdaMetafactoryUtils.createGetter(propertyDefinition.getField().getAnnotated());
+      return (T) LambdaMetafactoryUtils.createGetter(propertyDefinition.getField().getAnnotated());
     }
 
     return null;
   }
 
-  protected Setter initSetter(BeanPropertyDefinition propertyDefinition) throws Throwable {
+  protected Object initSetter(BeanPropertyDefinition propertyDefinition) throws Throwable {
     if (propertyDefinition.hasSetter()) {
       return LambdaMetafactoryUtils.createSetter(propertyDefinition.getSetter().getAnnotated());
     }
@@ -104,8 +94,4 @@ public class BeanDescriptor {
 
     return null;
   }
-
-  public Object create() {
-    return factory.create();
-  }
 }
diff --git a/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/bean/BeanFactory.java b/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/bean/BeanFactory.java
deleted file mode 100644
index 24594ac..0000000
--- a/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/bean/BeanFactory.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * 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.servicecomb.foundation.protobuf.internal.bean;
-
-import java.util.ArrayList;
-import java.util.LinkedHashMap;
-import java.util.LinkedHashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import com.fasterxml.jackson.databind.JavaType;
-
-import io.protostuff.compiler.model.Field;
-
-public interface BeanFactory {
-  static BeanFactory createFactory(Field field) {
-    // map also is repeated, so must determine first
-    if (field.isMap()) {
-      return BeanFactory::mapFactory;
-    }
-
-    if (field.isRepeated()) {
-      return BeanFactory::listFactory;
-    }
-    
-    if (field.getType().isScalar()) {
-      // no need a factory
-      return null;
-    }
-
-    return BeanFactory::mapFactory;
-  }
-
-  static BeanFactory createFactory(JavaType javaType) {
-    if (javaType.isPrimitive()) {
-      // no need a factory
-      return null;
-    }
-
-    if (List.class.isAssignableFrom(javaType.getRawClass())) {
-      return BeanFactory::listFactory;
-    }
-
-    if (Set.class.isAssignableFrom(javaType.getRawClass())) {
-      return BeanFactory::setFactory;
-    }
-
-    if (Map.class.isAssignableFrom(javaType.getRawClass())) {
-      return BeanFactory::mapFactory;
-    }
-
-    return new ConstructorFactory(javaType);
-  }
-
-  @SuppressWarnings("unchecked")
-  static <T> T listFactory() {
-    return (T) new ArrayList<>();
-  }
-
-  @SuppressWarnings("unchecked")
-  static <T> T setFactory() {
-    return (T) new LinkedHashSet<>();
-  }
-
-  @SuppressWarnings("unchecked")
-  static <T> T mapFactory() {
-    return (T) new LinkedHashMap<>();
-  }
-
-  class ConstructorFactory implements BeanFactory {
-    private final JavaType javaType;
-
-    public ConstructorFactory(JavaType javaType) {
-      this.javaType = javaType;
-    }
-
-    @SuppressWarnings("unchecked")
-    @Override
-    public <T> T create() {
-      try {
-        return (T) javaType.getRawClass().newInstance();
-      } catch (Throwable e) {
-        throw new RuntimeException(e);
-      }
-    }
-  }
-
-  <T> T create();
-}
diff --git a/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/bean/PropertyDescriptor.java b/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/bean/PropertyDescriptor.java
index 4fb6a8f..fa4cd62 100644
--- a/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/bean/PropertyDescriptor.java
+++ b/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/bean/PropertyDescriptor.java
@@ -16,9 +16,6 @@
  */
 package org.apache.servicecomb.foundation.protobuf.internal.bean;
 
-import org.apache.servicecomb.foundation.common.utils.bean.Getter;
-import org.apache.servicecomb.foundation.common.utils.bean.Setter;
-
 import com.fasterxml.jackson.databind.JavaType;
 
 public class PropertyDescriptor {
@@ -26,12 +23,9 @@ public class PropertyDescriptor {
 
   private JavaType javaType;
 
-  private Getter getter;
-
-  private Setter setter;
+  private Object getter;
 
-  // not available for primitive types
-  private BeanFactory factory;
+  private Object setter;
 
   public String getName() {
     return name;
@@ -49,27 +43,21 @@ public class PropertyDescriptor {
     this.javaType = javaType;
   }
 
-  public Getter getGetter() {
-    return getter;
+  @SuppressWarnings("unchecked")
+  public <T> T getGetter() {
+    return (T) getter;
   }
 
-  public void setGetter(Getter getter) {
+  public void setGetter(Object getter) {
     this.getter = getter;
   }
 
-  public Setter getSetter() {
-    return setter;
+  @SuppressWarnings("unchecked")
+  public <T> T getSetter() {
+    return (T) setter;
   }
 
-  public void setSetter(Setter setter) {
+  public void setSetter(Object setter) {
     this.setter = setter;
   }
-
-  public BeanFactory getFactory() {
-    return factory;
-  }
-
-  public void setFactory(BeanFactory factory) {
-    this.factory = factory;
-  }
 }