diff --git a/src/main/java/com/probejs/rewrite/doc/type/DocTypeArray.java b/src/main/java/com/probejs/rewrite/doc/type/DocTypeArray.java deleted file mode 100644 index f23a57d3..00000000 --- a/src/main/java/com/probejs/rewrite/doc/type/DocTypeArray.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.probejs.rewrite.doc.type; - -import com.probejs.info.type.IType; -import com.probejs.info.type.TypeArray; -import lombok.Getter; - -@Getter -public class DocTypeArray implements DocType { - - private final DocType base; - - DocTypeArray(IType type) { - this.base = DocTypeResolver.of(((TypeArray)type).getBase()); - } -} diff --git a/src/main/java/com/probejs/rewrite/doc/type/DocTypeResolver.java b/src/main/java/com/probejs/rewrite/doc/type/DocTypeResolver.java index de2f717c..02c34fea 100644 --- a/src/main/java/com/probejs/rewrite/doc/type/DocTypeResolver.java +++ b/src/main/java/com/probejs/rewrite/doc/type/DocTypeResolver.java @@ -3,6 +3,7 @@ import com.probejs.info.type.IType; import com.probejs.info.type.TypeArray; import com.probejs.info.type.TypeClass; +import com.probejs.rewrite.doc.type.java.TypeClazz; import java.util.HashMap; import java.util.Map; @@ -14,8 +15,8 @@ public abstract class DocTypeResolver { static { REGISTRIES = new HashMap<>(); - REGISTRIES.put(TypeClass.class, DocTypeClazz::new); - REGISTRIES.put(TypeArray.class, DocTypeClazz::new); + REGISTRIES.put(TypeClass.class, TypeClazz::new); + REGISTRIES.put(TypeArray.class, com.probejs.rewrite.doc.type.java.TypeArray::new); } public static DocType of(IType type) { diff --git a/src/main/java/com/probejs/rewrite/doc/type/java/JavaType.java b/src/main/java/com/probejs/rewrite/doc/type/java/JavaType.java new file mode 100644 index 00000000..4b85f8a1 --- /dev/null +++ b/src/main/java/com/probejs/rewrite/doc/type/java/JavaType.java @@ -0,0 +1,18 @@ +package com.probejs.rewrite.doc.type.java; + +import com.probejs.rewrite.doc.type.DocType; + +import java.lang.reflect.Type; +import java.util.Collection; + +/** + * @author ZZZank + */ +public interface JavaType extends DocType { + + Type raw(); + + JavaType base(); + + Collection> relatedClasses(); +} diff --git a/src/main/java/com/probejs/rewrite/doc/type/java/TypeArray.java b/src/main/java/com/probejs/rewrite/doc/type/java/TypeArray.java new file mode 100644 index 00000000..6255535d --- /dev/null +++ b/src/main/java/com/probejs/rewrite/doc/type/java/TypeArray.java @@ -0,0 +1,16 @@ +package com.probejs.rewrite.doc.type.java; + +import com.probejs.info.type.IType; +import com.probejs.rewrite.doc.type.DocType; +import com.probejs.rewrite.doc.type.DocTypeResolver; +import lombok.Getter; + +@Getter +public class TypeArray implements DocType { + + private final DocType base; + + public TypeArray(IType type) { + this.base = DocTypeResolver.of(type.getBase()); + } +} diff --git a/src/main/java/com/probejs/rewrite/doc/type/DocTypeClazz.java b/src/main/java/com/probejs/rewrite/doc/type/java/TypeClazz.java similarity index 70% rename from src/main/java/com/probejs/rewrite/doc/type/DocTypeClazz.java rename to src/main/java/com/probejs/rewrite/doc/type/java/TypeClazz.java index 7c7858b1..a07c135f 100644 --- a/src/main/java/com/probejs/rewrite/doc/type/DocTypeClazz.java +++ b/src/main/java/com/probejs/rewrite/doc/type/java/TypeClazz.java @@ -1,30 +1,31 @@ -package com.probejs.rewrite.doc.type; +package com.probejs.rewrite.doc.type.java; import com.probejs.info.clazz.ClassInfo; import com.probejs.info.type.IType; import com.probejs.info.type.TypeClass; import com.probejs.rewrite.ClazzPath; import com.probejs.rewrite.doc.DocClazz; +import com.probejs.rewrite.doc.type.DocType; import lombok.Getter; @Getter -public class DocTypeClazz implements DocType { +public class TypeClazz implements DocType { private final ClazzPath path; private final DocClazz doc; private final boolean assigned; - DocTypeClazz(Class clazz) { + TypeClazz(Class clazz) { this.doc = DocClazz.of(clazz); this.path = this.doc.getPath(); this.assigned = !this.doc.getAssignables().isEmpty(); } - DocTypeClazz(ClassInfo clazz) { + TypeClazz(ClassInfo clazz) { this(clazz.getRaw()); } - public DocTypeClazz(IType iType) { + public TypeClazz(IType iType) { this(((TypeClass) iType).getRaw()); } } diff --git a/src/main/java/com/probejs/rewrite/doc/type/java/TypeVariable.java b/src/main/java/com/probejs/rewrite/doc/type/java/TypeVariable.java new file mode 100644 index 00000000..dd280f9f --- /dev/null +++ b/src/main/java/com/probejs/rewrite/doc/type/java/TypeVariable.java @@ -0,0 +1,38 @@ +package com.probejs.rewrite.doc.type.java; + +import com.probejs.info.type.TypeResolver; +import com.probejs.rewrite.doc.type.DocTypeResolver; +import lombok.AllArgsConstructor; +import lombok.val; + +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +/** + * @author ZZZank + */ +@AllArgsConstructor +public class TypeVariable implements JavaType { + private final java.lang.reflect.TypeVariable raw; + + @Override + public Type raw() { + return raw; + } + + @Override + public JavaType base() { + return this; + } + + @Override + public Collection> relatedClasses() { + val related = new ArrayList>(); + for (Type bound : raw.getBounds()) { + + } + return related; + } +} diff --git a/src/main/java/com/probejs/rewrite/doc/type/typescript/TSType.java b/src/main/java/com/probejs/rewrite/doc/type/typescript/TSType.java new file mode 100644 index 00000000..dd9f9af1 --- /dev/null +++ b/src/main/java/com/probejs/rewrite/doc/type/typescript/TSType.java @@ -0,0 +1,9 @@ +package com.probejs.rewrite.doc.type.typescript; + +import com.probejs.rewrite.doc.type.DocType; + +/** + * @author ZZZank + */ +public interface TSType extends DocType { +} diff --git a/src/main/java/com/probejs/rewrite/doc/type/typescript/TypeIntersection.java b/src/main/java/com/probejs/rewrite/doc/type/typescript/TypeIntersection.java new file mode 100644 index 00000000..a38a29a4 --- /dev/null +++ b/src/main/java/com/probejs/rewrite/doc/type/typescript/TypeIntersection.java @@ -0,0 +1,10 @@ +package com.probejs.rewrite.doc.type.typescript; + +import com.probejs.rewrite.doc.type.DocType; + +/** + * aka TypeAnd, "string & number" + * @author ZZZank + */ +public record TypeIntersection(DocType left, DocType right) implements TSType { +} diff --git a/src/main/java/com/probejs/rewrite/doc/type/typescript/TypeLiteral.java b/src/main/java/com/probejs/rewrite/doc/type/typescript/TypeLiteral.java new file mode 100644 index 00000000..86220a89 --- /dev/null +++ b/src/main/java/com/probejs/rewrite/doc/type/typescript/TypeLiteral.java @@ -0,0 +1,11 @@ +package com.probejs.rewrite.doc.type.typescript; + +import lombok.AllArgsConstructor; + +/** + * @author ZZZank + */ +@AllArgsConstructor +public class TypeLiteral { + private final String literal; +} diff --git a/src/main/java/com/probejs/rewrite/doc/type/typescript/TypeObject.java b/src/main/java/com/probejs/rewrite/doc/type/typescript/TypeObject.java new file mode 100644 index 00000000..81340d1b --- /dev/null +++ b/src/main/java/com/probejs/rewrite/doc/type/typescript/TypeObject.java @@ -0,0 +1,14 @@ +package com.probejs.rewrite.doc.type.typescript; + +import com.probejs.rewrite.doc.type.DocType; +import lombok.AllArgsConstructor; + +import java.util.Map; + +/** + * @author ZZZank + */ +@AllArgsConstructor +public class TypeObject implements TSType { + private final Map map; +} diff --git a/src/main/java/com/probejs/rewrite/doc/type/typescript/TypeUnion.java b/src/main/java/com/probejs/rewrite/doc/type/typescript/TypeUnion.java new file mode 100644 index 00000000..f8bfae2f --- /dev/null +++ b/src/main/java/com/probejs/rewrite/doc/type/typescript/TypeUnion.java @@ -0,0 +1,11 @@ +package com.probejs.rewrite.doc.type.typescript; + +import com.probejs.rewrite.doc.type.DocType; + +/** + * aka TypeOr, "string | number" + * + * @author ZZZank + */ +public record TypeUnion(DocType left, DocType right) implements TSType { +}