From 1f6fc2e4bc96455d77ce9b3d4804cc73a7759af0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=87=91=E6=88=9F?= Date: Thu, 1 Dec 2022 00:32:21 +0800 Subject: [PATCH] feat: support generate system interface class --- .../alibaba/testable/core/util/ConstructionUtil.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/testable-core/src/main/java/com/alibaba/testable/core/util/ConstructionUtil.java b/testable-core/src/main/java/com/alibaba/testable/core/util/ConstructionUtil.java index 993e2f1..7869995 100644 --- a/testable-core/src/main/java/com/alibaba/testable/core/util/ConstructionUtil.java +++ b/testable-core/src/main/java/com/alibaba/testable/core/util/ConstructionUtil.java @@ -14,9 +14,10 @@ public class ConstructionUtil { public static T generateSubClassOf(Class clazz) throws InstantiationException { StringBuilder sourceCode = new StringBuilder(); + String packageName = adaptName(clazz.getPackage().getName()); Map genericNames = getImplicitGenericParameters(clazz); sourceCode.append("package ") - .append(clazz.getPackage().getName()) + .append(packageName) .append(";\npublic class ") .append(getSubclassName(clazz)) .append(getTypeParameters(clazz.getTypeParameters(), true, genericNames)) @@ -56,13 +57,18 @@ public class ConstructionUtil { .useParentClassLoader(clazz.getClassLoader()) .useOptions("-Xlint:unchecked") .ignoreWarnings() - .compile(clazz.getPackage().getName() + DOT + getSubclassName(clazz), sourceCode.toString()) + .compile(packageName + DOT + getSubclassName(clazz), sourceCode.toString()) .newInstance(); } catch (Exception e) { throw new InstantiationException(e.toString()); } } + private static String adaptName(String name) { + // create class in 'java' package will cause 'prohibited package name' error + return name.replaceAll("^java\\.", "testable."); + } + private static Map getImplicitGenericParameters(Class clazz) { Map templateTypeMap = new HashMap(); List superTypes = new ArrayList(Arrays.asList(clazz.getGenericInterfaces()));