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/incubator-servicecomb-java-chassis.git

commit 086fd06a19ee6a64973925438db4419a67ca6031
Author: wujimin <wuji...@huawei.com>
AuthorDate: Mon May 7 17:15:28 2018 +0800

    [scb-533][WIP] JavassistUtils switch from JavaType to CtType
---
 .../servicecomb/common/javassist/ClassConfig.java  |  6 ++-
 .../servicecomb/common/javassist/FieldConfig.java  | 28 +++--------
 .../common/javassist/JavassistUtils.java           | 55 +++++-----------------
 .../servicecomb/common/javassist/MethodConfig.java | 22 ++++++---
 .../common/javassist/ParameterConfig.java          |  8 ++--
 .../common/javassist/TestJavassistUtils.java       | 46 +++++++++---------
 6 files changed, 65 insertions(+), 100 deletions(-)

diff --git 
a/common/common-javassist/src/main/java/org/apache/servicecomb/common/javassist/ClassConfig.java
 
b/common/common-javassist/src/main/java/org/apache/servicecomb/common/javassist/ClassConfig.java
index 9471d7a..bc070ba 100644
--- 
a/common/common-javassist/src/main/java/org/apache/servicecomb/common/javassist/ClassConfig.java
+++ 
b/common/common-javassist/src/main/java/org/apache/servicecomb/common/javassist/ClassConfig.java
@@ -73,9 +73,13 @@ public class ClassConfig {
   }
 
   public FieldConfig addField(String name, JavaType javaType) {
+    return addField(name, new CtType(javaType));
+  }
+
+  public FieldConfig addField(String name, CtType ctType) {
     FieldConfig field = new FieldConfig();
     field.setName(name);
-    field.setType(javaType);
+    field.setType(ctType);
 
     fieldList.add(field);
 
diff --git 
a/common/common-javassist/src/main/java/org/apache/servicecomb/common/javassist/FieldConfig.java
 
b/common/common-javassist/src/main/java/org/apache/servicecomb/common/javassist/FieldConfig.java
index c630b73..8975690 100644
--- 
a/common/common-javassist/src/main/java/org/apache/servicecomb/common/javassist/FieldConfig.java
+++ 
b/common/common-javassist/src/main/java/org/apache/servicecomb/common/javassist/FieldConfig.java
@@ -17,17 +17,12 @@
 
 package org.apache.servicecomb.common.javassist;
 
-import org.springframework.util.ClassUtils;
-
 import com.fasterxml.jackson.databind.JavaType;
 
 public class FieldConfig {
   private String name;
 
-  // javassist的成员不支持int这样的类型,必须是Integer才行
-  private Class<?> rawType;
-
-  private JavaType type;
+  private CtType type;
 
   private boolean genGetter;
 
@@ -41,17 +36,16 @@ public class FieldConfig {
     this.name = name;
   }
 
-  public Class<?> getRawType() {
-    return rawType;
+  public CtType getType() {
+    return type;
   }
 
-  public JavaType getType() {
-    return type;
+  public void setType(JavaType javaType) {
+    this.type = new CtType(javaType);
   }
 
-  public void setType(JavaType type) {
-    this.rawType = ClassUtils.resolvePrimitiveIfNecessary(type.getRawClass());
-    this.type = type;
+  public void setType(CtType ctType) {
+    this.type = ctType;
   }
 
   public boolean isGenGetter() {
@@ -69,12 +63,4 @@ public class FieldConfig {
   public void setGenSetter(boolean genSetter) {
     this.genSetter = genSetter;
   }
-
-  public String getGenericSignature() {
-    if (type.hasGenericTypes()) {
-      return type.getGenericSignature();
-    }
-
-    return null;
-  }
 }
diff --git 
a/common/common-javassist/src/main/java/org/apache/servicecomb/common/javassist/JavassistUtils.java
 
b/common/common-javassist/src/main/java/org/apache/servicecomb/common/javassist/JavassistUtils.java
index 631215a..025ea94 100644
--- 
a/common/common-javassist/src/main/java/org/apache/servicecomb/common/javassist/JavassistUtils.java
+++ 
b/common/common-javassist/src/main/java/org/apache/servicecomb/common/javassist/JavassistUtils.java
@@ -26,9 +26,7 @@ import java.util.List;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.springframework.util.ClassUtils;
 
-import com.fasterxml.jackson.databind.JavaType;
 import com.google.common.hash.Hashing;
 
 import javassist.CannotCompileException;
@@ -38,7 +36,6 @@ import javassist.CtConstructor;
 import javassist.CtField;
 import javassist.CtMethod;
 import javassist.scopedpool.ScopedClassPoolRepositoryImpl;
-import javassist.NotFoundException;
 
 public final class JavassistUtils {
   private static final Logger LOGGER = 
LoggerFactory.getLogger(JavassistUtils.class);
@@ -163,7 +160,7 @@ public final class JavassistUtils {
       }
 
       for (FieldConfig fieldConfig : config.getFieldList()) {
-        CtField field = createCtField(classPool, ctClass, fieldConfig);
+        CtField field = createCtField(ctClass, fieldConfig);
         ctClass.addField(field);
 
         if (fieldConfig.isGenGetter()) {
@@ -205,9 +202,9 @@ public final class JavassistUtils {
   private static void addFieldGetter(ClassConfig config, FieldConfig 
fieldConfig) {
     MethodConfig methodConfig = new MethodConfig();
 
-    Class<?> cls = fieldConfig.getRawType();
     String prefix = "get";
-    if (cls.equals(Boolean.class) || cls.equals(boolean.class)) {
+    if 
(boolean.class.getName().equals(fieldConfig.getType().getCtClass().getName())
+        || 
Boolean.class.getName().equals(fieldConfig.getType().getCtClass().getName())) {
       prefix = "is";
     }
     methodConfig.setName(prefix + capitalize(fieldConfig.getName()));
@@ -254,7 +251,7 @@ public final class JavassistUtils {
     }
   }
 
-  private static String genReadFieldsMethodSource(List<FieldConfig> fieldList) 
throws Exception {
+  private static String genReadFieldsMethodSource(List<FieldConfig> fieldList) 
{
     StringBuilder sb = new StringBuilder();
     sb.append("public Object[] readFields(){");
     sb.append(String.format("Object values[] = new Object[%d];", 
fieldList.size()));
@@ -273,17 +270,16 @@ public final class JavassistUtils {
     return sb.toString();
   }
 
-  private static String genWriteFieldsMethodSource(List<FieldConfig> 
fieldList) throws Exception {
+  private static String genWriteFieldsMethodSource(List<FieldConfig> 
fieldList) {
     StringBuilder sb = new StringBuilder();
     sb.append("public void writeFields(Object[] values){");
     for (int idx = 0; idx < fieldList.size(); idx++) {
       FieldConfig fieldConfig = fieldList.get(idx);
 
       String fieldName = fieldConfig.getName();
-      Class<?> type = fieldConfig.getRawType();
       String code = String.format("    %s = (%s)values[%d];",
           fieldName,
-          type.getTypeName(),
+          fieldConfig.getType().getCtClass().getName(),
           idx);
 
       sb.append(code);
@@ -293,7 +289,7 @@ public final class JavassistUtils {
     return sb.toString();
   }
 
-  private static String genReadFieldMethodSource(List<FieldConfig> fieldList) 
throws Exception {
+  private static String genReadFieldMethodSource(List<FieldConfig> fieldList) {
     StringBuilder sb = new StringBuilder();
     sb.append("public Object readField(){");
 
@@ -308,7 +304,7 @@ public final class JavassistUtils {
     return sb.toString();
   }
 
-  private static String genWriteFieldMethodSource(List<FieldConfig> fieldList) 
throws Exception {
+  private static String genWriteFieldMethodSource(List<FieldConfig> fieldList) 
{
     StringBuilder sb = new StringBuilder();
     sb.append("public void writeField(Object value){");
 
@@ -317,7 +313,7 @@ public final class JavassistUtils {
       sb.append(
           String.format("    %s=(%s)value;",
               fieldConfig.getName(),
-              fieldConfig.getRawType().getTypeName()));
+              fieldConfig.getType().getCtClass().getName()));
     }
 
     sb.append("}");
@@ -325,37 +321,12 @@ public final class JavassistUtils {
     return sb.toString();
   }
 
-  private static CtField createCtField(ClassPool pool, CtClass ctClass, 
FieldConfig field) throws Exception {
-    Class<?> fieldType = field.getRawType();
-
-    CtField ctField = new CtField(pool.getCtClass(fieldType.getName()), 
field.getName(), ctClass);
-    if (field.getGenericSignature() != null) {
-      ctField.setGenericSignature(field.getGenericSignature());
+  private static CtField createCtField(CtClass ctClass, FieldConfig field) 
throws CannotCompileException {
+    CtField ctField = new CtField(field.getType().getCtClass(), 
field.getName(), ctClass);
+    if (field.getType().hasGenericTypes()) {
+      ctField.setGenericSignature(field.getType().getGenericSignature());
     }
     ctField.setModifiers(Modifier.PUBLIC);
     return ctField;
   }
-
-  public static String getNameForGenerateCode(JavaType javaType) {
-    if (byte[].class.equals(javaType.getRawClass())) {
-      return "byte[]";
-    }
-
-    if (!javaType.isArrayType()) {
-      Class<?> rawClass = 
ClassUtils.resolvePrimitiveIfNecessary(javaType.getRawClass());
-      return rawClass.getTypeName();
-    }
-
-    return javaType.getContentType().getRawClass().getName() + "[]";
-  }
-
-  // for test
-  public static void detach(String clsName) {
-    try {
-      ClassPool classPool = 
getOrCreateClassPool(Thread.currentThread().getContextClassLoader());
-      classPool.getCtClass(clsName).detach();
-    } catch (NotFoundException e) {
-      // do nothing.
-    }
-  }
 }
diff --git 
a/common/common-javassist/src/main/java/org/apache/servicecomb/common/javassist/MethodConfig.java
 
b/common/common-javassist/src/main/java/org/apache/servicecomb/common/javassist/MethodConfig.java
index aa0b773..437c308 100644
--- 
a/common/common-javassist/src/main/java/org/apache/servicecomb/common/javassist/MethodConfig.java
+++ 
b/common/common-javassist/src/main/java/org/apache/servicecomb/common/javassist/MethodConfig.java
@@ -25,7 +25,7 @@ import com.fasterxml.jackson.databind.JavaType;
 public class MethodConfig {
   private String name;
 
-  private JavaType result;
+  private CtType result;
 
   private List<ParameterConfig> parameterList = new ArrayList<>();
 
@@ -60,14 +60,22 @@ public class MethodConfig {
     this.name = name;
   }
 
-  public void setResult(JavaType result) {
+  public void setResult(JavaType javaType) {
+    this.result = new CtType(javaType);
+  }
+
+  public void setResult(CtType result) {
     this.result = result;
   }
 
-  public void addParameter(String name, JavaType type) {
+  public void addParameter(String name, JavaType javaType) {
+    addParameter(name, new CtType(javaType));
+  }
+
+  public void addParameter(String name, CtType ctType) {
     ParameterConfig parameterConfig = new ParameterConfig();
     parameterConfig.setName(name);
-    parameterConfig.setType(type);
+    parameterConfig.setType(ctType);
     parameterList.add(parameterConfig);
   }
 
@@ -84,17 +92,17 @@ public class MethodConfig {
     StringBuilder sbMethodGenericSignature = new StringBuilder();
 
     sbMethod.append("public ");
-    sbMethod.append(result == null ? "void" : 
JavassistUtils.getNameForGenerateCode(result));
+    sbMethod.append(result == null ? "void" : result.getCtClass().getName());
     sbMethod.append(" ")
         .append(name)
         .append("(");
     sbMethodGenericSignature.append("(");
 
-    boolean hasGenericSignature = result == null ? false : 
result.hasGenericTypes();
+    boolean hasGenericSignature = result != null && result.hasGenericTypes();
     for (ParameterConfig parameter : parameterList) {
       hasGenericSignature = hasGenericSignature || 
parameter.getType().hasGenericTypes();
 
-      String paramTypeName = 
JavassistUtils.getNameForGenerateCode(parameter.getType());
+      String paramTypeName = parameter.getType().getCtClass().getName();
       String code = String.format("%s %s,", paramTypeName, 
parameter.getName());
       sbMethod.append(code);
       
sbMethodGenericSignature.append(parameter.getType().getGenericSignature());
diff --git 
a/common/common-javassist/src/main/java/org/apache/servicecomb/common/javassist/ParameterConfig.java
 
b/common/common-javassist/src/main/java/org/apache/servicecomb/common/javassist/ParameterConfig.java
index d7281e6..3234ccb 100644
--- 
a/common/common-javassist/src/main/java/org/apache/servicecomb/common/javassist/ParameterConfig.java
+++ 
b/common/common-javassist/src/main/java/org/apache/servicecomb/common/javassist/ParameterConfig.java
@@ -16,12 +16,10 @@
  */
 package org.apache.servicecomb.common.javassist;
 
-import com.fasterxml.jackson.databind.JavaType;
-
 public class ParameterConfig {
   private String name;
 
-  private JavaType type;
+  private CtType type;
 
   public String getName() {
     return name;
@@ -31,11 +29,11 @@ public class ParameterConfig {
     this.name = name;
   }
 
-  public JavaType getType() {
+  public CtType getType() {
     return type;
   }
 
-  public void setType(JavaType type) {
+  public void setType(CtType type) {
     this.type = type;
   }
 }
diff --git 
a/common/common-javassist/src/test/java/org/apache/servicecomb/common/javassist/TestJavassistUtils.java
 
b/common/common-javassist/src/test/java/org/apache/servicecomb/common/javassist/TestJavassistUtils.java
index e656ee7..6869bf2 100644
--- 
a/common/common-javassist/src/test/java/org/apache/servicecomb/common/javassist/TestJavassistUtils.java
+++ 
b/common/common-javassist/src/test/java/org/apache/servicecomb/common/javassist/TestJavassistUtils.java
@@ -33,11 +33,11 @@ import 
org.apache.servicecomb.foundation.common.utils.ReflectUtils;
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.fasterxml.jackson.databind.JavaType;
 import com.fasterxml.jackson.databind.type.TypeFactory;
 import com.google.common.hash.Hashing;
 
 import javassist.ClassPool;
+import javassist.scopedpool.ScopedClassPoolRepositoryImpl;
 import mockit.Deencapsulation;
 
 public class TestJavassistUtils {
@@ -54,11 +54,17 @@ public class TestJavassistUtils {
     fieldConfig.setGenGetter(true);
     fieldConfig.setGenSetter(true);
 
-    fieldConfig = classConfig.addField("listStringField",
-        TypeFactory.defaultInstance().constructCollectionType(List.class, 
String.class));
+    fieldConfig = classConfig
+        .addField("listStringField", 
TypeFactory.defaultInstance().constructCollectionType(List.class, 
String.class));
     fieldConfig.setGenGetter(true);
     fieldConfig.setGenSetter(true);
 
+    fieldConfig = classConfig.addField("bool", 
TypeFactory.defaultInstance().constructType(boolean.class));
+    fieldConfig.setGenGetter(true);
+
+    fieldConfig = classConfig.addField("wrapperBool", 
TypeFactory.defaultInstance().constructType(Boolean.class));
+    fieldConfig.setGenGetter(true);
+
     Class<?> cls = JavassistUtils.createClass(classConfig);
 
     Field field = cls.getField("intField");
@@ -78,6 +84,12 @@ public class TestJavassistUtils {
 
     method = cls.getMethod("getListStringField");
     Assert.assertEquals("java.util.List<java.lang.String>", 
method.getGenericReturnType().getTypeName());
+
+    method = cls.getMethod("isBool");
+    Assert.assertEquals(Boolean.class, method.getReturnType());
+
+    method = cls.getMethod("isWrapperBool");
+    Assert.assertEquals(Boolean.class, method.getReturnType());
   }
 
   @Test
@@ -90,10 +102,9 @@ public class TestJavassistUtils {
     MethodConfig methodConfig = new MethodConfig();
     methodConfig.setName("method");
     
methodConfig.setResult(TypeFactory.defaultInstance().constructCollectionType(List.class,
 String.class));
-    methodConfig.addParameter("map",
-        TypeFactory.defaultInstance().constructMapType(Map.class, 
String.class, String.class));
-    methodConfig.addParameter("set",
-        TypeFactory.defaultInstance().constructCollectionType(Set.class, 
String.class));
+    methodConfig
+        .addParameter("map", 
TypeFactory.defaultInstance().constructMapType(Map.class, String.class, 
String.class));
+    methodConfig.addParameter("set", 
TypeFactory.defaultInstance().constructCollectionType(Set.class, String.class));
     classConfig.addMethod(methodConfig);
 
     Class<?> intf = JavassistUtils.createClass(classConfig);
@@ -238,21 +249,6 @@ public class TestJavassistUtils {
   }
 
   @Test
-  public void testGetNameForGenerateCode() {
-    JavaType jt = TypeFactory.defaultInstance().constructType(byte[].class);
-    String name = JavassistUtils.getNameForGenerateCode(jt);
-    Assert.assertEquals("byte[]", name);
-
-    jt = TypeFactory.defaultInstance().constructType(Byte[].class);
-    name = JavassistUtils.getNameForGenerateCode(jt);
-    Assert.assertEquals("java.lang.Byte[]", name);
-
-    jt = TypeFactory.defaultInstance().constructType(Object[].class);
-    name = JavassistUtils.getNameForGenerateCode(jt);
-    Assert.assertEquals("java.lang.Object[]", name);
-  }
-
-  @Test
   public void managerClassPool() {
     ClassLoader classLoader1 = new ClassLoader() {
     };
@@ -263,8 +259,10 @@ public class TestJavassistUtils {
     ClassPool p2 = Deencapsulation.invoke(JavassistUtils.class, 
"getOrCreateClassPool", classLoader2);
     Assert.assertNotSame(p1, p2);
 
-    Map<ClassLoader, ClassPool> CLASSPOOLS = 
Deencapsulation.getField(JavassistUtils.class, "CLASSPOOLS");
     JavassistUtils.clearByClassLoader(classLoader1);
-    Assert.assertNull(CLASSPOOLS.get(classLoader1));
+    
Assert.assertFalse(ScopedClassPoolRepositoryImpl.getInstance().getRegisteredCLs().containsKey(classLoader1));
+
+    JavassistUtils.clearByClassLoader(classLoader2);
+    
Assert.assertFalse(ScopedClassPoolRepositoryImpl.getInstance().getRegisteredCLs().containsKey(classLoader2));
   }
 }

-- 
To stop receiving notification emails like this one, please contact
liu...@apache.org.

Reply via email to