Skip to content

Commit 6cc81f2

Browse files
committed
Mark number types as valid JS number type
1 parent 210bbcd commit 6cc81f2

File tree

1 file changed

+15
-8
lines changed

1 file changed

+15
-8
lines changed

src/main/java/zzzank/probejs/docs/Primitives.java

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import zzzank.probejs.lang.typescript.Declaration;
66
import zzzank.probejs.lang.typescript.ScriptDump;
77
import zzzank.probejs.lang.typescript.code.Code;
8+
import zzzank.probejs.lang.typescript.code.member.TypeDecl;
89
import zzzank.probejs.lang.typescript.code.type.Types;
910
import zzzank.probejs.lang.typescript.code.type.js.JSPrimitiveType;
1011
import zzzank.probejs.plugin.ProbeJSPlugin;
@@ -23,6 +24,8 @@ public class Primitives extends ProbeJSPlugin {
2324
public static final JSPrimitiveType CHARACTER = Types.primitive("character");
2425
public static final JSPrimitiveType CHAR_SEQUENCE = Types.primitive("charseq");
2526

27+
private static final JSPrimitiveType TS_NUMBER = Types.primitive("Number");
28+
private static final JSPrimitiveType JS_NUMBER = Types.primitive("number");
2629

2730
static class JavaPrimitive extends Code {
2831
private final String javaPrimitive;
@@ -80,15 +83,19 @@ public void addPredefinedTypes(TypeConverter converter) {
8083

8184
@Override
8285
public void addGlobals(ScriptDump scriptDump) {
86+
var numberBoth = Types.and(JS_NUMBER, TS_NUMBER);
8387
scriptDump.addGlobal("primitives",
84-
JavaPrimitive.of("long", "Number"),
85-
JavaPrimitive.of("integer", "Number"),
86-
JavaPrimitive.of("short", "Number"),
87-
JavaPrimitive.of("byte", "Number"),
88-
JavaPrimitive.of("double", "Number"),
89-
JavaPrimitive.of("float", "Number"),
90-
JavaPrimitive.of("character", "String"),
91-
JavaPrimitive.of("charseq", "String")
88+
//for number types, we can safely mark them as a primitive type instead of an interface
89+
//because the classes that represent them are `final`, so there's no need of taking inheritance into account
90+
new TypeDecl("long", numberBoth),
91+
new TypeDecl("integer", numberBoth),
92+
new TypeDecl("short", numberBoth),
93+
new TypeDecl("byte", numberBoth),
94+
new TypeDecl("double", numberBoth),
95+
new TypeDecl("float", numberBoth),
96+
//for CharSequence, we should NOT mark it as a primitive type, because of inheritance
97+
JavaPrimitive.of("character", "String"),
98+
JavaPrimitive.of("charseq", "String")
9299
);
93100
}
94101
}

0 commit comments

Comments
 (0)