Chaque option correspond à une valeur de l'enum {@code ConfigOption}.
- * Les paramètres définis ici peuvent être configurés directement dans le pom.xml sous le tag
- * {@code
{@code
- * switch(x) { switch(x) {
- * case 1: case 1:
- * return y; return y;
- * case 2: case 2:
- * return z; return x;
- * } }
- * }
- */
- @Parameter(defaultValue = "true")
- private boolean indentCaseInSwitch;
-
- /**
- * By default enum constants get aligned like this:
- * {@code
- * enum X {
- * A, B, C, D
- * }
- * }
- * until the amount of constants passes this currentValue (5 by default).
- * Then they get aligned like this:
- * {@code
- * enum X {
- * A,
- * B,
- * C,
- * D,
- * E,
- * F,
- * G
- * }
- * }
- * Set it to a very large number (e.g. {@code Integer.MAX_VALUE} to always align horizontally.
- * Set it to 1 or less to always align vertically.
- */
- @Parameter(defaultValue = "5")
- private int maxEnumConstantsToAlignHorizontally;
-
- /**
- * The end-of-line character used when printing code. Default is system-dependent.
- */
- @Parameter
- private String endOfLineCharacter = System.getProperty("line.separator");
-
- /**
- * Indentation property.
- */
- @Parameter
- private Indentation indentation = new Indentation(IndentType.SPACES, 4);
-
- public boolean isOrderImports() {
- return orderImports;
- }
-
- public void setOrderImports(boolean orderImports) {
- this.orderImports = orderImports;
- }
-
- public List getOrderImportGroups() {
- return orderImportGroups;
- }
-
- public void setOrderImportGroups(List orderImportGroups) {
- this.orderImportGroups = orderImportGroups;
- }
-
- public boolean isPrintComments() {
- return printComments;
- }
-
- public void setPrintComments(boolean printComments) {
- this.printComments = printComments;
- }
-
- public boolean isPrintJavadoc() {
- return printJavadoc;
- }
-
- public void setPrintJavadoc(boolean printJavadoc) {
- this.printJavadoc = printJavadoc;
- }
-
- public boolean isSpaceAroundOperators() {
- return spaceAroundOperators;
- }
-
- public void setSpaceAroundOperators(boolean spaceAroundOperators) {
- this.spaceAroundOperators = spaceAroundOperators;
- }
-
- public boolean isColumnAlignParameters() {
- return columnAlignParameters;
- }
-
- public void setColumnAlignParameters(boolean columnAlignParameters) {
- this.columnAlignParameters = columnAlignParameters;
- }
-
- public boolean isColumnAlignFirstMethodChain() {
- return columnAlignFirstMethodChain;
- }
-
- public void setColumnAlignFirstMethodChain(boolean columnAlignFirstMethodChain) {
- this.columnAlignFirstMethodChain = columnAlignFirstMethodChain;
- }
-
- public boolean isIndentCaseInSwitch() {
- return indentCaseInSwitch;
- }
-
- public void setIndentCaseInSwitch(boolean indentCaseInSwitch) {
- this.indentCaseInSwitch = indentCaseInSwitch;
- }
-
- public int getMaxEnumConstantsToAlignHorizontally() {
- return maxEnumConstantsToAlignHorizontally;
- }
-
- public void setMaxEnumConstantsToAlignHorizontally(int maxEnumConstantsToAlignHorizontally) {
- this.maxEnumConstantsToAlignHorizontally = maxEnumConstantsToAlignHorizontally;
- }
-
- public String getEndOfLineCharacter() {
- return endOfLineCharacter;
- }
-
- public void setEndOfLineCharacter(String endOfLineCharacter) {
- this.endOfLineCharacter = endOfLineCharacter;
- }
-
- public Indentation getIndentation() {
- return indentation;
- }
-
- public void setIndentation(Indentation indentation) {
- this.indentation = indentation;
- }
-
- public PrinterConfiguration toPrinterConfiguration() {
- PrinterConfiguration config = new DefaultPrinterConfiguration().addOption(new DefaultConfigurationOption(ConfigOption.ORDER_IMPORTS, orderImports))
- .addOption(new DefaultConfigurationOption(ConfigOption.SORT_IMPORTS_STRATEGY, new ImportGroupsOrdering(orderImportGroups)))
- .addOption(new DefaultConfigurationOption(ConfigOption.MAX_ENUM_CONSTANTS_TO_ALIGN_HORIZONTALLY, maxEnumConstantsToAlignHorizontally))
- .addOption(new DefaultConfigurationOption(ConfigOption.END_OF_LINE_CHARACTER, endOfLineCharacter))
- .addOption(new DefaultConfigurationOption(ConfigOption.INDENTATION, indentation.toIndentation()));
- if (indentCaseInSwitch)
- config.addOption(new DefaultConfigurationOption(ConfigOption.INDENT_CASE_IN_SWITCH));
- if (spaceAroundOperators)
- config.addOption(new DefaultConfigurationOption(ConfigOption.SPACE_AROUND_OPERATORS));
- if (columnAlignFirstMethodChain)
- config.addOption(new DefaultConfigurationOption(ConfigOption.COLUMN_ALIGN_FIRST_METHOD_CHAIN));
- if (printComments)
- config.addOption(new DefaultConfigurationOption(ConfigOption.PRINT_COMMENTS));
- if (printJavadoc)
- config.addOption(new DefaultConfigurationOption(ConfigOption.PRINT_JAVADOC));
- if (columnAlignParameters)
- config.addOption(new DefaultConfigurationOption(ConfigOption.COLUMN_ALIGN_PARAMETERS));
- return config;
-
- }
-}
diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/SourceBuilder.java b/unknow-server-maven/src/main/java/unknow/server/maven/SourceBuilder.java
index acca8e1e..1b4d2f2d 100644
--- a/unknow-server-maven/src/main/java/unknow/server/maven/SourceBuilder.java
+++ b/unknow-server-maven/src/main/java/unknow/server/maven/SourceBuilder.java
@@ -2,17 +2,19 @@
import com.github.javaparser.ast.body.ClassOrInterfaceDeclaration;
+import unknow.maven.codegen.TypeFactory;
+
public interface SourceBuilder {
- void process(ClassOrInterfaceDeclaration cl, TypeCache types, T ctx);
+ void process(ClassOrInterfaceDeclaration cl, TypeFactory types, T ctx);
public abstract class AbstractSourceBuilder implements SourceBuilder {
protected ClassOrInterfaceDeclaration cl;
- protected TypeCache types;
+ protected TypeFactory types;
protected T ctx;
@Override
- public final void process(ClassOrInterfaceDeclaration cl, TypeCache types, T ctx) {
+ public final void process(ClassOrInterfaceDeclaration cl, TypeFactory types, T ctx) {
this.cl = cl;
this.types = types;
this.ctx = ctx;
diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/TypeCache.java b/unknow-server-maven/src/main/java/unknow/server/maven/TypeCache.java
deleted file mode 100644
index 538a1b4b..00000000
--- a/unknow-server-maven/src/main/java/unknow/server/maven/TypeCache.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/**
- *
- */
-package unknow.server.maven;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import com.github.javaparser.ast.CompilationUnit;
-import com.github.javaparser.ast.NodeList;
-import com.github.javaparser.ast.body.ClassOrInterfaceDeclaration;
-import com.github.javaparser.ast.expr.SimpleName;
-import com.github.javaparser.ast.type.ArrayType;
-import com.github.javaparser.ast.type.ClassOrInterfaceType;
-import com.github.javaparser.ast.type.PrimitiveType;
-import com.github.javaparser.ast.type.PrimitiveType.Primitive;
-import com.github.javaparser.ast.type.Type;
-import com.github.javaparser.ast.type.UnknownType;
-import com.github.javaparser.ast.type.WildcardType;
-
-import unknow.model.api.ModelLoader;
-import unknow.model.api.PrimitiveModel;
-import unknow.model.api.TypeModel;
-
-/**
- * @author unknow
- */
-public class TypeCache {
- public static final Type EMPTY = new UnknownType();
- public static final Type ANY = new WildcardType();
-
- private final Map types;
-
- private final CompilationUnit cu;
- private final Map existingClass;
-
- public TypeCache(CompilationUnit cu, Map existingClass) {
- this.cu = cu;
- this.existingClass = new HashMap<>(existingClass);
-
- this.types = new HashMap<>();
- types.put("", EMPTY);
- types.put("?", ANY);
-
- for (PrimitiveModel p : PrimitiveModel.PRIMITIVES) {
- PrimitiveType type = Primitive.byTypeName(p.simpleName()).map(t -> new PrimitiveType(t)).orElse(null);
- if (type != null) {
- types.put(p.name(), type);
- types.put(p.simpleName(), type);
- }
- }
- }
-
- public ClassOrInterfaceType getClass(String cl) {
- Type type = get(cl);
- if (type.isPrimitiveType())
- return type.asPrimitiveType().toBoxedType();
- return type.asClassOrInterfaceType();
- }
-
- public ClassOrInterfaceType getClass(TypeModel c) {
- Type type = get(c.name());
- if (type.isPrimitiveType())
- return type.asPrimitiveType().toBoxedType();
- return type.asClassOrInterfaceType();
- }
-
- public ClassOrInterfaceType getClass(Class> c, Type... param) {
- String cl = c.getCanonicalName();
- if (param.length > 0) {
- StringBuilder sb = new StringBuilder(cl).append('<');
- for (int i = 0; i < param.length; i++)
- sb.append(param[i]).append(',');
- sb.setCharAt(sb.length() - 1, '>');
- cl = sb.toString();
- }
- Type type = get(cl);
- if (type.isPrimitiveType())
- return type.asPrimitiveType().toBoxedType();
- return type.asClassOrInterfaceType();
- }
-
- public ArrayType array(Class> cl) {
- return get(cl.getCanonicalName() + "[]").asArrayType();
- }
-
- public Type get(TypeModel c) {
- return get(c.toString());
- }
-
- public Type get(Class> c) {
- return get(c.getCanonicalName());
- }
-
- public ClassOrInterfaceType getClass(ClassOrInterfaceDeclaration decl) {
- return get(decl.resolve().getQualifiedName()).asClassOrInterfaceType();
- }
-
- public Type get(String cl) {
- Type t = types.get(cl);
- if (t == null)
- types.put(cl, t = create(cl));
- return t;
- }
-
- private Type create(String cl) {
- if (cl.endsWith("[]"))
- return new ArrayType(get(cl.substring(0, cl.length() - 2)));
- if (cl.startsWith("["))
- return new ArrayType(get(cl.substring(1)));
- if (cl.equals("?"))
- return new WildcardType();
- if (cl.startsWith("? extends "))
- return new WildcardType(getClass(cl.substring(10)));
- if (cl.startsWith("? super "))
- return new WildcardType().setSuperType(getClass(cl.substring(8)));
-
- List parse = ModelLoader.parse(cl);
-
- NodeList params = null;
- if (parse.size() > 1) {
- params = new NodeList<>();
- for (int i = 1; i < parse.size(); i++)
- params.add(get(parse.get(i)));
- }
-
- cl = parse.get(0);
- String[] split = cl.split("[.$]");
- String last = split[split.length - 1];
- String string = existingClass.get(last);
- if (string != null && !cl.equals(string)) {
- ClassOrInterfaceType t = new ClassOrInterfaceType(null, split[0]);
- for (int i = 1; i < split.length; i++)
- t = new ClassOrInterfaceType(t, split[i]);
- return t.setTypeArguments(params);
- }
- String p = cu.getPackageDeclaration().map(v -> v.getNameAsString()).orElse("");
- int i = cl.lastIndexOf('.');
- if (i > 0 && p.equals(cl.substring(0, i)))
- existingClass.put(last, cl);
- else if (split.length > 1 && string == null) {
- cu.addImport(cl.replace('$', '.'));
- existingClass.put(last, cl);
- }
- return new ClassOrInterfaceType(null, new SimpleName(last), params);
- }
-}
\ No newline at end of file
diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/Utils.java b/unknow-server-maven/src/main/java/unknow/server/maven/Utils.java
index 8bba9b6a..5e8e2b2d 100644
--- a/unknow-server-maven/src/main/java/unknow/server/maven/Utils.java
+++ b/unknow-server-maven/src/main/java/unknow/server/maven/Utils.java
@@ -9,24 +9,13 @@
import java.util.List;
import java.util.Map;
-import com.github.javaparser.ast.ArrayCreationLevel;
-import com.github.javaparser.ast.Modifier;
-import com.github.javaparser.ast.Node;
import com.github.javaparser.ast.NodeList;
-import com.github.javaparser.ast.expr.ArrayCreationExpr;
-import com.github.javaparser.ast.expr.ArrayInitializerExpr;
-import com.github.javaparser.ast.expr.AssignExpr;
-import com.github.javaparser.ast.expr.AssignExpr.Operator;
-import com.github.javaparser.ast.expr.BinaryExpr;
import com.github.javaparser.ast.expr.Expression;
import com.github.javaparser.ast.expr.IntegerLiteralExpr;
import com.github.javaparser.ast.expr.ObjectCreationExpr;
-import com.github.javaparser.ast.expr.StringLiteralExpr;
-import com.github.javaparser.ast.expr.VariableDeclarationExpr;
-import com.github.javaparser.ast.type.ClassOrInterfaceType;
-import com.github.javaparser.ast.type.PrimitiveType;
-import com.github.javaparser.ast.type.Type;
+import unknow.maven.codegen.CodeGenUtils;
+import unknow.maven.codegen.TypeFactory;
import unknow.server.util.data.ArrayMap;
import unknow.server.util.data.ArraySet;
@@ -34,91 +23,9 @@
* @author unknow
*/
public class Utils {
- public static final Modifier.Keyword[] PUBLIC = { Modifier.Keyword.PUBLIC, Modifier.Keyword.FINAL };
- public static final Modifier.Keyword[] PUBLIC_STATIC = { Modifier.Keyword.PUBLIC, Modifier.Keyword.STATIC, Modifier.Keyword.FINAL };
- public static final Modifier.Keyword[] PROTECT = { Modifier.Keyword.PROTECTED, Modifier.Keyword.FINAL };
- public static final Modifier.Keyword[] PSF = { Modifier.Keyword.PRIVATE, Modifier.Keyword.STATIC, Modifier.Keyword.FINAL };
- public static final Modifier.Keyword[] PRIVATE = { Modifier.Keyword.PRIVATE, Modifier.Keyword.FINAL };
-
private Utils() {
}
- public static StringLiteralExpr text(String s) {
- return new StringLiteralExpr(s.replace("\\", "\\\\").replace("\"", "\\\"").replace("\u0000", "\\u0000"));
- }
-
- /**
- * create a node list
- *
- * @param type of element
- * @param t the values
- * @return the node list
- */
- @SafeVarargs
- public static NodeList list(T... t) {
- return new NodeList<>(t);
- }
-
- /**
- * new byte[]{values}
- *
- * @param b the values
- * @return the byte array creation
- */
- public static Expression byteArray(byte[] b) {
- NodeList nodeList = new NodeList<>();
- for (int i = 0; i < b.length; i++)
- nodeList.add(new IntegerLiteralExpr(Byte.toString(b[i])));
-
- return array(PrimitiveType.byteType(), nodeList);
- }
-
- /**
- * @param values the values
- * @return new string[] {values}
- */
- public static ArrayCreationExpr stringArray(String[] values) {
- NodeList nodeList = new NodeList<>();
- for (int i = 0; i < values.length; i++)
- nodeList.add(text(values[i]));
-
- return array(new ClassOrInterfaceType(null, "String"), nodeList);
- }
-
- public static ArrayCreationExpr array(Type type, int... level) {
- NodeList l = new NodeList<>();
- for (int i = 0; i < level.length; i++)
- l.add(new ArrayCreationLevel(level[i]));
- return new ArrayCreationExpr(type, l, null);
- }
-
- /**
- * create a new array
- *
- * @param type the element types
- * @param init the values
- * @return the array creation
- */
- public static ArrayCreationExpr array(Type type, NodeList init) {
- return new ArrayCreationExpr(type, list(new ArrayCreationLevel()), new ArrayInitializerExpr(init));
- }
-
- /**
- * T n = value
- *
- * @param t the variable type
- * @param n the variable name
- * @param value the value
- * @return the assignement
- */
- public static AssignExpr assign(Type t, String n, Expression value) {
- return new AssignExpr(new VariableDeclarationExpr(t, n), value, Operator.ASSIGN);
- }
-
- public static AssignExpr create(ClassOrInterfaceType t, String n, NodeList arg) {
- return assign(t, n, new ObjectCreationExpr(null, t, arg));
- }
-
/**
* create a new ArrayMap
*
@@ -126,17 +33,17 @@ public static AssignExpr create(ClassOrInterfaceType t, String n, NodeList map, TypeCache types) {
+ public static ObjectCreationExpr mapInteger(Map map, TypeFactory types) {
List list = new ArrayList<>(map.keySet());
Collections.sort(list);
NodeList k = new NodeList<>();
NodeList v = new NodeList<>();
for (String key : list) {
- k.add(text(key));
+ k.add(CodeGenUtils.text(key));
v.add(new IntegerLiteralExpr(map.get(key).toString()));
}
- return new ObjectCreationExpr(null, types.getClass(ArrayMap.class, TypeCache.EMPTY),
- list(array(types.getClass(String.class), k), array(types.getClass(Integer.class), v)));
+ return new ObjectCreationExpr(null, types.getClass(ArrayMap.class, TypeFactory.EMPTY),
+ CodeGenUtils.list(CodeGenUtils.array(types.getClass(String.class), k), CodeGenUtils.array(types.getClass(Integer.class), v)));
}
/**
@@ -146,38 +53,23 @@ public static ObjectCreationExpr mapInteger(Map map, TypeCache
* @param types the typeCahe
* @return the array map creation
*/
- public static ObjectCreationExpr mapString(Map map, TypeCache types) {
+ public static ObjectCreationExpr mapString(Map map, TypeFactory types) {
List list = new ArrayList<>(map.keySet());
Collections.sort(list);
NodeList k = new NodeList<>();
NodeList v = new NodeList<>();
for (String key : list) {
- k.add(text(key));
- v.add(text(map.get(key)));
+ k.add(CodeGenUtils.text(key));
+ v.add(CodeGenUtils.text(map.get(key)));
}
- return new ObjectCreationExpr(null, types.getClass(ArrayMap.class, TypeCache.EMPTY),
- list(array(types.getClass(String.class), k), array(types.getClass(String.class), v)));
+ return new ObjectCreationExpr(null, types.getClass(ArrayMap.class, TypeFactory.EMPTY),
+ CodeGenUtils.list(CodeGenUtils.array(types.getClass(String.class), k), CodeGenUtils.array(types.getClass(String.class), v)));
}
- public static ObjectCreationExpr arraySet(Collection list, TypeCache types) {
+ public static ObjectCreationExpr arraySet(Collection list, TypeFactory types) {
NodeList n = new NodeList<>();
for (String p : list)
- n.add(text(p));
- return new ObjectCreationExpr(null, types.getClass(ArraySet.class, TypeCache.EMPTY), Utils.list(Utils.array(types.getClass(String.class), n)));
- }
-
- /**
- * add all the expression together
- *
- * @param e expression to add
- * @return e[0] + e[1] +...
- */
- public static Expression add(Expression... e) {
- if (e.length == 1)
- return e[0];
- BinaryExpr b = new BinaryExpr(e[0], e[1], BinaryExpr.Operator.PLUS);
- for (int i = 2; i < e.length; i++)
- b = new BinaryExpr(b, e[i], BinaryExpr.Operator.PLUS);
- return b;
+ n.add(CodeGenUtils.text(p));
+ return new ObjectCreationExpr(null, types.getClass(ArraySet.class, TypeFactory.EMPTY), CodeGenUtils.list(CodeGenUtils.array(types.getClass(String.class), n)));
}
}
diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/jaxb/JaxbGeneratorMojo.java b/unknow-server-maven/src/main/java/unknow/server/maven/jaxb/JaxbGeneratorMojo.java
index f6884dfa..a45ef6f1 100644
--- a/unknow-server-maven/src/main/java/unknow/server/maven/jaxb/JaxbGeneratorMojo.java
+++ b/unknow-server-maven/src/main/java/unknow/server/maven/jaxb/JaxbGeneratorMojo.java
@@ -22,6 +22,7 @@
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.plugins.annotations.LifecyclePhase;
import org.apache.maven.plugins.annotations.Mojo;
+import org.apache.maven.plugins.annotations.Parameter;
import org.apache.maven.plugins.annotations.ResolutionScope;
import com.github.javaparser.ast.CompilationUnit;
@@ -34,6 +35,8 @@
import com.github.javaparser.ast.stmt.ReturnStmt;
import jakarta.xml.bind.annotation.XmlRootElement;
+import unknow.maven.codegen.CodeGenUtils;
+import unknow.maven.codegen.TypeFactory;
import unknow.model.api.AnnotationModel;
import unknow.model.api.TypeModel;
import unknow.server.jaxb.XmlHandler;
@@ -57,8 +60,6 @@
import unknow.server.jaxb.handler.StringHandler;
import unknow.server.jaxb.handler.ZonedDateTimeHandler;
import unknow.server.maven.AbstractGeneratorMojo;
-import unknow.server.maven.TypeCache;
-import unknow.server.maven.Utils;
import unknow.server.maven.jaxb.builder.HandlerBuilder;
import unknow.server.maven.jaxb.model.XmlCollection;
import unknow.server.maven.jaxb.model.XmlLoader;
@@ -74,6 +75,9 @@ public class JaxbGeneratorMojo extends AbstractGeneratorMojo {
private final Map handlers = new HashMap<>();
private final XmlLoader xmlLoader = new XmlLoader();
+ @Parameter(name = "graalvm", defaultValue = "true")
+ protected boolean graalvm;
+
public JaxbGeneratorMojo() {
handlers.put(XmlLoader.BOOLEAN, BooleanHandler.class.getName());
handlers.put(XmlLoader.BYTE, ByteHandler.class.getName());
@@ -97,15 +101,10 @@ public JaxbGeneratorMojo() {
handlers.put(XmlLoader.PERIOD, PeriodHandler.class.getName());
}
- @Override
- protected String id() {
- return "jaxb-generator";
- }
-
@Override
public void execute() throws MojoExecutionException, MojoFailureException {
- init();
- process(type -> {
+ init(session, mojo, repository, codegen);
+ processSrc(type -> {
if (type.annotation(jakarta.xml.bind.annotation.XmlType.class).isPresent())
xmlLoader.add(type);
});
@@ -120,7 +119,7 @@ public void execute() throws MojoExecutionException, MojoFailureException {
list.sort((a, b) -> a.name().toString().compareTo(b.name().toString()));
for (XmlType t : list) {
if (!XmlLoader.XS.equals(t.name().getNamespaceURI()) && !(t instanceof XmlCollection))
- handlers.put(t, packageName + "." + t.type().simpleName() + "_" + i++);
+ handlers.put(t, fullName(t.type().simpleName() + "_" + i++));
}
writeXmlLoader();
@@ -141,18 +140,18 @@ private void buildHandler(XmlType xml) throws MojoExecutionException {
n = n.substring(j + 1);
CompilationUnit cu = newCu();
- TypeCache types = new TypeCache(cu, existingClass);
+ TypeFactory types = new TypeFactory(cu, existingClass);
HANDLER.process(cu.addClass(n), types, new HandlerContext(handlers, loader, xml));
- out.save(cu);
+ writer.write(cu);
}
private void writeXmlLoader() throws MojoExecutionException {
CompilationUnit cu = newCu();
- TypeCache types = new TypeCache(cu, existingClass);
- ClassOrInterfaceDeclaration cl = cu.addClass("XmlLoader", Utils.PUBLIC).addImplementedType(types.getClass(XmlHandlerLoader.class));
+ TypeFactory types = new TypeFactory(cu, existingClass);
+ ClassOrInterfaceDeclaration cl = cu.addClass("XmlLoader", CodeGenUtils.PUBLIC).addImplementedType(types.getClass(XmlHandlerLoader.class));
- cl.addMethod("contextPath", Utils.PUBLIC).addMarkerAnnotation(Override.class).setType(types.getClass(String.class)).createBody()
- .addStatement(new ReturnStmt(Utils.text(packageName)));
+ cl.addMethod("contextPath", CodeGenUtils.PUBLIC).addMarkerAnnotation(Override.class).setType(types.getClass(String.class)).createBody()
+ .addStatement(new ReturnStmt(CodeGenUtils.text(codegen.packageName)));
NodeList list = new NodeList<>();
for (Entry e : handlers.entrySet()) {
@@ -161,16 +160,17 @@ private void writeXmlLoader() throws MojoExecutionException {
list.add(new FieldAccessExpr(new TypeExpr(types.get(e.getValue())), "INSTANCE"));
}
- cl.addMethod("handlers", Utils.PUBLIC).addMarkerAnnotation(Override.class).setType(types.getClass(Collection.class, types.getClass(XmlHandler.class, TypeCache.ANY)))
- .createBody().addStatement(new ReturnStmt(new MethodCallExpr(new TypeExpr(types.get(Arrays.class)), "asList", list)));
+ cl.addMethod("handlers", CodeGenUtils.PUBLIC).addMarkerAnnotation(Override.class)
+ .setType(types.getClass(Collection.class, types.getClass(XmlHandler.class, TypeFactory.ANY))).createBody()
+ .addStatement(new ReturnStmt(new MethodCallExpr(new TypeExpr(types.get(Arrays.class)), "asList", list)));
- out.save(cu);
+ writer.write(cu);
- Path path = Paths.get(resources, "META-INF", "services", XmlHandlerLoader.class.getName());
+ Path path = Paths.get(codegen.resources, "META-INF", "services", XmlHandlerLoader.class.getName());
try {
Files.createDirectories(path.getParent());
try (BufferedWriter w = Files.newBufferedWriter(path)) {
- w.append(packageName).write(".XmlLoader\n");
+ w.append(fullName("XmlLoader")).write('\n');
}
} catch (IOException e) {
throw new MojoExecutionException(e);
@@ -183,7 +183,7 @@ private void generateGraalVmResources() throws MojoFailureException {
return;
try {
- Path path = Paths.get(resources + "/META-INF/native-image/" + id() + "/resource-config.json");
+ Path path = Paths.get(codegen.resources + "/META-INF/native-image/" + uniquePath + "/resource-config.json");
Files.createDirectories(path.getParent());
try (BufferedWriter w = Files.newBufferedWriter(path)) {
w.write("{\"resources\":{\"includes\":[");
diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/jaxb/builder/HandlerBuilder.java b/unknow-server-maven/src/main/java/unknow/server/maven/jaxb/builder/HandlerBuilder.java
index ce857e5c..537359ee 100644
--- a/unknow-server-maven/src/main/java/unknow/server/maven/jaxb/builder/HandlerBuilder.java
+++ b/unknow-server-maven/src/main/java/unknow/server/maven/jaxb/builder/HandlerBuilder.java
@@ -5,8 +5,8 @@
import com.github.javaparser.ast.body.ClassOrInterfaceDeclaration;
+import unknow.maven.codegen.TypeFactory;
import unknow.server.maven.SourceBuilder;
-import unknow.server.maven.TypeCache;
import unknow.server.maven.jaxb.HandlerContext;
import unknow.server.maven.jaxb.model.XmlEnum;
import unknow.server.maven.jaxb.model.XmlTypeComplex;
@@ -18,7 +18,7 @@ public class HandlerBuilder implements SourceBuilder {
private static final HandlerObject OBJECT = new HandlerObject();
@Override
- public void process(ClassOrInterfaceDeclaration cl, TypeCache types, HandlerContext ctx) {
+ public void process(ClassOrInterfaceDeclaration cl, TypeFactory types, HandlerContext ctx) {
if (ctx.xml() instanceof XmlEnum)
ENUM.process(cl, types, ctx);
else if (ctx.xml() instanceof XmlTypeComplex)
diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/jaxb/builder/HandlerEnum.java b/unknow-server-maven/src/main/java/unknow/server/maven/jaxb/builder/HandlerEnum.java
index 59838b51..7bc78335 100644
--- a/unknow-server-maven/src/main/java/unknow/server/maven/jaxb/builder/HandlerEnum.java
+++ b/unknow-server-maven/src/main/java/unknow/server/maven/jaxb/builder/HandlerEnum.java
@@ -22,11 +22,11 @@
import com.github.javaparser.ast.type.ClassOrInterfaceType;
import jakarta.xml.bind.JAXBException;
+import unknow.maven.codegen.CodeGenUtils;
import unknow.model.api.TypeModel;
import unknow.server.jaxb.XmlRootHandler;
import unknow.server.jaxb.XmlSimpleHandler;
import unknow.server.maven.SourceBuilder.AbstractSourceBuilder;
-import unknow.server.maven.Utils;
import unknow.server.maven.jaxb.HandlerContext;
import unknow.server.maven.jaxb.JaxbGeneratorMojo;
import unknow.server.maven.jaxb.model.XmlEnum;
@@ -41,33 +41,33 @@ protected void build() {
cl.addImplementedType(types.getClass(XmlSimpleHandler.class, types.getClass(t)));
cl.addFieldWithInitializer(new ClassOrInterfaceType(null, cl.getNameAsString()), "INSTANCE",
- new ObjectCreationExpr(null, new ClassOrInterfaceType(null, cl.getNameAsString()), Utils.list()), Utils.PUBLIC_STATIC);
+ new ObjectCreationExpr(null, new ClassOrInterfaceType(null, cl.getNameAsString()), CodeGenUtils.list()), CodeGenUtils.PUBLIC_STATIC);
BlockStmt b = cl.addConstructor(Modifier.Keyword.PRIVATE).getBody();
QName qname = JaxbGeneratorMojo.getRootQN(t);
if (qname != null) {
cl.addExtendedType(types.getClass(XmlRootHandler.class, types.getClass(t)));
- b.addStatement(new MethodCallExpr(null, "super", Utils.list(new ObjectCreationExpr(null, types.getClass(QName.class),
- Utils.list(new StringLiteralExpr(qname.getNamespaceURI()), new StringLiteralExpr(qname.getLocalPart()))))));
+ b.addStatement(new MethodCallExpr(null, "super", CodeGenUtils.list(new ObjectCreationExpr(null, types.getClass(QName.class),
+ CodeGenUtils.list(new StringLiteralExpr(qname.getNamespaceURI()), new StringLiteralExpr(qname.getLocalPart()))))));
}
- cl.addMethod("clazz", Utils.PUBLIC).setType(types.getClass(Class.class, types.getClass(t))).addMarkerAnnotation(Override.class).createBody()
+ cl.addMethod("clazz", CodeGenUtils.PUBLIC).setType(types.getClass(Class.class, types.getClass(t))).addMarkerAnnotation(Override.class).createBody()
.addStatement(new ReturnStmt(new ClassExpr(types.getClass(t))));
NodeList list = xml.entries().stream()
- .map(e -> new SwitchEntry().setLabels(Utils.list(new NameExpr(e.name()))).addStatement(new ReturnStmt(new StringLiteralExpr(e.value()))))
- .collect(Collectors.toCollection(() -> Utils.list()));
+ .map(e -> new SwitchEntry().setLabels(CodeGenUtils.list(new NameExpr(e.name()))).addStatement(new ReturnStmt(new StringLiteralExpr(e.value()))))
+ .collect(Collectors.toCollection(() -> CodeGenUtils.list()));
list.add(new SwitchEntry().addStatement(
- new ThrowStmt(new ObjectCreationExpr(null, types.getClass(JAXBException.class), Utils.list(new StringLiteralExpr("Unsupported enum constant"))))));
- cl.addMethod("toString", Utils.PUBLIC).addMarkerAnnotation(Override.class).addThrownException(types.getClass(JAXBException.class))
+ new ThrowStmt(new ObjectCreationExpr(null, types.getClass(JAXBException.class), CodeGenUtils.list(new StringLiteralExpr("Unsupported enum constant"))))));
+ cl.addMethod("toString", CodeGenUtils.PUBLIC).addMarkerAnnotation(Override.class).addThrownException(types.getClass(JAXBException.class))
.addParameter(types.get(xml.type()), "o").setType(types.get(String.class)).createBody().addStatement(new SwitchStmt(new NameExpr("o"), list));
- list = xml.entries().stream().map(e -> new SwitchEntry().setLabels(Utils.list(new StringLiteralExpr(e.value())))
- .addStatement(new ReturnStmt(new FieldAccessExpr(new TypeExpr(types.get(t)), e.name())))).collect(Collectors.toCollection(() -> Utils.list()));
+ list = xml.entries().stream().map(e -> new SwitchEntry().setLabels(CodeGenUtils.list(new StringLiteralExpr(e.value())))
+ .addStatement(new ReturnStmt(new FieldAccessExpr(new TypeExpr(types.get(t)), e.name())))).collect(Collectors.toCollection(() -> CodeGenUtils.list()));
list.add(new SwitchEntry().addStatement(new ThrowStmt(new ObjectCreationExpr(null, types.getClass(JAXBException.class),
- Utils.list(new BinaryExpr(new StringLiteralExpr("Unsupported enum value "), new NameExpr("s"), BinaryExpr.Operator.PLUS))))));
- cl.addMethod("toObject", Utils.PUBLIC).addMarkerAnnotation(Override.class).addThrownException(types.getClass(JAXBException.class))
+ CodeGenUtils.list(new BinaryExpr(new StringLiteralExpr("Unsupported enum value "), new NameExpr("s"), BinaryExpr.Operator.PLUS))))));
+ cl.addMethod("toObject", CodeGenUtils.PUBLIC).addMarkerAnnotation(Override.class).addThrownException(types.getClass(JAXBException.class))
.addParameter(types.get(String.class), "s").setType(types.get(xml.type())).createBody().addStatement(new SwitchStmt(new NameExpr("s"), list));
}
diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/jaxb/builder/HandlerObject.java b/unknow-server-maven/src/main/java/unknow/server/maven/jaxb/builder/HandlerObject.java
index 946f38d4..e4109c83 100644
--- a/unknow-server-maven/src/main/java/unknow/server/maven/jaxb/builder/HandlerObject.java
+++ b/unknow-server-maven/src/main/java/unknow/server/maven/jaxb/builder/HandlerObject.java
@@ -17,12 +17,12 @@
import com.github.javaparser.ast.stmt.ReturnStmt;
import com.github.javaparser.ast.type.ClassOrInterfaceType;
+import unknow.maven.codegen.CodeGenUtils;
+import unknow.maven.codegen.TypeFactory;
import unknow.model.api.TypeModel;
import unknow.server.jaxb.XmlHandler;
import unknow.server.jaxb.XmlRootHandler;
import unknow.server.maven.SourceBuilder.AbstractSourceBuilder;
-import unknow.server.maven.TypeCache;
-import unknow.server.maven.Utils;
import unknow.server.maven.jaxb.HandlerContext;
import unknow.server.maven.jaxb.JaxbGeneratorMojo;
import unknow.server.maven.jaxb.model.XmlChoice;
@@ -42,12 +42,12 @@ protected void build() {
cl.addImplementedType(types.getClass(XmlHandler.class, types.getClass(t)));
cl.addFieldWithInitializer(new ClassOrInterfaceType(null, cl.getNameAsString()), "INSTANCE",
- new ObjectCreationExpr(null, new ClassOrInterfaceType(null, cl.getNameAsString()), Utils.list()), Utils.PUBLIC_STATIC);
+ new ObjectCreationExpr(null, new ClassOrInterfaceType(null, cl.getNameAsString()), CodeGenUtils.list()), CodeGenUtils.PUBLIC_STATIC);
AtomicInteger i = new AtomicInteger(0);
for (XmlElement e : xml.getAttributes())
cl.addFieldWithInitializer(types.get(QName.class), e.name() + "$a" + i.getAndIncrement(),
- new ObjectCreationExpr(null, types.getClass(QName.class), Utils.list(new StringLiteralExpr(e.ns()), new StringLiteralExpr(e.name()))), Utils.PSF);
+ new ObjectCreationExpr(null, types.getClass(QName.class), CodeGenUtils.list(new StringLiteralExpr(e.ns()), new StringLiteralExpr(e.name()))), CodeGenUtils.PSF);
i.set(0);
for (XmlElement e : xml.getElements())
@@ -57,18 +57,18 @@ protected void build() {
QName qname = JaxbGeneratorMojo.getRootQN(t);
if (qname != null) {
cl.addExtendedType(types.getClass(XmlRootHandler.class, types.getClass(t)));
- b.addStatement(new MethodCallExpr(null, "super", Utils.list(new ObjectCreationExpr(null, types.getClass(QName.class),
- Utils.list(new StringLiteralExpr(qname.getNamespaceURI()), new StringLiteralExpr(qname.getLocalPart()))))));
+ b.addStatement(new MethodCallExpr(null, "super", CodeGenUtils.list(new ObjectCreationExpr(null, types.getClass(QName.class),
+ CodeGenUtils.list(new StringLiteralExpr(qname.getNamespaceURI()), new StringLiteralExpr(qname.getLocalPart()))))));
}
- cl.addMethod("clazz", Utils.PUBLIC).setType(types.getClass(Class.class, types.getClass(t))).addMarkerAnnotation(Override.class).createBody()
+ cl.addMethod("clazz", CodeGenUtils.PUBLIC).setType(types.getClass(Class.class, types.getClass(t))).addMarkerAnnotation(Override.class).createBody()
.addStatement(new ReturnStmt(new ClassExpr(types.getClass(t))));
for (AbstractSourceBuilder m : methods)
m.process(cl, types, ctx);
}
- private void appendInitElement(ClassOrInterfaceDeclaration cl, TypeCache types, XmlElement e, AtomicInteger i) {
+ private void appendInitElement(ClassOrInterfaceDeclaration cl, TypeFactory types, XmlElement e, AtomicInteger i) {
XmlType x = e.xmlType();
if (x instanceof XmlCollection)
x = ((XmlCollection) x).component();
@@ -80,9 +80,9 @@ private void appendInitElement(ClassOrInterfaceDeclaration cl, TypeCache types,
}
cl.addFieldWithInitializer(types.get(QName.class), e.name() + "$e" + i.getAndIncrement(),
- new ObjectCreationExpr(null, types.getClass(QName.class), Utils.list(new StringLiteralExpr(e.ns()), new StringLiteralExpr(e.name()))), Utils.PSF);
+ new ObjectCreationExpr(null, types.getClass(QName.class), CodeGenUtils.list(new StringLiteralExpr(e.ns()), new StringLiteralExpr(e.name()))), CodeGenUtils.PSF);
if (e.xmlType() instanceof XmlCollection && e.type().isArray())
- ctx.emptyArray(e.type(), name -> cl.addFieldWithInitializer(types.get(e.type()), name, new ArrayInitializerExpr(), Utils.PSF));
+ ctx.emptyArray(e.type(), name -> cl.addFieldWithInitializer(types.get(e.type()), name, new ArrayInitializerExpr(), CodeGenUtils.PSF));
}
}
diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/jaxb/builder/HandlerObjectReader.java b/unknow-server-maven/src/main/java/unknow/server/maven/jaxb/builder/HandlerObjectReader.java
index b677cf84..133c094f 100644
--- a/unknow-server-maven/src/main/java/unknow/server/maven/jaxb/builder/HandlerObjectReader.java
+++ b/unknow-server-maven/src/main/java/unknow/server/maven/jaxb/builder/HandlerObjectReader.java
@@ -39,13 +39,13 @@
import jakarta.xml.bind.JAXBElement;
import jakarta.xml.bind.JAXBException;
import jakarta.xml.bind.Unmarshaller;
+import unknow.maven.codegen.CodeGenUtils;
+import unknow.maven.codegen.TypeFactory;
import unknow.model.api.TypeModel;
import unknow.server.jaxb.StrReader;
import unknow.server.jaxb.UnmarshallerImpl;
import unknow.server.jaxb.XmlHandler;
import unknow.server.maven.SourceBuilder.AbstractSourceBuilder;
-import unknow.server.maven.TypeCache;
-import unknow.server.maven.Utils;
import unknow.server.maven.jaxb.HandlerContext;
import unknow.server.maven.jaxb.model.XmlChoice;
import unknow.server.maven.jaxb.model.XmlCollection;
@@ -65,17 +65,17 @@ protected void build() {
Expression create;
if ("".equals(xml.factory().method))
- create = new ObjectCreationExpr(null, types.getClass(xml.factory().clazz), Utils.list());
+ create = new ObjectCreationExpr(null, types.getClass(xml.factory().clazz), CodeGenUtils.list());
else
create = new MethodCallExpr(new TypeExpr(types.getClass(xml.factory().clazz)), xml.factory().method);
- BlockStmt b = cl.addMethod("read", Utils.PUBLIC).addMarkerAnnotation(Override.class).addThrownException(types.getClass(XMLStreamException.class))
+ BlockStmt b = cl.addMethod("read", CodeGenUtils.PUBLIC).addMarkerAnnotation(Override.class).addThrownException(types.getClass(XMLStreamException.class))
.addThrownException(types.getClass(JAXBException.class)).addParameter(types.get(XMLStreamReader.class), "r").setType(types.get(xml.type()))
.addParameter(types.get(Object.class), PARENT).addParameter(types.get(UnmarshallerImpl.class), "listener").createBody()
- .addStatement(Utils.assign(types.get(xml.type()), "o", create));
+ .addStatement(CodeGenUtils.assign(types.get(xml.type()), "o", create));
xml.type().asClass().method("beforeUnmarshal", ctx.type(Unmarshaller.class.getName()), ctx.type(Object.class.getName()))
- .ifPresent(m -> b.addStatement(new MethodCallExpr(new NameExpr("o"), "beforeUnmarshal", Utils.list(LISTENER, new NameExpr(PARENT)))));
- b.addStatement(new MethodCallExpr(LISTENER, "beforeUnmarshal", Utils.list(new NameExpr("o"), new NameExpr(PARENT))));
+ .ifPresent(m -> b.addStatement(new MethodCallExpr(new NameExpr("o"), "beforeUnmarshal", CodeGenUtils.list(LISTENER, new NameExpr(PARENT)))));
+ b.addStatement(new MethodCallExpr(LISTENER, "beforeUnmarshal", CodeGenUtils.list(new NameExpr("o"), new NameExpr(PARENT))));
readAttributes(xml, b);
@@ -83,39 +83,39 @@ protected void build() {
processCollection(xml.getElements(), b, end);
xml.type().asClass().method("afterUnmarshal", ctx.type(Unmarshaller.class.getName()), ctx.type(Object.class.getName()))
- .ifPresent(m -> end.addStatement(new MethodCallExpr(new NameExpr("o"), "afterUnmarshal", Utils.list(LISTENER, new NameExpr(PARENT)))));
+ .ifPresent(m -> end.addStatement(new MethodCallExpr(new NameExpr("o"), "afterUnmarshal", CodeGenUtils.list(LISTENER, new NameExpr(PARENT)))));
IfStmt i = new IfStmt(
new BinaryExpr(new NameExpr("n"), new FieldAccessExpr(new TypeExpr(types.get(XMLStreamConstants.class)), "END_ELEMENT"), BinaryExpr.Operator.EQUALS),
- end.addStatement(new MethodCallExpr(LISTENER, "afterUnmarshal", Utils.list(new NameExpr("o"), new NameExpr(PARENT))))
+ end.addStatement(new MethodCallExpr(LISTENER, "afterUnmarshal", CodeGenUtils.list(new NameExpr("o"), new NameExpr(PARENT))))
.addStatement(new ReturnStmt(new NameExpr("o"))),
null);
if (xml.getElements().iterator().hasNext()) {
AtomicInteger c = new AtomicInteger(0);
- Statement j = new ExpressionStmt(new MethodCallExpr(new TypeExpr(types.get(XmlHandler.class)), "skipTag", Utils.list(new NameExpr("r"))));
+ Statement j = new ExpressionStmt(new MethodCallExpr(new TypeExpr(types.get(XmlHandler.class)), "skipTag", CodeGenUtils.list(new NameExpr("r"))));
for (XmlElement e : xml.getElements())
j = readElement(e, j, new NameExpr("o"), e.setter(), c);
i = new IfStmt(
new BinaryExpr(new NameExpr("n"), new FieldAccessExpr(new TypeExpr(types.get(XMLStreamConstants.class)), "START_ELEMENT"), BinaryExpr.Operator.EQUALS),
- new BlockStmt().addStatement(Utils.assign(types.get(QName.class), "q", new MethodCallExpr(new NameExpr("r"), "getName"))).addStatement(j), i);
+ new BlockStmt().addStatement(CodeGenUtils.assign(types.get(QName.class), "q", new MethodCallExpr(new NameExpr("r"), "getName"))).addStatement(j), i);
}
- BlockStmt w = new BlockStmt().addStatement(Utils.assign(types.get("int"), "n", new MethodCallExpr(new NameExpr("r"), "next")));
+ BlockStmt w = new BlockStmt().addStatement(CodeGenUtils.assign(types.get("int"), "n", new MethodCallExpr(new NameExpr("r"), "next")));
if (xml.getValue() != null) {
XmlElement v = xml.getValue();
w.addStatement(new IfStmt(
new BinaryExpr(new NameExpr("n"), new FieldAccessExpr(new TypeExpr(types.get(XMLStreamConstants.class)), "CHARACTERS"), BinaryExpr.Operator.EQUALS),
new BlockStmt()
.addStatement(new MethodCallExpr(new NameExpr("o"), v.setter(),
- Utils.list(new MethodCallExpr(new FieldAccessExpr(new TypeExpr(types.get(ctx.handler(v.xmlType()))), INSTANCE), "toObject",
- Utils.list(new MethodCallExpr(new TypeExpr(types.get(StrReader.class)), "read", Utils.list(new NameExpr("r"))))))))
+ CodeGenUtils.list(new MethodCallExpr(new FieldAccessExpr(new TypeExpr(types.get(ctx.handler(v.xmlType()))), INSTANCE), "toObject",
+ CodeGenUtils.list(new MethodCallExpr(new TypeExpr(types.get(StrReader.class)), "read", CodeGenUtils.list(new NameExpr("r"))))))))
.addStatement(new AssignExpr(new NameExpr("n"), new MethodCallExpr(new NameExpr("r"), "getEventType"), AssignExpr.Operator.ASSIGN)),
null));
}
b.addStatement(new WhileStmt(new MethodCallExpr(new NameExpr("r"), "hasNext"), w.addStatement(i)))
- .addStatement(new ThrowStmt(new ObjectCreationExpr(null, types.getClass(XMLStreamException.class), Utils.list(new StringLiteralExpr("EOF")))));
+ .addStatement(new ThrowStmt(new ObjectCreationExpr(null, types.getClass(XMLStreamException.class), CodeGenUtils.list(new StringLiteralExpr("EOF")))));
}
@@ -126,17 +126,17 @@ private void readAttributes(XmlTypeComplex xml, BlockStmt b) {
Statement i = null;
int c = 0;
for (XmlElement e : xml.getAttributes()) {
- i = new IfStmt(new MethodCallExpr(new NameExpr(e.name() + "$a" + c++), "equals", Utils.list(new NameExpr("n"))),
+ i = new IfStmt(new MethodCallExpr(new NameExpr(e.name() + "$a" + c++), "equals", CodeGenUtils.list(new NameExpr("n"))),
new ExpressionStmt(new MethodCallExpr(new NameExpr("o"), e.setter(),
- Utils.list(new MethodCallExpr(new FieldAccessExpr(new TypeExpr(types.get(ctx.handler(e.xmlType()))), INSTANCE), "toObject",
- Utils.list(new MethodCallExpr(new NameExpr("r"), "getAttributeValue", Utils.list(new NameExpr("i")))))))),
+ CodeGenUtils.list(new MethodCallExpr(new FieldAccessExpr(new TypeExpr(types.get(ctx.handler(e.xmlType()))), INSTANCE), "toObject",
+ CodeGenUtils.list(new MethodCallExpr(new NameExpr("r"), "getAttributeValue", CodeGenUtils.list(new NameExpr("i")))))))),
i);
}
- b.addStatement(new ForStmt(Utils.list(Utils.assign(types.get("int"), "i", new IntegerLiteralExpr("0"))),
+ b.addStatement(new ForStmt(CodeGenUtils.list(CodeGenUtils.assign(types.get("int"), "i", new IntegerLiteralExpr("0"))),
new BinaryExpr(new NameExpr("i"), new MethodCallExpr(new NameExpr("r"), "getAttributeCount"), BinaryExpr.Operator.LESS),
- Utils.list(new UnaryExpr(new NameExpr("i"), UnaryExpr.Operator.POSTFIX_INCREMENT)),
+ CodeGenUtils.list(new UnaryExpr(new NameExpr("i"), UnaryExpr.Operator.POSTFIX_INCREMENT)),
new BlockStmt()
- .addStatement(Utils.assign(types.get(QName.class), "n", new MethodCallExpr(new NameExpr("r"), "getAttributeName", Utils.list(new NameExpr("i")))))
+ .addStatement(CodeGenUtils.assign(types.get(QName.class), "n", new MethodCallExpr(new NameExpr("r"), "getAttributeName", CodeGenUtils.list(new NameExpr("i")))))
.addStatement(i)));
}
@@ -146,12 +146,12 @@ private void processCollection(XmlElements elements, BlockStmt b, BlockStmt end)
continue;
Expression v = new NameExpr("l$" + e.name());
if (e.type().isArray())
- v = new MethodCallExpr(v, "toArray", Utils.list(new NameExpr(ctx.emptyArray(e.type()))));
+ v = new MethodCallExpr(v, "toArray", CodeGenUtils.list(new NameExpr(ctx.emptyArray(e.type()))));
end.addStatement(new IfStmt(new BinaryExpr(new NameExpr("l$" + e.name()), new NullLiteralExpr(), BinaryExpr.Operator.NOT_EQUALS),
- new ExpressionStmt(new MethodCallExpr(new NameExpr("o"), e.setter(), Utils.list(v))), null));
+ new ExpressionStmt(new MethodCallExpr(new NameExpr("o"), e.setter(), CodeGenUtils.list(v))), null));
Type t = e.type().isArray() ? types.getClass(List.class, types.get(e.type().asArray().type().asClass())) : types.get(e.type());
- b.addStatement(Utils.assign(t, "l$" + e.name(), new NullLiteralExpr()));
+ b.addStatement(CodeGenUtils.assign(t, "l$" + e.name(), new NullLiteralExpr()));
}
}
@@ -164,15 +164,15 @@ private Statement readElement(XmlElement e, Statement j, NameExpr n, String sett
setter = "add";
s.addStatement(new IfStmt(new BinaryExpr(n, new NullLiteralExpr(), BinaryExpr.Operator.EQUALS),
new ExpressionStmt(new AssignExpr(n,
- new ObjectCreationExpr(null, types.getClass(e.type().isAssignableTo(Set.class) ? HashSet.class : ArrayList.class, TypeCache.EMPTY), Utils.list()),
+ new ObjectCreationExpr(null, types.getClass(e.type().isAssignableTo(Set.class) ? HashSet.class : ArrayList.class, TypeFactory.EMPTY), CodeGenUtils.list()),
AssignExpr.Operator.ASSIGN)),
null));
}
if (!(xmlType instanceof XmlChoice)) {
- Expression call = new MethodCallExpr(n, setter, Utils.list(new MethodCallExpr(new FieldAccessExpr(new TypeExpr(types.get(ctx.handler(xmlType))), INSTANCE), "read",
- Utils.list(new NameExpr("r"), new NameExpr("o"), LISTENER))));
- return new IfStmt(new MethodCallExpr(new NameExpr(e.name() + "$e" + c.getAndIncrement()), "equals", Utils.list(new NameExpr("q"))),
+ Expression call = new MethodCallExpr(n, setter, CodeGenUtils.list(new MethodCallExpr(new FieldAccessExpr(new TypeExpr(types.get(ctx.handler(xmlType))), INSTANCE), "read",
+ CodeGenUtils.list(new NameExpr("r"), new NameExpr("o"), LISTENER))));
+ return new IfStmt(new MethodCallExpr(new NameExpr(e.name() + "$e" + c.getAndIncrement()), "equals", CodeGenUtils.list(new NameExpr("q"))),
s.getStatements().isEmpty() ? new ExpressionStmt(call) : s.addStatement(call), j);
}
@@ -188,14 +188,14 @@ private Statement readElement(XmlElement e, Statement j, NameExpr n, String sett
xmlType = ((XmlCollection) xmlType).component();
Expression v = new MethodCallExpr(new FieldAccessExpr(new TypeExpr(types.get(ctx.handler(xmlType))), INSTANCE), "read",
- Utils.list(new NameExpr("r"), new NameExpr("o"), LISTENER));
+ CodeGenUtils.list(new NameExpr("r"), new NameExpr("o"), LISTENER));
if (map.get(xmlType.type()).size() > 1)
- v = new ObjectCreationExpr(null, types.getClass(JAXBElement.class, TypeCache.EMPTY),
- Utils.list(new NameExpr("q"), new ClassExpr(types.get(xmlType.type())), new NullLiteralExpr(), v));
+ v = new ObjectCreationExpr(null, types.getClass(JAXBElement.class, TypeFactory.EMPTY),
+ CodeGenUtils.list(new NameExpr("q"), new ClassExpr(types.get(xmlType.type())), new NullLiteralExpr(), v));
- Expression call = new MethodCallExpr(n, setter, Utils.list(v));
- j = new IfStmt(new MethodCallExpr(new NameExpr(x.name() + "$e" + c.getAndIncrement()), "equals", Utils.list(new NameExpr("q"))),
+ Expression call = new MethodCallExpr(n, setter, CodeGenUtils.list(v));
+ j = new IfStmt(new MethodCallExpr(new NameExpr(x.name() + "$e" + c.getAndIncrement()), "equals", CodeGenUtils.list(new NameExpr("q"))),
b.getStatements().isEmpty() ? new ExpressionStmt(call) : b.addStatement(call), j);
}
return j;
diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/jaxb/builder/HandlerObjectWriter.java b/unknow-server-maven/src/main/java/unknow/server/maven/jaxb/builder/HandlerObjectWriter.java
index 5a07b8db..f5094c89 100644
--- a/unknow-server-maven/src/main/java/unknow/server/maven/jaxb/builder/HandlerObjectWriter.java
+++ b/unknow-server-maven/src/main/java/unknow/server/maven/jaxb/builder/HandlerObjectWriter.java
@@ -39,11 +39,11 @@
import jakarta.xml.bind.JAXBElement;
import jakarta.xml.bind.JAXBException;
import jakarta.xml.bind.Marshaller;
+import unknow.maven.codegen.CodeGenUtils;
+import unknow.maven.codegen.TypeFactory;
import unknow.model.api.TypeModel;
import unknow.server.jaxb.MarshallerImpl;
import unknow.server.maven.SourceBuilder.AbstractSourceBuilder;
-import unknow.server.maven.TypeCache;
-import unknow.server.maven.Utils;
import unknow.server.maven.jaxb.HandlerContext;
import unknow.server.maven.jaxb.model.XmlChoice;
import unknow.server.maven.jaxb.model.XmlCollection;
@@ -59,31 +59,31 @@ public class HandlerObjectWriter extends AbstractSourceBuilder {
protected void build() {
XmlTypeComplex xml = ctx.xml();
- BlockStmt b = cl.addMethod("write", Utils.PUBLIC).addMarkerAnnotation(Override.class).addThrownException(types.getClass(XMLStreamException.class))
+ BlockStmt b = cl.addMethod("write", CodeGenUtils.PUBLIC).addMarkerAnnotation(Override.class).addThrownException(types.getClass(XMLStreamException.class))
.addThrownException(types.getClass(JAXBException.class)).addParameter(types.get(XMLStreamWriter.class), "w").addParameter(types.get(xml.type()), "t")
.addParameter(types.get(MarshallerImpl.class), "m").addParameter(types.get(Marshaller.Listener.class), "listener").createBody();
xml.type().asClass().method("beforeMarshal", ctx.type(Marshaller.class.getName()))
- .ifPresent(m -> b.addStatement(new MethodCallExpr(new NameExpr("o"), "beforeMarshal", Utils.list(LISTENER))));
+ .ifPresent(m -> b.addStatement(new MethodCallExpr(new NameExpr("o"), "beforeMarshal", CodeGenUtils.list(LISTENER))));
b.addStatement(new IfStmt(new BinaryExpr(LISTENER, new NullLiteralExpr(), BinaryExpr.Operator.NOT_EQUALS),
- new ExpressionStmt(new MethodCallExpr(LISTENER, "beforeMarshal", Utils.list(new NameExpr("t")))), null));
+ new ExpressionStmt(new MethodCallExpr(LISTENER, "beforeMarshal", CodeGenUtils.list(new NameExpr("t")))), null));
buildAttributes(xml.getAttributes(), b);
AtomicInteger i = new AtomicInteger(0);
for (XmlElement e : xml.getElements())
- buildElement(types, e, b, i);
+ buildElement(e, b, i);
if (xml.getValue() != null) {
XmlElement value = xml.getValue();
b.addStatement(new MethodCallExpr(new NameExpr("w"), "writeCharacters",
- Utils.list(new MethodCallExpr(new FieldAccessExpr(new TypeExpr(types.get(ctx.handler(value.xmlType()))), INSTANCE), "toString",
- Utils.list(new MethodCallExpr(new NameExpr("t"), value.getter()))))));
+ CodeGenUtils.list(new MethodCallExpr(new FieldAccessExpr(new TypeExpr(types.get(ctx.handler(value.xmlType()))), INSTANCE), "toString",
+ CodeGenUtils.list(new MethodCallExpr(new NameExpr("t"), value.getter()))))));
}
xml.type().asClass().method("afterMarshal", ctx.type(Marshaller.class.getName()))
- .ifPresent(m -> b.addStatement(new MethodCallExpr(new NameExpr("o"), "afterMarshal", Utils.list(LISTENER))));
+ .ifPresent(m -> b.addStatement(new MethodCallExpr(new NameExpr("o"), "afterMarshal", CodeGenUtils.list(LISTENER))));
b.addStatement(new IfStmt(new BinaryExpr(LISTENER, new NullLiteralExpr(), BinaryExpr.Operator.NOT_EQUALS),
- new ExpressionStmt(new MethodCallExpr(LISTENER, "afterMarshal", Utils.list(new NameExpr("t")))), null));
+ new ExpressionStmt(new MethodCallExpr(LISTENER, "afterMarshal", CodeGenUtils.list(new NameExpr("t")))), null));
}
private void buildAttributes(List attrs, BlockStmt b) {
@@ -93,12 +93,12 @@ private void buildAttributes(List attrs, BlockStmt b) {
b.addStatement(new VariableDeclarationExpr(types.get(String.class), "s"));
for (XmlElement e : attrs) {
Expression v = new MethodCallExpr(new FieldAccessExpr(new TypeExpr(types.get(ctx.handler(e.xmlType()))), INSTANCE), "toString",
- Utils.list(new MethodCallExpr(new NameExpr("t"), e.getter())));
+ CodeGenUtils.list(new MethodCallExpr(new NameExpr("t"), e.getter())));
v = new EnclosedExpr(new AssignExpr(new NameExpr("s"), v, AssignExpr.Operator.ASSIGN));
- NodeList l = Utils.list();
+ NodeList l = CodeGenUtils.list();
if (!e.ns().isEmpty())
- l.add(Utils.text(e.ns()));
- l.add(Utils.text(e.name()));
+ l.add(CodeGenUtils.text(e.ns()));
+ l.add(CodeGenUtils.text(e.name()));
l.add(new NameExpr("s"));
if (e.type().isPrimitive())
b.addStatement(new MethodCallExpr(new NameExpr("w"), "writeAttribute", l));
@@ -108,7 +108,7 @@ private void buildAttributes(List attrs, BlockStmt b) {
}
}
- private void buildElement(TypeCache types, XmlElement e, BlockStmt b, AtomicInteger i) {
+ private void buildElement(XmlElement e, BlockStmt b, AtomicInteger i) {
String n = "o$" + i.getAndIncrement();
BlockStmt w;
@@ -121,32 +121,32 @@ private void buildElement(TypeCache types, XmlElement e, BlockStmt b, AtomicInte
TypeModel c = t.isArray() ? t.asArray().type() : t.asClass().ancestor(Collection.class.getName()).parameter(0).type();
BlockStmt p = new BlockStmt()
.addStatement(new IfStmt(new BinaryExpr(new NameExpr("e"), new NullLiteralExpr(), BinaryExpr.Operator.EQUALS), new ContinueStmt(), null));
- buildElement(types, e, xml, p, new NameExpr("e"));
+ buildElement(e, xml, p, new NameExpr("e"));
if (t.isArray()) {
- p.addStatement(0, Utils.assign(types.get(xml.type()), "e", new ArrayAccessExpr(new NameExpr(n), new NameExpr("i"))));
- w = new BlockStmt().addStatement(new ForStmt(Utils.list(Utils.assign(types.get("int"), "i", new IntegerLiteralExpr("0"))),
+ p.addStatement(0, CodeGenUtils.assign(types.get(xml.type()), "e", new ArrayAccessExpr(new NameExpr(n), new NameExpr("i"))));
+ w = new BlockStmt().addStatement(new ForStmt(CodeGenUtils.list(CodeGenUtils.assign(types.get("int"), "i", new IntegerLiteralExpr("0"))),
new BinaryExpr(new NameExpr("i"), new FieldAccessExpr(new NameExpr(n), "length"), BinaryExpr.Operator.LESS),
- Utils.list(new UnaryExpr(new NameExpr("i"), UnaryExpr.Operator.POSTFIX_INCREMENT)), p));
+ CodeGenUtils.list(new UnaryExpr(new NameExpr("i"), UnaryExpr.Operator.POSTFIX_INCREMENT)), p));
} else {
w = new BlockStmt().addStatement(new ForEachStmt(new VariableDeclarationExpr(types.get(c), "e"), new NameExpr(n), p));
}
} else
- w = buildElement(types, e, xml, new BlockStmt(), new NameExpr(n));
+ w = buildElement(e, xml, new BlockStmt(), new NameExpr(n));
- b.addStatement(Utils.assign(types.get(e.type()), n, new MethodCallExpr(new NameExpr("t"), e.getter())));
+ b.addStatement(CodeGenUtils.assign(types.get(e.type()), n, new MethodCallExpr(new NameExpr("t"), e.getter())));
if (e.type().isPrimitive())
b.addStatement(w);
else
b.addStatement(new IfStmt(new BinaryExpr(new NameExpr(n), new NullLiteralExpr(), BinaryExpr.Operator.NOT_EQUALS), w, null));
}
- private BlockStmt buildElement(TypeCache types, XmlElement e, XmlType xml, BlockStmt p, Expression name) {
+ private BlockStmt buildElement(XmlElement e, XmlType xml, BlockStmt p, Expression name) {
if (!(xml instanceof XmlChoice)) {
- p.addStatement(new MethodCallExpr(new NameExpr("w"), "writeStartElement", Utils.list(Utils.text(e.ns()), Utils.text(e.name()))))
+ p.addStatement(new MethodCallExpr(new NameExpr("w"), "writeStartElement", CodeGenUtils.list(CodeGenUtils.text(e.ns()), CodeGenUtils.text(e.name()))))
.addStatement(new MethodCallExpr(new FieldAccessExpr(new TypeExpr(types.get(ctx.handler(xml))), INSTANCE), "write",
- Utils.list(new NameExpr("w"), name, new NameExpr("m"), LISTENER)))
- .addStatement(new MethodCallExpr(new NameExpr("w"), "writeEndElement", Utils.list()));
+ CodeGenUtils.list(new NameExpr("w"), name, new NameExpr("m"), LISTENER)))
+ .addStatement(new MethodCallExpr(new NameExpr("w"), "writeEndElement", CodeGenUtils.list()));
return p;
}
XmlChoice c = (XmlChoice) xml;
@@ -159,13 +159,13 @@ private BlockStmt buildElement(TypeCache types, XmlElement e, XmlType xml, Block
list.add(v.get(0));
}
- Statement s = new ThrowStmt(new ObjectCreationExpr(null, types.getClass(JAXBException.class), Utils.list(Utils.text("Expected unexpected type"))));
+ Statement s = new ThrowStmt(new ObjectCreationExpr(null, types.getClass(JAXBException.class), CodeGenUtils.list(CodeGenUtils.text("Expected unexpected type"))));
for (XmlElement x : list)
s = new IfStmt(new InstanceOfExpr(name, types.getClass(x.xmlType().type())),
- buildElement(types, x, x.xmlType(), new BlockStmt(), new CastExpr(types.get(x.xmlType().type()), name)), s);
+ buildElement(x, x.xmlType(), new BlockStmt(), new CastExpr(types.get(x.xmlType().type()), name)), s);
p.addStatement(new IfStmt(new InstanceOfExpr(name, types.getClass(JAXBElement.class)), new ExpressionStmt(new MethodCallExpr(new NameExpr("m"), "write",
- Utils.list(new CastExpr(types.getClass(JAXBElement.class, TypeCache.ANY), name), new NameExpr("w"), new NullLiteralExpr()))), s));
+ CodeGenUtils.list(new CastExpr(types.getClass(JAXBElement.class, TypeFactory.ANY), name), new NameExpr("w"), new NullLiteralExpr()))), s));
return p;
}
}
diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/jaxrs/BeanParamBuilder.java b/unknow-server-maven/src/main/java/unknow/server/maven/jaxrs/BeanParamBuilder.java
index 9beeb929..cb5d4b7b 100644
--- a/unknow-server-maven/src/main/java/unknow/server/maven/jaxrs/BeanParamBuilder.java
+++ b/unknow-server-maven/src/main/java/unknow/server/maven/jaxrs/BeanParamBuilder.java
@@ -31,14 +31,14 @@
import jakarta.ws.rs.WebApplicationException;
import jakarta.ws.rs.ext.ParamConverter;
+import unknow.maven.codegen.CodeGenUtils;
+import unknow.maven.codegen.CompilationUnitWriter;
+import unknow.maven.codegen.TypeFactory;
import unknow.model.api.TypeModel;
import unknow.model.jvm.JvmModelLoader;
import unknow.server.http.jaxrs.JaxrsContext;
import unknow.server.http.jaxrs.JaxrsEntityReader;
import unknow.server.http.jaxrs.JaxrsReq;
-import unknow.server.maven.Output;
-import unknow.server.maven.TypeCache;
-import unknow.server.maven.Utils;
import unknow.server.maven.jaxrs.JaxrsParam.JaxrsBeanParam;
import unknow.server.maven.jaxrs.JaxrsParam.JaxrsBeanParam.JaxrsBeanFieldParam;
import unknow.server.maven.jaxrs.JaxrsParam.JaxrsBodyParam;
@@ -50,7 +50,7 @@
public class BeanParamBuilder {
private final CompilationUnit cu;
private final ClassOrInterfaceDeclaration cl;
- private final TypeCache types;
+ private final TypeFactory types;
private final Map> beans;
private final Map beansVar;
@@ -59,8 +59,8 @@ public class BeanParamBuilder {
public BeanParamBuilder(CompilationUnit cu, Map existingClass) {
this.cu = cu;
- types = new TypeCache(cu, existingClass);
- cl = cu.addClass("BeansReader", Utils.PUBLIC);
+ types = new TypeFactory(cu, existingClass);
+ cl = cu.addClass("BeansReader", CodeGenUtils.PUBLIC);
beans = new HashMap<>();
beansVar = new HashMap<>();
@@ -85,13 +85,13 @@ public void add(JaxrsBeanParam> param) {
for (JaxrsBeanFieldParam p : param.params)
processBeanConverter(p.param, n + "$" + i++, init);
- MethodDeclaration m = cl.addMethod(beansVar.get(clazz), Utils.PUBLIC_STATIC).addParameter(types.getClass(JaxrsReq.class), "r").setType(types.get(clazz))
+ MethodDeclaration m = cl.addMethod(beansVar.get(clazz), CodeGenUtils.PUBLIC_STATIC).addParameter(types.getClass(JaxrsReq.class), "r").setType(types.get(clazz))
.addThrownException(types.getClass(WebApplicationException.class));
if (throwsIoException(param.params))
m.addThrownException(types.getClass(IOException.class));
- BlockStmt b = m.createBody().addStatement(Utils.create(types.getClass(clazz), "b", Utils.list()));
+ BlockStmt b = m.createBody().addStatement(CodeGenUtils.create(types.getClass(clazz), "b", CodeGenUtils.list()));
for (JaxrsBeanFieldParam e : param.params)
- b.addStatement(new MethodCallExpr(new NameExpr("b"), e.prop.setter().name(), Utils.list(getParam(e.param))));
+ b.addStatement(new MethodCallExpr(new NameExpr("b"), e.prop.setter().name(), CodeGenUtils.list(getParam(e.param))));
b.addStatement(new ReturnStmt(new NameExpr("b")));
}
@@ -106,9 +106,9 @@ private boolean throwsIoException(List params) {
return false;
}
- public void save(Output out) throws MojoExecutionException {
+ public void save(CompilationUnitWriter writer) throws MojoExecutionException {
if (!beans.isEmpty())
- out.save(cu);
+ writer.write(cu);
}
private void processBeanConverter(JaxrsParam> p, String n, BlockStmt b) {
@@ -128,34 +128,34 @@ private void processBeanConverter(JaxrsParam> p, String n, BlockStmt b) {
b.addStatement(new TryStmt(
new BlockStmt()
- .addStatement(Utils.assign(types.getClass(Field.class), "f",
- new MethodCallExpr(new ClassExpr(types.get(p.parent.name())), "getDeclaredField", Utils.list(Utils.text(p.name)))))
+ .addStatement(CodeGenUtils.assign(types.getClass(Field.class), "f",
+ new MethodCallExpr(new ClassExpr(types.get(p.parent.name())), "getDeclaredField", CodeGenUtils.list(CodeGenUtils.text(p.name)))))
.addStatement(new AssignExpr(new NameExpr("t"),
new MethodCallExpr(new TypeExpr(types.get(JaxrsContext.class)), "getParamType",
- Utils.list(new MethodCallExpr(new NameExpr("f"), "getGenericType"))),
+ CodeGenUtils.list(new MethodCallExpr(new NameExpr("f"), "getGenericType"))),
AssignExpr.Operator.ASSIGN))
.addStatement(new AssignExpr(new NameExpr("a"), new MethodCallExpr(new NameExpr("f"), "getAnnotations"), AssignExpr.Operator.ASSIGN)),
- Utils.list(new CatchClause(
+ CodeGenUtils.list(new CatchClause(
new com.github.javaparser.ast.body.Parameter(types.getClass(Exception.class), "e").addSingleMemberAnnotation(SuppressWarnings.class,
- Utils.text("unused")),
+ CodeGenUtils.text("unused")),
new BlockStmt().addStatement(new AssignExpr(new NameExpr("t"), new ClassExpr(types.get(t1.name())), AssignExpr.Operator.ASSIGN))
- .addStatement(new AssignExpr(new NameExpr("a"), Utils.array(types.getClass(Annotation.class), 0), AssignExpr.Operator.ASSIGN)))),
+ .addStatement(new AssignExpr(new NameExpr("a"), CodeGenUtils.array(types.getClass(Annotation.class), 0), AssignExpr.Operator.ASSIGN)))),
null));
if (p instanceof JaxrsBodyParam) {
- cl.addField(types.getClass(JaxrsEntityReader.class, types.getClass(p.type)), n, Utils.PSF);
- b.addStatement(new AssignExpr(new NameExpr(n), new ObjectCreationExpr(null, types.getClass(JaxrsEntityReader.class, TypeCache.EMPTY),
- Utils.list(new ClassExpr(types.get(p.type.name())), new NameExpr("t"), new NameExpr("a"))), AssignExpr.Operator.ASSIGN));
+ cl.addField(types.getClass(JaxrsEntityReader.class, types.getClass(p.type)), n, CodeGenUtils.PSF);
+ b.addStatement(new AssignExpr(new NameExpr(n), new ObjectCreationExpr(null, types.getClass(JaxrsEntityReader.class, TypeFactory.EMPTY),
+ CodeGenUtils.list(new ClassExpr(types.get(p.type.name())), new NameExpr("t"), new NameExpr("a"))), AssignExpr.Operator.ASSIGN));
} else {
- cl.addField(types.getClass(ParamConverter.class, types.get(t)), n, Utils.PSF);
+ cl.addField(types.getClass(ParamConverter.class, types.get(t)), n, CodeGenUtils.PSF);
b.addStatement(new AssignExpr(new NameExpr(n), new MethodCallExpr(new TypeExpr(types.getClass(JaxrsContext.class)), "converter",
- Utils.list(new ClassExpr(types.get(t1.name())), new NameExpr("t"), new NameExpr("a"))), AssignExpr.Operator.ASSIGN));
+ CodeGenUtils.list(new ClassExpr(types.get(t1.name())), new NameExpr("t"), new NameExpr("a"))), AssignExpr.Operator.ASSIGN));
}
}
private Expression getParam(JaxrsParam> p) {
if (p instanceof JaxrsBodyParam)
- return new MethodCallExpr(new NameExpr(converterVar.get(p)), "read", Utils.list(new NameExpr("r")));
+ return new MethodCallExpr(new NameExpr(converterVar.get(p)), "read", CodeGenUtils.list(new NameExpr("r")));
if (p instanceof JaxrsBeanParam)
return new MethodCallExpr(beansVar.get(((JaxrsBeanParam>) p).clazz.name()), new NameExpr("r"));
return JaxrsModel.getParam(p, types, converterVar);
diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/jaxrs/JaxRsServletBuilder.java b/unknow-server-maven/src/main/java/unknow/server/maven/jaxrs/JaxRsServletBuilder.java
index 39510a0d..1c47e8d3 100644
--- a/unknow-server-maven/src/main/java/unknow/server/maven/jaxrs/JaxRsServletBuilder.java
+++ b/unknow-server-maven/src/main/java/unknow/server/maven/jaxrs/JaxRsServletBuilder.java
@@ -61,6 +61,8 @@
import jakarta.ws.rs.NotSupportedException;
import jakarta.ws.rs.core.MediaType;
import jakarta.ws.rs.ext.ParamConverter;
+import unknow.maven.codegen.CodeGenUtils;
+import unknow.maven.codegen.TypeFactory;
import unknow.model.api.ClassModel;
import unknow.model.api.MethodModel;
import unknow.model.api.ParamModel;
@@ -73,7 +75,6 @@
import unknow.server.http.jaxrs.PathPattern;
import unknow.server.http.jaxrs.PathPattern.PathRegexp;
import unknow.server.http.jaxrs.PathPattern.PathSimple;
-import unknow.server.maven.TypeCache;
import unknow.server.maven.Utils;
import unknow.server.maven.jaxrs.JaxrsParam.JaxrsBeanParam;
import unknow.server.maven.jaxrs.JaxrsParam.JaxrsBodyParam;
@@ -108,7 +109,7 @@ public class JaxRsServletBuilder {
private final BeanParamBuilder beans;
private final MediaTypesBuilder mt;
- private final TypeCache types;
+ private final TypeFactory types;
private final ClassOrInterfaceDeclaration cl;
private final List mappings;
@@ -126,10 +127,10 @@ public JaxRsServletBuilder(CompilationUnit cu, Map existingClass
this.mt = mt;
this.mappings = mappings;
- types = new TypeCache(cu, existingClass);
- cl = cu.addClass("Jaxrs" + path.replace('/', '_').replace("*", ""), Utils.PUBLIC).addSingleMemberAnnotation(WebServlet.class, Utils.text(path))
+ types = new TypeFactory(cu, existingClass);
+ cl = cu.addClass("Jaxrs" + path.replace('/', '_').replace("*", ""), CodeGenUtils.PUBLIC).addSingleMemberAnnotation(WebServlet.class, CodeGenUtils.text(path))
.addExtendedType(HttpServlet.class);
- cl.addFieldWithInitializer(long.class, "serialVersionUID", new LongLiteralExpr("1L"), Utils.PSF);
+ cl.addFieldWithInitializer(long.class, "serialVersionUID", new LongLiteralExpr("1L"), CodeGenUtils.PSF);
builder = path.endsWith("*") ? new PatternService(path.length() - 1) : new SimpleService();
@@ -138,7 +139,7 @@ public JaxRsServletBuilder(CompilationUnit cu, Map existingClass
String n = "s$" + services.size();
if (!services.containsKey(c.name())) {
services.put(c.name(), new NameExpr(n));
- cl.addFieldWithInitializer(types.get(c.name()), n, new ObjectCreationExpr(null, types.getClass(c), Utils.list()), Utils.PSF);
+ cl.addFieldWithInitializer(types.get(c.name()), n, new ObjectCreationExpr(null, types.getClass(c), CodeGenUtils.list()), CodeGenUtils.PSF);
}
}
}
@@ -170,30 +171,29 @@ private void buildInializer() {
for (ParamModel p : parameters)
classes.add(new ClassExpr(types.get(p.type().name())));
NodeList getMethod = new NodeList<>();
- getMethod.add(Utils.text(m.m.name()));
+ getMethod.add(CodeGenUtils.text(m.m.name()));
getMethod.addAll(classes);
- BlockStmt t = new BlockStmt()
- .addStatement(Utils.assign(types.getClass(Method.class), "m", new MethodCallExpr(new ClassExpr(types.get(m.m.parent().name())), "getMethod", getMethod)));
+ BlockStmt t = new BlockStmt().addStatement(
+ CodeGenUtils.assign(types.getClass(Method.class), "m", new MethodCallExpr(new ClassExpr(types.get(m.m.parent().name())), "getMethod", getMethod)));
BlockStmt ca = new BlockStmt();
if (hasParamConverter(m)) {
t.addStatement(new AssignExpr(new NameExpr("t"), new MethodCallExpr(new NameExpr("m"), "getGenericParameterTypes"), AssignExpr.Operator.ASSIGN))
.addStatement(new AssignExpr(new NameExpr("a"), new MethodCallExpr(new NameExpr("m"), "getParameterAnnotations"), AssignExpr.Operator.ASSIGN));
- ca.addStatement(new AssignExpr(new NameExpr("t"), Utils.array(types.getClass(Type.class), classes), AssignExpr.Operator.ASSIGN))
- .addStatement(new AssignExpr(new NameExpr("a"), Utils.array(types.getClass(Annotation.class), parameters.size(), 0), AssignExpr.Operator.ASSIGN));
+ ca.addStatement(new AssignExpr(new NameExpr("t"), CodeGenUtils.array(types.getClass(Type.class), classes), AssignExpr.Operator.ASSIGN)).addStatement(
+ new AssignExpr(new NameExpr("a"), CodeGenUtils.array(types.getClass(Annotation.class), parameters.size(), 0), AssignExpr.Operator.ASSIGN));
}
if (hasReturn(m)) {
t.addStatement(new AssignExpr(new NameExpr("r"), new MethodCallExpr(new NameExpr("m"), "getGenericReturnType"), AssignExpr.Operator.ASSIGN))
.addStatement(new AssignExpr(new NameExpr("ra"), new MethodCallExpr(new NameExpr("m"), "getAnnotations"), AssignExpr.Operator.ASSIGN));
ca.addStatement(new AssignExpr(new NameExpr("r"), new ClassExpr(types.get(m.m.type().name())), AssignExpr.Operator.ASSIGN))
- .addStatement(new AssignExpr(new NameExpr("ra"), Utils.array(types.getClass(Annotation.class), 0), AssignExpr.Operator.ASSIGN));
+ .addStatement(new AssignExpr(new NameExpr("ra"), CodeGenUtils.array(types.getClass(Annotation.class), 0), AssignExpr.Operator.ASSIGN));
}
- b.addStatement(new TryStmt(t, Utils.list(new CatchClause(
- new com.github.javaparser.ast.body.Parameter(types.getClass(Exception.class), "e").addSingleMemberAnnotation(SuppressWarnings.class, Utils.text("unused")),
- ca)), null));
+ b.addStatement(new TryStmt(t, CodeGenUtils.list(new CatchClause(new com.github.javaparser.ast.body.Parameter(types.getClass(Exception.class), "e")
+ .addSingleMemberAnnotation(SuppressWarnings.class, CodeGenUtils.text("unused")), ca)), null));
int i = 0;
for (JaxrsParam> p : m.params)
@@ -204,9 +204,9 @@ private void buildInializer() {
if (type.isPrimitive())
type = JvmModelLoader.GLOBAL.get(type.asPrimitive().boxed());
ClassOrInterfaceType c = types.getClass(type.genericName());
- cl.addField(types.getClass(JaxrsEntityWriter.class, c), m.v + "$r", Utils.PSF);
+ cl.addField(types.getClass(JaxrsEntityWriter.class, c), m.v + "$r", CodeGenUtils.PSF);
b.addStatement(new AssignExpr(new NameExpr(m.v + "$r"), new MethodCallExpr(new TypeExpr(types.getClass(JaxrsEntityWriter.class)), "create",
- Utils.list(new ClassExpr(types.get(type.name())), new NameExpr("r"), new NameExpr("ra"))), AssignExpr.Operator.ASSIGN));
+ CodeGenUtils.list(new ClassExpr(types.get(type.name())), new NameExpr("r"), new NameExpr("ra"))), AssignExpr.Operator.ASSIGN));
}
for (JaxrsParam> p : m.params) {
if (p instanceof JaxrsBeanParam)
@@ -250,10 +250,10 @@ private void buildOptions(String name, Set methods) {
if (!methods.contains("HEAD") && methods.contains("GET"))
sb.append(",HEAD");
- MethodDeclaration m = cl.addMethod(name, Utils.PRIVATE);
+ MethodDeclaration m = cl.addMethod(name, CodeGenUtils.PRIVATE);
m.addAndGetParameter(types.getClass(JaxrsReq.class), "req").addSingleMemberAnnotation(SuppressWarnings.class, new StringLiteralExpr("unused"));
m.addParameter(types.getClass(HttpServletResponse.class), "res").createBody()
- .addStatement(new MethodCallExpr(new NameExpr("res"), "setHeader", Utils.list(Utils.text("Allow"), Utils.text(sb.toString()))));
+ .addStatement(new MethodCallExpr(new NameExpr("res"), "setHeader", CodeGenUtils.list(CodeGenUtils.text("Allow"), CodeGenUtils.text(sb.toString()))));
}
/**
@@ -276,18 +276,18 @@ private void processConverter(JaxrsParam> p, String n, int i, BlockStmt b) {
if (p instanceof JaxrsBodyParam) {
ClassOrInterfaceType type = types.getClass(p.type.genericName());
- cl.addField(types.getClass(JaxrsEntityReader.class, type), n, Utils.PSF);
+ cl.addField(types.getClass(JaxrsEntityReader.class, type), n, CodeGenUtils.PSF);
b.addStatement(new AssignExpr(new NameExpr(n),
- new ObjectCreationExpr(null, types.getClass(JaxrsEntityReader.class, TypeCache.EMPTY), Utils.list(new ClassExpr(types.get(p.type.name())),
+ new ObjectCreationExpr(null, types.getClass(JaxrsEntityReader.class, TypeFactory.EMPTY), CodeGenUtils.list(new ClassExpr(types.get(p.type.name())),
new ArrayAccessExpr(new NameExpr("t"), new IntegerLiteralExpr("" + i)), new ArrayAccessExpr(new NameExpr("a"), new IntegerLiteralExpr("" + i)))),
AssignExpr.Operator.ASSIGN));
} else {
- cl.addField(types.getClass(ParamConverter.class, types.getClass(t)), n, Utils.PSF);
+ cl.addField(types.getClass(ParamConverter.class, types.getClass(t)), n, CodeGenUtils.PSF);
b.addStatement(new AssignExpr(new NameExpr(n),
new MethodCallExpr(new TypeExpr(types.getClass(JaxrsContext.class)), "converter",
- Utils.list(new ClassExpr(types.get(t1.name())),
+ CodeGenUtils.list(new ClassExpr(types.get(t1.name())),
new MethodCallExpr(new TypeExpr(types.get(JaxrsContext.class)), "getParamType",
- Utils.list(new ArrayAccessExpr(new NameExpr("t"), new IntegerLiteralExpr("" + i)))),
+ CodeGenUtils.list(new ArrayAccessExpr(new NameExpr("t"), new IntegerLiteralExpr("" + i)))),
new ArrayAccessExpr(new NameExpr("a"), new IntegerLiteralExpr("" + i)))),
AssignExpr.Operator.ASSIGN));
}
@@ -299,12 +299,12 @@ private void processConverter(JaxrsParam> p, String n, int i, BlockStmt b) {
*/
private void buildMethod(String name, List list) {
BlockStmt b = new BlockStmt();
- cl.addMethod(name, Utils.PRIVATE).addParameter(types.getClass(JaxrsReq.class), "req").addParameter(types.getClass(HttpServletResponse.class), "res")
+ cl.addMethod(name, CodeGenUtils.PRIVATE).addParameter(types.getClass(JaxrsReq.class), "req").addParameter(types.getClass(HttpServletResponse.class), "res")
.addThrownException(IOException.class).createBody()
.addStatement(new TryStmt(b,
- Utils.list(new CatchClause(new com.github.javaparser.ast.body.Parameter(types.getClass(Throwable.class), "e"),
+ CodeGenUtils.list(new CatchClause(new com.github.javaparser.ast.body.Parameter(types.getClass(Throwable.class), "e"),
new BlockStmt().addStatement(new MethodCallExpr(new TypeExpr(types.getClass(JaxrsContext.class)), "sendError",
- Utils.list(new NameExpr("req"), new NameExpr("e"), new NameExpr("res")))))),
+ CodeGenUtils.list(new NameExpr("req"), new NameExpr("e"), new NameExpr("res")))))),
null));
Map> consume = new LinkedHashMap<>();
@@ -329,15 +329,15 @@ private void buildMethod(String name, List list) {
if (consume.isEmpty())
buildProduces(b, def);
else {
- b.addStatement(Utils.assign(types.getClass(MediaType.class), "contentType", new MethodCallExpr(new NameExpr("req"), "getContentType")));
+ b.addStatement(CodeGenUtils.assign(types.getClass(MediaType.class), "contentType", new MethodCallExpr(new NameExpr("req"), "getContentType")));
List k = new ArrayList<>(consume.keySet());
k.sort(MIME);
- Statement stmt = def == null ? new ThrowStmt(new ObjectCreationExpr(null, types.getClass(NotSupportedException.class), Utils.list()))
+ Statement stmt = def == null ? new ThrowStmt(new ObjectCreationExpr(null, types.getClass(NotSupportedException.class), CodeGenUtils.list()))
: buildProduces(new BlockStmt(), def);
for (String s : k)
- stmt = new IfStmt(new MethodCallExpr(new NameExpr("contentType"), "isCompatible", Utils.list(mt.type(s))), buildProduces(new BlockStmt(), consume.get(s)),
- stmt);
+ stmt = new IfStmt(new MethodCallExpr(new NameExpr("contentType"), "isCompatible", CodeGenUtils.list(mt.type(s))),
+ buildProduces(new BlockStmt(), consume.get(s)), stmt);
b.addStatement(stmt);
}
}
@@ -345,24 +345,24 @@ private void buildMethod(String name, List list) {
private Statement buildProduces(BlockStmt b, Map produce) {
MethodCallExpr accept = new MethodCallExpr(new NameExpr("req"), "getAccepted",
- Utils.list(mt.predicate(produce.keySet()), mt.type(produce.keySet().iterator().next())));
+ CodeGenUtils.list(mt.predicate(produce.keySet()), mt.type(produce.keySet().iterator().next())));
JaxrsMapping def = produce.remove("*/*");
- Statement stmt = new ThrowStmt(new ObjectCreationExpr(null, types.getClass(NotAcceptableException.class), Utils.list()));
+ Statement stmt = new ThrowStmt(new ObjectCreationExpr(null, types.getClass(NotAcceptableException.class), CodeGenUtils.list()));
if (def != null)
stmt = new ExpressionStmt(new MethodCallExpr(def.v + "$call", new NameExpr("req"), new NameExpr("res")));
if (produce.isEmpty())
return b.addStatement(accept).addStatement(stmt);
- b.addStatement(Utils.assign(types.getClass(MediaType.class), "accept", accept))
+ b.addStatement(CodeGenUtils.assign(types.getClass(MediaType.class), "accept", accept))
.addStatement(new IfStmt(new BinaryExpr(new NameExpr("accept"), new NullLiteralExpr(), BinaryExpr.Operator.EQUALS),
- new ThrowStmt(new ObjectCreationExpr(null, types.getClass(NotAcceptableException.class), Utils.list())), null));
+ new ThrowStmt(new ObjectCreationExpr(null, types.getClass(NotAcceptableException.class), CodeGenUtils.list())), null));
List k = new ArrayList<>(produce.keySet());
k.sort(MIME);
for (String s : k) {
- stmt = new IfStmt(new MethodCallExpr(new NameExpr("accept"), "isCompatible", Utils.list(mt.type(s))),
+ stmt = new IfStmt(new MethodCallExpr(new NameExpr("accept"), "isCompatible", CodeGenUtils.list(mt.type(s))),
new ExpressionStmt(new MethodCallExpr(produce.get(s).v + "$call", new NameExpr("req"), new NameExpr("res"))), stmt);
}
b.addStatement(stmt);
@@ -370,26 +370,26 @@ private Statement buildProduces(BlockStmt b, Map produce)
}
private void buildCall(JaxrsMapping mapping, Map services) {
- BlockStmt b = cl.addMethod(mapping.v + "$call", Utils.PSF).addParameter(types.getClass(JaxrsReq.class), "r")
+ BlockStmt b = cl.addMethod(mapping.v + "$call", CodeGenUtils.PSF).addParameter(types.getClass(JaxrsReq.class), "r")
.addParameter(types.getClass(HttpServletResponse.class), "res").addThrownException(types.getClass(Exception.class)).createBody();
- b.addStatement(
- new MethodCallExpr(new MethodCallExpr(new NameExpr("r"), "getRequest"), "setAttribute", Utils.list(Utils.text("requestPattern"), Utils.text(mapping.path))));
+ b.addStatement(new MethodCallExpr(new MethodCallExpr(new NameExpr("r"), "getRequest"), "setAttribute",
+ CodeGenUtils.list(CodeGenUtils.text("requestPattern"), CodeGenUtils.text(mapping.path))));
NameExpr n = pathParams.get(mapping);
if (n != null)
- b.addStatement(new MethodCallExpr(new NameExpr("r"), "initPaths", Utils.list(n)));
+ b.addStatement(new MethodCallExpr(new NameExpr("r"), "initPaths", CodeGenUtils.list(n)));
for (JaxrsParam> p : mapping.params)
- b.addStatement(Utils.assign(types.get(p.type), p.v, getParam(p)));
+ b.addStatement(CodeGenUtils.assign(types.get(p.type), p.v, getParam(p)));
MethodModel m = mapping.m;
NodeList arg = mapping.params.stream().map(p -> new NameExpr(p.v)).collect(Collectors.toCollection(() -> new NodeList<>()));
MethodCallExpr call = new MethodCallExpr(services.get(mapping.clazz.name()), m.name(), arg);
if (m.type().isVoid()) {
- b.addStatement(call).addStatement(new MethodCallExpr(new NameExpr("res"), "sendError", Utils.list(new IntegerLiteralExpr("204"))));
+ b.addStatement(call).addStatement(new MethodCallExpr(new NameExpr("res"), "sendError", CodeGenUtils.list(new IntegerLiteralExpr("204"))));
} else {
- Expression result = Utils.assign(types.get(m.type()), "result", call);
- Expression write = new MethodCallExpr(new NameExpr(mapping.v + "$r"), "write", Utils.list(new NameExpr("r"), new NameExpr("result"), new NameExpr("res")));
+ Expression result = CodeGenUtils.assign(types.get(m.type()), "result", call);
+ Expression write = new MethodCallExpr(new NameExpr(mapping.v + "$r"), "write", CodeGenUtils.list(new NameExpr("r"), new NameExpr("result"), new NameExpr("res")));
if (m.type().isAssignableTo(AutoCloseable.class))
- b.addStatement(new TryStmt().setResources(Utils.list(result)).setTryBlock(new BlockStmt().addStatement(write)));
+ b.addStatement(new TryStmt().setResources(CodeGenUtils.list(result)).setTryBlock(new BlockStmt().addStatement(write)));
else
b.addStatement(result).addStatement(write);
}
@@ -402,9 +402,9 @@ private void buildCall(JaxrsMapping mapping, Map services) {
private Expression getParam(JaxrsParam> p) {
if (p instanceof JaxrsBodyParam)
- return new MethodCallExpr(new NameExpr(converterVar.get(p)), "read", Utils.list(new NameExpr("r")));
+ return new MethodCallExpr(new NameExpr(converterVar.get(p)), "read", CodeGenUtils.list(new NameExpr("r")));
if (p instanceof JaxrsBeanParam)
- return new MethodCallExpr(new NameExpr("BeansReader"), beans.get((JaxrsBeanParam>) p), Utils.list(new NameExpr("r")));
+ return new MethodCallExpr(new NameExpr("BeansReader"), beans.get((JaxrsBeanParam>) p), CodeGenUtils.list(new NameExpr("r")));
return JaxrsModel.getParam(p, types, converterVar);
}
@@ -423,19 +423,19 @@ public void build() {
for (JaxrsMapping m : mappings)
methods.computeIfAbsent(m.httpMethod, k -> new ArrayList<>()).add(m);
- Statement i = new ExpressionStmt(new MethodCallExpr(new NameExpr("res"), "sendError", Utils.list(new IntegerLiteralExpr("405"))));
+ Statement i = new ExpressionStmt(new MethodCallExpr(new NameExpr("res"), "sendError", CodeGenUtils.list(new IntegerLiteralExpr("405"))));
if (!methods.containsKey("OPTIONS"))
- i = new IfStmt(new MethodCallExpr(Utils.text("OPTIONS"), "equals", Utils.list(m)), new ExpressionStmt(new MethodCallExpr("doOptions", p)), i);
+ i = new IfStmt(new MethodCallExpr(CodeGenUtils.text("OPTIONS"), "equals", CodeGenUtils.list(m)), new ExpressionStmt(new MethodCallExpr("doOptions", p)), i);
if (!methods.containsKey("HEAD") && methods.containsKey("GET"))
- i = new IfStmt(new MethodCallExpr(Utils.text("HEAD"), "equals", Utils.list(m)), new ExpressionStmt(new MethodCallExpr("doGet", p)), i);
+ i = new IfStmt(new MethodCallExpr(CodeGenUtils.text("HEAD"), "equals", CodeGenUtils.list(m)), new ExpressionStmt(new MethodCallExpr("doGet", p)), i);
for (String method : methods.keySet())
- i = new IfStmt(new MethodCallExpr(Utils.text(method), "equals", Utils.list(m)),
+ i = new IfStmt(new MethodCallExpr(CodeGenUtils.text(method), "equals", CodeGenUtils.list(m)),
new ExpressionStmt(new MethodCallExpr("do" + method.charAt(0) + method.substring(1).toLowerCase(), p)), i);
- cl.addMethod("service", Utils.PUBLIC).addMarkerAnnotation(Override.class).addParameter(types.getClass(HttpServletRequest.class), "req")
+ cl.addMethod("service", CodeGenUtils.PUBLIC).addMarkerAnnotation(Override.class).addParameter(types.getClass(HttpServletRequest.class), "req")
.addParameter(types.getClass(HttpServletResponse.class), "res").addThrownException(IOException.class).addThrownException(ServletException.class).getBody()
- .get().addStatement(Utils.create(types.getClass(JaxrsReq.class), "r", Utils.list(new NameExpr("req"), new NullLiteralExpr())))
- .addStatement(Utils.assign(types.getClass(String.class), "m", new MethodCallExpr(new NameExpr("req"), "getMethod"))).addStatement(i);
+ .get().addStatement(CodeGenUtils.create(types.getClass(JaxrsReq.class), "r", CodeGenUtils.list(new NameExpr("req"), new NullLiteralExpr())))
+ .addStatement(CodeGenUtils.assign(types.getClass(String.class), "m", new MethodCallExpr(new NameExpr("req"), "getMethod"))).addStatement(i);
if (!methods.containsKey("OPTIONS"))
buildOptions("doOptions", methods.keySet());
@@ -494,7 +494,7 @@ void addPath(JaxrsMapping mapping, String path) {
if (!map.isEmpty() && n == null) {
params.put(map, n = new NameExpr("path$" + params.size()));
cl.addFieldWithInitializer(types.getClass(Map.class, types.get(String.class), types.get(Integer.class)), n.getNameAsString(), Utils.mapInteger(map, types),
- Utils.PSF);
+ CodeGenUtils.PSF);
}
pathParams.put(mapping, n);
}
@@ -505,9 +505,9 @@ public void build() {
List list = new ArrayList<>(pattern.keySet());
list.sort((p1, p2) -> p2.length - p1.length);
- Expression req = new ObjectCreationExpr(null, types.getClass(JaxrsReq.class), Utils.list(new NameExpr("req"), new NameExpr("l")));
+ Expression req = new ObjectCreationExpr(null, types.getClass(JaxrsReq.class), CodeGenUtils.list(new NameExpr("req"), new NameExpr("l")));
BlockStmt b = new BlockStmt().addStatement(new VariableDeclarationExpr(types.getClass(List.class, types.get(String.class)), "l"))
- .addStatement(Utils.assign(types.get(String.class), "p", new MethodCallExpr(new NameExpr("req"), "getPathInfo")));
+ .addStatement(CodeGenUtils.assign(types.get(String.class), "p", new MethodCallExpr(new NameExpr("req"), "getPathInfo")));
int i = 0;
for (Path l : list) {
@@ -515,26 +515,27 @@ public void build() {
Expression e;
if (l.parts == null)
- e = new ObjectCreationExpr(null, types.getClass(PathRegexp.class), Utils.list(Utils.text(l.pattern)));
+ e = new ObjectCreationExpr(null, types.getClass(PathRegexp.class), CodeGenUtils.list(CodeGenUtils.text(l.pattern)));
else {
- NodeList a = Utils.list(new BooleanLiteralExpr(l.last));
+ NodeList a = CodeGenUtils.list(new BooleanLiteralExpr(l.last));
for (String s : l.parts)
- a.add(Utils.text(s));
+ a.add(CodeGenUtils.text(s));
e = new ObjectCreationExpr(null, types.getClass(PathSimple.class), a);
}
- cl.addFieldWithInitializer(types.get(PathPattern.class), n, e, Utils.PSF);
+ cl.addFieldWithInitializer(types.get(PathPattern.class), n, e, CodeGenUtils.PSF);
- b.addStatement(new AssignExpr(new NameExpr("l"), new MethodCallExpr(new NameExpr(n), "process", Utils.list(new NameExpr("p"))), Operator.ASSIGN))
- .addStatement(new IfStmt(new BinaryExpr(new NameExpr("l"), new NullLiteralExpr(), BinaryExpr.Operator.NOT_EQUALS),
- new BlockStmt().addStatement(new MethodCallExpr(null, "service$" + (i), Utils.list(req, new NameExpr("res")))).addStatement(new ReturnStmt()),
+ b.addStatement(new AssignExpr(new NameExpr("l"), new MethodCallExpr(new NameExpr(n), "process", CodeGenUtils.list(new NameExpr("p"))), Operator.ASSIGN))
+ .addStatement(new IfStmt(
+ new BinaryExpr(new NameExpr("l"), new NullLiteralExpr(), BinaryExpr.Operator.NOT_EQUALS), new BlockStmt()
+ .addStatement(new MethodCallExpr(null, "service$" + (i), CodeGenUtils.list(req, new NameExpr("res")))).addStatement(new ReturnStmt()),
null));
i++;
}
- cl.addMethod("service", Utils.PUBLIC).addMarkerAnnotation(Override.class).addParameter(types.getClass(HttpServletRequest.class), "req")
+ cl.addMethod("service", CodeGenUtils.PUBLIC).addMarkerAnnotation(Override.class).addParameter(types.getClass(HttpServletRequest.class), "req")
.addParameter(types.getClass(HttpServletResponse.class), "res").addThrownException(IOException.class).addThrownException(ServletException.class)
- .setBody(b.addStatement(new MethodCallExpr(new NameExpr("res"), "sendError", Utils.list(new IntegerLiteralExpr("404")))));
+ .setBody(b.addStatement(new MethodCallExpr(new NameExpr("res"), "sendError", CodeGenUtils.list(new IntegerLiteralExpr("404")))));
i = 0;
for (Path l : list) {
@@ -553,18 +554,19 @@ public void build() {
}
private void buildService(String name, Map> methods) {
- Statement i = new ExpressionStmt(new MethodCallExpr(new NameExpr("res"), "sendError", Utils.list(new IntegerLiteralExpr("405"))));
+ Statement i = new ExpressionStmt(new MethodCallExpr(new NameExpr("res"), "sendError", CodeGenUtils.list(new IntegerLiteralExpr("405"))));
if (!methods.containsKey("OPTIONS"))
- i = new IfStmt(new MethodCallExpr(Utils.text("OPTIONS"), "equals", Utils.list(m)), new ExpressionStmt(new MethodCallExpr(name + "$options", p)), i);
+ i = new IfStmt(new MethodCallExpr(CodeGenUtils.text("OPTIONS"), "equals", CodeGenUtils.list(m)), new ExpressionStmt(new MethodCallExpr(name + "$options", p)),
+ i);
if (!methods.containsKey("HEAD") && methods.containsKey("GET"))
- i = new IfStmt(new MethodCallExpr(Utils.text("HEAD"), "equals", Utils.list(m)), new ExpressionStmt(new MethodCallExpr(name + "$get", p)), i);
+ i = new IfStmt(new MethodCallExpr(CodeGenUtils.text("HEAD"), "equals", CodeGenUtils.list(m)), new ExpressionStmt(new MethodCallExpr(name + "$get", p)), i);
for (String method : methods.keySet())
- i = new IfStmt(new MethodCallExpr(Utils.text(method), "equals", Utils.list(m)), new ExpressionStmt(new MethodCallExpr(name + "$" + method.toLowerCase(), p)),
- i);
+ i = new IfStmt(new MethodCallExpr(CodeGenUtils.text(method), "equals", CodeGenUtils.list(m)),
+ new ExpressionStmt(new MethodCallExpr(name + "$" + method.toLowerCase(), p)), i);
- cl.addMethod(name, Utils.PRIVATE).addParameter(types.getClass(JaxrsReq.class), "r").addParameter(types.getClass(HttpServletResponse.class), "res")
- .addThrownException(IOException.class).setBody(
- new BlockStmt().addStatement(Utils.assign(types.getClass(String.class), "m", new MethodCallExpr(new NameExpr("r"), "getMethod"))).addStatement(i));
+ cl.addMethod(name, CodeGenUtils.PRIVATE).addParameter(types.getClass(JaxrsReq.class), "r").addParameter(types.getClass(HttpServletResponse.class), "res")
+ .addThrownException(IOException.class).setBody(new BlockStmt()
+ .addStatement(CodeGenUtils.assign(types.getClass(String.class), "m", new MethodCallExpr(new NameExpr("r"), "getMethod"))).addStatement(i));
}
}
diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/jaxrs/JaxrsModel.java b/unknow-server-maven/src/main/java/unknow/server/maven/jaxrs/JaxrsModel.java
index 16357ae6..41b9676f 100644
--- a/unknow-server-maven/src/main/java/unknow/server/maven/jaxrs/JaxrsModel.java
+++ b/unknow-server-maven/src/main/java/unknow/server/maven/jaxrs/JaxrsModel.java
@@ -62,6 +62,8 @@
import jakarta.ws.rs.ext.MessageBodyWriter;
import jakarta.ws.rs.ext.ParamConverterProvider;
import jakarta.ws.rs.ext.Provider;
+import unknow.maven.codegen.CodeGenUtils;
+import unknow.maven.codegen.TypeFactory;
import unknow.model.api.AncestrorIterator;
import unknow.model.api.AnnotationModel;
import unknow.model.api.BeanProperty;
@@ -79,8 +81,6 @@
import unknow.server.http.jaxrs.protostuff.ProtostuffJsonProvider;
import unknow.server.http.jaxrs.protostuff.ProtostuffListProvider;
import unknow.server.http.jaxrs.protostuff.ProtostuffProvider;
-import unknow.server.maven.TypeCache;
-import unknow.server.maven.Utils;
import unknow.server.maven.jaxrs.JaxrsParam.JaxrsBeanParam;
import unknow.server.maven.jaxrs.JaxrsParam.JaxrsBeanParam.JaxrsBeanFieldParam;
import unknow.server.maven.jaxrs.JaxrsParam.JaxrsBodyParam;
@@ -367,8 +367,8 @@ public static TypeModel getParamType(TypeModel type) {
return ancestor.parameter(0).type();
}
- public static Expression getParam(JaxrsParam> p, TypeCache types, Map, String> converterVar) {
- NodeList list = Utils.list(Utils.text(p.value), p.def == null ? new NullLiteralExpr() : Utils.text(p.def));
+ public static Expression getParam(JaxrsParam> p, TypeFactory types, Map, String> converterVar) {
+ NodeList list = CodeGenUtils.list(CodeGenUtils.text(p.value), p.def == null ? new NullLiteralExpr() : CodeGenUtils.text(p.def));
String m = "get" + p.getClass().getSimpleName().substring(5, p.getClass().getSimpleName().length() - 5);
if (p.type.isArray()) {
@@ -384,9 +384,9 @@ public static Expression getParam(JaxrsParam> p, TypeCache types, Map t.ifClass(model::process));
+ processSrc(t -> t.ifClass(model::process));
model.implicitConstructor.remove("java.lang.String");
beans = new BeanParamBuilder(newCu(), existingClass);
@@ -127,11 +125,11 @@ public void execute() throws MojoExecutionException, MojoFailureException {
}
for (Entry> e : map.entrySet())
- out.save(new JaxRsServletBuilder(newCu(), existingClass, e.getKey(), e.getValue(), beans, mt).build());
+ writer.write(new JaxRsServletBuilder(newCu(), existingClass, e.getKey(), e.getValue(), beans, mt).build());
- new OpenApiBuilder().build(openapi.getSpec(project), model, resources + basePath + "/openapi.json");
- beans.save(out);
- mt.save(out);
+ new OpenApiBuilder().build(openapi.getSpec(project), model, codegen.resources + basePath + "/openapi.json");
+ beans.save(writer);
+ mt.save(writer);
generateGraalvmResources();
}
@@ -141,32 +139,33 @@ public void execute() throws MojoExecutionException, MojoFailureException {
*/
private void generateInitalizer() throws IOException, MojoExecutionException {
- Path path = Paths.get(resources, "META-INF", "services", ServletContainerInitializer.class.getName());
+ Path path = Paths.get(codegen.resources, "META-INF", "services", ServletContainerInitializer.class.getName());
Files.createDirectories(path.getParent());
try (Writer w = Files.newBufferedWriter(path, StandardCharsets.UTF_8)) {
- w.append(packageName).write(".JaxrsInit\n");
+ w.append(fullName("JaxrsInit")).write('\n');
}
CompilationUnit cu = newCu();
- types = new TypeCache(cu, existingClass);
+ types = new TypeFactory(cu, existingClass);
TypeExpr ctx = new TypeExpr(types.getClass(JaxrsContext.class));
- cl = cu.addClass("JaxrsInit", Utils.PUBLIC).addImplementedType(ServletContainerInitializer.class);
- BlockStmt b = cl.addMethod("onStartup", Utils.PUBLIC).addMarkerAnnotation(Override.class)
- .addParameter(types.getClass(Set.class, types.getClass(Class.class, TypeCache.ANY)), "c").addParameter(types.getClass(ServletContext.class), "ctx")
+ cl = cu.addClass("JaxrsInit", CodeGenUtils.PUBLIC).addImplementedType(ServletContainerInitializer.class);
+ BlockStmt b = cl.addMethod("onStartup", CodeGenUtils.PUBLIC).addMarkerAnnotation(Override.class)
+ .addParameter(types.getClass(Set.class, types.getClass(Class.class, TypeFactory.ANY)), "c").addParameter(types.getClass(ServletContext.class), "ctx")
.createBody().addStatement(new MethodCallExpr(new TypeExpr(types.getClass(RuntimeDelegate.class)), "setInstance",
- Utils.list(new ObjectCreationExpr(null, types.getClass(JaxrsRuntime.class), Utils.list()))));
+ CodeGenUtils.list(new ObjectCreationExpr(null, types.getClass(JaxrsRuntime.class), CodeGenUtils.list()))));
for (ClassModel s : model.converter) {
ClassOrInterfaceType t = types.getClass(s);
if (!s.parameters().isEmpty()) {
t = t.clone();
- t.setTypeArguments(Utils.list(TypeCache.EMPTY));
+ t.setTypeArguments(CodeGenUtils.list(TypeFactory.EMPTY));
}
- b.addStatement(new MethodCallExpr(ctx, "registerConverter", Utils.list(new ObjectCreationExpr(null, t, Utils.list()))));
+ b.addStatement(new MethodCallExpr(ctx, "registerConverter", CodeGenUtils.list(new ObjectCreationExpr(null, t, CodeGenUtils.list()))));
}
if (!model.implicitConstructor.isEmpty() || !model.implicitFromString.isEmpty() || !model.implicitValueOf.isEmpty())
- b.addStatement(new MethodCallExpr(ctx, "registerConverter", Utils.list(new ObjectCreationExpr(null, new ClassOrInterfaceType(null, "P"), Utils.list()))));
+ b.addStatement(
+ new MethodCallExpr(ctx, "registerConverter", CodeGenUtils.list(new ObjectCreationExpr(null, new ClassOrInterfaceType(null, "P"), CodeGenUtils.list()))));
Expression m = null;
if (objectMapper != null) {
@@ -184,32 +183,32 @@ private void generateInitalizer() throws IOException, MojoExecutionException {
for (Entry e : model.exceptions.entrySet()) {
b.addStatement(new MethodCallExpr(ctx, "registerException",
- Utils.list(new ClassExpr(types.get(e.getKey())), new ObjectCreationExpr(null, types.getClass(e.getValue()), Utils.list()))));
+ CodeGenUtils.list(new ClassExpr(types.get(e.getKey())), new ObjectCreationExpr(null, types.getClass(e.getValue()), CodeGenUtils.list()))));
}
for (String clazz : model.protostuffMessage) {
ClassOrInterfaceType type = types.getClass(clazz);
b.addStatement(new MethodCallExpr(new TypeExpr(types.get(ProtostuffSchema.class)), "register",
- Utils.list(new ClassExpr(type), new MethodCallExpr(new ObjectCreationExpr(null, type, Utils.list()), "cachedSchema"))));
+ CodeGenUtils.list(new ClassExpr(type), new MethodCallExpr(new ObjectCreationExpr(null, type, CodeGenUtils.list()), "cachedSchema"))));
}
- out.save(cu);
+ writer.write(cu);
}
private NodeList registerParams(ClassModel c, List mimes, Expression m) {
- NodeList list = Utils.list();
+ NodeList list = CodeGenUtils.list();
if (m != null && c.constructors(loader.get(ObjectMapper.class.getName())).isPresent())
list.add(m);
ClassOrInterfaceType t = types.getClass(c);
if (!c.parameters().isEmpty()) {
t = t.clone();
- t.setTypeArguments(Utils.list(TypeCache.EMPTY));
+ t.setTypeArguments(CodeGenUtils.list(TypeFactory.EMPTY));
}
NodeList l = new NodeList<>(new ObjectCreationExpr(null, t, list));
l.add(c.annotation(Priority.class).flatMap(a -> a.value()).filter(v -> v.isSet()).map(a -> (Expression) new IntegerLiteralExpr(a.asLiteral()))
.orElseGet(() -> new FieldAccessExpr(new TypeExpr(types.get(Priorities.class)), "USER")));
for (String s : mimes)
- l.add(Utils.text(s));
+ l.add(CodeGenUtils.text(s));
return l;
}
@@ -241,8 +240,9 @@ private void generateImplicitConverter(CompilationUnit cu) {
new ReturnStmt(new CastExpr(p, new NameExpr(n))), null));
}
- clazz.addMethod("getConverter", Utils.PUBLIC).addMarkerAnnotation(Override.class).addSingleMemberAnnotation(SuppressWarnings.class, Utils.text("unchecked"))
- .addTypeParameter(t).setType(p).addParameter(types.getClass(Class.class, t), "rawType").addParameter(types.getClass(Type.class), "genericType")
+ clazz.addMethod("getConverter", CodeGenUtils.PUBLIC).addMarkerAnnotation(Override.class)
+ .addSingleMemberAnnotation(SuppressWarnings.class, CodeGenUtils.text("unchecked")).addTypeParameter(t).setType(p)
+ .addParameter(types.getClass(Class.class, t), "rawType").addParameter(types.getClass(Type.class), "genericType")
.addParameter(types.array(Annotation.class), "Annotation").setBody(b.addStatement(new ReturnStmt(new NullLiteralExpr())));
}
@@ -250,19 +250,21 @@ private void generateImplicitConverter(ClassOrInterfaceDeclaration clazz, String
ClassOrInterfaceType type = types.getClass(cl);
Expression e;
if (m == null)
- e = new ObjectCreationExpr(null, type, Utils.list(new NameExpr(VALUE)));
+ e = new ObjectCreationExpr(null, type, CodeGenUtils.list(new NameExpr(VALUE)));
else
- e = new MethodCallExpr(new TypeExpr(type), m, Utils.list(new NameExpr(VALUE)));
-
- NodeList> methods = Utils.list(
- new MethodDeclaration(Modifier.createModifierList(Modifier.Keyword.PUBLIC, Modifier.Keyword.FINAL), Utils.list(new MarkerAnnotationExpr("Override")),
- Utils.list(), type, new SimpleName("fromString"), Utils.list(new com.github.javaparser.ast.body.Parameter(types.getClass(String.class), VALUE)),
- Utils.list(), new BlockStmt().addStatement(new ReturnStmt(e))),
- new MethodDeclaration(Modifier.createModifierList(Modifier.Keyword.PUBLIC, Modifier.Keyword.FINAL), Utils.list(new MarkerAnnotationExpr("Override")),
- Utils.list(), types.getClass(String.class), new SimpleName("toString"), Utils.list(new com.github.javaparser.ast.body.Parameter(type, VALUE)),
- Utils.list(), new BlockStmt().addStatement(new ReturnStmt(new MethodCallExpr(new NameExpr(VALUE), "toString")))));
+ e = new MethodCallExpr(new TypeExpr(type), m, CodeGenUtils.list(new NameExpr(VALUE)));
+
+ NodeList> methods = CodeGenUtils.list(
+ new MethodDeclaration(Modifier.createModifierList(Modifier.Keyword.PUBLIC, Modifier.Keyword.FINAL), CodeGenUtils.list(new MarkerAnnotationExpr("Override")),
+ CodeGenUtils.list(), type, new SimpleName("fromString"),
+ CodeGenUtils.list(new com.github.javaparser.ast.body.Parameter(types.getClass(String.class), VALUE)), CodeGenUtils.list(),
+ new BlockStmt().addStatement(new ReturnStmt(e))),
+ new MethodDeclaration(Modifier.createModifierList(Modifier.Keyword.PUBLIC, Modifier.Keyword.FINAL), CodeGenUtils.list(new MarkerAnnotationExpr("Override")),
+ CodeGenUtils.list(), types.getClass(String.class), new SimpleName("toString"),
+ CodeGenUtils.list(new com.github.javaparser.ast.body.Parameter(type, VALUE)), CodeGenUtils.list(),
+ new BlockStmt().addStatement(new ReturnStmt(new MethodCallExpr(new NameExpr(VALUE), "toString")))));
clazz.addFieldWithInitializer(types.getClass(ParamConverter.class, type), name,
- new ObjectCreationExpr(null, types.getClass(ParamConverter.class, TypeCache.EMPTY), null, Utils.list(), methods), Utils.PSF);
+ new ObjectCreationExpr(null, types.getClass(ParamConverter.class, TypeFactory.EMPTY), null, CodeGenUtils.list(), methods), CodeGenUtils.PSF);
}
private void generateGraalvmResources() throws MojoFailureException {
@@ -270,7 +272,7 @@ private void generateGraalvmResources() throws MojoFailureException {
return;
try {
- Path path = Paths.get(resources + "/META-INF/native-image/" + id() + "/resource-config.json");
+ Path path = Paths.get(codegen.resources + "/META-INF/native-image/" + uniquePath + "/resource-config.json");
Files.createDirectories(path.getParent());
try (BufferedWriter w = Files.newBufferedWriter(path)) {
w.write("{\"resources\":{\"includes\":[");
diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/jaxrs/MediaTypesBuilder.java b/unknow-server-maven/src/main/java/unknow/server/maven/jaxrs/MediaTypesBuilder.java
index 25d50d23..1da403b0 100644
--- a/unknow-server-maven/src/main/java/unknow/server/maven/jaxrs/MediaTypesBuilder.java
+++ b/unknow-server-maven/src/main/java/unknow/server/maven/jaxrs/MediaTypesBuilder.java
@@ -23,10 +23,10 @@
import com.github.javaparser.ast.type.ClassOrInterfaceType;
import jakarta.ws.rs.core.MediaType;
+import unknow.maven.codegen.CodeGenUtils;
+import unknow.maven.codegen.CompilationUnitWriter;
+import unknow.maven.codegen.TypeFactory;
import unknow.server.http.jaxrs.MTPredicate;
-import unknow.server.maven.Output;
-import unknow.server.maven.TypeCache;
-import unknow.server.maven.Utils;
/**
* @author unknow
@@ -34,7 +34,7 @@
public class MediaTypesBuilder {
private final CompilationUnit cu;
private final ClassOrInterfaceDeclaration cl;
- private final TypeCache types;
+ private final TypeFactory types;
private final ClassOrInterfaceType mt;
@@ -43,8 +43,8 @@ public class MediaTypesBuilder {
public MediaTypesBuilder(CompilationUnit cu, Map existingClass) {
this.cu = cu;
- types = new TypeCache(cu, existingClass);
- cl = cu.addClass("MediaTypes", Utils.PUBLIC);
+ types = new TypeFactory(cu, existingClass);
+ cl = cu.addClass("MediaTypes", CodeGenUtils.PUBLIC);
mt = types.getClass(MediaType.class);
@@ -66,9 +66,9 @@ public MediaTypesBuilder(CompilationUnit cu, Map existingClass)
mts.put("application/json-patch+json", new FieldAccessExpr(new TypeExpr(mt), "APPLICATION_JSON_PATCH_JSON_TYPE"));
}
- public void save(Output out) throws MojoExecutionException {
+ public void save(CompilationUnitWriter writer) throws MojoExecutionException {
if (!predicates.isEmpty() || mts.size() > 13)
- out.save(cu);
+ writer.write(cu);
}
public Expression type(String t) {
@@ -79,8 +79,8 @@ public Expression type(String t) {
String name = t.toUpperCase().replaceAll("[^_a-zA-Z]", "_");
cl.addFieldWithInitializer(mt, name,
- new ObjectCreationExpr(null, types.getClass(MediaType.class), Utils.list(new StringLiteralExpr(split[0]), new StringLiteralExpr(split[1]))),
- Utils.PUBLIC_STATIC);
+ new ObjectCreationExpr(null, types.getClass(MediaType.class), CodeGenUtils.list(new StringLiteralExpr(split[0]), new StringLiteralExpr(split[1]))),
+ CodeGenUtils.PUBLIC_STATIC);
mts.put(t, n = new FieldAccessExpr(new TypeExpr(types.getClass(cl)), name));
return n;
}
@@ -113,7 +113,7 @@ public Expression predicate(Collection mediaTypes) {
} else
e = new FieldAccessExpr(new TypeExpr(types.get(MTPredicate.class)), "ANY");
- cl.addFieldWithInitializer(types.getClass(MTPredicate.class), name, e, Utils.PUBLIC_STATIC);
+ cl.addFieldWithInitializer(types.getClass(MTPredicate.class), name, e, CodeGenUtils.PUBLIC_STATIC);
predicates.put(k, n = new FieldAccessExpr(new TypeExpr(types.getClass(cl)), name));
return n;
}
diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/jaxws/JaxwsGeneratorMojo.java b/unknow-server-maven/src/main/java/unknow/server/maven/jaxws/JaxwsGeneratorMojo.java
index d8c2aa94..2d50ebe7 100644
--- a/unknow-server-maven/src/main/java/unknow/server/maven/jaxws/JaxwsGeneratorMojo.java
+++ b/unknow-server-maven/src/main/java/unknow/server/maven/jaxws/JaxwsGeneratorMojo.java
@@ -23,6 +23,7 @@
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.plugins.annotations.LifecyclePhase;
import org.apache.maven.plugins.annotations.Mojo;
+import org.apache.maven.plugins.annotations.Parameter;
import org.apache.maven.plugins.annotations.ResolutionScope;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -30,9 +31,9 @@
import com.github.javaparser.ast.CompilationUnit;
import jakarta.jws.WebService;
+import unknow.maven.codegen.TypeFactory;
import unknow.model.api.AnnotationModel;
import unknow.server.maven.AbstractGeneratorMojo;
-import unknow.server.maven.TypeCache;
import unknow.server.maven.jaxb.model.XmlLoader;
import unknow.server.maven.jaxws.binding.Service;
@@ -44,23 +45,20 @@ public class JaxwsGeneratorMojo extends AbstractGeneratorMojo {
private static final Logger logger = LoggerFactory.getLogger(JaxwsGeneratorMojo.class);
private static final XMLOutputFactory f = XMLOutputFactory.newInstance();
- @org.apache.maven.plugins.annotations.Parameter(name = "publishUrl", defaultValue = "http://127.0.0.1:8080")
+ @Parameter(name = "graalvm", defaultValue = "true")
+ protected boolean graalvm;
+ @Parameter(name = "publishUrl", defaultValue = "http://127.0.0.1:8080")
private String publishUrl;
- @org.apache.maven.plugins.annotations.Parameter(name = "basePath", defaultValue = "/")
+ @Parameter(name = "basePath", defaultValue = "/")
private String basePath;
- @org.apache.maven.plugins.annotations.Parameter(name = "jaxbFactory")
+ @Parameter(name = "jaxbFactory")
private String jaxbFactory;
private final XmlLoader xmlLoader = new XmlLoader();
- @Override
- protected String id() {
- return "jaxws-generator";
- }
-
@Override
public void execute() throws MojoExecutionException, MojoFailureException {
- init();
+ init(session, mojo, repository, codegen);
if (!basePath.endsWith("/"))
basePath += "/";
@@ -71,27 +69,27 @@ public void execute() throws MojoExecutionException, MojoFailureException {
throw new MojoFailureException("no jaxb factory found");
List wsdl = new ArrayList<>();
- process(t -> {
+ processSrc(t -> {
if (!t.isClass())
return;
Optional a = t.annotation(WebService.class);
if (!a.isPresent())
return;
CompilationUnit cu = newCu();
- TypeCache types = new TypeCache(cu, existingClass);
+ TypeFactory types = new TypeFactory(cu, existingClass);
try {
Service service = Service.build(t.asClass(), basePath, loader, xmlLoader);
- String n = "generated/" + id() + "/" + service.name + ".wsdl";
- Path path = Paths.get(resources, n);
+ String n = "generated/" + uniquePath + "/" + service.name + ".wsdl";
+ Path path = Paths.get(codegen.resources, n);
Files.createDirectories(path.getParent());
try (BufferedWriter w = Files.newBufferedWriter(path)) {
new WsdlBuilder(service, publishUrl).write(f.createXMLStreamWriter(w));
}
wsdl.add(n);
new JaxwsServletBuilder(t.asClass(), service).generate(cu, types, jaxbFactory, n);
- out.save(cu);
+ writer.write(cu);
} catch (Exception e) {
throw new MojoFailureException("failed to generate/save output class", e);
}
@@ -99,7 +97,7 @@ public void execute() throws MojoExecutionException, MojoFailureException {
if (graalvm && !wsdl.isEmpty()) {
try {
- Path path = Paths.get(resources + "/META-INF/native-image/" + id() + "/resource-config.json");
+ Path path = Paths.get(codegen.resources + "/META-INF/native-image/" + uniquePath + "/resource-config.json");
Files.createDirectories(path.getParent());
try (BufferedWriter w = Files.newBufferedWriter(path)) {
w.write("{\"resources\":{\"includes\":[");
diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/jaxws/JaxwsServletBuilder.java b/unknow-server-maven/src/main/java/unknow/server/maven/jaxws/JaxwsServletBuilder.java
index 4f8087b3..bbb8621d 100644
--- a/unknow-server-maven/src/main/java/unknow/server/maven/jaxws/JaxwsServletBuilder.java
+++ b/unknow-server-maven/src/main/java/unknow/server/maven/jaxws/JaxwsServletBuilder.java
@@ -52,14 +52,14 @@
import jakarta.xml.bind.JAXBElement;
import jakarta.xml.bind.JAXBException;
import jakarta.xml.bind.Unmarshaller;
+import unknow.maven.codegen.CodeGenUtils;
+import unknow.maven.codegen.TypeFactory;
import unknow.model.api.ClassModel;
import unknow.model.api.TypeModel;
import unknow.server.jaxws.AbstractWs;
import unknow.server.jaxws.Envelope;
import unknow.server.jaxws.OperationWrapper;
import unknow.server.jaxws.WSMethod;
-import unknow.server.maven.TypeCache;
-import unknow.server.maven.Utils;
import unknow.server.maven.jaxws.binding.Operation;
import unknow.server.maven.jaxws.binding.Service;
@@ -78,18 +78,18 @@ public JaxwsServletBuilder(ClassModel serviceClass, Service service) {
this.service = service;
}
- public void generate(CompilationUnit cu, TypeCache types, String factory, String wsdl) {
+ public void generate(CompilationUnit cu, TypeFactory types, String factory, String wsdl) {
String name = service.name;
- NodeList list = Utils.list();
+ NodeList list = CodeGenUtils.list();
for (String s : service.urls)
- list.add(Utils.text(s));
+ list.add(CodeGenUtils.text(s));
- servlet = cu.addClass(Character.toUpperCase(name.charAt(0)) + name.substring(1) + "Servlet", Utils.PUBLIC).addExtendedType(types.getClass(AbstractWs.class));
- servlet.addAndGetAnnotation(WebServlet.class).addPair("urlPatterns", new ArrayInitializerExpr(list)).addPair("name", Utils.text(name));
+ servlet = cu.addClass(Character.toUpperCase(name.charAt(0)) + name.substring(1) + "Servlet", CodeGenUtils.PUBLIC).addExtendedType(types.getClass(AbstractWs.class));
+ servlet.addAndGetAnnotation(WebServlet.class).addPair("urlPatterns", new ArrayInitializerExpr(list)).addPair("name", CodeGenUtils.text(name));
- servlet.addFieldWithInitializer(types.get(long.class), "serialVersionUID", new LongLiteralExpr("1L"), Utils.PSF);
+ servlet.addFieldWithInitializer(types.get(long.class), "serialVersionUID", new LongLiteralExpr("1L"), CodeGenUtils.PSF);
- servlet.addFieldWithInitializer(types.getClass(serviceClass), "WS", new ObjectCreationExpr(null, types.getClass(serviceClass), Utils.list()), Utils.PSF);
+ servlet.addFieldWithInitializer(types.getClass(serviceClass), "WS", new ObjectCreationExpr(null, types.getClass(serviceClass), CodeGenUtils.list()), CodeGenUtils.PSF);
Collections.sort(service.operations, (o1, o2) -> o1.sig().compareTo(o2.sig()));
@@ -101,36 +101,36 @@ public void generate(CompilationUnit cu, TypeCache types, String factory, String
BlockStmt b = new BlockStmt();
if (o.wrapped) {
b.addStatement(new AssignExpr(new VariableDeclarationExpr(types.getClass(OperationWrapper.class), "o"),
- new CastExpr(types.getClass(OperationWrapper.class), new MethodCallExpr(new NameExpr("e"), "getBody", Utils.list(new IntegerLiteralExpr("0")))),
+ new CastExpr(types.getClass(OperationWrapper.class), new MethodCallExpr(new NameExpr("e"), "getBody", CodeGenUtils.list(new IntegerLiteralExpr("0")))),
Operator.ASSIGN));
String n = "N$" + w;
servlet.addFieldWithInitializer(types.getClass(QName.class), n,
- new ObjectCreationExpr(null, types.getClass(QName.class), Utils.list(Utils.text(o.name.getNamespaceURI()), Utils.text(o.name.getLocalPart()))),
- Utils.PSF);
- Expression e = new MethodCallExpr(new NameExpr(n), "equals", Utils.list(new NameExpr("n")));
+ new ObjectCreationExpr(null, types.getClass(QName.class), CodeGenUtils.list(CodeGenUtils.text(o.name.getNamespaceURI()), CodeGenUtils.text(o.name.getLocalPart()))),
+ CodeGenUtils.PSF);
+ Expression e = new MethodCallExpr(new NameExpr(n), "equals", CodeGenUtils.list(new NameExpr("n")));
if (wrapped != null)
wrapped = new BinaryExpr(wrapped, e, BinaryExpr.Operator.OR);
else
wrapped = e;
}
- NodeList param = Utils.list();
+ NodeList param = CodeGenUtils.list();
int h = 0;
int bi = 0;
for (unknow.server.maven.jaxws.binding.Parameter p : o.params) {
servlet.addFieldWithInitializer(types.getClass(QName.class), "P$" + w + "$" + (bi + h),
- new ObjectCreationExpr(null, types.getClass(QName.class), Utils.list(Utils.text(p.name.getNamespaceURI()), Utils.text(p.name.getLocalPart()))),
- Utils.PSF);
+ new ObjectCreationExpr(null, types.getClass(QName.class), CodeGenUtils.list(CodeGenUtils.text(p.name.getNamespaceURI()), CodeGenUtils.text(p.name.getLocalPart()))),
+ CodeGenUtils.PSF);
clazz.add(p.type);
Expression v;
if (p.header)
- v = new MethodCallExpr(new NameExpr("e"), "getHeader", Utils.list(new IntegerLiteralExpr(Integer.toString(h++))));
+ v = new MethodCallExpr(new NameExpr("e"), "getHeader", CodeGenUtils.list(new IntegerLiteralExpr(Integer.toString(h++))));
else if (o.wrapped)
- v = new MethodCallExpr(new NameExpr("o"), "get", Utils.list(new IntegerLiteralExpr(Integer.toString(bi++))));
+ v = new MethodCallExpr(new NameExpr("o"), "get", CodeGenUtils.list(new IntegerLiteralExpr(Integer.toString(bi++))));
else
- v = new MethodCallExpr(new NameExpr("e"), "getBody", Utils.list(new IntegerLiteralExpr(Integer.toString(bi++))));
+ v = new MethodCallExpr(new NameExpr("e"), "getBody", CodeGenUtils.list(new IntegerLiteralExpr(Integer.toString(bi++))));
param.add(new CastExpr(types.get(p.type), v));
}
@@ -141,68 +141,68 @@ else if (o.wrapped)
clazz.add(o.result.type);
b.addStatement(
new AssignExpr(new VariableDeclarationExpr(types.getClass(o.result.type), "ro"), new MethodCallExpr(new NameExpr("WS"), o.m, param), Operator.ASSIGN));
- e = new ObjectCreationExpr(null, types.getClass(JAXBElement.class, TypeCache.EMPTY),
- Utils.list(
+ e = new ObjectCreationExpr(null, types.getClass(JAXBElement.class, TypeFactory.EMPTY),
+ CodeGenUtils.list(
new ObjectCreationExpr(null, types.getClass(QName.class),
- Utils.list(Utils.text(o.result.name.getNamespaceURI()), Utils.text(o.result.name.getLocalPart()))),
+ CodeGenUtils.list(CodeGenUtils.text(o.result.name.getNamespaceURI()), CodeGenUtils.text(o.result.name.getLocalPart()))),
new ClassExpr(types.get(o.result.type)), new NameExpr("ro")));
}
- NodeList header = Utils.list();
- NodeList body = Utils.list();
+ NodeList header = CodeGenUtils.list();
+ NodeList body = CodeGenUtils.list();
if (o.wrapped) {
// TODO out param
Expression c = new ClassExpr(types.get(e == null ? Object.class : JAXBElement.class));
if (e == null)
e = new NullLiteralExpr();
- e = new ObjectCreationExpr(null, types.getClass(JAXBElement.class, TypeCache.EMPTY), Utils.list(new ObjectCreationExpr(null, types.getClass(QName.class),
- Utils.list(Utils.text(o.name.getNamespaceURI()), Utils.text(o.name.getLocalPart() + "Response"))), c, e));
+ e = new ObjectCreationExpr(null, types.getClass(JAXBElement.class, TypeFactory.EMPTY), CodeGenUtils.list(new ObjectCreationExpr(null, types.getClass(QName.class),
+ CodeGenUtils.list(CodeGenUtils.text(o.name.getNamespaceURI()), CodeGenUtils.text(o.name.getLocalPart() + "Response"))), c, e));
} else {
// TODO out param
}
if (e != null)
(o.result != null && o.result.header ? header : body).add(e);
- b.addStatement(new ReturnStmt(new ObjectCreationExpr(null, types.getClass(Envelope.class), Utils.list(
+ b.addStatement(new ReturnStmt(new ObjectCreationExpr(null, types.getClass(Envelope.class), CodeGenUtils.list(
new MethodCallExpr(new TypeExpr(types.get(Arrays.class)), "asList", header), new MethodCallExpr(new TypeExpr(types.get(Arrays.class)), "asList", body)))));
String n = "CALL$" + entries.size();
- entries.add(new SwitchEntry().setLabels(Utils.list(new StringLiteralExpr(o.sig()))).addStatement(new ReturnStmt(new NameExpr(n))));
- servlet.addFieldWithInitializer(types.get(WSMethod.class), n, new LambdaExpr(Utils.list(new Parameter(new UnknownType(), "e")), b), Utils.PSF);
+ entries.add(new SwitchEntry().setLabels(CodeGenUtils.list(new StringLiteralExpr(o.sig()))).addStatement(new ReturnStmt(new NameExpr(n))));
+ servlet.addFieldWithInitializer(types.get(WSMethod.class), n, new LambdaExpr(CodeGenUtils.list(new Parameter(new UnknownType(), "e")), b), CodeGenUtils.PSF);
w++;
}
- servlet.addConstructor(Modifier.Keyword.PUBLIC).getBody().addStatement(new MethodCallExpr(null, "super", Utils.list(new StringLiteralExpr(wsdl))));
+ servlet.addConstructor(Modifier.Keyword.PUBLIC).getBody().addStatement(new MethodCallExpr(null, "super", CodeGenUtils.list(new StringLiteralExpr(wsdl))));
NodeList l = clazz.stream().map(v -> new ClassExpr(types.get(v))).collect(Collectors.toCollection(() -> new NodeList<>()));
- servlet.addMethod("getCtx", Utils.PROTECT).addMarkerAnnotation(Override.class).setType(types.get(JAXBContext.class)).getBody().get().addStatement(new TryStmt(
- new BlockStmt().addStatement(new ReturnStmt(new MethodCallExpr(new ObjectCreationExpr(null, types.getClass(factory), Utils.list()), "createContext",
- Utils.list(Utils.array(types.get(Class.class), l), new NullLiteralExpr())))),
- Utils.list(new CatchClause(new Parameter(types.get(JAXBException.class), "e"),
- new BlockStmt().addStatement(new ThrowStmt(new ObjectCreationExpr(null, types.getClass(RuntimeException.class), Utils.list(new NameExpr("e"))))))),
+ servlet.addMethod("getCtx", CodeGenUtils.PROTECT).addMarkerAnnotation(Override.class).setType(types.get(JAXBContext.class)).getBody().get().addStatement(new TryStmt(
+ new BlockStmt().addStatement(new ReturnStmt(new MethodCallExpr(new ObjectCreationExpr(null, types.getClass(factory), CodeGenUtils.list()), "createContext",
+ CodeGenUtils.list(CodeGenUtils.array(types.get(Class.class), l), new NullLiteralExpr())))),
+ CodeGenUtils.list(new CatchClause(new Parameter(types.get(JAXBException.class), "e"),
+ new BlockStmt().addStatement(new ThrowStmt(new ObjectCreationExpr(null, types.getClass(RuntimeException.class), CodeGenUtils.list(new NameExpr("e"))))))),
null));
entries.add(new SwitchEntry().addStatement(new ReturnStmt(new NullLiteralExpr())));
- servlet.addMethod("getCall", Utils.PROTECT).addMarkerAnnotation(Override.class).setType(types.get(WSMethod.class))
+ servlet.addMethod("getCall", CodeGenUtils.PROTECT).addMarkerAnnotation(Override.class).setType(types.get(WSMethod.class))
.addParameter(new Parameter(types.get(String.class), "sig")).getBody().get().addStatement(new SwitchStmt(new NameExpr("sig"), entries));
Statement s = new IfStmt(wrapped,
new ReturnStmt(new MethodCallExpr(null, "read",
- Utils.list(new NameExpr("r"), new NameExpr("u"),
- new ObjectCreationExpr(null, types.getClass(OperationWrapper.class), Utils.list(new NameExpr("n")))))),
- new ThrowStmt(new ObjectCreationExpr(null, types.getClass(IOException.class), Utils.list(Utils.text("Invalid request")))));
+ CodeGenUtils.list(new NameExpr("r"), new NameExpr("u"),
+ new ObjectCreationExpr(null, types.getClass(OperationWrapper.class), CodeGenUtils.list(new NameExpr("n")))))),
+ new ThrowStmt(new ObjectCreationExpr(null, types.getClass(IOException.class), CodeGenUtils.list(CodeGenUtils.text("Invalid request")))));
w = 0;
for (Operation o : service.operations) {
int i = 0;
for (unknow.server.maven.jaxws.binding.Parameter p : o.params)
- s = new IfStmt(new MethodCallExpr(new NameExpr("P$" + w + "$" + i++), "equals", Utils.list(new NameExpr("n"))), new ReturnStmt(
- new MethodCallExpr(new MethodCallExpr(new NameExpr("u"), "unmarshal", Utils.list(new NameExpr("r"), new ClassExpr(types.get(p.type)))), "getValue")),
+ s = new IfStmt(new MethodCallExpr(new NameExpr("P$" + w + "$" + i++), "equals", CodeGenUtils.list(new NameExpr("n"))), new ReturnStmt(
+ new MethodCallExpr(new MethodCallExpr(new NameExpr("u"), "unmarshal", CodeGenUtils.list(new NameExpr("r"), new ClassExpr(types.get(p.type)))), "getValue")),
s);
w++;
}
- servlet.addMethod("read", Utils.PROTECT).addMarkerAnnotation(Override.class).setType(types.get(Object.class))
+ servlet.addMethod("read", CodeGenUtils.PROTECT).addMarkerAnnotation(Override.class).setType(types.get(Object.class))
.addParameter(new Parameter(types.get(XMLStreamReader.class), "r")).addParameter(new Parameter(types.get(Unmarshaller.class), "u"))
.addThrownException(types.getClass(XMLStreamException.class)).addThrownException(types.getClass(JAXBException.class))
.addThrownException(types.getClass(IOException.class)).getBody().get()
- .addStatement(Utils.assign(types.get(QName.class), "n", new MethodCallExpr(new NameExpr("r"), "getName"))).addStatement(s);
+ .addStatement(CodeGenUtils.assign(types.get(QName.class), "n", new MethodCallExpr(new NameExpr("r"), "getName"))).addStatement(s);
}
}
diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/jsp/JspGeneratorMojo.java b/unknow-server-maven/src/main/java/unknow/server/maven/jsp/JspGeneratorMojo.java
index a2e62d64..05f0731c 100644
--- a/unknow-server-maven/src/main/java/unknow/server/maven/jsp/JspGeneratorMojo.java
+++ b/unknow-server-maven/src/main/java/unknow/server/maven/jsp/JspGeneratorMojo.java
@@ -21,8 +21,8 @@
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
-import unknow.server.maven.TypeCache;
-import unknow.server.maven.Utils;
+import unknow.maven.codegen.CodeGenUtils;
+import unknow.maven.codegen.TypeFactory;
import unknow.server.servlet.impl.ServletJsp;
/**
@@ -49,14 +49,14 @@ public class JspGeneratorMojo {
private final StringBuilder print = new StringBuilder();
private final StringBuilder sb = new StringBuilder();
- private TypeCache types;
+ private TypeFactory types;
private BlockStmt b;
public void generate(Path file) throws IOException {
CompilationUnit cu = new CompilationUnit("jsp");
ClassOrInterfaceDeclaration cl = cu.addClass("Impl", Modifier.Keyword.PUBLIC, Modifier.Keyword.FINAL).addExtendedType(ServletJsp.class);
- types = new TypeCache(cu, Collections.emptyMap());
+ types = new TypeFactory(cu, Collections.emptyMap());
b = cl.addMethod("jspService", Modifier.Keyword.PROTECTED, Modifier.Keyword.FINAL).addParameter(types.getClass(HttpServletRequest.class), "request")
.addParameter(types.getClass(HttpServletResponse.class), "response").addMarkerAnnotation(Override.class).createBody();
@@ -84,7 +84,7 @@ private void parse(Reader r) throws IOException {
private void print() {
if (print.length() == 0)
return;
- b.addStatement(new MethodCallExpr(OUT, "print", Utils.list(Utils.text(print.toString()))));
+ b.addStatement(new MethodCallExpr(OUT, "print", CodeGenUtils.list(CodeGenUtils.text(print.toString()))));
print.setLength(0);
}
@@ -187,7 +187,7 @@ private void processEcho(Reader r) throws IOException {
}
sb.append((char) c);
}
- b.addStatement(new MethodCallExpr(OUT, "print", Utils.list(StaticJavaParser.parseExpression(sb.toString()))));
+ b.addStatement(new MethodCallExpr(OUT, "print", CodeGenUtils.list(StaticJavaParser.parseExpression(sb.toString()))));
sb.setLength(0);
}
diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/servlet/Builder.java b/unknow-server-maven/src/main/java/unknow/server/maven/servlet/Builder.java
index 3c383b32..5dda0e04 100644
--- a/unknow-server-maven/src/main/java/unknow/server/maven/servlet/Builder.java
+++ b/unknow-server-maven/src/main/java/unknow/server/maven/servlet/Builder.java
@@ -5,8 +5,8 @@
import com.github.javaparser.ast.body.ClassOrInterfaceDeclaration;
+import unknow.maven.codegen.TypeFactory;
import unknow.model.api.ModelLoader;
-import unknow.server.maven.TypeCache;
import unknow.server.maven.servlet.descriptor.Descriptor;
/**
@@ -22,7 +22,7 @@ public static interface BuilderContext {
Descriptor descriptor();
- TypeCache type();
+ TypeFactory type();
ModelLoader loader();
diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/servlet/ServletGenMojo.java b/unknow-server-maven/src/main/java/unknow/server/maven/servlet/ServletGenMojo.java
index eba5bc9b..627aff64 100644
--- a/unknow-server-maven/src/main/java/unknow/server/maven/servlet/ServletGenMojo.java
+++ b/unknow-server-maven/src/main/java/unknow/server/maven/servlet/ServletGenMojo.java
@@ -27,14 +27,13 @@
import com.github.javaparser.ast.CompilationUnit;
import com.github.javaparser.ast.Modifier;
-import com.github.javaparser.ast.Node;
import com.github.javaparser.ast.body.ClassOrInterfaceDeclaration;
import jakarta.servlet.DispatcherType;
import jakarta.servlet.ServletContainerInitializer;
+import unknow.maven.codegen.TypeFactory;
import unknow.model.api.ModelLoader;
import unknow.server.maven.AbstractGeneratorMojo;
-import unknow.server.maven.TypeCache;
import unknow.server.maven.servlet.Builder.BuilderContext;
import unknow.server.maven.servlet.builder.CreateContext;
import unknow.server.maven.servlet.builder.CreateEventManager;
@@ -67,14 +66,17 @@ public class ServletGenMojo extends AbstractGeneratorMojo implements BuilderCont
private static final Path WEBXML = Paths.get("WEB-INF", "web.xml");
private static final Path INITIALIZER = Paths.get("META-INF", "services", ServletContainerInitializer.class.getName());
- private final CompilationUnit cu = new CompilationUnit();
+ private CompilationUnit cu;
- private TypeCache types;
+ private TypeFactory types;
private ClassOrInterfaceDeclaration cl;
private final Descriptor descriptor = new Descriptor();
+ @Parameter(name = "graalvm", defaultValue = "true")
+ protected boolean graalvm;
+
@Parameter(defaultValue = "Server")
private String className;
@@ -90,18 +92,15 @@ public class ServletGenMojo extends AbstractGeneratorMojo implements BuilderCont
@Parameter(defaultValue = "WEB-INF,META-INF,generated")
private List ignoredResources;
- @Override
- protected String id() {
- return "servlet-generator";
- }
-
@Override
public void execute() throws MojoExecutionException, MojoFailureException {
- init();
+ init(session, mojo, repository, codegen);
+
+ cu = newCu();
- cu.setData(Node.SYMBOL_RESOLVER_KEY, javaSymbolSolver);
if (addAccessLog)
- descriptor.filters.add(new SD(descriptor.filters.size()).addPattern("/*").clazz(AccessLogFilter.class.getName()).name("acessLog").addDispatcher(DispatcherType.REQUEST));
+ descriptor.filters
+ .add(new SD(descriptor.filters.size()).addPattern("/*").clazz(AccessLogFilter.class.getName()).name("acessLog").addDispatcher(DispatcherType.REQUEST));
try {
classLoader.loadClass("io.prometheus.client.Counter");
descriptor.filters
@@ -109,7 +108,7 @@ public void execute() throws MojoExecutionException, MojoFailureException {
} catch (@SuppressWarnings("unused") Throwable t) { // ok
}
- process(descriptor);
+ processSrc(descriptor);
processResources(this::process);
if (graalvm && !descriptor.resources.isEmpty())
generateGraalvmResources();
@@ -117,16 +116,14 @@ public void execute() throws MojoExecutionException, MojoFailureException {
logger.info("descriptor:\n{}", descriptor);
// generate class
- types = new TypeCache(cu, existingClass);
+ types = new TypeFactory(cu, existingClass);
- if (packageName != null && !packageName.isEmpty())
- cu.setPackageDeclaration(packageName);
cl = cu.addClass(className, Modifier.Keyword.FINAL).addExtendedType(AbstractHttpServer.class);
for (Builder b : BUILDER)
b.add(this);
- out.save(cu);
+ writer.write(cu);
}
private void process(Path full, Path file) {
@@ -176,7 +173,7 @@ private void process(Path full, Path file) {
*/
private void generateGraalvmResources() throws MojoFailureException {
try {
- Path path = Paths.get(resources + "/META-INF/native-image/" + id() + "/resource-config.json");
+ Path path = Paths.get(codegen.resources + "/META-INF/native-image/" + uniquePath + "/resource-config.json");
Files.createDirectories(path.getParent());
try (BufferedWriter w = Files.newBufferedWriter(path)) {
w.write("{\"resources\":{\"includes\":[");
@@ -207,7 +204,7 @@ public Descriptor descriptor() {
}
@Override
- public TypeCache type() {
+ public TypeFactory type() {
return types;
}
diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/servlet/builder/CreateContext.java b/unknow-server-maven/src/main/java/unknow/server/maven/servlet/builder/CreateContext.java
index 3cc93c0e..a4efe6d6 100644
--- a/unknow-server-maven/src/main/java/unknow/server/maven/servlet/builder/CreateContext.java
+++ b/unknow-server-maven/src/main/java/unknow/server/maven/servlet/builder/CreateContext.java
@@ -8,7 +8,8 @@
import com.github.javaparser.ast.expr.ObjectCreationExpr;
import com.github.javaparser.ast.stmt.ReturnStmt;
-import unknow.server.maven.TypeCache;
+import unknow.maven.codegen.CodeGenUtils;
+import unknow.maven.codegen.TypeFactory;
import unknow.server.maven.Utils;
import unknow.server.maven.servlet.Builder;
import unknow.server.maven.servlet.Names;
@@ -21,13 +22,13 @@ public class CreateContext extends Builder {
@Override
public void add(BuilderContext ctx) {
- TypeCache t = ctx.type();
+ TypeFactory t = ctx.type();
ctx.self().addMethod("createContext", Modifier.Keyword.PROTECTED, Modifier.Keyword.FINAL).setType(t.getClass(ServletContextImpl.class))
.addParameter(String.class, "vhost").addMarkerAnnotation(Override.class).createBody()
.addStatement(new ReturnStmt(new ObjectCreationExpr(null, t.getClass(ServletContextImpl.class),
- Utils.list(Utils.text(ctx.descriptor().name), new NameExpr("vhost"), Utils.mapString(ctx.descriptor().param, t), Names.EVENTS,
- new ObjectCreationExpr(null, t.getClass(ctx.sessionFactory()), Utils.list()), Utils.mapString(ctx.descriptor().localeMapping, t),
+ CodeGenUtils.list(CodeGenUtils.text(ctx.descriptor().name), new NameExpr("vhost"), Utils.mapString(ctx.descriptor().param, t), Names.EVENTS,
+ new ObjectCreationExpr(null, t.getClass(ctx.sessionFactory()), CodeGenUtils.list()), Utils.mapString(ctx.descriptor().localeMapping, t),
Utils.mapString(ctx.descriptor().mimeTypes, t)))));
}
}
diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/servlet/builder/CreateEventManager.java b/unknow-server-maven/src/main/java/unknow/server/maven/servlet/builder/CreateEventManager.java
index e43db7dd..1761ea73 100644
--- a/unknow-server-maven/src/main/java/unknow/server/maven/servlet/builder/CreateEventManager.java
+++ b/unknow-server-maven/src/main/java/unknow/server/maven/servlet/builder/CreateEventManager.java
@@ -19,8 +19,8 @@
import com.github.javaparser.ast.stmt.BlockStmt;
import com.github.javaparser.ast.stmt.ReturnStmt;
-import unknow.server.maven.TypeCache;
-import unknow.server.maven.Utils;
+import unknow.maven.codegen.CodeGenUtils;
+import unknow.maven.codegen.TypeFactory;
import unknow.server.maven.servlet.Builder;
import unknow.server.maven.servlet.descriptor.Descriptor;
import unknow.server.maven.servlet.descriptor.LD;
@@ -32,7 +32,7 @@
public class CreateEventManager extends Builder {
@Override
public void add(BuilderContext ctx) {
- TypeCache t = ctx.type();
+ TypeFactory t = ctx.type();
BlockStmt init = ctx.self().addMethod("createEventManager", Modifier.Keyword.PROTECTED, Modifier.Keyword.FINAL).setType(t.getClass(EventManager.class))
.addMarkerAnnotation(Override.class).createBody();
Map, NodeList> map = new HashMap<>();
@@ -41,7 +41,7 @@ public void add(BuilderContext ctx) {
for (LD l : ctx.descriptor().listeners) {
String n = "l" + i++;
NameExpr name = new NameExpr(n);
- init.addStatement(Utils.assign(t.getClass(l.clazz), n, new ObjectCreationExpr(null, t.getClass(l.clazz), Utils.list())));
+ init.addStatement(CodeGenUtils.assign(t.getClass(l.clazz), n, new ObjectCreationExpr(null, t.getClass(l.clazz), CodeGenUtils.list())));
for (Class> cl : l.listener) {
NodeList ll = map.get(cl);
@@ -60,7 +60,7 @@ public void add(BuilderContext ctx) {
else
a = new IntegerLiteralExpr("0");
- list.add(new ObjectCreationExpr(null, t.getClass(ArrayList.class, TypeCache.EMPTY), Utils.list(a)));
+ list.add(new ObjectCreationExpr(null, t.getClass(ArrayList.class, TypeFactory.EMPTY), CodeGenUtils.list(a)));
}
init.addStatement(new ReturnStmt(new ObjectCreationExpr(null, t.getClass(EventManager.class), list)));
}
diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/servlet/builder/CreateFilters.java b/unknow-server-maven/src/main/java/unknow/server/maven/servlet/builder/CreateFilters.java
index a7e782fc..bdddfca6 100644
--- a/unknow-server-maven/src/main/java/unknow/server/maven/servlet/builder/CreateFilters.java
+++ b/unknow-server-maven/src/main/java/unknow/server/maven/servlet/builder/CreateFilters.java
@@ -15,7 +15,8 @@
import com.github.javaparser.ast.type.ClassOrInterfaceType;
import jakarta.servlet.DispatcherType;
-import unknow.server.maven.TypeCache;
+import unknow.maven.codegen.CodeGenUtils;
+import unknow.maven.codegen.TypeFactory;
import unknow.server.maven.Utils;
import unknow.server.maven.servlet.Builder;
import unknow.server.maven.servlet.Names;
@@ -31,7 +32,7 @@ public class CreateFilters extends Builder {
@Override
public void add(BuilderContext ctx) {
Descriptor descriptor = ctx.descriptor();
- TypeCache types = ctx.type();
+ TypeFactory types = ctx.type();
ClassOrInterfaceType t = types.getClass(FilterConfigImpl.class);
BlockStmt b = ctx.self().addMethod("createFilters", Modifier.Keyword.PROTECTED, Modifier.Keyword.FINAL).setType(types.array(FilterConfigImpl.class))
.addMarkerAnnotation(Override.class).createBody();
@@ -45,14 +46,14 @@ public void add(BuilderContext ctx) {
TypeExpr type = new TypeExpr(types.getClass(DispatcherType.class));
for (DispatcherType d : f.dispatcher)
list.add(new FieldAccessExpr(type, d.name()));
- Expression dispatcher = new ObjectCreationExpr(null, types.getClass(ArraySet.class, TypeCache.EMPTY),
- Utils.list(Utils.array(types.getClass(DispatcherType.class), list)));
+ Expression dispatcher = new ObjectCreationExpr(null, types.getClass(ArraySet.class, TypeFactory.EMPTY),
+ CodeGenUtils.list(CodeGenUtils.array(types.getClass(DispatcherType.class), list)));
- b.addStatement(
- Utils.assign(t, n, new ObjectCreationExpr(null, t, Utils.list(Utils.text(f.name), new ObjectCreationExpr(null, types.getClass(f.clazz), Utils.list()),
+ b.addStatement(CodeGenUtils.assign(t, n,
+ new ObjectCreationExpr(null, t, CodeGenUtils.list(CodeGenUtils.text(f.name), new ObjectCreationExpr(null, types.getClass(f.clazz), CodeGenUtils.list()),
Names.CTX, Utils.mapString(f.param, types), Utils.arraySet(f.servletNames, types), Utils.arraySet(f.pattern, types), dispatcher))));
}
- b.addStatement(new ReturnStmt(Utils.array(t, filters)));
+ b.addStatement(new ReturnStmt(CodeGenUtils.array(t, filters)));
}
}
diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/servlet/builder/CreateServletManager.java b/unknow-server-maven/src/main/java/unknow/server/maven/servlet/builder/CreateServletManager.java
index ff8c21a6..67f24878 100644
--- a/unknow-server-maven/src/main/java/unknow/server/maven/servlet/builder/CreateServletManager.java
+++ b/unknow-server-maven/src/main/java/unknow/server/maven/servlet/builder/CreateServletManager.java
@@ -19,8 +19,8 @@
import com.github.javaparser.ast.stmt.ReturnStmt;
import com.github.javaparser.ast.type.PrimitiveType;
-import unknow.server.maven.TypeCache;
-import unknow.server.maven.Utils;
+import unknow.maven.codegen.CodeGenUtils;
+import unknow.maven.codegen.TypeFactory;
import unknow.server.maven.servlet.Builder;
import unknow.server.maven.servlet.Names;
import unknow.server.maven.servlet.descriptor.Descriptor;
@@ -36,13 +36,13 @@ public class CreateServletManager extends Builder {
@Override
public void add(BuilderContext ctx) {
Descriptor descriptor = ctx.descriptor();
- TypeCache types = ctx.type();
+ TypeFactory types = ctx.type();
ctx.self().addMethod("createServletManager", Modifier.Keyword.PROTECTED, Modifier.Keyword.FINAL).setType(types.getClass(ServletManager.class))
.addMarkerAnnotation(Override.class).createBody().addStatement(new ReturnStmt(
- new ObjectCreationExpr(null, types.getClass(ServletManager.class), Utils.list(errorCode(descriptor, types), errorClass(descriptor, types)))));
+ new ObjectCreationExpr(null, types.getClass(ServletManager.class), CodeGenUtils.list(errorCode(descriptor, types), errorClass(descriptor, types)))));
}
- private static ObjectCreationExpr errorCode(Descriptor descriptor, TypeCache t) {
+ private static ObjectCreationExpr errorCode(Descriptor descriptor, TypeFactory t) {
NodeList k = new NodeList<>();
NodeList v = new NodeList<>();
List l = new ArrayList<>(descriptor.errorCode.keySet());
@@ -53,13 +53,13 @@ private static ObjectCreationExpr errorCode(Descriptor descriptor, TypeCache t)
if (s == null)
continue;
k.add(new IntegerLiteralExpr(e.toString()));
- v.add(Utils.text(path));
+ v.add(CodeGenUtils.text(path));
}
- return new ObjectCreationExpr(null, t.getClass(IntArrayMap.class, TypeCache.EMPTY),
- Utils.list(Utils.array(PrimitiveType.intType(), k), Utils.array(t.getClass(String.class), v)));
+ return new ObjectCreationExpr(null, t.getClass(IntArrayMap.class, TypeFactory.EMPTY),
+ CodeGenUtils.list(CodeGenUtils.array(PrimitiveType.intType(), k), CodeGenUtils.array(t.getClass(String.class), v)));
}
- private static ObjectCreationExpr errorClass(Descriptor descriptor, TypeCache t) {
+ private static ObjectCreationExpr errorClass(Descriptor descriptor, TypeFactory t) {
NodeList k = new NodeList<>();
NodeList v = new NodeList<>();
List l = new ArrayList<>(descriptor.errorClass.keySet());
@@ -70,11 +70,11 @@ private static ObjectCreationExpr errorClass(Descriptor descriptor, TypeCache t)
if (s == null || e.isEmpty())
continue;
k.add(new ClassExpr(t.get(e.toString())));
- k.add(Utils.text(path));
+ k.add(CodeGenUtils.text(path));
}
- LambdaExpr cmp = new LambdaExpr(Utils.list(new Parameter(TypeCache.EMPTY, "a"), new Parameter(TypeCache.EMPTY, "b")),
- new MethodCallExpr(new MethodCallExpr(Names.a, "getName"), "compareTo", Utils.list(new MethodCallExpr(Names.b, "getName"))));
- return new ObjectCreationExpr(null, t.getClass(ObjectArrayMap.class, TypeCache.EMPTY),
- Utils.list(Utils.array(t.getClass(Class.class), k), Utils.array(t.getClass(String.class), v), cmp));
+ LambdaExpr cmp = new LambdaExpr(CodeGenUtils.list(new Parameter(TypeFactory.EMPTY, "a"), new Parameter(TypeFactory.EMPTY, "b")),
+ new MethodCallExpr(new MethodCallExpr(Names.a, "getName"), "compareTo", CodeGenUtils.list(new MethodCallExpr(Names.b, "getName"))));
+ return new ObjectCreationExpr(null, t.getClass(ObjectArrayMap.class, TypeFactory.EMPTY),
+ CodeGenUtils.list(CodeGenUtils.array(t.getClass(Class.class), k), CodeGenUtils.array(t.getClass(String.class), v), cmp));
}
}
diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/servlet/builder/CreateServlets.java b/unknow-server-maven/src/main/java/unknow/server/maven/servlet/builder/CreateServlets.java
index 4219d4c0..600809e8 100644
--- a/unknow-server-maven/src/main/java/unknow/server/maven/servlet/builder/CreateServlets.java
+++ b/unknow-server-maven/src/main/java/unknow/server/maven/servlet/builder/CreateServlets.java
@@ -16,7 +16,8 @@
import com.github.javaparser.ast.stmt.ReturnStmt;
import com.github.javaparser.ast.type.ClassOrInterfaceType;
-import unknow.server.maven.TypeCache;
+import unknow.maven.codegen.CodeGenUtils;
+import unknow.maven.codegen.TypeFactory;
import unknow.server.maven.Utils;
import unknow.server.maven.servlet.Builder;
import unknow.server.maven.servlet.Names;
@@ -32,7 +33,7 @@ public class CreateServlets extends Builder {
@Override
public void add(BuilderContext ctx) {
Descriptor descriptor = ctx.descriptor();
- TypeCache types = ctx.type();
+ TypeFactory types = ctx.type();
ClassOrInterfaceType t = types.getClass(ServletConfigImpl.class);
BlockStmt b = ctx.self().addMethod("createServlets", Modifier.Keyword.PROTECTED, Modifier.Keyword.FINAL).setType(types.array(ServletConfigImpl.class))
.addMarkerAnnotation(Override.class).createBody();
@@ -47,10 +48,10 @@ public void add(BuilderContext ctx) {
NodeList params = new NodeList<>();
if (s.name.startsWith("Resource:")) {
Resource r = descriptor.resources.get(s.pattern.get(0));
- params = Utils.list(Utils.text(s.pattern.get(0)), new LongLiteralExpr(r.getLastModified() + "L"), new LongLiteralExpr(r.getSize() + "L"));
+ params = CodeGenUtils.list(CodeGenUtils.text(s.pattern.get(0)), new LongLiteralExpr(r.getLastModified() + "L"), new LongLiteralExpr(r.getSize() + "L"));
}
- b.addStatement(Utils.assign(t, n, new ObjectCreationExpr(null, t, Utils.list(Utils.text(s.name), new ObjectCreationExpr(null, types.getClass(s.clazz), params),
- Names.CTX, Utils.mapString(s.param, types), Utils.arraySet(s.pattern, types)))));
+ b.addStatement(CodeGenUtils.assign(t, n, new ObjectCreationExpr(null, t, CodeGenUtils.list(CodeGenUtils.text(s.name),
+ new ObjectCreationExpr(null, types.getClass(s.clazz), params), Names.CTX, Utils.mapString(s.param, types), Utils.arraySet(s.pattern, types)))));
for (String p : s.pattern) {
if (saw.contains(p))
System.err.println("duplicate servlet pattern '" + p + "'");
@@ -58,6 +59,6 @@ public void add(BuilderContext ctx) {
}
}
- b.addStatement(new ReturnStmt(Utils.array(t, servlets)));
+ b.addStatement(new ReturnStmt(CodeGenUtils.array(t, servlets)));
}
}
diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/servlet/builder/LoadInitializer.java b/unknow-server-maven/src/main/java/unknow/server/maven/servlet/builder/LoadInitializer.java
index df383517..eaa6ba9e 100644
--- a/unknow-server-maven/src/main/java/unknow/server/maven/servlet/builder/LoadInitializer.java
+++ b/unknow-server-maven/src/main/java/unknow/server/maven/servlet/builder/LoadInitializer.java
@@ -22,7 +22,7 @@
import jakarta.servlet.ServletContainerInitializer;
import jakarta.servlet.ServletException;
-import unknow.server.maven.Utils;
+import unknow.maven.codegen.CodeGenUtils;
import unknow.server.maven.servlet.Builder;
/**
@@ -50,7 +50,7 @@ public void add(BuilderContext ctx) {
BlockStmt b = ctx.self().addMethod("loadInitializer", Keyword.PROTECTED, Keyword.FINAL).addThrownException(ctx.type().getClass(ServletException.class))
.addMarkerAnnotation(Override.class).createBody();
for (String s : clazz)
- b.addStatement(new MethodCallExpr(new ObjectCreationExpr(null, ctx.type().getClass(s), Utils.list()), "onStartup",
- Utils.list(new NullLiteralExpr(), new NameExpr("ctx"))));
+ b.addStatement(new MethodCallExpr(new ObjectCreationExpr(null, ctx.type().getClass(s), CodeGenUtils.list()), "onStartup",
+ CodeGenUtils.list(new NullLiteralExpr(), new NameExpr("ctx"))));
}
}
diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/servlet/builder/Main.java b/unknow-server-maven/src/main/java/unknow/server/maven/servlet/builder/Main.java
index ebb8af16..faafc123 100644
--- a/unknow-server-maven/src/main/java/unknow/server/maven/servlet/builder/Main.java
+++ b/unknow-server-maven/src/main/java/unknow/server/maven/servlet/builder/Main.java
@@ -8,8 +8,8 @@
import com.github.javaparser.ast.expr.NameExpr;
import com.github.javaparser.ast.expr.ObjectCreationExpr;
-import unknow.server.maven.TypeCache;
-import unknow.server.maven.Utils;
+import unknow.maven.codegen.CodeGenUtils;
+import unknow.maven.codegen.TypeFactory;
import unknow.server.maven.servlet.Builder;
/**
@@ -19,8 +19,8 @@ public class Main extends Builder {
@Override
public void add(BuilderContext ctx) {
- TypeCache t = ctx.type();
+ TypeFactory t = ctx.type();
ctx.self().addMethod("main", Modifier.Keyword.PUBLIC, Modifier.Keyword.STATIC).addParameter(String[].class, "arg").addThrownException(t.getClass(Exception.class))
- .createBody().addStatement(new MethodCallExpr(new ObjectCreationExpr(null, t.getClass(ctx.self()), Utils.list()), "process", Utils.list(new NameExpr("arg"))));
+ .createBody().addStatement(new MethodCallExpr(new ObjectCreationExpr(null, t.getClass(ctx.self()), CodeGenUtils.list()), "process", CodeGenUtils.list(new NameExpr("arg"))));
}
}
diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/servlet/descriptor/Descriptor.java b/unknow-server-maven/src/main/java/unknow/server/maven/servlet/descriptor/Descriptor.java
index 960e6dff..4e4c4071 100644
--- a/unknow-server-maven/src/main/java/unknow/server/maven/servlet/descriptor/Descriptor.java
+++ b/unknow-server-maven/src/main/java/unknow/server/maven/servlet/descriptor/Descriptor.java
@@ -23,9 +23,9 @@
import jakarta.servlet.http.HttpSessionAttributeListener;
import jakarta.servlet.http.HttpSessionIdListener;
import jakarta.servlet.http.HttpSessionListener;
+import unknow.maven.codegen.AbstractCodeGenMojo.TypeConsumer;
import unknow.model.api.AnnotationModel;
import unknow.model.api.TypeModel;
-import unknow.server.maven.AbstractGeneratorMojo.TypeConsumer;
import unknow.server.servlet.impl.ServletCookieConfigImpl;
import unknow.server.servlet.utils.Resource;
diff --git a/unknow-server-test/unknow-server-test-jar/pom.xml b/unknow-server-test/unknow-server-test-jar/pom.xml
index bcbd64ed..0636f05b 100644
--- a/unknow-server-test/unknow-server-test-jar/pom.xml
+++ b/unknow-server-test/unknow-server-test-jar/pom.xml
@@ -44,11 +44,13 @@
generate-sources
+
+ unknow.server.http.test.generated
+
+ ${project.groupId}:unknow-server-test-pojo:${project.version}
+
+
/rest
- unknow.server.http.test.generated
-
- ${project.groupId}:unknow-server-test-pojo:${project.version}
-
@@ -60,12 +62,15 @@
generate-sources
+
+ unknow.server.http.test.generated
+
+ ${project.groupId}:unknow-server-test-pojo:${project.version}
+
+
true
- unknow.server.http.test.generated
+
-
- ${project.groupId}:unknow-server-test-pojo:${project.version}
-
diff --git a/unknow-server-test/unknow-server-test-tomcat/pom.xml b/unknow-server-test/unknow-server-test-tomcat/pom.xml
index 49adce99..f09a92b7 100644
--- a/unknow-server-test/unknow-server-test-tomcat/pom.xml
+++ b/unknow-server-test/unknow-server-test-tomcat/pom.xml
@@ -45,11 +45,13 @@
generate-sources
+
+ unknow.server.http.test.generated
+
+ ${project.groupId}:unknow-server-test-pojo:${project.version}
+
+
/rest
- unknow.server.http.test.generated
-
- ${project.groupId}:unknow-server-test-pojo:${project.version}
-
@@ -60,12 +62,14 @@
generate-sources
+
+ unknow.server.http.test.generated
+
+ ${project.groupId}:unknow-server-test-pojo:${project.version}
+
+
false
- unknow.server.http.test.generated
-
- ${project.groupId}:unknow-server-test-pojo:${project.version}
-