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;
- }
}