diff --git a/pom.xml b/pom.xml index adc25d9b..afdf1017 100644 --- a/pom.xml +++ b/pom.xml @@ -384,6 +384,13 @@ ${protobuf.version} + + io.github.unknow0.model + unknow-model-bom + 1.0.1 + pom + import + com.fasterxml.jackson jackson-bom diff --git a/unknow-server-maven/pom.xml b/unknow-server-maven/pom.xml index 82443e93..aab6925b 100644 --- a/unknow-server-maven/pom.xml +++ b/unknow-server-maven/pom.xml @@ -78,6 +78,23 @@ unknow-server-jaxrs ${project.version} + + io.github.unknow0.model + unknow-model-api + + + io.github.unknow0.model + unknow-model-ast + + + io.github.unknow0.model + unknow-model-jvm + + + io.github.unknow0.model + unknow-model-simple + test + com.github.javaparser diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/AbstractGeneratorMojo.java b/unknow-server-maven/src/main/java/unknow/server/maven/AbstractGeneratorMojo.java index fbe0d7de..c2cff0a8 100644 --- a/unknow-server-maven/src/main/java/unknow/server/maven/AbstractGeneratorMojo.java +++ b/unknow-server-maven/src/main/java/unknow/server/maven/AbstractGeneratorMojo.java @@ -52,10 +52,10 @@ import com.github.javaparser.symbolsolver.resolution.typesolvers.CombinedTypeSolver; import com.github.javaparser.symbolsolver.resolution.typesolvers.JavaParserTypeSolver; -import unknow.server.maven.model.ModelLoader; -import unknow.server.maven.model.TypeModel; -import unknow.server.maven.model.ast.AstModelLoader; -import unknow.server.maven.model.jvm.JvmModelLoader; +import unknow.model.api.ModelLoader; +import unknow.model.api.TypeModel; +import unknow.model.ast.AstModelLoader; +import unknow.model.jvm.JvmModelLoader; /** * @author unknow 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 index 98acee2b..538a1b4b 100644 --- a/unknow-server-maven/src/main/java/unknow/server/maven/TypeCache.java +++ b/unknow-server-maven/src/main/java/unknow/server/maven/TypeCache.java @@ -19,9 +19,9 @@ import com.github.javaparser.ast.type.UnknownType; import com.github.javaparser.ast.type.WildcardType; -import unknow.server.maven.model.ModelLoader; -import unknow.server.maven.model.PrimitiveModel; -import unknow.server.maven.model.TypeModel; +import unknow.model.api.ModelLoader; +import unknow.model.api.PrimitiveModel; +import unknow.model.api.TypeModel; /** * @author unknow diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/jaxb/HandlerContext.java b/unknow-server-maven/src/main/java/unknow/server/maven/jaxb/HandlerContext.java index 41a98ec5..254ebf0a 100644 --- a/unknow-server-maven/src/main/java/unknow/server/maven/jaxb/HandlerContext.java +++ b/unknow-server-maven/src/main/java/unknow/server/maven/jaxb/HandlerContext.java @@ -4,9 +4,9 @@ import java.util.Map; import java.util.function.Consumer; +import unknow.model.api.ModelLoader; +import unknow.model.api.TypeModel; import unknow.server.maven.jaxb.model.XmlType; -import unknow.server.maven.model.ModelLoader; -import unknow.server.maven.model.TypeModel; public class HandlerContext { private final Map handlers; 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 d7893b10..9acf8da1 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 @@ -45,6 +45,8 @@ import jakarta.xml.bind.JAXBContextFactory; import jakarta.xml.bind.annotation.XmlRootElement; +import unknow.model.api.AnnotationModel; +import unknow.model.api.TypeModel; import unknow.server.jaxb.ContextFactory; import unknow.server.jaxb.handler.BigDecimalHandler; import unknow.server.jaxb.handler.BigIntegerHandler; @@ -71,8 +73,6 @@ import unknow.server.maven.jaxb.model.XmlCollection; import unknow.server.maven.jaxb.model.XmlLoader; import unknow.server.maven.jaxb.model.XmlType; -import unknow.server.maven.model.AnnotationModel; -import unknow.server.maven.model.TypeModel; /** * @author unknow 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 42fba782..ee51dcca 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 @@ -21,6 +21,7 @@ import com.github.javaparser.ast.type.ClassOrInterfaceType; import jakarta.xml.bind.JAXBException; +import unknow.model.api.TypeModel; import unknow.server.jaxb.XmlRootHandler; import unknow.server.jaxb.XmlSimpleHandler; import unknow.server.maven.SourceBuilder.AbstractSourceBuilder; @@ -28,7 +29,6 @@ import unknow.server.maven.jaxb.HandlerContext; import unknow.server.maven.jaxb.JaxbGeneratorMojo; import unknow.server.maven.jaxb.model.XmlEnum; -import unknow.server.maven.model.TypeModel; public class HandlerEnum extends AbstractSourceBuilder { 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 92079c35..834d4c47 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 @@ -15,6 +15,7 @@ import com.github.javaparser.ast.stmt.BlockStmt; import com.github.javaparser.ast.type.ClassOrInterfaceType; +import unknow.model.api.TypeModel; import unknow.server.jaxb.XmlHandler; import unknow.server.jaxb.XmlRootHandler; import unknow.server.maven.SourceBuilder.AbstractSourceBuilder; @@ -27,7 +28,6 @@ import unknow.server.maven.jaxb.model.XmlElement; import unknow.server.maven.jaxb.model.XmlType; import unknow.server.maven.jaxb.model.XmlTypeComplex; -import unknow.server.maven.model.TypeModel; public class HandlerObject extends AbstractSourceBuilder { private static final List> methods = Arrays.asList(new HandlerObjectWriter(), new HandlerObjectReader()); 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 ed561947..b677cf84 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,6 +39,7 @@ import jakarta.xml.bind.JAXBElement; import jakarta.xml.bind.JAXBException; import jakarta.xml.bind.Unmarshaller; +import unknow.model.api.TypeModel; import unknow.server.jaxb.StrReader; import unknow.server.jaxb.UnmarshallerImpl; import unknow.server.jaxb.XmlHandler; @@ -52,7 +53,6 @@ import unknow.server.maven.jaxb.model.XmlElements; import unknow.server.maven.jaxb.model.XmlType; import unknow.server.maven.jaxb.model.XmlTypeComplex; -import unknow.server.maven.model.TypeModel; public class HandlerObjectReader extends AbstractSourceBuilder { private static final String INSTANCE = "INSTANCE"; 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 27150e1f..5a07b8db 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,6 +39,7 @@ import jakarta.xml.bind.JAXBElement; import jakarta.xml.bind.JAXBException; import jakarta.xml.bind.Marshaller; +import unknow.model.api.TypeModel; import unknow.server.jaxb.MarshallerImpl; import unknow.server.maven.SourceBuilder.AbstractSourceBuilder; import unknow.server.maven.TypeCache; @@ -49,7 +50,6 @@ import unknow.server.maven.jaxb.model.XmlElement; import unknow.server.maven.jaxb.model.XmlType; import unknow.server.maven.jaxb.model.XmlTypeComplex; -import unknow.server.maven.model.TypeModel; public class HandlerObjectWriter extends AbstractSourceBuilder { private static final String INSTANCE = "INSTANCE"; diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/jaxb/model/XmlChoice.java b/unknow-server-maven/src/main/java/unknow/server/maven/jaxb/model/XmlChoice.java index ec021635..a41d25c6 100644 --- a/unknow-server-maven/src/main/java/unknow/server/maven/jaxb/model/XmlChoice.java +++ b/unknow-server-maven/src/main/java/unknow/server/maven/jaxb/model/XmlChoice.java @@ -7,7 +7,7 @@ import javax.xml.namespace.QName; -import unknow.server.maven.model.TypeModel; +import unknow.model.api.TypeModel; public class XmlChoice implements XmlType { private final Collection choice; diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/jaxb/model/XmlCollection.java b/unknow-server-maven/src/main/java/unknow/server/maven/jaxb/model/XmlCollection.java index f5231d0e..036e88d7 100644 --- a/unknow-server-maven/src/main/java/unknow/server/maven/jaxb/model/XmlCollection.java +++ b/unknow-server-maven/src/main/java/unknow/server/maven/jaxb/model/XmlCollection.java @@ -8,7 +8,7 @@ import javax.xml.namespace.QName; -import unknow.server.maven.model.TypeModel; +import unknow.model.api.TypeModel; /** * @author unknow diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/jaxb/model/XmlElement.java b/unknow-server-maven/src/main/java/unknow/server/maven/jaxb/model/XmlElement.java index be06a8ac..4539e6cd 100644 --- a/unknow-server-maven/src/main/java/unknow/server/maven/jaxb/model/XmlElement.java +++ b/unknow-server-maven/src/main/java/unknow/server/maven/jaxb/model/XmlElement.java @@ -9,8 +9,8 @@ import javax.xml.namespace.QName; -import unknow.server.maven.model.BeanProperty; -import unknow.server.maven.model.TypeModel; +import unknow.model.api.BeanProperty; +import unknow.model.api.TypeModel; /** * @author unknow diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/jaxb/model/XmlEnum.java b/unknow-server-maven/src/main/java/unknow/server/maven/jaxb/model/XmlEnum.java index 57a96495..93c469cd 100644 --- a/unknow-server-maven/src/main/java/unknow/server/maven/jaxb/model/XmlEnum.java +++ b/unknow-server-maven/src/main/java/unknow/server/maven/jaxb/model/XmlEnum.java @@ -9,8 +9,8 @@ import javax.xml.namespace.QName; import jakarta.xml.bind.annotation.XmlEnumValue; -import unknow.server.maven.model.EnumModel; -import unknow.server.maven.model.EnumModel.EnumConstant; +import unknow.model.api.EnumModel; +import unknow.model.api.EnumModel.EnumConstant; /** * @author unknow diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/jaxb/model/XmlLoader.java b/unknow-server-maven/src/main/java/unknow/server/maven/jaxb/model/XmlLoader.java index 7665fee1..07585fb6 100644 --- a/unknow-server-maven/src/main/java/unknow/server/maven/jaxb/model/XmlLoader.java +++ b/unknow-server-maven/src/main/java/unknow/server/maven/jaxb/model/XmlLoader.java @@ -37,14 +37,14 @@ import jakarta.xml.bind.annotation.XmlSchema; import jakarta.xml.bind.annotation.XmlTransient; import jakarta.xml.bind.annotation.XmlValue; +import unknow.model.api.AnnotationModel; +import unknow.model.api.BeanProperty; +import unknow.model.api.ClassModel; +import unknow.model.api.PrimitiveModel; +import unknow.model.api.TypeModel; +import unknow.model.jvm.JvmModelLoader; import unknow.server.maven.jaxb.model.XmlElements.XmlGroup; import unknow.server.maven.jaxb.model.XmlTypeComplex.Factory; -import unknow.server.maven.model.AnnotationModel; -import unknow.server.maven.model.BeanProperty; -import unknow.server.maven.model.ClassModel; -import unknow.server.maven.model.PrimitiveModel; -import unknow.server.maven.model.TypeModel; -import unknow.server.maven.model.jvm.JvmModelLoader; /** * @author unknow diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/jaxb/model/XmlType.java b/unknow-server-maven/src/main/java/unknow/server/maven/jaxb/model/XmlType.java index 79627477..bce3efca 100644 --- a/unknow-server-maven/src/main/java/unknow/server/maven/jaxb/model/XmlType.java +++ b/unknow-server-maven/src/main/java/unknow/server/maven/jaxb/model/XmlType.java @@ -7,7 +7,7 @@ import javax.xml.namespace.QName; -import unknow.server.maven.model.TypeModel; +import unknow.model.api.TypeModel; /** * @author unknow diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/jaxb/model/XmlTypeComplex.java b/unknow-server-maven/src/main/java/unknow/server/maven/jaxb/model/XmlTypeComplex.java index 14d47cf7..28b93c93 100644 --- a/unknow-server-maven/src/main/java/unknow/server/maven/jaxb/model/XmlTypeComplex.java +++ b/unknow-server-maven/src/main/java/unknow/server/maven/jaxb/model/XmlTypeComplex.java @@ -9,8 +9,8 @@ import javax.xml.namespace.QName; -import unknow.server.maven.model.ClassModel; -import unknow.server.maven.model.TypeModel; +import unknow.model.api.ClassModel; +import unknow.model.api.TypeModel; /** * @author unknow diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/jaxb/model/XmlTypeSimple.java b/unknow-server-maven/src/main/java/unknow/server/maven/jaxb/model/XmlTypeSimple.java index c62bb0ae..a82c1363 100644 --- a/unknow-server-maven/src/main/java/unknow/server/maven/jaxb/model/XmlTypeSimple.java +++ b/unknow-server-maven/src/main/java/unknow/server/maven/jaxb/model/XmlTypeSimple.java @@ -7,7 +7,7 @@ import javax.xml.namespace.QName; -import unknow.server.maven.model.TypeModel; +import unknow.model.api.TypeModel; /** * @author unknow 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 1d2e918e..9beeb929 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,6 +31,8 @@ import jakarta.ws.rs.WebApplicationException; import jakarta.ws.rs.ext.ParamConverter; +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; @@ -41,8 +43,6 @@ import unknow.server.maven.jaxrs.JaxrsParam.JaxrsBeanParam.JaxrsBeanFieldParam; import unknow.server.maven.jaxrs.JaxrsParam.JaxrsBodyParam; import unknow.server.maven.jaxrs.JaxrsParam.JaxrsFormParam; -import unknow.server.maven.model.TypeModel; -import unknow.server.maven.model.jvm.JvmModelLoader; /** * @author unknow 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 51122009..39510a0d 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,11 @@ import jakarta.ws.rs.NotSupportedException; import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.ext.ParamConverter; +import unknow.model.api.ClassModel; +import unknow.model.api.MethodModel; +import unknow.model.api.ParamModel; +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.JaxrsEntityWriter; @@ -72,11 +77,6 @@ import unknow.server.maven.Utils; import unknow.server.maven.jaxrs.JaxrsParam.JaxrsBeanParam; import unknow.server.maven.jaxrs.JaxrsParam.JaxrsBodyParam; -import unknow.server.maven.model.ClassModel; -import unknow.server.maven.model.MethodModel; -import unknow.server.maven.model.ParamModel; -import unknow.server.maven.model.TypeModel; -import unknow.server.maven.model.jvm.JvmModelLoader; /** * @author unknow @@ -202,7 +202,7 @@ private void buildInializer() { TypeModel type = m.m.type(); if (!type.isVoid()) { if (type.isPrimitive()) - type = type.asPrimitive().boxed(); + 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); b.addStatement(new AssignExpr(new NameExpr(m.v + "$r"), new MethodCallExpr(new TypeExpr(types.getClass(JaxrsEntityWriter.class)), "create", diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/jaxrs/JaxrsMapping.java b/unknow-server-maven/src/main/java/unknow/server/maven/jaxrs/JaxrsMapping.java index 25f0760b..9c207e2d 100644 --- a/unknow-server-maven/src/main/java/unknow/server/maven/jaxrs/JaxrsMapping.java +++ b/unknow-server-maven/src/main/java/unknow/server/maven/jaxrs/JaxrsMapping.java @@ -5,8 +5,8 @@ import java.util.List; -import unknow.server.maven.model.ClassModel; -import unknow.server.maven.model.MethodModel; +import unknow.model.api.ClassModel; +import unknow.model.api.MethodModel; public class JaxrsMapping { public final String v; 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 d0890b40..16357ae6 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,18 @@ import jakarta.ws.rs.ext.MessageBodyWriter; import jakarta.ws.rs.ext.ParamConverterProvider; import jakarta.ws.rs.ext.Provider; +import unknow.model.api.AncestrorIterator; +import unknow.model.api.AnnotationModel; +import unknow.model.api.BeanProperty; +import unknow.model.api.ClassModel; +import unknow.model.api.MethodModel; +import unknow.model.api.ModelLoader; +import unknow.model.api.ParamModel; +import unknow.model.api.TypeModel; +import unknow.model.api.WithAnnotation; +import unknow.model.api.WithName; +import unknow.model.api.WithType; +import unknow.model.jvm.JvmModelLoader; import unknow.server.http.jaxrs.protostuff.ProtostuffJsonListAbstract.ProtostuffJsonLineProvider; import unknow.server.http.jaxrs.protostuff.ProtostuffJsonListAbstract.ProtostuffJsonListProvider; import unknow.server.http.jaxrs.protostuff.ProtostuffJsonProvider; @@ -78,17 +90,6 @@ import unknow.server.maven.jaxrs.JaxrsParam.JaxrsMatrixParam; import unknow.server.maven.jaxrs.JaxrsParam.JaxrsPathParam; import unknow.server.maven.jaxrs.JaxrsParam.JaxrsQueryParam; -import unknow.server.maven.model.AnnotationModel; -import unknow.server.maven.model.BeanProperty; -import unknow.server.maven.model.ClassModel; -import unknow.server.maven.model.MethodModel; -import unknow.server.maven.model.ModelLoader; -import unknow.server.maven.model.ParamModel; -import unknow.server.maven.model.TypeModel; -import unknow.server.maven.model.util.AncestrorIterator; -import unknow.server.maven.model.util.WithAnnotation; -import unknow.server.maven.model.util.WithName; -import unknow.server.maven.model.util.WithType; /** * @author unknow @@ -355,7 +356,7 @@ public static TypeModel getParamType(TypeModel type) { if (type.isArray()) type = type.asArray().type(); if (type.isPrimitive()) - return type.asPrimitive().boxed(); + return JvmModelLoader.GLOBAL.get(type.asPrimitive().boxed()); if (!type.isClass()) return type; diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/jaxrs/JaxrsMojo.java b/unknow-server-maven/src/main/java/unknow/server/maven/jaxrs/JaxrsMojo.java index f13fca95..2d88124e 100644 --- a/unknow-server-maven/src/main/java/unknow/server/maven/jaxrs/JaxrsMojo.java +++ b/unknow-server-maven/src/main/java/unknow/server/maven/jaxrs/JaxrsMojo.java @@ -59,14 +59,14 @@ import jakarta.ws.rs.ext.ParamConverter; import jakarta.ws.rs.ext.ParamConverterProvider; import jakarta.ws.rs.ext.RuntimeDelegate; +import unknow.model.api.ClassModel; +import unknow.model.api.TypeModel; import unknow.server.http.jaxrs.JaxrsContext; import unknow.server.http.jaxrs.JaxrsRuntime; import unknow.server.http.jaxrs.protostuff.ProtostuffSchema; import unknow.server.maven.AbstractGeneratorMojo; import unknow.server.maven.TypeCache; import unknow.server.maven.Utils; -import unknow.server.maven.model.ClassModel; -import unknow.server.maven.model.TypeModel; /** * @author unknow diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/jaxrs/JaxrsParam.java b/unknow-server-maven/src/main/java/unknow/server/maven/jaxrs/JaxrsParam.java index 49745cb2..3f0b559e 100644 --- a/unknow-server-maven/src/main/java/unknow/server/maven/jaxrs/JaxrsParam.java +++ b/unknow-server-maven/src/main/java/unknow/server/maven/jaxrs/JaxrsParam.java @@ -8,15 +8,15 @@ import jakarta.ws.rs.DefaultValue; import jakarta.ws.rs.Encoded; -import unknow.server.maven.model.BeanProperty; -import unknow.server.maven.model.ClassModel; -import unknow.server.maven.model.MethodModel; -import unknow.server.maven.model.ParamModel; -import unknow.server.maven.model.PrimitiveModel; -import unknow.server.maven.model.TypeModel; -import unknow.server.maven.model.util.WithAnnotation; -import unknow.server.maven.model.util.WithName; -import unknow.server.maven.model.util.WithType; +import unknow.model.api.BeanProperty; +import unknow.model.api.ClassModel; +import unknow.model.api.MethodModel; +import unknow.model.api.ParamModel; +import unknow.model.api.PrimitiveModel; +import unknow.model.api.TypeModel; +import unknow.model.api.WithAnnotation; +import unknow.model.api.WithName; +import unknow.model.api.WithType; /** * @author unknow diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/jaxrs/OpenApiBuilder.java b/unknow-server-maven/src/main/java/unknow/server/maven/jaxrs/OpenApiBuilder.java index b0f70603..cc77b0fe 100644 --- a/unknow-server-maven/src/main/java/unknow/server/maven/jaxrs/OpenApiBuilder.java +++ b/unknow-server-maven/src/main/java/unknow/server/maven/jaxrs/OpenApiBuilder.java @@ -44,6 +44,12 @@ import io.swagger.v3.oas.models.parameters.RequestBody; import io.swagger.v3.oas.models.responses.ApiResponse; import io.swagger.v3.oas.models.responses.ApiResponses; +import unknow.model.api.AnnotationModel; +import unknow.model.api.ClassModel; +import unknow.model.api.EnumModel; +import unknow.model.api.FieldModel; +import unknow.model.api.MethodModel; +import unknow.model.api.TypeModel; import unknow.server.maven.jaxrs.JaxrsParam.JaxrsBeanParam; import unknow.server.maven.jaxrs.JaxrsParam.JaxrsBeanParam.JaxrsBeanFieldParam; import unknow.server.maven.jaxrs.JaxrsParam.JaxrsBodyParam; @@ -53,12 +59,6 @@ import unknow.server.maven.jaxrs.JaxrsParam.JaxrsMatrixParam; import unknow.server.maven.jaxrs.JaxrsParam.JaxrsPathParam; import unknow.server.maven.jaxrs.JaxrsParam.JaxrsQueryParam; -import unknow.server.maven.model.AnnotationModel; -import unknow.server.maven.model.ClassModel; -import unknow.server.maven.model.EnumModel; -import unknow.server.maven.model.FieldModel; -import unknow.server.maven.model.MethodModel; -import unknow.server.maven.model.TypeModel; public class OpenApiBuilder { private static final Logger logger = LoggerFactory.getLogger(OpenApiBuilder.class); 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 f4e617c9..d8c2aa94 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 @@ -30,11 +30,11 @@ import com.github.javaparser.ast.CompilationUnit; import jakarta.jws.WebService; +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; -import unknow.server.maven.model.AnnotationModel; /** * @author unknow 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 17922dd8..4f8087b3 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,6 +52,8 @@ import jakarta.xml.bind.JAXBElement; import jakarta.xml.bind.JAXBException; import jakarta.xml.bind.Unmarshaller; +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; @@ -60,8 +62,6 @@ import unknow.server.maven.Utils; import unknow.server.maven.jaxws.binding.Operation; import unknow.server.maven.jaxws.binding.Service; -import unknow.server.maven.model.ClassModel; -import unknow.server.maven.model.TypeModel; /** * @author unknow diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/jaxws/binding/Parameter.java b/unknow-server-maven/src/main/java/unknow/server/maven/jaxws/binding/Parameter.java index 0268e50d..4cbf44c1 100644 --- a/unknow-server-maven/src/main/java/unknow/server/maven/jaxws/binding/Parameter.java +++ b/unknow-server-maven/src/main/java/unknow/server/maven/jaxws/binding/Parameter.java @@ -2,8 +2,8 @@ import javax.xml.namespace.QName; +import unknow.model.api.TypeModel; import unknow.server.maven.jaxb.model.XmlType; -import unknow.server.maven.model.TypeModel; public class Parameter { public final QName name; diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/jaxws/binding/Service.java b/unknow-server-maven/src/main/java/unknow/server/maven/jaxws/binding/Service.java index 850544bc..c1308341 100644 --- a/unknow-server-maven/src/main/java/unknow/server/maven/jaxws/binding/Service.java +++ b/unknow-server-maven/src/main/java/unknow/server/maven/jaxws/binding/Service.java @@ -19,14 +19,14 @@ import jakarta.jws.soap.SOAPBinding.ParameterStyle; import jakarta.jws.soap.SOAPBinding.Style; import jakarta.jws.soap.SOAPBinding.Use; +import unknow.model.api.AnnotationModel; +import unknow.model.api.ClassModel; +import unknow.model.api.MethodModel; +import unknow.model.api.ModelLoader; +import unknow.model.api.ParamModel; +import unknow.model.api.TypeModel; import unknow.server.jaxws.WebServiceUrl; import unknow.server.maven.jaxb.model.XmlLoader; -import unknow.server.maven.model.AnnotationModel; -import unknow.server.maven.model.ClassModel; -import unknow.server.maven.model.MethodModel; -import unknow.server.maven.model.ModelLoader; -import unknow.server.maven.model.ParamModel; -import unknow.server.maven.model.TypeModel; /** * @author unknow diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/model/AnnotationMemberModel.java b/unknow-server-maven/src/main/java/unknow/server/maven/model/AnnotationMemberModel.java deleted file mode 100644 index 8b804e6e..00000000 --- a/unknow-server-maven/src/main/java/unknow/server/maven/model/AnnotationMemberModel.java +++ /dev/null @@ -1,54 +0,0 @@ -package unknow.server.maven.model; - -import unknow.server.maven.model.util.WithName; - -public class AnnotationMemberModel implements WithName, AnnotationValue { - private final String name; - private final AnnotationValue value; - private final AnnotationValue defaultValue; - - public AnnotationMemberModel(String name, AnnotationValue value, AnnotationValue defaultValue) { - this.name = name; - this.value = value; - this.defaultValue = defaultValue; - } - - @Override - public String name() { - return name; - } - - @Override - public AnnotationValue[] asArray() { - return value.asArray(); - } - - @Override - public TypeModel asClass() { - return value.asClass(); - } - - @Override - public String asLiteral() { - return value.asLiteral(); - } - - @Override - public AnnotationModel asAnnotation() { - return value.asAnnotation(); - } - - public AnnotationValue defaultValue() { - return defaultValue; - } - - public boolean isSet() { - return !value.valueEquals(defaultValue); - } - - @Override - public boolean valueEquals(AnnotationValue a) { - return value.valueEquals(a); - } - -} diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/model/AnnotationModel.java b/unknow-server-maven/src/main/java/unknow/server/maven/model/AnnotationModel.java deleted file mode 100644 index e8ce1a8c..00000000 --- a/unknow-server-maven/src/main/java/unknow/server/maven/model/AnnotationModel.java +++ /dev/null @@ -1,35 +0,0 @@ -/** - * - */ -package unknow.server.maven.model; - -import java.util.Collection; -import java.util.Optional; - -import unknow.server.maven.model.util.WithName; - -/** - * @author unknow - */ -public interface AnnotationModel extends WithName { - - /** - * @return all annotation members - */ - Collection members(); - - /** - * @return the value member - */ - default Optional value() { - return member("value"); - } - - /** - * @param name the name to find - * @return the member with name - */ - default Optional member(String name) { - return members().stream().filter(m -> name.equals(m.name())).findAny(); - } -} diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/model/AnnotationValue.java b/unknow-server-maven/src/main/java/unknow/server/maven/model/AnnotationValue.java deleted file mode 100644 index f8857046..00000000 --- a/unknow-server-maven/src/main/java/unknow/server/maven/model/AnnotationValue.java +++ /dev/null @@ -1,265 +0,0 @@ -package unknow.server.maven.model; - -import java.util.Arrays; -import java.util.function.Function; - -/** - * @author unknow - */ -public interface AnnotationValue { - - /** @return value as an array */ - AnnotationValue[] asArray(); - - /** @return value as class */ - TypeModel asClass(); - - /** - * @return primitive, string and enum as string - */ - String asLiteral(); - - /** @return value as annotation */ - AnnotationModel asAnnotation(); - - /** @return value as boolean */ - default boolean asBoolean() { - return Boolean.parseBoolean(asLiteral()); - } - - /** @return value as int */ - default int asInt() { - return Integer.parseInt(asLiteral()); - } - - default > T asEnum(Class cl) { - return Enum.valueOf(cl, asLiteral()); - } - - boolean valueEquals(AnnotationValue a); - - /** - * @param array component - * @param t empty array for type - * @param f conversion function - * @return value as an array - */ - default T[] asArray(T[] t, Function f) { - AnnotationValue[] a = asArray(); - if (a == null) - return t; - t = Arrays.copyOf(t, a.length); - for (int i = 0; i < a.length; i++) - t[i] = f.apply(a[i]); - return t; - } - - /** empty string array */ - static final String[] STRING = {}; - /** empty boolean array */ - static final boolean[] BOOLEAN = {}; - /** empty int array */ - static final int[] INT = {}; - /** empty annotation array */ - static final AnnotationModel[] ANNOT = {}; - - /** @return value as an array of literal */ - default String[] asArrayLiteral() { - return asArray(STRING, a -> a.asLiteral()); - } - - /** @return value as an array of boolean */ - default boolean[] asArrayBoolean() { - AnnotationValue[] a = asArray(); - if (a == null) - return new boolean[0]; - boolean[] t = new boolean[a.length]; - for (int i = 0; i < a.length; i++) - t[i] = a[i].asBoolean(); - return t; - } - - /** @return value as an array of int */ - default int[] asArrayInt() { - AnnotationValue[] a = asArray(); - if (a == null) - return new int[0]; - int[] t = new int[a.length]; - for (int i = 0; i < a.length; i++) - t[i] = a[i].asInt(); - return t; - } - - /** @return value as an array of annotation */ - default AnnotationModel[] asArrayAnnotation() { - return asArray(ANNOT, a -> a.asAnnotation()); - } - - /** null value */ - public static final AnnotationValue NULL = new AnnotationValueNull() { - @Override - public boolean valueEquals(AnnotationValue a) { - return a == NULL; - } - }; - - /** - * @author unknow - */ - abstract static class AnnotationValueNull implements AnnotationValue { - protected AnnotationValueNull() { - } - - @Override - public AnnotationValue[] asArray() { - return this == NULL ? new AnnotationValue[0] : new AnnotationValue[] { this }; - } - - @Override - public TypeModel asClass() { - return null; - } - - @Override - public String asLiteral() { - return null; - } - - @Override - public AnnotationModel asAnnotation() { - return null; - } - } - - /** - * @author unknow - */ - public static class AnnotationValueArray extends AnnotationValueNull { - protected AnnotationValue[] a; - - /** - * create new AnnotationValueArray - * - * @param a the array value - */ - public AnnotationValueArray(AnnotationValue[] a) { - this.a = a; - } - - @Override - public AnnotationValue[] asArray() { - return a; - } - - @Override - public boolean valueEquals(AnnotationValue other) { - if (!(other instanceof AnnotationValueArray)) - return false; - AnnotationValueArray o = (AnnotationValueArray) other; - if (o.a.length != a.length) - return false; - for (int i = 0; i < a.length; i++) { - if (!a[i].valueEquals(o.a[i])) - return false; - } - return true; - } - } - - /** - * @author unknow - */ - public static class AnnotationValueClass extends AnnotationValueNull { - private final TypeModel c; - - /** - * create new AnnotationValueClass - * - * @param c the type value - */ - public AnnotationValueClass(TypeModel c) { - this.c = c; - } - - @Override - public TypeModel asClass() { - return c; - } - - @Override - public String asLiteral() { - return c.name(); - } - - @Override - public boolean valueEquals(AnnotationValue a) { - if (!(a instanceof AnnotationValueClass)) - return false; - return c.equals(((AnnotationValueClass) a).c); - } - } - - /** - * @author unknow - */ - public static class AnnotationValueLiteral extends AnnotationValueNull { - private final String s; - - /** - * create new AnnotationValueLiteral - * - * @param s the string value - */ - public AnnotationValueLiteral(String s) { - this.s = s; - } - - @Override - public String asLiteral() { - return s; - } - - @Override - public boolean valueEquals(AnnotationValue a) { - if (!(a instanceof AnnotationValueLiteral)) - return false; - return s.equals(((AnnotationValueLiteral) a).s); - } - } - - /** - * @author unknow - */ - public static class AnnotationValueAnnotation extends AnnotationValueNull { - private final AnnotationModel a; - - /** - * create new AnnotationValueAnnotation - * - * @param a the annotation value - */ - public AnnotationValueAnnotation(AnnotationModel a) { - this.a = a; - } - - @Override - public String asLiteral() { - return a.name(); - } - - @Override - public AnnotationModel asAnnotation() { - return a; - } - - @Override - public boolean valueEquals(AnnotationValue other) { - if (!(other instanceof AnnotationValueAnnotation)) - return false; - AnnotationModel o = ((AnnotationValueAnnotation) other).a; - if (!a.name().equals(o.name())) - return false; - return a.members().equals(o.members()); - } - } -} \ No newline at end of file diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/model/ArrayModel.java b/unknow-server-maven/src/main/java/unknow/server/maven/model/ArrayModel.java deleted file mode 100644 index 6a7e6013..00000000 --- a/unknow-server-maven/src/main/java/unknow/server/maven/model/ArrayModel.java +++ /dev/null @@ -1,53 +0,0 @@ -/** - * - */ -package unknow.server.maven.model; - -import java.util.Collection; -import java.util.Collections; - -import unknow.server.maven.model.util.WithType; - -/** - * @author unknow - */ -public class ArrayModel implements TypeModel, WithType { - private final TypeModel type; - - /** - * create new ArrayModel - * - * @param type the elem type - */ - public ArrayModel(TypeModel type) { - this.type = type; - } - - @Override - public String name() { - return "[" + type.name(); - } - - @Override - public Collection annotations() { - return Collections.emptyList(); - } - - /** - * @return component type - */ - @Override - public TypeModel type() { - return type; - } - - @Override - public boolean isAssignableFrom(TypeModel t) { - return t.isArray() && type.isAssignableFrom(t.asArray().type); - } - - @Override - public String toString() { - return name(); - } -} diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/model/BeanProperty.java b/unknow-server-maven/src/main/java/unknow/server/maven/model/BeanProperty.java deleted file mode 100644 index 7af7eef4..00000000 --- a/unknow-server-maven/src/main/java/unknow/server/maven/model/BeanProperty.java +++ /dev/null @@ -1,156 +0,0 @@ -package unknow.server.maven.model; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.HashSet; -import java.util.List; -import java.util.Optional; -import java.util.Set; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import unknow.server.maven.model.util.WithAnnotation; -import unknow.server.maven.model.util.WithName; -import unknow.server.maven.model.util.WithType; - -public class BeanProperty implements WithName, WithAnnotation, WithType { - private static final Logger logger = LoggerFactory.getLogger(BeanProperty.class); - - private final String name; - private final FieldModel field; - private final MethodModel getter; - private final MethodModel setter; - - public BeanProperty(String name, FieldModel field, MethodModel getter, MethodModel setter) { - this.name = name; - this.field = field; - this.getter = getter; - this.setter = setter; - } - - @Override - public String name() { - return name; - } - - public FieldModel field() { - return field; - } - - public MethodModel getter() { - return getter; - } - - public MethodModel setter() { - return setter; - } - - @Override - public TypeModel type() { - return getter.type(); - } - - @Override - public Optional annotation(Class clazz) { - return annotation(clazz.getName()); - } - - @Override - public Optional annotation(String name) { - List list = annotations(name); - if (list.isEmpty()) - return Optional.empty(); - if (list.size() > 1) - throw new IllegalArgumentException("Duplicate annotation " + name + " for property " + this); - return Optional.of(list.get(0)); - } - - /** - * get all annotation on the field or the getter or the setter (the first one that as annotation) - * - * @return annotations of the property - */ - @Override - public Collection annotations() { - Collection annotations = Collections.emptyList(); - if (field != null) - annotations = field.annotations(); - if (annotations.isEmpty()) - annotations = getter.annotations(); - if (annotations.isEmpty()) - annotations = setter.annotations(); - return annotations; - } - - /** - * get annotation on field, getter and setter - * - * @param name field name - * @return the annotations - */ - public List annotations(String name) { - List list = new ArrayList<>(3); - if (field != null) - field.annotation(name).ifPresent(list::add); - getter.annotation(name).ifPresent(list::add); - setter.annotation(name).ifPresent(list::add); - return list; - } - - public static Collection properties(ClassModel clazz) { - Set names = new HashSet<>(); - - for (MethodModel m : clazz.methods()) { - if (m.isAbstract() || m.isStatic()) - continue; - String n = m.name(); - if (n.startsWith("is") && m.parameters().isEmpty()) - names.add(Character.toLowerCase(n.charAt(2)) + n.substring(3)); - else if (n.startsWith("get") && m.parameters().isEmpty() || n.startsWith("set") && m.parameters().size() == 1) - names.add(Character.toLowerCase(n.charAt(3)) + n.substring(4)); - } - clazz.fields().stream().filter(f -> !f.isStatic()).forEach(f -> f.name()); - - List list = new ArrayList<>(); - for (String n : names) { - BeanProperty p = property(clazz, n); - if (p != null) - list.add(p); - } - return list; - } - - @Override - public String toString() { - return getter.parent().name() + "." + name; - } - - public static BeanProperty property(ClassModel clazz, String name) { - String n = Character.toUpperCase(name.charAt(0)) + name.substring(1); - MethodModel getter = clazz.method("get" + n).orElse(null); - if (getter == null) - getter = clazz.method(name).orElse(null); - if (getter == null) - getter = clazz.method("is" + n).filter(v -> v.type().isAssignableFrom(PrimitiveModel.BOOLEAN)).orElse(null); - if (getter == null) { - logger.info("Getter not found for property {} in {}", name, clazz); - return null; - } - - MethodModel setter = clazz.method("set" + n, getter.type()).orElse(null); - if (setter == null) - setter = clazz.method(name, getter.type()).orElse(null); - if (setter == null) { - logger.info("Setter not found matching {}", getter); - return null; - } - FieldModel field = clazz.field(name); - if (field != null && !getter.type().isAssignableFrom(field.type())) { - logger.warn("Field {} don't match {}", field, getter); - return null; - } - return new BeanProperty(name, field, getter, setter); - } -} diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/model/ClassModel.java b/unknow-server-maven/src/main/java/unknow/server/maven/model/ClassModel.java deleted file mode 100644 index 58b6d9a2..00000000 --- a/unknow-server-maven/src/main/java/unknow/server/maven/model/ClassModel.java +++ /dev/null @@ -1,246 +0,0 @@ -/** - * - */ -package unknow.server.maven.model; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.Optional; -import java.util.Set; -import java.util.function.Predicate; -import java.util.stream.Collectors; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import unknow.server.maven.model.util.AncestrorIterable; -import unknow.server.maven.model.util.WithMod; - -/** - * @author unknow - */ -public interface ClassModel extends TypeModel, WithMod { - static final Logger logger = LoggerFactory.getLogger(ClassModel.class); - - /** - * @return super type - */ - ClassModel superType(); - - /** - * @return implemented interface - */ - List interfaces(); - - /** - * @return the declared constructors - */ - Collection constructors(); - - /** - * @param params the constructor params - * @return a constructors - */ - default Optional constructors(TypeModel... params) { - return constructors().stream().filter(m -> { - if (m.parameters().size() != params.length) - return false; - int i = 0; - for (ParamModel p : m.parameters()) { - if (!p.type().equals(params[i++])) - return false; - } - return true; - }).findFirst(); - } - - /** - * @return all the declared field - */ - Collection fields(); - - /** - * @param name field to get - * @return the declared field or null if not found - */ - default FieldModel field(String name) { - for (FieldModel f : fields()) { - if (name.equals(f.name())) - return f; - } - return null; - } - - /** - * @return declared methods - */ - Collection methods(); - - /** - * @param name the method name - * @param params the method params - * @return the declared method - */ - default Optional method(String name, TypeModel... params) { - return methods().stream().filter(m -> { - if (!name.equals(m.name())) - return false; - if (m.parameters().size() != params.length) - return false; - int i = 0; - for (ParamModel p : m.parameters()) { - if (!p.type().equals(params[i++])) - return false; - } - return true; - }).findFirst(); - } - - /** - * @param name the method name - * @param params the method params - * @return the method - */ - default Optional findMethod(String name, TypeModel... params) { - - Predicate f = m -> { - if (!name.equals(m.name())) - return false; - if (m.parameters().size() != params.length) - return false; - int i = 0; - for (ParamModel p : m.parameters()) { - if (!p.type().equals(params[i++])) - return false; - } - return true; - }; - ClassModel c = this; - do { - Optional o = methods().stream().filter(f).findFirst(); - if (o.isPresent()) - return o; - c = c.superType(); - } while (c != null); - return Optional.empty(); - } - - /** - * @return generic param - */ - List parameters(); - - /** - * @param i index of the parameter to get - * @return get the i'th parameter - */ - default TypeParamModel parameter(int i) { - return parameters().get(i); - } - - /** - * @see unknow.server.maven.model.util.AncestrorIterator - * @return ancestors - */ - default Iterable ancestor() { - return new AncestrorIterable(this); - } - - /** - * @param t ancestor to get - * @return the ancestor - */ - default ClassModel ancestor(TypeModel t) { - if (!t.isClass()) - return null; - return ancestor(t.name()); - } - - /** - * @param cl ancestor to get - * @return the ancestor - */ - default ClassModel ancestor(String cl) { - for (ClassModel p : ancestor()) { - if (cl.equals(p.name())) - return p; - } - return null; - } - - @Override - default boolean isAssignableFrom(TypeModel t) { - if (!t.isClass()) - return false; - - for (ClassModel p : t.asClass().ancestor()) { - if (p.name().equals(name())) - return true; - } - return false; - } - - @Override - default boolean isAssignableTo(String cl) { - for (ClassModel p : ancestor()) { - if (cl.equals(p.name())) - return true; - } - return false; - } - - /** - * @return the full name with the parameters - */ - @Override - String toString(); - - /** - * @return true this class is a boxed type for a primitive (Integer, Character, Double, ect..) - */ - default boolean isBoxedPrimitive() { - return unboxed() != null; - } - - /** - * @return the unboxed type or null if it's not a boxed type (Integer, Character, Double, ect..) - */ - default PrimitiveModel unboxed() { - for (PrimitiveModel t : PrimitiveModel.PRIMITIVES) { - if (this.equals(t.boxed())) - return t; - } - return null; - } - - /** - * @return the list of BeanProperty on this class - */ - default Collection properties() { - Set names = methods().stream().map(m -> m.name()).filter(m -> m.startsWith("set") || m.startsWith("get")) - .map(m -> Character.toLowerCase(m.charAt(3)) + m.substring(4)).collect(Collectors.toSet()); - for (FieldModel f : fields()) { - if (!f.isStatic()) - names.add(f.name()); - } - - List list = new ArrayList<>(); - for (String n : names) { - BeanProperty p = property(n); - if (p != null) - list.add(p); - } - return list; - } - - /** - * get a BeanProperty on this class - * - * @param name property name - * @return the BeanProperty or null if not found - */ - default BeanProperty property(String name) { - return BeanProperty.property(this, name); - } -} \ No newline at end of file diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/model/CompositeModelLoader.java b/unknow-server-maven/src/main/java/unknow/server/maven/model/CompositeModelLoader.java deleted file mode 100644 index 05ec6697..00000000 --- a/unknow-server-maven/src/main/java/unknow/server/maven/model/CompositeModelLoader.java +++ /dev/null @@ -1,9 +0,0 @@ -/** - * - */ -package unknow.server.maven.model; - -/** - * @author unknow - */ - diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/model/ConstructorModel.java b/unknow-server-maven/src/main/java/unknow/server/maven/model/ConstructorModel.java deleted file mode 100644 index 1faceee5..00000000 --- a/unknow-server-maven/src/main/java/unknow/server/maven/model/ConstructorModel.java +++ /dev/null @@ -1,42 +0,0 @@ -/** - * - */ -package unknow.server.maven.model; - -import java.util.List; - -import unknow.server.maven.model.util.WithAnnotation; -import unknow.server.maven.model.util.WithMod; -import unknow.server.maven.model.util.WithParent; - -/** - * @author unknow - */ -public interface ConstructorModel extends WithAnnotation, WithMod, WithParent { - - /** - * @return generic param - */ - List> parameters(); - - /** - * @param i index of the parameter to get - * @return get the i'th parameter - */ - default ParamModel parameter(int i) { - return parameters().get(i); - } - - /** - * @return method signature name(parameters type)return type - */ - default String signature() { - StringBuilder sb = new StringBuilder("").append('('); - if (!parameters().isEmpty()) { - for (ParamModel t : parameters()) - sb.append(t.type().name()).append(','); - sb.setLength(sb.length() - 1); - } - return sb.append(')').toString(); - } -} diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/model/EnumModel.java b/unknow-server-maven/src/main/java/unknow/server/maven/model/EnumModel.java deleted file mode 100644 index 812c77c3..00000000 --- a/unknow-server-maven/src/main/java/unknow/server/maven/model/EnumModel.java +++ /dev/null @@ -1,45 +0,0 @@ -/** - * - */ -package unknow.server.maven.model; - -import java.util.List; -import java.util.Optional; - -import unknow.server.maven.model.util.WithAnnotation; - -/** - * @author unknow - */ -public interface EnumModel extends ClassModel { - - @Override - default boolean isEnum() { - return true; - } - - /** - * @return declared enum entries - */ - List entries(); - - /** - * @param name name to find - * @return enum constant with name - */ - default Optional entry(String name) { - return entries().stream().filter(e -> e.name().equals(name)).findAny(); - } - - /** - * an enum constant - * - * @author unknow - */ - public interface EnumConstant extends WithAnnotation { - /** - * @return enum constant name - */ - String name(); - } -} diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/model/FieldModel.java b/unknow-server-maven/src/main/java/unknow/server/maven/model/FieldModel.java deleted file mode 100644 index f8cfe0d1..00000000 --- a/unknow-server-maven/src/main/java/unknow/server/maven/model/FieldModel.java +++ /dev/null @@ -1,16 +0,0 @@ -/** - * - */ -package unknow.server.maven.model; - -import unknow.server.maven.model.util.WithAnnotation; -import unknow.server.maven.model.util.WithMod; -import unknow.server.maven.model.util.WithName; -import unknow.server.maven.model.util.WithParent; -import unknow.server.maven.model.util.WithType; - -/** - * @author unknow - */ -public interface FieldModel extends WithAnnotation, WithType, WithMod, WithName, WithParent { //ok -} diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/model/MethodModel.java b/unknow-server-maven/src/main/java/unknow/server/maven/model/MethodModel.java deleted file mode 100644 index 4be842ee..00000000 --- a/unknow-server-maven/src/main/java/unknow/server/maven/model/MethodModel.java +++ /dev/null @@ -1,50 +0,0 @@ -/** - * - */ -package unknow.server.maven.model; - -import java.util.List; - -import unknow.server.maven.model.util.WithAnnotation; -import unknow.server.maven.model.util.WithMod; -import unknow.server.maven.model.util.WithName; -import unknow.server.maven.model.util.WithParent; -import unknow.server.maven.model.util.WithType; - -/** - * @author unknow - */ -public interface MethodModel extends WithAnnotation, WithMod, WithName, WithType, WithParent { - - /** - * @return generic param - */ - List> parameters(); - - /** - * @return annotation default value - */ - AnnotationValue defaultValue(); - - /** - * @param i index of the parameter to get - * @return get the i'th parameter - */ - default ParamModel parameter(int i) { - return parameters().get(i); - } - - /** - * @return method signature name(parameters type)return type - */ - default String signature() { - StringBuilder sb = new StringBuilder(name()).append('('); - if (!parameters().isEmpty()) { - for (ParamModel t : parameters()) - sb.append(t.type().name()).append(','); - sb.setLength(sb.length() - 1); - } - sb.append(')').append(type().name()); - return sb.toString(); - } -} diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/model/ModelLoader.java b/unknow-server-maven/src/main/java/unknow/server/maven/model/ModelLoader.java deleted file mode 100644 index 37a09fae..00000000 --- a/unknow-server-maven/src/main/java/unknow/server/maven/model/ModelLoader.java +++ /dev/null @@ -1,155 +0,0 @@ -/** - * - */ -package unknow.server.maven.model; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -/** - * @author unknow - */ -public abstract class ModelLoader { - private static final Map BUILTIN = new HashMap<>(); - private static final TypeModel[] EMPTY = {}; - - protected static final Pattern CLAZZ = Pattern.compile("(.+?)(?:<(.*?)>)?"); - protected static final Pattern CLAZZ_LIST = Pattern.compile("(.+?(?:<.*?>)?)(?:,|$)"); - - static { - for (TypeModel t : PrimitiveModel.PRIMITIVES) { - BUILTIN.put(t.name(), t); - BUILTIN.put(t.toString(), t); - } - } - - private final Map cache = new HashMap<>(); - - protected ModelLoader() { - } - - /** - * @param loaders the loaders - * @return a model loader - */ - public static ModelLoader from(ModelLoader... loaders) { - if (loaders.length == 1) - return loaders[1]; - return new CompositeLoader(loaders); - } - - /** - * @param cl the class to load - * @return the loaded type - */ - public TypeModel get(String cl) { - return get(cl, Collections.emptyList()); - } - - /** - * @param cl class - * @param parameters actual type params - * @return the loaded type - */ - public TypeModel get(String cl, List parameters) { - String key = cl + "#" + parameters; - TypeModel t = parameters.isEmpty() ? BUILTIN.get(cl) : null; - if (t != null) - return t; - t = cache.get(key); - if (t != null) - return t; - - t = create(cl, parameters); - if (t == null) - throw new IllegalArgumentException(this.getClass().getName() + ": Type not found " + cl); - cache.put(key, t); - return t; - } - - private final TypeModel create(String cl, List parameters) { - if (cl.endsWith("[]")) - return new ArrayModel(get(cl.substring(0, cl.length() - 2), parameters)); - if (cl.equals("?")) - return WildcardModel.EMPTY; - if (cl.startsWith("? extends ")) - return new WildcardModel(get(cl.substring(10), parameters), true); - if (cl.startsWith("? super ")) - return new WildcardModel(get(cl.substring(8), parameters), false); - - List parse = parse(cl); - Map map = new HashMap<>(); - for (TypeParamModel t : parameters) - map.put(t.name(), t.type()); - - TypeModel[] params = EMPTY; - if (parse.size() > 1) { - cl = parse.get(0); - params = new TypeModel[parse.size() - 1]; - for (int i = 1; i < parse.size(); i++) { - String s = parse.get(i); - params[i - 1] = map.containsKey(s) ? map.get(s) : get(s, parameters); - } - } - TypeModel t = map.get(cl); - if (t != null) - cl = t.name(); - - return load(this, cl, params); - } - - /** - * @param loader the loader - * @param cl the fqn class to load - * @param params the concrete generic param - */ - protected abstract TypeModel load(ModelLoader loader, String cl, TypeModel[] params); - - /** - * split class into the class name and it's param - * - * @param cl the class - * @return a list with the class and it's param {@code (String => [String], List => [List, String], Map> => [Map, String, List]}) - */ - public static List parse(String cl) { - Matcher m = CLAZZ.matcher(cl); - if (!m.matches()) - throw new IllegalArgumentException("malformed class " + cl); - if (m.group(2) == null) - return Arrays.asList(m.group(1).trim()); - if (m.group(2).trim().isEmpty()) - return Arrays.asList(m.group(1).trim(), ""); - - List list = new ArrayList<>(); - list.add(m.group(1)); - m = CLAZZ_LIST.matcher(m.group(2).trim()); - while (m.find()) - list.add(m.group(1).trim()); - return list; - } - - private static class CompositeLoader extends ModelLoader { - - private final ModelLoader[] loaders; - - public CompositeLoader(ModelLoader... loaders) { - this.loaders = loaders; - } - - @Override - protected TypeModel load(ModelLoader loader, String cl, TypeModel[] params) { - for (int i = 0; i < loaders.length; i++) { - TypeModel t = loaders[i].load(loader, cl, params); - if (t != null) - return t; - } - return null; - } - } -} diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/model/PackageModel.java b/unknow-server-maven/src/main/java/unknow/server/maven/model/PackageModel.java deleted file mode 100644 index 927d2382..00000000 --- a/unknow-server-maven/src/main/java/unknow/server/maven/model/PackageModel.java +++ /dev/null @@ -1,14 +0,0 @@ -/** - * - */ -package unknow.server.maven.model; - -import unknow.server.maven.model.util.WithAnnotation; - -/** - * @author unknow - */ -public interface PackageModel extends WithAnnotation { - /** @return the package name */ - String name(); -} \ No newline at end of file diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/model/ParamModel.java b/unknow-server-maven/src/main/java/unknow/server/maven/model/ParamModel.java deleted file mode 100644 index 6bb0bede..00000000 --- a/unknow-server-maven/src/main/java/unknow/server/maven/model/ParamModel.java +++ /dev/null @@ -1,20 +0,0 @@ -/** - * - */ -package unknow.server.maven.model; - -import unknow.server.maven.model.util.WithAnnotation; -import unknow.server.maven.model.util.WithName; -import unknow.server.maven.model.util.WithParent; -import unknow.server.maven.model.util.WithType; - -/** - * @author unknow - * @param owner model - */ -public interface ParamModel> extends WithAnnotation, WithType, WithName, WithParent { - /** - * @return index of the param - */ - int index(); -} diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/model/PrimitiveModel.java b/unknow-server-maven/src/main/java/unknow/server/maven/model/PrimitiveModel.java deleted file mode 100644 index 0f8afc61..00000000 --- a/unknow-server-maven/src/main/java/unknow/server/maven/model/PrimitiveModel.java +++ /dev/null @@ -1,90 +0,0 @@ -/** - * - */ -package unknow.server.maven.model; - -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.List; - -import unknow.server.maven.model.jvm.JvmModelLoader; - -/** - * @author unknow - */ -public class PrimitiveModel implements TypeModel { - /** void type */ - public static final PrimitiveModel VOID = new PrimitiveModel("void", "Z", Void.class.getName()) { - @Override - public boolean isVoid() { - return true; - } - }; - /** boolean type */ - public static final PrimitiveModel BOOLEAN = new PrimitiveModel("boolean", "Z", Boolean.class.getName()); - /** byte type */ - public static final PrimitiveModel BYTE = new PrimitiveModel("byte", "B", Byte.class.getName()); - /** char type */ - public static final PrimitiveModel CHAR = new PrimitiveModel("char", "C", Character.class.getName()); - /** short type */ - public static final PrimitiveModel SHORT = new PrimitiveModel("short", "S", Short.class.getName()); - /** int type */ - public static final PrimitiveModel INT = new PrimitiveModel("int", "I", Integer.class.getName()); - /** long type */ - public static final PrimitiveModel LONG = new PrimitiveModel("long", "L", Long.class.getName()); - /** float type */ - public static final PrimitiveModel FLOAT = new PrimitiveModel("float", "F", Float.class.getName()); - /** double type */ - public static final PrimitiveModel DOUBLE = new PrimitiveModel("double", "D", Double.class.getName()); - - /** all primitives types */ - public static final List PRIMITIVES = Arrays.asList(VOID, BOOLEAN, BYTE, CHAR, SHORT, INT, LONG, FLOAT, DOUBLE); - - private final String name; - private final String binary; - private final String boxed; - - private PrimitiveModel(String name, String binary, String boxed) { - this.name = name; - this.binary = binary; - this.boxed = boxed; - } - - @Override - public String name() { - return binary; - } - - @Override - public String simpleName() { - return name; - } - - @Override - public Collection annotations() { - return Collections.emptyList(); - } - - @Override - public boolean isAssignableFrom(TypeModel t) { - return this == t || boxed.equals(t.name()); - } - - @Override - public boolean isAssignableTo(String cl) { - return name().equals(cl) || boxed.equals(cl); - } - - /** - * @return the boxed type - */ - public TypeModel boxed() { - return JvmModelLoader.GLOBAL.get(boxed); - } - - @Override - public String toString() { - return name; - } -} diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/model/TypeModel.java b/unknow-server-maven/src/main/java/unknow/server/maven/model/TypeModel.java deleted file mode 100644 index 8639829b..00000000 --- a/unknow-server-maven/src/main/java/unknow/server/maven/model/TypeModel.java +++ /dev/null @@ -1,197 +0,0 @@ -/** - * - */ -package unknow.server.maven.model; - -import java.util.function.Consumer; - -import unknow.server.maven.model.util.WithAnnotation; -import unknow.server.maven.model.util.WithName; -import unknow.server.maven.model.util.WithParent; - -/** - * @author unknow - */ -public interface TypeModel extends WithAnnotation, WithName, WithParent { - /** - * @return type fully qualified name (java.util.List) - */ - @Override - String name(); - - /** @return return type fully qualified name without parameter (java.util.List<java.lang.String>) */ - default String genericName() { - return name(); - } - - /** - * @return simpleName - */ - default String simpleName() { - String name = name(); - int i = Math.max(name.lastIndexOf("."), name.lastIndexOf("$")); - return i < 0 ? name : name.substring(i + 1); - } - - @Override - default PackageModel parent() { - return null; - } - - default String packageName() { - return parent() == null ? "" : parent().name(); - } - - /** - * @return true if it's a primitive type - */ - default boolean isPrimitive() { - return this instanceof PrimitiveModel; - } - - /** - * @return this as a primive - */ - default PrimitiveModel asPrimitive() { - if (this instanceof PrimitiveModel) - return (PrimitiveModel) this; - throw new IllegalStateException(name() + " isn't a primitive"); - } - - default void ifPrimitive(Consumer c) { - if (this instanceof PrimitiveModel) - c.accept((PrimitiveModel) this); - } - - /** - * @return true if it's a class type - */ - default boolean isClass() { - return this instanceof ClassModel; - } - - /** - * @return this as a class - */ - default ClassModel asClass() { - if (this instanceof ClassModel) - return (ClassModel) this; - throw new IllegalStateException(name() + " isn't a class"); - } - - default void ifClass(Consumer c) { - if (this instanceof ClassModel) - c.accept((ClassModel) this); - } - - /** - * Determines if the type represented by this {@code TypeModel} object is either the same as, or is a superclass or superinterface of, the type represented by the - * specified {@code TypeModel} parameter - * - * @param t the clazz - * @return true if clazz this = t works - */ - default boolean isAssignableFrom(TypeModel t) { - return t.name().equals(name()); - } - - /** - * Determines if the type represented by the specified parameter is either the same as, or is a superclass or superinterface of, the type represented by this - * {@code TypeModel} object - * - * @param cl the clazz - * @return true if cl = this works - */ - default boolean isAssignableTo(Class cl) { - return isAssignableTo(cl.getName()); - } - - /** - * Determines if the type represented by the specified parameter is either the same as, or is a superclass or superinterface of, the type represented by this - * {@code TypeModel} object - * - * @param cl the clazz - * @return true if cl = this works - */ - default boolean isAssignableTo(String cl) { - return cl.equals(name()); - } - - /** - * @return true if it's an array - */ - default boolean isArray() { - return this instanceof ArrayModel; - } - - default void ifArray(Consumer c) { - if (this instanceof ArrayModel) - c.accept((ArrayModel) this); - } - - /** - * @return this type as an array or null - */ - default ArrayModel asArray() { - if (this instanceof ArrayModel) - return (ArrayModel) this; - throw new IllegalStateException(name() + " isn't an array"); - } - - default void ifEnum(Consumer c) { - if (this instanceof EnumModel) - c.accept((EnumModel) this); - } - - /** - * @return true if it's an enum - */ - default boolean isEnum() { - return this instanceof EnumModel; - } - - /** - * @return this type as an enum or null - */ - default EnumModel asEnum() { - if (this instanceof EnumModel) - return (EnumModel) this; - throw new IllegalStateException(name() + " isn't an enum"); - } - - /** - * @return true if it's a wildcard - */ - default boolean isWildCard() { - return this instanceof WildcardModel; - } - - /** - * @return this as a wildcard - */ - default WildcardModel asWildcard() { - if (this instanceof WildcardModel) - return (WildcardModel) this; - throw new IllegalStateException(name() + " isn't a wildcard"); - } - - default void ifWildcard(Consumer c) { - if (this instanceof WildcardModel) - c.accept((WildcardModel) this); - } - - /** - * @return true if it's void - */ - default boolean isVoid() { - return false; - } - - /** - * @param t the type - * @return true if type are equals - */ - default boolean equals(TypeModel t) { - return t.toString().equals(toString()); - } -} \ No newline at end of file diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/model/TypeParamModel.java b/unknow-server-maven/src/main/java/unknow/server/maven/model/TypeParamModel.java deleted file mode 100644 index 4162862f..00000000 --- a/unknow-server-maven/src/main/java/unknow/server/maven/model/TypeParamModel.java +++ /dev/null @@ -1,21 +0,0 @@ -/** - * - */ -package unknow.server.maven.model; - -import java.util.List; - -import unknow.server.maven.model.util.WithAnnotation; -import unknow.server.maven.model.util.WithName; -import unknow.server.maven.model.util.WithParent; -import unknow.server.maven.model.util.WithType; - -/** - * @author unknow - */ -public interface TypeParamModel extends WithAnnotation, WithType, WithName, WithParent { - /** - * @return parameter bounds - */ - List bounds(); -} diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/model/WildcardModel.java b/unknow-server-maven/src/main/java/unknow/server/maven/model/WildcardModel.java deleted file mode 100644 index 06bd727b..00000000 --- a/unknow-server-maven/src/main/java/unknow/server/maven/model/WildcardModel.java +++ /dev/null @@ -1,60 +0,0 @@ -/** - * - */ -package unknow.server.maven.model; - -import java.util.Collection; -import java.util.Collections; - -/** - * @author unknow - */ -public class WildcardModel implements TypeModel { - /** empty wildcard */ - public static final WildcardModel EMPTY = new WildcardModel(null, false); - - private final TypeModel bound; - private final boolean upper; - - /** - * create new WildcardModel - * - * @param bound the bound type - * @param upper if extends or super - */ - public WildcardModel(TypeModel bound, boolean upper) { - this.bound = bound; - this.upper = upper; - } - - @Override - public Collection annotations() { - return Collections.emptyList(); - } - - @Override - public String name() { - return "?"; - } - - /** - * @return the bound type (after ?) - */ - public TypeModel bound() { - return bound; - } - - /** - * @return if true extends else super - */ - public boolean isUpperBound() { - return upper; - } - - @Override - public String toString() { - if (bound == null) - return "?"; - return "?" + (upper ? " extends " : " super ") + bound; - } -} diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/model/ast/AstAnnotation.java b/unknow-server-maven/src/main/java/unknow/server/maven/model/ast/AstAnnotation.java deleted file mode 100644 index 1d86b54b..00000000 --- a/unknow-server-maven/src/main/java/unknow/server/maven/model/ast/AstAnnotation.java +++ /dev/null @@ -1,160 +0,0 @@ -/** - * - */ -package unknow.server.maven.model.ast; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -import com.github.javaparser.ast.NodeList; -import com.github.javaparser.ast.expr.AnnotationExpr; -import com.github.javaparser.ast.expr.Expression; -import com.github.javaparser.ast.expr.MemberValuePair; -import com.github.javaparser.resolution.declarations.ResolvedFieldDeclaration; -import com.github.javaparser.resolution.declarations.ResolvedValueDeclaration; - -import unknow.server.maven.model.AnnotationMemberModel; -import unknow.server.maven.model.AnnotationModel; -import unknow.server.maven.model.AnnotationValue; -import unknow.server.maven.model.AnnotationValue.AnnotationValueAnnotation; -import unknow.server.maven.model.AnnotationValue.AnnotationValueArray; -import unknow.server.maven.model.AnnotationValue.AnnotationValueClass; -import unknow.server.maven.model.AnnotationValue.AnnotationValueLiteral; -import unknow.server.maven.model.ClassModel; -import unknow.server.maven.model.FieldModel; -import unknow.server.maven.model.MethodModel; -import unknow.server.maven.model.ModelLoader; -import unknow.server.maven.model.TypeModel; -import unknow.server.maven.model.jvm.JvmAnnotation; -import unknow.server.maven.model.jvm.JvmField; - -/** - * @author unknow - */ -public class AstAnnotation implements AnnotationModel { - private final String name; - private final AnnotationExpr a; - private final Collection members; - - /** - * create new AstAnnotation - * - * @param loader the loader - * @param a the annotation - */ - public AstAnnotation(ModelLoader loader, AnnotationExpr a) { - this.name = a.resolve().getQualifiedName(); - this.a = a; - - Map found = new HashMap<>(); - - ClassModel cl = loader.get(name).asClass(); - - if (a.isSingleMemberAnnotationExpr()) - found.put("value", new AnnotationMemberModel("value", value(loader, a.asSingleMemberAnnotationExpr().getMemberValue()), - cl.method("value").map(v -> v.defaultValue()).orElse(AnnotationValue.NULL))); - else if (a.isNormalAnnotationExpr()) { - for (MemberValuePair m : a.asNormalAnnotationExpr().getPairs()) { - found.put(m.getNameAsString(), new AnnotationMemberModel(m.getNameAsString(), value(loader, m.getValue()), - cl.method("value").map(v -> v.defaultValue()).orElse(AnnotationValue.NULL))); - } - } - - for (MethodModel m : cl.methods()) { - if (found.containsKey(m.name())) - continue; - found.put(m.name(), new AnnotationMemberModel(m.name(), m.defaultValue(), m.defaultValue())); - } - - this.members = new ArrayList<>(found.values()); - } - - @Override - public String name() { - return name; - } - - @Override - public String toString() { - return a.toString(); - } - - @Override - public Collection members() { - return members; - } - - /** - * get annotation value - * - * @param loader the loader - * @param v the value - * @return expression as AnnotationValue - */ - public static AnnotationValue value(ModelLoader loader, Expression v) { - if (v.isNullLiteralExpr()) - return AnnotationValue.NULL; - if (v.isStringLiteralExpr()) - return new AnnotationValueLiteral(v.asStringLiteralExpr().asString()); - if (v.isBooleanLiteralExpr()) - return new AnnotationValueLiteral(Boolean.toString(v.asBooleanLiteralExpr().getValue())); - if (v.isIntegerLiteralExpr()) - return new AnnotationValueLiteral(v.asIntegerLiteralExpr().getValue()); - if (v.isLongLiteralExpr()) - return new AnnotationValueLiteral(v.asLongLiteralExpr().getValue()); - if (v.isCharLiteralExpr()) - return new AnnotationValueLiteral(v.asCharLiteralExpr().getValue()); - if (v.isDoubleLiteralExpr()) - return new AnnotationValueLiteral(v.asDoubleLiteralExpr().getValue()); - - if (v.isFieldAccessExpr()) - return value(loader, v.asFieldAccessExpr().resolve()); - if (v.isNameExpr()) - return value(loader, v.asNameExpr().resolve()); - if (v.isClassExpr()) - return new AnnotationValueClass(loader.get(v.asClassExpr().getType().resolve().describe())); - if (v.isArrayInitializerExpr()) { - NodeList values = v.asArrayInitializerExpr().getValues(); - AnnotationValue[] a = new AnnotationValue[values.size()]; - int i = 0; - for (Expression e : values) - a[i++] = value(loader, e); - return new AnnotationValueArray(a); - } - if (v.isAnnotationExpr()) - return new AnnotationValueAnnotation(new AstAnnotation(loader, v.asAnnotationExpr())); - - throw new IllegalArgumentException("unsuported value: " + v.getClass()); - } - - private static AnnotationValue value(ModelLoader loader, ResolvedValueDeclaration r) { - if (r.isEnumConstant()) - return new AnnotationValueLiteral(r.asEnumConstant().getName()); - if (r.isField()) { - ResolvedFieldDeclaration f = r.asField(); - TypeModel t = loader.get(f.declaringType().getQualifiedName()); - if (t.isEnum()) - return new AnnotationValueLiteral(f.getName()); - if (f.isField()) { - FieldModel field = t.asClass().field(f.getName()); - if (field == null) - throw new IllegalArgumentException("Can't find field '" + f.getName() + "' in " + t); - if (!field.isStatic()) - throw new IllegalArgumentException("Field " + field + " sould be static"); - if (field instanceof JvmField) { - try { - return JvmAnnotation.getValue(loader, ((JvmField) field).field().get(null)); - } catch (IllegalArgumentException | IllegalAccessException e) { - throw new IllegalArgumentException(e); - } - } - if (field instanceof AstField) - return value(loader, - ((AstField) field).object().getVariable(0).getInitializer().orElseThrow(() -> new IllegalArgumentException("Can't find valud for " + field))); - } - } - throw new IllegalArgumentException("Annotation value '" + r + "' not supported"); - } -} diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/model/ast/AstBaseClass.java b/unknow-server-maven/src/main/java/unknow/server/maven/model/ast/AstBaseClass.java deleted file mode 100644 index d0247d50..00000000 --- a/unknow-server-maven/src/main/java/unknow/server/maven/model/ast/AstBaseClass.java +++ /dev/null @@ -1,128 +0,0 @@ -/** - * - */ -package unknow.server.maven.model.ast; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Optional; -import java.util.stream.Collectors; - -import com.github.javaparser.ast.CompilationUnit; -import com.github.javaparser.ast.Node; -import com.github.javaparser.ast.PackageDeclaration; -import com.github.javaparser.ast.body.ClassOrInterfaceDeclaration; -import com.github.javaparser.ast.body.EnumDeclaration; -import com.github.javaparser.ast.body.FieldDeclaration; -import com.github.javaparser.ast.body.TypeDeclaration; -import com.github.javaparser.ast.nodeTypes.NodeWithSimpleName; - -import unknow.server.maven.model.AnnotationModel; -import unknow.server.maven.model.ClassModel; -import unknow.server.maven.model.ConstructorModel; -import unknow.server.maven.model.FieldModel; -import unknow.server.maven.model.MethodModel; -import unknow.server.maven.model.ModelLoader; -import unknow.server.maven.model.PackageModel; -import unknow.server.maven.model.TypeParamModel; - -/** - * @author unknow - * @param class / enum - */ -public abstract class AstBaseClass> implements ClassModel, AstMod { - protected final ModelLoader loader; - protected final PackageModel p; - protected final T c; - private String name; - private Collection annotations; - private Collection constructors; - private Collection fields; - private Collection methods; - - protected AstBaseClass(ModelLoader loader, PackageDeclaration p, T c) { - this.loader = loader; - this.p = p == null ? null : new AstPackage(loader, p); - this.c = c; - } - - @Override - public PackageModel parent() { - return p; - } - - @Override - public String name() { - if (name == null) - name = getBinaryName(c); - return name; - } - - protected static String getBinaryName(TypeDeclaration c) { - StringBuilder name = new StringBuilder(c.getNameAsString()); - Node n = c.getParentNode().orElse(null); - while (n != null) { - if (n instanceof ClassOrInterfaceDeclaration || n instanceof EnumDeclaration) - name.insert(0, '$').insert(0, ((NodeWithSimpleName) n).getNameAsString()); - if (n instanceof CompilationUnit) { - Optional o = ((CompilationUnit) n).getPackageDeclaration(); - if (o.isPresent()) - name.insert(0, '.').insert(0, o.get().getNameAsString()); - } - n = n.getParentNode().orElse(null); - } - return name.toString(); - } - - @Override - public String genericName() { - if (parameters().isEmpty()) - return name(); - StringBuilder sb = new StringBuilder(name()).append('<'); - for (TypeParamModel t : parameters()) - sb.append(t.type()).append(','); - sb.setCharAt(sb.length() - 1, '>'); - return sb.toString(); - } - - @Override - public T object() { - return c; - } - - @Override - public Collection annotations() { - if (annotations == null) - annotations = c.getAnnotations().stream().map(a -> new AstAnnotation(loader, a)).collect(Collectors.toList()); - return annotations; - } - - @Override - public Collection constructors() { - if (constructors == null) - constructors = c.getConstructors().stream().map(v -> new AstConstructor(this, loader, v)).collect(Collectors.toList()); - return constructors; - } - - @Override - public Collection fields() { - if (fields == null) { - fields = new ArrayList<>(); - for (FieldDeclaration f : c.getFields()) - f.getVariables().stream().map(v -> new AstField(loader, this, f, v)).forEach(fields::add); - } - return fields; - } - - @Override - public Collection methods() { - if (methods == null) - methods = c.getMethods().stream().map(m -> new AstMethod(this, loader, m)).collect(Collectors.toList()); - return methods; - } - - @Override - public String toString() { - return genericName(); - } -} diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/model/ast/AstClass.java b/unknow-server-maven/src/main/java/unknow/server/maven/model/ast/AstClass.java deleted file mode 100644 index abf15ff4..00000000 --- a/unknow-server-maven/src/main/java/unknow/server/maven/model/ast/AstClass.java +++ /dev/null @@ -1,71 +0,0 @@ -/** - * - */ -package unknow.server.maven.model.ast; - -import java.util.ArrayList; -import java.util.List; -import java.util.stream.Collectors; - -import com.github.javaparser.ast.PackageDeclaration; -import com.github.javaparser.ast.body.ClassOrInterfaceDeclaration; -import com.github.javaparser.resolution.declarations.ResolvedReferenceTypeDeclaration; - -import unknow.server.maven.model.ClassModel; -import unknow.server.maven.model.ModelLoader; -import unknow.server.maven.model.TypeModel; -import unknow.server.maven.model.TypeParamModel; - -/** - * @author unknow - */ -public class AstClass extends AstBaseClass { - private final TypeModel[] paramsClass; - private ClassModel superType; - private List interfaces; - private List parameters; - - /** - * create new AstClass - * - * @param loader the loader - * @param p the package - * @param cl the class declaration - * @param paramsClass class parameter - */ - public AstClass(ModelLoader loader, PackageDeclaration p, ClassOrInterfaceDeclaration cl, TypeModel[] paramsClass) { - super(loader, p, cl); - this.paramsClass = paramsClass; - } - - @Override - public ClassModel superType() { - if (c.isInterface()) - return null; - if (superType == null) { - ResolvedReferenceTypeDeclaration r = c.resolve(); - superType = loader.get(r.asClass().getSuperClass().map(c -> c.describe()).orElse("java.lang.Object"), parameters()).asClass(); - } - return superType; - } - - @Override - public List interfaces() { - if (interfaces == null) { - interfaces = (c.isInterface() ? c.getExtendedTypes() : c.getImplementedTypes()).stream().map(c -> loader.get(c.resolve().describe(), parameters()).asClass()) - .filter(c -> !"java.lang.Object".equals(c.name())).collect(Collectors.toList()); - } - return interfaces; - } - - @Override - public List parameters() { - if (parameters == null) { - int l = c.getTypeParameters().size(); - parameters = new ArrayList<>(l); - for (int i = 0; i < l; i++) - parameters.add(new AstTypeParam(loader, this, c.getTypeParameter(i), paramsClass.length == l ? paramsClass[i] : null)); - } - return parameters; - } -} diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/model/ast/AstConstructor.java b/unknow-server-maven/src/main/java/unknow/server/maven/model/ast/AstConstructor.java deleted file mode 100644 index fb659f75..00000000 --- a/unknow-server-maven/src/main/java/unknow/server/maven/model/ast/AstConstructor.java +++ /dev/null @@ -1,76 +0,0 @@ -/** - * - */ -package unknow.server.maven.model.ast; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.stream.Collectors; - -import com.github.javaparser.ast.body.ConstructorDeclaration; -import com.github.javaparser.ast.body.Parameter; - -import unknow.server.maven.model.AnnotationModel; -import unknow.server.maven.model.ClassModel; -import unknow.server.maven.model.ConstructorModel; -import unknow.server.maven.model.ModelLoader; -import unknow.server.maven.model.ParamModel; - -/** - * @author unknow - */ -public class AstConstructor implements ConstructorModel, AstMod { - private final ClassModel parent; - private final ModelLoader loader; - private final ConstructorDeclaration c; - private Collection annotations; - private List> params; - - /** - * create new AstMethod - * - * @param parent the class owning the constructor - * @param loader the loader - * @param c the constructor - */ - public AstConstructor(ClassModel parent, ModelLoader loader, ConstructorDeclaration c) { - this.parent = parent; - this.loader = loader; - this.c = c; - } - - @Override - public ClassModel parent() { - return parent; - } - - @Override - public Collection annotations() { - if (annotations == null) { - annotations = c.getAnnotations().stream().map(a -> new AstAnnotation(loader, a)).collect(Collectors.toList()); - } - return annotations; - } - - @Override - public ConstructorDeclaration object() { - return c; - } - - @Override - public List> parameters() { - if (params == null) { - int i = 0; - params = new ArrayList<>(); - for (Parameter p : c.getParameters()) - params.add(new AstParam<>(loader, this, p, i++)); - } - return params; - } - - @Override - public String toString() { - return parent.name() + "." + signature(); - } -} diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/model/ast/AstEnum.java b/unknow-server-maven/src/main/java/unknow/server/maven/model/ast/AstEnum.java deleted file mode 100644 index bc86ae23..00000000 --- a/unknow-server-maven/src/main/java/unknow/server/maven/model/ast/AstEnum.java +++ /dev/null @@ -1,103 +0,0 @@ -/** - * - */ -package unknow.server.maven.model.ast; - -import java.util.Collection; -import java.util.Collections; -import java.util.List; -import java.util.stream.Collectors; - -import com.github.javaparser.ast.PackageDeclaration; -import com.github.javaparser.ast.body.EnumConstantDeclaration; -import com.github.javaparser.ast.body.EnumDeclaration; - -import unknow.server.maven.model.AnnotationModel; -import unknow.server.maven.model.ClassModel; -import unknow.server.maven.model.EnumModel; -import unknow.server.maven.model.ModelLoader; -import unknow.server.maven.model.TypeParamModel; - -/** - * @author unknow - */ -public class AstEnum extends AstBaseClass implements EnumModel { - private List entries; - private List interfaces; - - /** - * create new AstEnum - * - * @param loader the loader - * @param p the package - * @param e the enum - */ - public AstEnum(ModelLoader loader, PackageDeclaration p, EnumDeclaration e) { - super(loader, p, e); - } - - @Override - public String name() { - return c.resolve().getQualifiedName(); - } - - @Override - public String toString() { - return name(); - } - - @Override - public List entries() { - if (entries == null) - entries = c.getEntries().stream().map(c -> new AstEnumConstant(loader, c)).collect(Collectors.toList()); - return entries; - } - - @Override - public ClassModel superType() { - return loader.get("java.lang.Enum<" + name() + ">").asClass(); - } - - @Override - public List interfaces() { - if (interfaces == null) - interfaces = c.getImplementedTypes().stream().map(c -> loader.get(c.resolve().describe(), parameters()).asClass()) - .filter(c -> !"java.lang.Object".equals(c.name())).collect(Collectors.toList()); - return interfaces; - } - - @Override - public List parameters() { - return Collections.emptyList(); - } - - private static class AstEnumConstant implements EnumConstant { - private final ModelLoader loader; - private final EnumConstantDeclaration e; - private List annotations; - - /** - * create new AstEnumConstant - * - * @param loader - * @param e - */ - public AstEnumConstant(ModelLoader loader, EnumConstantDeclaration e) { - this.loader = loader; - this.e = e; - } - - @Override - public Collection annotations() { - if (annotations == null) - annotations = e.getAnnotations().stream().map(a -> new AstAnnotation(loader, a)).collect(Collectors.toList()); - return annotations; - } - - @Override - public String name() { - return e.getNameAsString(); - } - } - -} diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/model/ast/AstField.java b/unknow-server-maven/src/main/java/unknow/server/maven/model/ast/AstField.java deleted file mode 100644 index 352d03da..00000000 --- a/unknow-server-maven/src/main/java/unknow/server/maven/model/ast/AstField.java +++ /dev/null @@ -1,79 +0,0 @@ -/** - * - */ -package unknow.server.maven.model.ast; - -import java.util.Collection; -import java.util.List; -import java.util.stream.Collectors; - -import com.github.javaparser.ast.body.FieldDeclaration; -import com.github.javaparser.ast.body.VariableDeclarator; - -import unknow.server.maven.model.AnnotationModel; -import unknow.server.maven.model.ClassModel; -import unknow.server.maven.model.FieldModel; -import unknow.server.maven.model.ModelLoader; -import unknow.server.maven.model.TypeModel; - -/** - * @author unknow - */ -public class AstField implements FieldModel, AstMod { - private final ModelLoader loader; - private final ClassModel cl; - private final FieldDeclaration f; - private final VariableDeclarator v; - private List annotations; - private TypeModel type; - - /** - * create new AstField - * - * @param loader the loader - * @param cl the class owning the field - * @param f the field declaration (can contains multiple variable) - * @param v the variable - */ - public AstField(ModelLoader loader, ClassModel cl, FieldDeclaration f, VariableDeclarator v) { - this.loader = loader; - this.cl = cl; - this.f = f; - this.v = v; - } - - @Override - public Collection annotations() { - if (annotations == null) - annotations = f.getAnnotations().stream().map(a -> new AstAnnotation(loader, a)).collect(Collectors.toList()); - return annotations; - } - - @Override - public FieldDeclaration object() { - return f; - } - - @Override - public String name() { - return v.getNameAsString(); - } - - @Override - public ClassModel parent() { - return cl; - } - - @Override - public String toString() { - return type() + " " + name(); - } - - @Override - public TypeModel type() { - if (type == null) - type = loader.get(v.getType().resolve().describe(), cl.parameters()); - return type; - } - -} diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/model/ast/AstMethod.java b/unknow-server-maven/src/main/java/unknow/server/maven/model/ast/AstMethod.java deleted file mode 100644 index 0edc718d..00000000 --- a/unknow-server-maven/src/main/java/unknow/server/maven/model/ast/AstMethod.java +++ /dev/null @@ -1,96 +0,0 @@ -/** - * - */ -package unknow.server.maven.model.ast; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.stream.Collectors; - -import com.github.javaparser.ast.body.MethodDeclaration; -import com.github.javaparser.ast.body.Parameter; - -import unknow.server.maven.model.AnnotationModel; -import unknow.server.maven.model.AnnotationValue; -import unknow.server.maven.model.ClassModel; -import unknow.server.maven.model.MethodModel; -import unknow.server.maven.model.ModelLoader; -import unknow.server.maven.model.ParamModel; -import unknow.server.maven.model.TypeModel; - -/** - * @author unknow - */ -public class AstMethod implements MethodModel, AstMod { - private final ClassModel parent; - private final ModelLoader loader; - private final MethodDeclaration m; - private Collection annotations; - private TypeModel type; - private List> params; - - /** - * create new AstMethod - * - * @param parent the class owning the method - * @param loader the loader - * @param m the method - */ - public AstMethod(ClassModel parent, ModelLoader loader, MethodDeclaration m) { - this.parent = parent; - this.loader = loader; - this.m = m; - } - - @Override - public ClassModel parent() { - return parent; - } - - @Override - public Collection annotations() { - if (annotations == null) { - annotations = m.getAnnotations().stream().map(a -> new AstAnnotation(loader, a)).collect(Collectors.toList()); - } - return annotations; - } - - @Override - public MethodDeclaration object() { - return m; - } - - @Override - public String name() { - return m.getNameAsString(); - } - - @Override - public String toString() { - return parent.name() + "." + signature(); - } - - @Override - public TypeModel type() { - if (type == null) - type = loader.get(m.getType().resolve().describe(), parent.parameters()); - return type; - } - - @Override - public List> parameters() { - if (params == null) { - int i = 0; - params = new ArrayList<>(); - for (Parameter p : m.getParameters()) - params.add(new AstParam<>(loader, this, p, i++)); - } - return params; - } - - @Override - public AnnotationValue defaultValue() { - return AnnotationValue.NULL; - } -} diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/model/ast/AstMod.java b/unknow-server-maven/src/main/java/unknow/server/maven/model/ast/AstMod.java deleted file mode 100644 index 8936f4f0..00000000 --- a/unknow-server-maven/src/main/java/unknow/server/maven/model/ast/AstMod.java +++ /dev/null @@ -1,49 +0,0 @@ -/** - * - */ -package unknow.server.maven.model.ast; - -import com.github.javaparser.ast.Modifier; -import com.github.javaparser.ast.nodeTypes.NodeWithModifiers; - -import unknow.server.maven.model.util.WithMod; - -/** - * @author unknow - */ -public interface AstMod> extends WithMod { - /** - * @return the object with modifier - */ - T object(); - - @Override - default boolean isTransient() { - return object().getModifiers().stream().anyMatch(m -> m.getKeyword() == Modifier.Keyword.TRANSIENT); - } - - @Override - default boolean isStatic() { - return object().getModifiers().stream().anyMatch(m -> m.getKeyword() == Modifier.Keyword.STATIC); - } - - @Override - default boolean isPublic() { - return object().getModifiers().stream().anyMatch(m -> m.getKeyword() == Modifier.Keyword.PUBLIC); - } - - @Override - default boolean isProtected() { - return object().getModifiers().stream().anyMatch(m -> m.getKeyword() == Modifier.Keyword.PROTECTED); - } - - @Override - default boolean isPrivate() { - return object().getModifiers().stream().anyMatch(m -> m.getKeyword() == Modifier.Keyword.PRIVATE); - } - - @Override - default boolean isAbstract() { - return object().getModifiers().stream().anyMatch(m -> m.getKeyword() == Modifier.Keyword.ABSTRACT); - } -} diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/model/ast/AstModelLoader.java b/unknow-server-maven/src/main/java/unknow/server/maven/model/ast/AstModelLoader.java deleted file mode 100644 index 2c05662f..00000000 --- a/unknow-server-maven/src/main/java/unknow/server/maven/model/ast/AstModelLoader.java +++ /dev/null @@ -1,51 +0,0 @@ -/** - * - */ -package unknow.server.maven.model.ast; - -import java.util.Map; - -import com.github.javaparser.ast.CompilationUnit; -import com.github.javaparser.ast.PackageDeclaration; -import com.github.javaparser.ast.body.TypeDeclaration; -import com.github.javaparser.ast.expr.Name; - -import unknow.server.maven.model.ModelLoader; -import unknow.server.maven.model.TypeModel; - -/** - * @author unknow - */ -public class AstModelLoader extends ModelLoader { - - private final Map> classes; - private final Map packages; - - /** - * create new AstModelLoader - * - * @param classes the existing class - * @param packages the existing packages - */ - public AstModelLoader(Map> classes, Map packages) { - this.classes = classes; - this.packages = packages; - } - - @SuppressWarnings("unchecked") - @Override - protected TypeModel load(ModelLoader loader, String cl, TypeModel[] params) { - TypeDeclaration t = classes.get(cl); - if (t == null) - return null; - String name = t.findAncestor(CompilationUnit.class).flatMap(cu -> cu.getPackageDeclaration()).map(v -> v.getNameAsString()).orElse(null); - PackageDeclaration p = packages.get(name); - if (p == null && name != null) - p = new PackageDeclaration(new Name(name)); - if (t.isEnumDeclaration()) - return new AstEnum(loader, p, t.asEnumDeclaration()); - else if (t.isClassOrInterfaceDeclaration()) - return new AstClass(loader, p, t.asClassOrInterfaceDeclaration(), params); - throw new IllegalArgumentException("unsuported type " + t); - } -} diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/model/ast/AstPackage.java b/unknow-server-maven/src/main/java/unknow/server/maven/model/ast/AstPackage.java deleted file mode 100644 index d3abd04b..00000000 --- a/unknow-server-maven/src/main/java/unknow/server/maven/model/ast/AstPackage.java +++ /dev/null @@ -1,46 +0,0 @@ -/** - * - */ -package unknow.server.maven.model.ast; - -import java.util.Collection; -import java.util.stream.Collectors; - -import com.github.javaparser.ast.PackageDeclaration; - -import unknow.server.maven.model.AnnotationModel; -import unknow.server.maven.model.ModelLoader; -import unknow.server.maven.model.PackageModel; - -/** - * @author unknow - */ -public class AstPackage implements PackageModel { - private final ModelLoader loader; - private final PackageDeclaration p; - private Collection annotations; - - /** - * create new AstPackage - * - * @param loader the loader - * @param p the package - */ - public AstPackage(ModelLoader loader, PackageDeclaration p) { - this.loader = loader; - this.p = p; - } - - @Override - public Collection annotations() { - if (annotations == null) - annotations = p.getAnnotations().stream().map(a -> new AstAnnotation(loader, a)).collect(Collectors.toList()); - return annotations; - } - - @Override - public String name() { - return p.getNameAsString(); - } - -} diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/model/ast/AstParam.java b/unknow-server-maven/src/main/java/unknow/server/maven/model/ast/AstParam.java deleted file mode 100644 index fd12492f..00000000 --- a/unknow-server-maven/src/main/java/unknow/server/maven/model/ast/AstParam.java +++ /dev/null @@ -1,78 +0,0 @@ -/** - * - */ -package unknow.server.maven.model.ast; - -import java.util.Collection; -import java.util.stream.Collectors; - -import com.github.javaparser.ast.body.Parameter; - -import unknow.server.maven.model.AnnotationModel; -import unknow.server.maven.model.ClassModel; -import unknow.server.maven.model.ModelLoader; -import unknow.server.maven.model.ParamModel; -import unknow.server.maven.model.TypeModel; -import unknow.server.maven.model.util.WithParent; - -/** - * @author unknow - * @param parent - */ -public class AstParam> implements ParamModel { - private final ModelLoader loader; - private final T m; - private final Parameter p; - private final int index; - private Collection annotations; - private TypeModel type; - - /** - * create new AstParam - * - * @param loader the loader - * @param m the owner - * @param p the parameter - * @param index the param index - */ - public AstParam(ModelLoader loader, T m, Parameter p, int index) { - this.loader = loader; - this.m = m; - this.p = p; - this.index = index; - } - - @Override - public int index() { - return index; - } - - @Override - public Collection annotations() { - if (annotations == null) - annotations = p.getAnnotations().stream().map(a -> new AstAnnotation(loader, a)).collect(Collectors.toList()); - return annotations; - } - - @Override - public String name() { - return p.getNameAsString(); - } - - @Override - public T parent() { - return m; - } - - @Override - public TypeModel type() { - if (type == null) - type = loader.get(p.getType().resolve().describe(), m.parent().parameters()); - return type; - } - - @Override - public String toString() { - return p.toString(); - } -} diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/model/ast/AstTypeParam.java b/unknow-server-maven/src/main/java/unknow/server/maven/model/ast/AstTypeParam.java deleted file mode 100644 index 0f69522c..00000000 --- a/unknow-server-maven/src/main/java/unknow/server/maven/model/ast/AstTypeParam.java +++ /dev/null @@ -1,84 +0,0 @@ -/** - * - */ -package unknow.server.maven.model.ast; - -import java.util.Collection; -import java.util.Collections; -import java.util.List; -import java.util.stream.Collectors; - -import com.github.javaparser.ast.type.TypeParameter; - -import unknow.server.maven.model.AnnotationModel; -import unknow.server.maven.model.ClassModel; -import unknow.server.maven.model.ModelLoader; -import unknow.server.maven.model.TypeModel; -import unknow.server.maven.model.TypeParamModel; - -/** - * @author unknow - */ -public class AstTypeParam implements TypeParamModel { - private final ModelLoader loader; - private final ClassModel c; - private final TypeParameter p; - private final TypeModel type; - private Collection annotations; - private List bounds; - - /** - * create new AstParam - * - * @param loader the loader - * @param c the owner - * @param p the parameter - * @param type the type - */ - public AstTypeParam(ModelLoader loader, ClassModel c, TypeParameter p, TypeModel type) { - this.loader = loader; - this.c = c; - this.p = p; - this.type = type; - if (p.getTypeBound() == null) - bounds = Collections.emptyList(); - } - - @Override - public Collection annotations() { - if (annotations == null) { - annotations = p.getAnnotations().stream().map(a -> new AstAnnotation(loader, a)).collect(Collectors.toList()); - } - return annotations; - } - - @Override - public String name() { - return p.getNameAsString(); - } - - @Override - public ClassModel parent() { - return c; - } - - @Override - public TypeModel type() { - return type; - } - - @Override - public List bounds() { - if (bounds == null) - bounds = p.getTypeBound().stream().map(t -> loader.get(t.resolve().describe(), c.parameters()).asClass()).collect(Collectors.toList()); - return bounds; - } - - @Override - public String toString() { - StringBuilder sb = new StringBuilder(name()); - if (type() != null) - sb.append('[').append(type()).append(']'); - return sb.toString(); - } -} diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/model/jvm/JvmAnnotation.java b/unknow-server-maven/src/main/java/unknow/server/maven/model/jvm/JvmAnnotation.java deleted file mode 100644 index b6e97d51..00000000 --- a/unknow-server-maven/src/main/java/unknow/server/maven/model/jvm/JvmAnnotation.java +++ /dev/null @@ -1,147 +0,0 @@ -/** - * - */ -package unknow.server.maven.model.jvm; - -import java.lang.annotation.Annotation; -import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.Collection; - -import unknow.server.maven.model.AnnotationMemberModel; -import unknow.server.maven.model.AnnotationModel; -import unknow.server.maven.model.AnnotationValue; -import unknow.server.maven.model.AnnotationValue.AnnotationValueAnnotation; -import unknow.server.maven.model.AnnotationValue.AnnotationValueArray; -import unknow.server.maven.model.AnnotationValue.AnnotationValueClass; -import unknow.server.maven.model.AnnotationValue.AnnotationValueLiteral; -import unknow.server.maven.model.ModelLoader; - -/** - * @author unknow - */ -public class JvmAnnotation implements AnnotationModel { - private final Annotation a; - private final Collection members; - - /** - * create new JvmAnnotation - * - * @param loader the loader - * @param a the annotation - */ - public JvmAnnotation(ModelLoader loader, Annotation a) { - this.a = a; - this.members = new ArrayList<>(); - - Method[] methods = a.annotationType().getDeclaredMethods(); - for (int i = 0; i < methods.length; i++) { - Method m = methods[i]; - AnnotationValue def = getValue(loader, m.getDefaultValue()); - try { - AnnotationValue value = getValue(loader, m.invoke(a)); - - members.add(new AnnotationMemberModel(m.getName(), value, def)); - } catch (Exception e) { - throw new IllegalArgumentException(e); - } - } - } - - @Override - public String name() { - return a.annotationType().getName(); - } - - @Override - public Collection members() { - return members; - } - - @Override - public String toString() { - return name(); - } - - /** - * convert annotation value - * - * @param loader the loader - * @param o value to convert - * @return object as annotation value - */ - public static AnnotationValue getValue(ModelLoader loader, Object o) { - if (o == null) - return AnnotationValue.NULL; - if (o instanceof boolean[]) { - boolean[] t = (boolean[]) o; - AnnotationValue[] a = new AnnotationValue[t.length]; - for (int i = 0; i < t.length; i++) - a[i] = new AnnotationValueLiteral(Boolean.toString(t[i])); - return new AnnotationValueArray(a); - } - if (o instanceof byte[]) { - byte[] t = (byte[]) o; - AnnotationValue[] a = new AnnotationValue[t.length]; - for (int i = 0; i < t.length; i++) - a[i] = new AnnotationValueLiteral(Byte.toString(t[i])); - return new AnnotationValueArray(a); - } - if (o instanceof char[]) { - char[] t = (char[]) o; - AnnotationValue[] a = new AnnotationValue[t.length]; - for (int i = 0; i < t.length; i++) - a[i] = new AnnotationValueLiteral(Character.toString(t[i])); - return new AnnotationValueArray(a); - } - if (o instanceof short[]) { - short[] t = (short[]) o; - AnnotationValue[] a = new AnnotationValue[t.length]; - for (int i = 0; i < t.length; i++) - a[i] = new AnnotationValueLiteral(Short.toString(t[i])); - return new AnnotationValueArray(a); - } - if (o instanceof int[]) { - int[] t = (int[]) o; - AnnotationValue[] a = new AnnotationValue[t.length]; - for (int i = 0; i < t.length; i++) - a[i] = new AnnotationValueLiteral(Integer.toString(t[i])); - return new AnnotationValueArray(a); - } - if (o instanceof long[]) { - long[] t = (long[]) o; - AnnotationValue[] a = new AnnotationValue[t.length]; - for (int i = 0; i < t.length; i++) - a[i] = new AnnotationValueLiteral(Long.toString(t[i])); - return new AnnotationValueArray(a); - } - if (o instanceof float[]) { - float[] t = (float[]) o; - AnnotationValue[] a = new AnnotationValue[t.length]; - for (int i = 0; i < t.length; i++) - a[i] = new AnnotationValueLiteral(Float.toString(t[i])); - return new AnnotationValueArray(a); - } - if (o instanceof double[]) { - double[] t = (double[]) o; - AnnotationValue[] a = new AnnotationValue[t.length]; - for (int i = 0; i < t.length; i++) - a[i] = new AnnotationValueLiteral(Double.toString(t[i])); - return new AnnotationValueArray(a); - } - if (o.getClass().isArray()) { - Object[] t = (Object[]) o; - AnnotationValue[] a = new AnnotationValue[t.length]; - for (int i = 0; i < t.length; i++) - a[i] = getValue(loader, t[i]); - return new AnnotationValueArray(a); - } - if (o instanceof Class) - return new AnnotationValueClass(loader.get(((Class) o).getName())); - if (o instanceof Enum) - return new AnnotationValueLiteral(((Enum) o).name()); - if (o instanceof Annotation) - return new AnnotationValueAnnotation(new JvmAnnotation(loader, (Annotation) o)); - return new AnnotationValueLiteral(o.toString()); - } -} diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/model/jvm/JvmClass.java b/unknow-server-maven/src/main/java/unknow/server/maven/model/jvm/JvmClass.java deleted file mode 100644 index a7395529..00000000 --- a/unknow-server-maven/src/main/java/unknow/server/maven/model/jvm/JvmClass.java +++ /dev/null @@ -1,142 +0,0 @@ -/** - * - */ -package unknow.server.maven.model.jvm; - -import java.lang.reflect.Type; -import java.lang.reflect.TypeVariable; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.List; -import java.util.stream.Collectors; - -import unknow.server.maven.model.AnnotationModel; -import unknow.server.maven.model.ClassModel; -import unknow.server.maven.model.ConstructorModel; -import unknow.server.maven.model.FieldModel; -import unknow.server.maven.model.MethodModel; -import unknow.server.maven.model.PackageModel; -import unknow.server.maven.model.TypeModel; -import unknow.server.maven.model.TypeParamModel; - -/** - * @author unknow - */ -public class JvmClass implements ClassModel, JvmMod { - protected final JvmModelLoader loader; - protected final Class cl; - protected final PackageModel packageModel; - private final TypeModel[] paramsClass; - private ClassModel superType; - private List interfaces; - private Collection constructors; - private Collection annotations; - private Collection fields; - private Collection methods; - private List parameters; - - /** - * create new JvmClass - * - * @param loader the loader - * @param cl the class - * @param paramsClass the parameter - */ - public JvmClass(JvmModelLoader loader, Class cl, TypeModel[] paramsClass) { - this.loader = loader; - this.cl = cl; - this.paramsClass = paramsClass; - this.packageModel = new JvmPackage(loader, cl.getPackage()); - } - - @Override - public PackageModel parent() { - return packageModel; - } - - @Override - public String name() { - return cl.getName(); - } - - @Override - public String genericName() { - return toString(); - } - - @Override - public Collection annotations() { - if (annotations == null) - annotations = Arrays.stream(cl.getAnnotations()).map(a -> new JvmAnnotation(loader, a)).collect(Collectors.toList()); - return annotations; - } - - @Override - public ClassModel superType() { - if (cl.getGenericSuperclass() == null) - return null; - if (superType == null) - superType = loader.get(cl.getGenericSuperclass().getTypeName(), parameters()).asClass(); - return superType; - } - - @Override - public List interfaces() { - if (interfaces == null) { - Type[] t = cl.getGenericInterfaces(); - interfaces = new ArrayList<>(t.length); - for (int i = 0; i < t.length; i++) - interfaces.add(loader.get(t[i].getTypeName(), parameters()).asClass()); - } - return interfaces; - } - - @Override - public Collection constructors() { - if (constructors == null) - constructors = Arrays.stream(cl.getDeclaredConstructors()).map(c -> new JvmConstructor(this, loader, c)).collect(Collectors.toList()); - return constructors; - } - - @Override - public Collection fields() { - if (fields == null) - fields = Arrays.stream(cl.getDeclaredFields()).map(f -> new JvmField(loader, this, f)).collect(Collectors.toList()); - return fields; - } - - @Override - public Collection methods() { - if (methods == null) - methods = Arrays.stream(cl.getDeclaredMethods()).map(m -> new JvmMethod(this, loader, m)).collect(Collectors.toList()); - return methods; - } - - @Override - public List parameters() { - if (parameters == null) { - TypeVariable[] typeParameters = cl.getTypeParameters(); - parameters = new ArrayList<>(typeParameters.length); - for (int i = 0; i < typeParameters.length; i++) - parameters.add(new JvmTypeParam(loader, this, typeParameters[i], paramsClass.length == typeParameters.length ? paramsClass[i] : null)); - } - return parameters; - } - - @Override - public int mod() { - return cl.getModifiers(); - } - - @Override - public String toString() { - if (parameters().isEmpty()) - return cl.getName(); - StringBuilder sb = new StringBuilder(cl.getName()).append('<'); - for (TypeParamModel p : parameters()) - sb.append(p.type()).append(','); - sb.setCharAt(sb.length() - 1, '>'); - return sb.toString(); - } -} diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/model/jvm/JvmConstructor.java b/unknow-server-maven/src/main/java/unknow/server/maven/model/jvm/JvmConstructor.java deleted file mode 100644 index 560df010..00000000 --- a/unknow-server-maven/src/main/java/unknow/server/maven/model/jvm/JvmConstructor.java +++ /dev/null @@ -1,74 +0,0 @@ -/** - * - */ -package unknow.server.maven.model.jvm; - -import java.lang.reflect.Constructor; -import java.lang.reflect.Parameter; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.List; -import java.util.stream.Collectors; - -import unknow.server.maven.model.AnnotationModel; -import unknow.server.maven.model.ClassModel; -import unknow.server.maven.model.ConstructorModel; -import unknow.server.maven.model.ParamModel; - -/** - * @author unknow - */ -public class JvmConstructor implements ConstructorModel, JvmMod { - private final ClassModel parent; - private final JvmModelLoader loader; - private final Constructor c; - private Collection annotations; - private List> params; - - /** - * create new JvmField - * - * @param parent the owner - * @param loader the loader - * @param c the constructor - */ - public JvmConstructor(ClassModel parent, JvmModelLoader loader, Constructor c) { - this.parent = parent; - this.loader = loader; - this.c = c; - } - - @Override - public ClassModel parent() { - return parent; - } - - @Override - public Collection annotations() { - if (annotations == null) - annotations = Arrays.stream(c.getAnnotations()).map(a -> new JvmAnnotation(loader, a)).collect(Collectors.toList()); - return annotations; - } - - @Override - public int mod() { - return c.getModifiers(); - } - - @Override - public List> parameters() { - if (params == null) { - params = new ArrayList<>(); - Parameter[] p = c.getParameters(); - for (int i = 0; i < p.length; i++) - params.add(new JvmParam<>(loader, this, p[i], i)); - } - return params; - } - - @Override - public String toString() { - return c.toString(); - } -} \ No newline at end of file diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/model/jvm/JvmEnum.java b/unknow-server-maven/src/main/java/unknow/server/maven/model/jvm/JvmEnum.java deleted file mode 100644 index 384cc9bf..00000000 --- a/unknow-server-maven/src/main/java/unknow/server/maven/model/jvm/JvmEnum.java +++ /dev/null @@ -1,83 +0,0 @@ -/** - * - */ -package unknow.server.maven.model.jvm; - -import java.util.Arrays; -import java.util.Collection; -import java.util.List; -import java.util.stream.Collectors; - -import unknow.server.maven.model.AnnotationModel; -import unknow.server.maven.model.EnumModel; -import unknow.server.maven.model.TypeModel; - -/** - * @author unknow - */ -public class JvmEnum extends JvmClass implements EnumModel { - private List annotations; - private List entries; - - /** - * create new AstEnum - * - * @param loader the loader - * @param cl the enum class - * @param params the generic params - */ - public JvmEnum(JvmModelLoader loader, Class cl, TypeModel[] params) { - super(loader, cl, params); - } - - @Override - public Collection annotations() { - if (annotations == null) - annotations = Arrays.stream(cl.getAnnotations()).map(a -> new JvmAnnotation(loader, a)).collect(Collectors.toList()); - return annotations; - } - - @Override - public List entries() { - if (entries == null) - entries = Arrays.stream(cl.getEnumConstants()).map(c -> new JvmEnumConstant(loader, (Enum) c)).collect(Collectors.toList()); - return entries; - } - - /** - * @author unknow - */ - public static class JvmEnumConstant implements EnumConstant { - private final JvmModelLoader loader; - private final Enum e; - private List annotations; - - /** - * create new AstEnumConstant - * - * @param loader the loader - * @param e the enum entry - */ - public JvmEnumConstant(JvmModelLoader loader, Enum e) { - this.loader = loader; - this.e = e; - } - - @Override - public Collection annotations() { - if (annotations == null) { - try { - annotations = Arrays.stream(e.getClass().getField(name()).getAnnotations()).map(a -> new JvmAnnotation(loader, a)).collect(Collectors.toList()); - } catch (NoSuchFieldException x) { - throw new IllegalStateException(x); - } - } - return annotations; - } - - @Override - public String name() { - return e.name(); - } - } -} diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/model/jvm/JvmField.java b/unknow-server-maven/src/main/java/unknow/server/maven/model/jvm/JvmField.java deleted file mode 100644 index 60d81239..00000000 --- a/unknow-server-maven/src/main/java/unknow/server/maven/model/jvm/JvmField.java +++ /dev/null @@ -1,73 +0,0 @@ -/** - * - */ -package unknow.server.maven.model.jvm; - -import java.lang.reflect.Field; -import java.util.Arrays; -import java.util.Collection; -import java.util.stream.Collectors; - -import unknow.server.maven.model.AnnotationModel; -import unknow.server.maven.model.ClassModel; -import unknow.server.maven.model.FieldModel; -import unknow.server.maven.model.TypeModel; - -/** - * @author unknow - */ -public class JvmField implements FieldModel, JvmMod { - private final JvmModelLoader loader; - private final ClassModel cl; - private final Field f; - private Collection annotations; - - /** - * create new JvmField - * - * @param loader the loader - * @param cl the class owning the field - * @param f the field - */ - public JvmField(JvmModelLoader loader, ClassModel cl, Field f) { - this.loader = loader; - this.cl = cl; - this.f = f; - } - - public Field field() { - return f; - } - - @Override - public Collection annotations() { - if (annotations == null) - annotations = Arrays.stream(f.getAnnotations()).map(a -> new JvmAnnotation(loader, a)).collect(Collectors.toList()); - return annotations; - } - - @Override - public int mod() { - return f.getModifiers(); - } - - @Override - public String name() { - return f.getName(); - } - - @Override - public String toString() { - return type() + " " + name(); - } - - @Override - public ClassModel parent() { - return cl; - } - - @Override - public TypeModel type() { - return loader.get(f.getGenericType().getTypeName(), cl.parameters()); - } -} \ No newline at end of file diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/model/jvm/JvmMethod.java b/unknow-server-maven/src/main/java/unknow/server/maven/model/jvm/JvmMethod.java deleted file mode 100644 index fc9ef60b..00000000 --- a/unknow-server-maven/src/main/java/unknow/server/maven/model/jvm/JvmMethod.java +++ /dev/null @@ -1,94 +0,0 @@ -/** - * - */ -package unknow.server.maven.model.jvm; - -import java.lang.reflect.Method; -import java.lang.reflect.Parameter; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.List; -import java.util.stream.Collectors; - -import unknow.server.maven.model.AnnotationModel; -import unknow.server.maven.model.AnnotationValue; -import unknow.server.maven.model.ClassModel; -import unknow.server.maven.model.MethodModel; -import unknow.server.maven.model.ParamModel; -import unknow.server.maven.model.TypeModel; - -/** - * @author unknow - */ -public class JvmMethod implements MethodModel, JvmMod { - private final ClassModel parent; - private final JvmModelLoader loader; - private final Method m; - private Collection annotations; - private List> params; - private AnnotationValue defaultValue; - - /** - * create new JvmField - * - * @param parent the class owning the method - * @param loader the loader - * @param m the method - */ - public JvmMethod(ClassModel parent, JvmModelLoader loader, Method m) { - this.parent = parent; - this.loader = loader; - this.m = m; - } - - @Override - public ClassModel parent() { - return parent; - } - - @Override - public Collection annotations() { - if (annotations == null) - annotations = Arrays.stream(m.getAnnotations()).map(a -> new JvmAnnotation(loader, a)).collect(Collectors.toList()); - return annotations; - } - - @Override - public int mod() { - return m.getModifiers(); - } - - @Override - public String name() { - return m.getName(); - } - - @Override - public TypeModel type() { - return loader.get(m.getGenericReturnType().getTypeName(), parent.parameters()); - } - - @Override - public List> parameters() { - if (params == null) { - params = new ArrayList<>(); - Parameter[] p = m.getParameters(); - for (int i = 0; i < p.length; i++) - params.add(new JvmParam<>(loader, this, p[i], i)); - } - return params; - } - - @Override - public AnnotationValue defaultValue() { - if (defaultValue == null) - defaultValue = JvmAnnotation.getValue(loader, m.getDefaultValue()); - return defaultValue; - } - - @Override - public String toString() { - return m.toString(); - } -} \ No newline at end of file diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/model/jvm/JvmMod.java b/unknow-server-maven/src/main/java/unknow/server/maven/model/jvm/JvmMod.java deleted file mode 100644 index 24476dc8..00000000 --- a/unknow-server-maven/src/main/java/unknow/server/maven/model/jvm/JvmMod.java +++ /dev/null @@ -1,49 +0,0 @@ -/** - * - */ -package unknow.server.maven.model.jvm; - -import java.lang.reflect.Modifier; - -import unknow.server.maven.model.util.WithMod; - -/** - * @author unknow - */ -public interface JvmMod extends WithMod { - /** - * @return modifier - */ - int mod(); - - @Override - default boolean isTransient() { - return Modifier.isTransient(mod()); - } - - @Override - default boolean isStatic() { - return Modifier.isStatic(mod()); - } - - @Override - default boolean isPublic() { - return Modifier.isPublic(mod()); - } - - @Override - default boolean isProtected() { - return Modifier.isProtected(mod()); - } - - @Override - default boolean isPrivate() { - return Modifier.isPrivate(mod()); - } - - @Override - default boolean isAbstract() { - return Modifier.isAbstract(mod()); - } - -} diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/model/jvm/JvmModelLoader.java b/unknow-server-maven/src/main/java/unknow/server/maven/model/jvm/JvmModelLoader.java deleted file mode 100644 index bbf19740..00000000 --- a/unknow-server-maven/src/main/java/unknow/server/maven/model/jvm/JvmModelLoader.java +++ /dev/null @@ -1,50 +0,0 @@ -/** - * - */ -package unknow.server.maven.model.jvm; - -import unknow.server.maven.model.ModelLoader; -import unknow.server.maven.model.TypeModel; - -/** - * @author unknow - */ -public class JvmModelLoader extends ModelLoader { - /** global jvm loader */ - public static final JvmModelLoader GLOBAL = new JvmModelLoader(JvmModelLoader.class.getClassLoader()); - - private final ClassLoader cl; - - /** - * create new JvmModelLoader - * - * @param cl class loader - */ - public JvmModelLoader(ClassLoader cl) { - this.cl = cl; - } - - @Override - protected TypeModel load(ModelLoader loader, String cl, TypeModel[] params) { - Class c = tryLoad(cl); - if (c == null) - return null; - - if (c.isEnum()) - return new JvmEnum(this, c, params); - return new JvmClass(this, c, params); - } - - private Class tryLoad(String clazz) { - while (true) { - try { - return cl.loadClass(clazz); - } catch (@SuppressWarnings("unused") ClassNotFoundException e) { - int i = clazz.lastIndexOf('.'); - if (i < 0) - return null; - clazz = clazz.substring(0, i) + "$" + clazz.substring(i + 1); - } - } - } -} diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/model/jvm/JvmPackage.java b/unknow-server-maven/src/main/java/unknow/server/maven/model/jvm/JvmPackage.java deleted file mode 100644 index ea47604a..00000000 --- a/unknow-server-maven/src/main/java/unknow/server/maven/model/jvm/JvmPackage.java +++ /dev/null @@ -1,44 +0,0 @@ -/** - * - */ -package unknow.server.maven.model.jvm; - -import java.util.Arrays; -import java.util.Collection; -import java.util.stream.Collectors; - -import unknow.server.maven.model.AnnotationModel; -import unknow.server.maven.model.PackageModel; - -/** - * @author unknow - */ -public class JvmPackage implements PackageModel { - private final JvmModelLoader loader; - private final Package p; - private Collection annotations; - - /** - * create new JvmPackage - * - * @param loader the loader - * @param p the package - */ - public JvmPackage(JvmModelLoader loader, Package p) { - this.loader = loader; - this.p = p; - } - - @Override - public Collection annotations() { - if (annotations == null) - annotations = Arrays.stream(p.getAnnotations()).map(a -> new JvmAnnotation(loader, a)).collect(Collectors.toList()); - return annotations; - } - - @Override - public String name() { - return p.getName(); - } - -} diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/model/jvm/JvmParam.java b/unknow-server-maven/src/main/java/unknow/server/maven/model/jvm/JvmParam.java deleted file mode 100644 index 168e52ed..00000000 --- a/unknow-server-maven/src/main/java/unknow/server/maven/model/jvm/JvmParam.java +++ /dev/null @@ -1,77 +0,0 @@ -/** - * - */ -package unknow.server.maven.model.jvm; - -import java.lang.reflect.Parameter; -import java.util.Arrays; -import java.util.Collection; -import java.util.stream.Collectors; - -import unknow.server.maven.model.AnnotationModel; -import unknow.server.maven.model.ClassModel; -import unknow.server.maven.model.ParamModel; -import unknow.server.maven.model.TypeModel; -import unknow.server.maven.model.util.WithParent; - -/** - * @author unknow - * @param owner of the param - */ -public class JvmParam> implements ParamModel { - private final JvmModelLoader loader; - private final T m; - private final Parameter p; - private final int index; - private TypeModel type; - private Collection annotations; - - /** - * create new JvmParam - * - * @param loader the loader - * @param m the owner of the param - * @param p the param - * @param index the parameter index - */ - public JvmParam(JvmModelLoader loader, T m, Parameter p, int index) { - this.loader = loader; - this.m = m; - this.p = p; - this.index = index; - } - - @Override - public int index() { - return index; - } - - @Override - public Collection annotations() { - if (annotations == null) - annotations = Arrays.stream(p.getAnnotations()).map(a -> new JvmAnnotation(loader, a)).collect(Collectors.toList()); - return annotations; - } - - @Override - public String name() { - return p.getName(); - } - - @Override - public T parent() { - return m; - } - - @Override - public TypeModel type() { - if (type == null) - type = loader.get(p.getParameterizedType().getTypeName(), m.parent().parameters()); - return type; - } - - @Override - public String toString() { - return p.toString(); - } -} \ No newline at end of file diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/model/jvm/JvmTypeParam.java b/unknow-server-maven/src/main/java/unknow/server/maven/model/jvm/JvmTypeParam.java deleted file mode 100644 index 3d2a7455..00000000 --- a/unknow-server-maven/src/main/java/unknow/server/maven/model/jvm/JvmTypeParam.java +++ /dev/null @@ -1,80 +0,0 @@ -/** - * - */ -package unknow.server.maven.model.jvm; - -import java.lang.reflect.TypeVariable; -import java.util.Arrays; -import java.util.Collection; -import java.util.List; -import java.util.stream.Collectors; - -import unknow.server.maven.model.AnnotationModel; -import unknow.server.maven.model.ClassModel; -import unknow.server.maven.model.TypeModel; -import unknow.server.maven.model.TypeParamModel; - -/** - * @author unknow - */ -public class JvmTypeParam implements TypeParamModel { - private final JvmModelLoader loader; - private final ClassModel c; - private final TypeVariable t; - private final TypeModel type; - private Collection annotations; - private List bounds; - - /** - * create new JvmTypeParam - * - * @param loader the loader - * @param c the class owning this param - * @param t the param variable - * @param type the concrete type - */ - public JvmTypeParam(JvmModelLoader loader, ClassModel c, TypeVariable t, TypeModel type) { - this.loader = loader; - this.c = c; - this.t = t; - this.type = type; - } - - @Override - public String name() { - return t.getName(); - } - - @Override - public ClassModel parent() { - return c; - } - - @Override - public TypeModel type() { - return type; - } - - @Override - public Collection annotations() { - if (annotations == null) - annotations = Arrays.stream(t.getAnnotations()).map(a -> new JvmAnnotation(loader, a)).collect(Collectors.toList()); - return annotations; - } - - @Override - public List bounds() { - if (bounds == null) - bounds = Arrays.stream(t.getBounds()).map(b -> loader.get(b.getTypeName(), c.parameters()).asClass()).collect(Collectors.toList()); - return bounds; - } - - @Override - public String toString() { - StringBuilder sb = new StringBuilder(name()); - if (type() != null) - sb.append('[').append(type()).append(']'); - return sb.toString(); - } - -} \ No newline at end of file diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/model/simple/SimpleAnnotation.java b/unknow-server-maven/src/main/java/unknow/server/maven/model/simple/SimpleAnnotation.java deleted file mode 100644 index 80a348aa..00000000 --- a/unknow-server-maven/src/main/java/unknow/server/maven/model/simple/SimpleAnnotation.java +++ /dev/null @@ -1,58 +0,0 @@ -package unknow.server.maven.model.simple; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; - -import unknow.server.maven.model.AnnotationMemberModel; -import unknow.server.maven.model.AnnotationModel; -import unknow.server.maven.model.AnnotationValue; -import unknow.server.maven.model.AnnotationValue.AnnotationValueClass; -import unknow.server.maven.model.AnnotationValue.AnnotationValueLiteral; -import unknow.server.maven.model.TypeModel; - -public class SimpleAnnotation implements AnnotationModel { - private final String name; - private final List members; - - public SimpleAnnotation(String name) { - this.name = name; - this.members = new ArrayList<>(0); - } - - public SimpleAnnotation withLiteral(String name, String value) { - return withLiteral(name, value, null); - } - - public SimpleAnnotation withLiteral(String name, String value, String defValue) { - AnnotationValue def = defValue == null ? AnnotationValue.NULL : new AnnotationValueLiteral(defValue); - members.add(new AnnotationMemberModel(name, new AnnotationValueLiteral(value), def)); - return this; - } - - public SimpleAnnotation withClass(String name, TypeModel type) { - return withClass(name, type, null); - } - - public SimpleAnnotation withClass(String name, TypeModel type, TypeModel defValue) { - AnnotationValue def = defValue == null ? AnnotationValue.NULL : new AnnotationValueClass(defValue); - members.add(new AnnotationMemberModel(name, new AnnotationValueClass(type), def)); - return this; - } - - public SimpleAnnotationArray withArray(String name) { - SimpleAnnotationArray a = new SimpleAnnotationArray(); - members.add(new AnnotationMemberModel(name, a, AnnotationValue.NULL)); - return a; - } - - @Override - public String name() { - return name; - } - - @Override - public Collection members() { - return members; - } -} diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/model/simple/SimpleAnnotationArray.java b/unknow-server-maven/src/main/java/unknow/server/maven/model/simple/SimpleAnnotationArray.java deleted file mode 100644 index b406ef04..00000000 --- a/unknow-server-maven/src/main/java/unknow/server/maven/model/simple/SimpleAnnotationArray.java +++ /dev/null @@ -1,45 +0,0 @@ -package unknow.server.maven.model.simple; - -import java.util.Arrays; - -import unknow.server.maven.model.AnnotationValue; -import unknow.server.maven.model.AnnotationValue.AnnotationValueArray; - -public class SimpleAnnotationArray extends AnnotationValueArray { - - /** - * create new AnnotationValueArray - */ - public SimpleAnnotationArray() { - super(new AnnotationValue[0]); - } - - public SimpleAnnotationArray with(AnnotationValue v) { - a = Arrays.copyOf(a, a.length + 1); - a[a.length - 1] = v; - return this; - } - - public SimpleAnnotationArray withNull() { - return with(AnnotationValue.NULL); - } - - public SimpleAnnotationArray withLiteral(String value) { - return with(new AnnotationValueLiteral(value)); - } - - public SimpleAnnotation withAnnotation(Class clazz) { - return withAnnotation(clazz.getName()); - } - - private SimpleAnnotation withAnnotation(String name) { - SimpleAnnotation an = new SimpleAnnotation(name); - with(new AnnotationValueAnnotation(an)); - return an; - } - - @Override - public AnnotationValue[] asArray() { - return a; - } -} diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/model/simple/SimpleClass.java b/unknow-server-maven/src/main/java/unknow/server/maven/model/simple/SimpleClass.java deleted file mode 100644 index 88455d3e..00000000 --- a/unknow-server-maven/src/main/java/unknow/server/maven/model/simple/SimpleClass.java +++ /dev/null @@ -1,87 +0,0 @@ -package unknow.server.maven.model.simple; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.List; - -import unknow.server.maven.model.ClassModel; -import unknow.server.maven.model.ConstructorModel; -import unknow.server.maven.model.FieldModel; -import unknow.server.maven.model.MethodModel; -import unknow.server.maven.model.PackageModel; -import unknow.server.maven.model.TypeModel; -import unknow.server.maven.model.TypeParamModel; -import unknow.server.maven.model.jvm.JvmMod; -import unknow.server.maven.model.jvm.JvmModelLoader; - -public class SimpleClass extends SimpleWithAnnotation implements ClassModel, JvmMod { - private final String name; - private final int mod; - private final List fields = new ArrayList<>(); - private final List methods = new ArrayList<>(); - private SimplePackage parent; - - public SimpleClass(String name, int mod) { - this.name = name; - this.mod = mod; - int i = name.lastIndexOf("."); - this.parent = new SimplePackage(i < 0 ? "" : name.substring(i + 1)); - } - - public final SimpleMethod withMethod(String name, int mod, TypeModel type) { - SimpleMethod m = new SimpleMethod(this, name, mod, type); - methods.add(m); - return m; - } - - @Override - public String name() { - return name; - } - - @Override - public PackageModel parent() { - return parent; - } - - @Override - public int mod() { - return mod; - } - - @Override - public ClassModel superType() { - return JvmModelLoader.GLOBAL.get("java.lang.Object").asClass(); - } - - @Override - public List interfaces() { - return Collections.emptyList(); - } - - @Override - public Collection constructors() { - return Collections.emptyList(); - } - - @Override - public Collection fields() { - return fields; - } - - @Override - public Collection methods() { - return methods; - } - - @Override - public List parameters() { - return Collections.emptyList(); - } - - @Override - public String toString() { - return name; - } -} diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/model/simple/SimpleMethod.java b/unknow-server-maven/src/main/java/unknow/server/maven/model/simple/SimpleMethod.java deleted file mode 100644 index 1300bdca..00000000 --- a/unknow-server-maven/src/main/java/unknow/server/maven/model/simple/SimpleMethod.java +++ /dev/null @@ -1,63 +0,0 @@ -package unknow.server.maven.model.simple; - -import java.util.ArrayList; -import java.util.List; - -import unknow.server.maven.model.AnnotationValue; -import unknow.server.maven.model.ClassModel; -import unknow.server.maven.model.MethodModel; -import unknow.server.maven.model.ParamModel; -import unknow.server.maven.model.TypeModel; -import unknow.server.maven.model.jvm.JvmMod; - -public class SimpleMethod extends SimpleWithAnnotation implements MethodModel, JvmMod { - private final ClassModel parent; - private final String name; - private final int mod; - private final TypeModel type; - private final List> params; - - public SimpleMethod(ClassModel parent, String name, int mod, TypeModel type) { - this.parent = parent; - this.name = name; - this.mod = mod; - this.type = type; - this.params = new ArrayList<>(0); - } - - public SimpleParam withParam(String name, TypeModel type) { - SimpleParam p = new SimpleParam<>(this, name, type, params.size()); - params.add(p); - return p; - } - - @Override - public String name() { - return name; - } - - @Override - public int mod() { - return mod; - } - - @Override - public TypeModel type() { - return type; - } - - @Override - public ClassModel parent() { - return parent; - } - - @Override - public List> parameters() { - return params; - } - - @Override - public AnnotationValue defaultValue() { - return null; - } -} diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/model/simple/SimplePackage.java b/unknow-server-maven/src/main/java/unknow/server/maven/model/simple/SimplePackage.java deleted file mode 100644 index 1a8113de..00000000 --- a/unknow-server-maven/src/main/java/unknow/server/maven/model/simple/SimplePackage.java +++ /dev/null @@ -1,17 +0,0 @@ - -package unknow.server.maven.model.simple; - -import unknow.server.maven.model.PackageModel; - -public class SimplePackage extends SimpleWithAnnotation implements PackageModel { - private final String name; - - public SimplePackage(String name) { - this.name = name; - } - - @Override - public String name() { - return name; - } -} diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/model/simple/SimpleParam.java b/unknow-server-maven/src/main/java/unknow/server/maven/model/simple/SimpleParam.java deleted file mode 100644 index d62c746e..00000000 --- a/unknow-server-maven/src/main/java/unknow/server/maven/model/simple/SimpleParam.java +++ /dev/null @@ -1,40 +0,0 @@ -package unknow.server.maven.model.simple; - -import unknow.server.maven.model.ClassModel; -import unknow.server.maven.model.ParamModel; -import unknow.server.maven.model.TypeModel; -import unknow.server.maven.model.util.WithParent; - -public class SimpleParam> extends SimpleWithAnnotation implements ParamModel { - private final T parent; - private final String name; - private final TypeModel type; - private final int index; - - public SimpleParam(T parent, String name, TypeModel type, int index) { - this.parent = parent; - this.name = name; - this.type = type; - this.index = index; - } - - @Override - public TypeModel type() { - return type; - } - - @Override - public String name() { - return name; - } - - @Override - public T parent() { - return parent; - } - - @Override - public int index() { - return index; - } -} diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/model/simple/SimpleWithAnnotation.java b/unknow-server-maven/src/main/java/unknow/server/maven/model/simple/SimpleWithAnnotation.java deleted file mode 100644 index b338d8e7..00000000 --- a/unknow-server-maven/src/main/java/unknow/server/maven/model/simple/SimpleWithAnnotation.java +++ /dev/null @@ -1,27 +0,0 @@ -package unknow.server.maven.model.simple; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; - -import unknow.server.maven.model.AnnotationModel; -import unknow.server.maven.model.util.WithAnnotation; - -public class SimpleWithAnnotation implements WithAnnotation { - private final List annotations = new ArrayList<>(0); - - public SimpleAnnotation withAnnotation(Class clazz) { - return withAnnotation(clazz.getName()); - } - - public SimpleAnnotation withAnnotation(String name) { - SimpleAnnotation a = new SimpleAnnotation(name); - annotations.add(a); - return a; - } - - @Override - public Collection annotations() { - return annotations; - } -} diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/model/util/AncestrorIterable.java b/unknow-server-maven/src/main/java/unknow/server/maven/model/util/AncestrorIterable.java deleted file mode 100644 index 87e39291..00000000 --- a/unknow-server-maven/src/main/java/unknow/server/maven/model/util/AncestrorIterable.java +++ /dev/null @@ -1,29 +0,0 @@ -/** - * - */ -package unknow.server.maven.model.util; - -import java.util.Iterator; - -import unknow.server.maven.model.ClassModel; - -/** - * @author unknow - */ -public class AncestrorIterable implements Iterable { - private final ClassModel clazz; - - /** - * create new AncestrorIterable - * - * @param clazz the root class - */ - public AncestrorIterable(ClassModel clazz) { - this.clazz = clazz; - } - - @Override - public Iterator iterator() { - return new AncestrorIterator(clazz); - } -} diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/model/util/AncestrorIterator.java b/unknow-server-maven/src/main/java/unknow/server/maven/model/util/AncestrorIterator.java deleted file mode 100644 index 22af62ff..00000000 --- a/unknow-server-maven/src/main/java/unknow/server/maven/model/util/AncestrorIterator.java +++ /dev/null @@ -1,65 +0,0 @@ -/** - * - */ -package unknow.server.maven.model.util; - -import java.util.HashSet; -import java.util.Iterator; -import java.util.NoSuchElementException; -import java.util.Queue; -import java.util.Set; -import java.util.concurrent.LinkedBlockingQueue; - -import unknow.server.maven.model.ClassModel; - -/** - * iterate over the ancestror of a class.
- * (iterate over interface first, then super class) - * - *
- * 
- * class A extends B implements I1, I2
- * interface I1 extends I3
- * 
- * - * iteration over A will give : [A, I1, I3, I2, B] - * - * @author unknow - */ -public class AncestrorIterator implements Iterator { - private final Queue queue; - private final Set saw; - - /** - * create new AncestrorIterator - * - * @param clazz the root class - */ - public AncestrorIterator(ClassModel clazz) { - this.queue = new LinkedBlockingQueue<>(); - this.queue.add(clazz); - this.saw = new HashSet<>(); - this.saw.add(clazz.toString()); - } - - @Override - public boolean hasNext() { - return !queue.isEmpty(); - } - - @Override - public ClassModel next() { - if (queue.isEmpty()) - throw new NoSuchElementException(); - ClassModel poll = queue.poll(); - ClassModel s = poll.superType(); - if (s != null && !"java.lang.Object".equals(s.name()) && saw.add(s.toString())) - queue.add(s); - - for (ClassModel i : poll.interfaces()) { - if (saw.add(i.toString())) - queue.add(i); - } - return poll; - } -} \ No newline at end of file diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/model/util/WithAnnotation.java b/unknow-server-maven/src/main/java/unknow/server/maven/model/util/WithAnnotation.java deleted file mode 100644 index a7c09fbd..00000000 --- a/unknow-server-maven/src/main/java/unknow/server/maven/model/util/WithAnnotation.java +++ /dev/null @@ -1,35 +0,0 @@ -/** - * - */ -package unknow.server.maven.model.util; - -import java.util.Collection; -import java.util.Optional; - -import unknow.server.maven.model.AnnotationModel; - -/** - * @author unknow - */ -public interface WithAnnotation { - /** - * @return the annotations - */ - Collection annotations(); - - /** - * @param cl annotation to get - * @return the annotation or null if missing - */ - default Optional annotation(Class cl) { - return annotation(cl.getName()); - } - - /** - * @param name fqn of the annotation - * @return the annotation or null if missing - */ - default Optional annotation(String name) { - return annotations().stream().filter(a -> name.equals(a.name())).findFirst(); - } -} diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/model/util/WithMod.java b/unknow-server-maven/src/main/java/unknow/server/maven/model/util/WithMod.java deleted file mode 100644 index 6d0a6c07..00000000 --- a/unknow-server-maven/src/main/java/unknow/server/maven/model/util/WithMod.java +++ /dev/null @@ -1,28 +0,0 @@ -/** - * - */ -package unknow.server.maven.model.util; - -/** - * @author unknow - */ -public interface WithMod { - - /** @return true is it's transient */ - boolean isTransient(); - - /** @return true is it's static */ - boolean isStatic(); - - /** @return true is it's public */ - boolean isPublic(); - - /** @return true is it's protected */ - boolean isProtected(); - - /** @return true is it's private */ - boolean isPrivate(); - - /** @return true is it's abstract */ - boolean isAbstract(); -} diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/model/util/WithName.java b/unknow-server-maven/src/main/java/unknow/server/maven/model/util/WithName.java deleted file mode 100644 index 5b9f5abc..00000000 --- a/unknow-server-maven/src/main/java/unknow/server/maven/model/util/WithName.java +++ /dev/null @@ -1,15 +0,0 @@ -/** - * - */ -package unknow.server.maven.model.util; - -/** - * @author unknow - */ -public interface WithName { - - /** - * @return object name - */ - String name(); -} diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/model/util/WithParent.java b/unknow-server-maven/src/main/java/unknow/server/maven/model/util/WithParent.java deleted file mode 100644 index 6f2939e5..00000000 --- a/unknow-server-maven/src/main/java/unknow/server/maven/model/util/WithParent.java +++ /dev/null @@ -1,16 +0,0 @@ -/** - * - */ -package unknow.server.maven.model.util; - -/** - * @author unknow - * @param the parent type - */ -public interface WithParent { - - /** - * @return owning model - */ - T parent(); -} diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/model/util/WithType.java b/unknow-server-maven/src/main/java/unknow/server/maven/model/util/WithType.java deleted file mode 100644 index 4e21556e..00000000 --- a/unknow-server-maven/src/main/java/unknow/server/maven/model/util/WithType.java +++ /dev/null @@ -1,17 +0,0 @@ -/** - * - */ -package unknow.server.maven.model.util; - -import unknow.server.maven.model.TypeModel; - -/** - * @author unknow - */ -public interface WithType { - - /** - * @return object type - */ - TypeModel type(); -} 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 21b89ca1..3c383b32 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.model.api.ModelLoader; import unknow.server.maven.TypeCache; -import unknow.server.maven.model.ModelLoader; import unknow.server.maven.servlet.descriptor.Descriptor; /** 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 8f5261bb..eba5bc9b 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 @@ -32,9 +32,9 @@ import jakarta.servlet.DispatcherType; import jakarta.servlet.ServletContainerInitializer; +import unknow.model.api.ModelLoader; import unknow.server.maven.AbstractGeneratorMojo; import unknow.server.maven.TypeCache; -import unknow.server.maven.model.ModelLoader; import unknow.server.maven.servlet.Builder.BuilderContext; import unknow.server.maven.servlet.builder.CreateContext; import unknow.server.maven.servlet.builder.CreateEventManager; diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/servlet/WebXml.java b/unknow-server-maven/src/main/java/unknow/server/maven/servlet/WebXml.java index dadef88f..5ba1f825 100644 --- a/unknow-server-maven/src/main/java/unknow/server/maven/servlet/WebXml.java +++ b/unknow-server-maven/src/main/java/unknow/server/maven/servlet/WebXml.java @@ -10,8 +10,8 @@ import javax.xml.stream.XMLStreamReader; import jakarta.servlet.DispatcherType; -import unknow.server.maven.model.ClassModel; -import unknow.server.maven.model.ModelLoader; +import unknow.model.api.ClassModel; +import unknow.model.api.ModelLoader; import unknow.server.maven.servlet.descriptor.Descriptor; import unknow.server.maven.servlet.descriptor.LD; import unknow.server.maven.servlet.descriptor.SD; 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 b4bce96e..960e6dff 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.model.api.AnnotationModel; +import unknow.model.api.TypeModel; import unknow.server.maven.AbstractGeneratorMojo.TypeConsumer; -import unknow.server.maven.model.AnnotationModel; -import unknow.server.maven.model.TypeModel; import unknow.server.servlet.impl.ServletCookieConfigImpl; import unknow.server.servlet.utils.Resource; diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/servlet/descriptor/SD.java b/unknow-server-maven/src/main/java/unknow/server/maven/servlet/descriptor/SD.java index c288a3d7..e08509a5 100644 --- a/unknow-server-maven/src/main/java/unknow/server/maven/servlet/descriptor/SD.java +++ b/unknow-server-maven/src/main/java/unknow/server/maven/servlet/descriptor/SD.java @@ -8,8 +8,8 @@ import java.util.List; import jakarta.servlet.DispatcherType; -import unknow.server.maven.model.AnnotationModel; -import unknow.server.maven.model.TypeModel; +import unknow.model.api.AnnotationModel; +import unknow.model.api.TypeModel; /** * servlet of filter descriptor diff --git a/unknow-server-maven/src/test/java/unknow/server/maven/jaxb/model/XmlLoaderTest.java b/unknow-server-maven/src/test/java/unknow/server/maven/jaxb/model/XmlLoaderTest.java index 52b52d8b..468d30b6 100644 --- a/unknow-server-maven/src/test/java/unknow/server/maven/jaxb/model/XmlLoaderTest.java +++ b/unknow-server-maven/src/test/java/unknow/server/maven/jaxb/model/XmlLoaderTest.java @@ -13,11 +13,11 @@ import org.junit.jupiter.api.Test; +import unknow.model.api.PrimitiveModel; +import unknow.model.jvm.JvmModelLoader; +import unknow.model.simple.SimpleAnnotationArray; +import unknow.model.simple.SimpleClass; import unknow.server.maven.jaxb.model.XmlElements.XmlGroup; -import unknow.server.maven.model.PrimitiveModel; -import unknow.server.maven.model.jvm.JvmModelLoader; -import unknow.server.maven.model.simple.SimpleAnnotationArray; -import unknow.server.maven.model.simple.SimpleClass; public class XmlLoaderTest { diff --git a/unknow-server-maven/src/test/java/unknow/server/maven/model/ModelLoaderTest.java b/unknow-server-maven/src/test/java/unknow/server/maven/model/ModelLoaderTest.java deleted file mode 100644 index 3a118d27..00000000 --- a/unknow-server-maven/src/test/java/unknow/server/maven/model/ModelLoaderTest.java +++ /dev/null @@ -1,110 +0,0 @@ -/** - * - */ -package unknow.server.maven.model; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; - -import java.util.Arrays; -import java.util.List; -import java.util.stream.Stream; - -import org.junit.jupiter.api.Test; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.Arguments; -import org.junit.jupiter.params.provider.MethodSource; - -import com.github.javaparser.JavaParser; -import com.github.javaparser.ParserConfiguration; -import com.github.javaparser.ast.CompilationUnit; -import com.github.javaparser.ast.body.ClassOrInterfaceDeclaration; -import com.github.javaparser.resolution.TypeSolver; -import com.github.javaparser.symbolsolver.JavaSymbolSolver; -import com.github.javaparser.symbolsolver.resolution.typesolvers.ReflectionTypeSolver; - -import unknow.server.maven.model.ast.AstClass; -import unknow.server.maven.model.jvm.JvmClass; -import unknow.server.maven.model.jvm.JvmModelLoader; - -/** - * @author unknow - */ -public class ModelLoaderTest { - - public static final Stream input() { - return Stream.of(Arguments.of("String", Arrays.asList("String")), Arguments.of("Collection", Arrays.asList("Collection", "String")), - Arguments.of("Map", Arrays.asList("Map", "String", "String")), - Arguments.of("Collection>", Arrays.asList("Collection", "List")), - Arguments.of("Map,String>", Arrays.asList("Map", "List", "String")), - Arguments.of("Map>", Arrays.asList("Map", "String", "List")), Arguments.of("A>", Arrays.asList("A", "B", "C", "D")), - Arguments.of("L<>", Arrays.asList("L", ""))); - } - - @ParameterizedTest(name = "{0}") - @MethodSource("input") - void testParse(String clazz, List result) { - assertEquals(result, ModelLoader.parse(clazz)); - } - - @Test - void testCollection() { - ModelLoader loader = JvmModelLoader.GLOBAL; - - TypeModel col = loader.get(G.class.getName()); - ClassModel slist = loader.get(StringList.class.getName()).asClass(); - assertTrue(col.isAssignableFrom(slist)); - assertEquals("java.lang.String", slist.superType().parameter(0).type().name()); - assertEquals("java.lang.String", slist.superType().field("a").type().name()); - - ClassModel ilist = loader.get(IntList.class.getName()).asClass(); - assertTrue(col.isAssignableFrom(ilist)); - assertEquals("java.lang.Integer", ilist.superType().parameter(0).type().name()); - MethodModel m = ilist.superType().method("m", loader.get("java.lang.Integer")).orElse(null); - assertEquals("java.lang.Integer", m.type().name()); - assertEquals("java.lang.Integer", m.parameter(0).type().name()); - } - - public static final Stream testClassName() { - Class cl = ModelLoaderTest.class; - - TypeSolver resolver = new ReflectionTypeSolver(false); - JavaSymbolSolver javaSymbolSolver = new JavaSymbolSolver(resolver); - JavaParser parser = new JavaParser(new ParserConfiguration().setStoreTokens(true).setSymbolResolver(javaSymbolSolver)); - CompilationUnit cu = parser.parse("package " + cl.getPackageName() + ";" + " public class " + cl.getSimpleName() + "{" + " public static class G {}" - + " public static class StringList extends G {}" + "}").getResult().orElse(null); - - ClassOrInterfaceDeclaration ast = cu.findFirst(ClassOrInterfaceDeclaration.class, c -> "StringList".equals(c.getNameAsString())).orElse(null); - AstClass astList = new AstClass(JvmModelLoader.GLOBAL, null, ast, new TypeModel[0]); - - JvmClass jvmList = new JvmClass(JvmModelLoader.GLOBAL, StringList.class, new TypeModel[0]); - return Stream.of(Arguments.of(jvmList), Arguments.of(astList)); - - } - - @ParameterizedTest() - @MethodSource() - void testClassName(ClassModel list) { - - assertEquals(this.getClass().getName() + "$StringList", list.name()); - assertEquals(this.getClass().getName() + "$StringList", list.genericName()); - - assertEquals(this.getClass().getName() + "$G", list.superType().name()); - assertEquals(this.getClass().getName() + "$G", list.superType().genericName()); - - } - - public static class G { - A a; - - A m(A a) { - return a; - } - } - - public static class StringList extends G { // ok - } - - public static class IntList extends G { // ok - } -}