@idlizer/core 2.1.10-arktscgen-3a → 2.1.10-arktscgen-5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/build/lib/src/Language.d.ts +0 -1
  2. package/build/lib/src/Language.js +0 -2
  3. package/build/lib/src/LanguageWriters/ArgConvertors.d.ts +15 -2
  4. package/build/lib/src/LanguageWriters/ArgConvertors.js +75 -19
  5. package/build/lib/src/LanguageWriters/LanguageWriter.d.ts +14 -2
  6. package/build/lib/src/LanguageWriters/LanguageWriter.js +12 -4
  7. package/build/lib/src/LanguageWriters/convertors/CJConvertors.d.ts +0 -1
  8. package/build/lib/src/LanguageWriters/convertors/CJConvertors.js +2 -4
  9. package/build/lib/src/LanguageWriters/convertors/CppConvertors.d.ts +7 -7
  10. package/build/lib/src/LanguageWriters/convertors/CppConvertors.js +37 -23
  11. package/build/lib/src/LanguageWriters/convertors/KotlinConvertors.js +9 -5
  12. package/build/lib/src/LanguageWriters/convertors/TSConvertors.d.ts +4 -4
  13. package/build/lib/src/LanguageWriters/convertors/TSConvertors.js +73 -30
  14. package/build/lib/src/LanguageWriters/index.d.ts +2 -2
  15. package/build/lib/src/LanguageWriters/index.js +8 -13
  16. package/build/lib/src/LanguageWriters/writers/CJLanguageWriter.d.ts +4 -0
  17. package/build/lib/src/LanguageWriters/writers/CJLanguageWriter.js +24 -16
  18. package/build/lib/src/LanguageWriters/writers/CppLanguageWriter.d.ts +2 -0
  19. package/build/lib/src/LanguageWriters/writers/CppLanguageWriter.js +7 -1
  20. package/build/lib/src/LanguageWriters/writers/ETSLanguageWriter.d.ts +1 -2
  21. package/build/lib/src/LanguageWriters/writers/ETSLanguageWriter.js +0 -6
  22. package/build/lib/src/LanguageWriters/writers/JavaLanguageWriter.d.ts +2 -0
  23. package/build/lib/src/LanguageWriters/writers/JavaLanguageWriter.js +11 -0
  24. package/build/lib/src/LanguageWriters/writers/KotlinLanguageWriter.d.ts +8 -0
  25. package/build/lib/src/LanguageWriters/writers/KotlinLanguageWriter.js +75 -27
  26. package/build/lib/src/LanguageWriters/writers/TsLanguageWriter.d.ts +2 -0
  27. package/build/lib/src/LanguageWriters/writers/TsLanguageWriter.js +38 -12
  28. package/build/lib/src/LibraryInterface.d.ts +0 -1
  29. package/build/lib/src/config.d.ts +760 -0
  30. package/build/lib/src/config.js +7 -0
  31. package/build/lib/src/formatter.js +5 -2
  32. package/build/lib/src/from-idl/DtsPrinter.js +3 -3
  33. package/build/lib/src/from-idl/common.js +2 -2
  34. package/build/lib/src/from-idl/deserialize.d.ts +3 -7
  35. package/build/lib/src/from-idl/deserialize.js +65 -39
  36. package/build/lib/src/from-idl/parser.d.ts +1 -1
  37. package/build/lib/src/from-idl/parser.js +29 -20
  38. package/build/lib/src/idl.d.ts +12 -1
  39. package/build/lib/src/idl.js +73 -11
  40. package/build/lib/src/index.d.ts +3 -5
  41. package/build/lib/src/index.js +3 -5
  42. package/build/lib/src/inheritance.d.ts +0 -2
  43. package/build/lib/src/inheritance.js +0 -17
  44. package/build/lib/src/languageSpecificKeywords.js +1 -1
  45. package/build/lib/src/peer-generation/ConflictingDeclarations.d.ts +6 -0
  46. package/build/lib/src/peer-generation/ConflictingDeclarations.js +43 -0
  47. package/build/lib/src/peer-generation/LayoutManager.d.ts +2 -0
  48. package/build/lib/src/peer-generation/LayoutManager.js +15 -0
  49. package/build/lib/src/peer-generation/Materialized.d.ts +2 -0
  50. package/build/lib/src/peer-generation/Materialized.js +14 -1
  51. package/build/lib/src/peer-generation/PeerLibrary.d.ts +0 -3
  52. package/build/lib/src/peer-generation/PeerLibrary.js +63 -38
  53. package/build/lib/src/peer-generation/idl/IdlNameConvertor.d.ts +6 -0
  54. package/build/lib/src/peer-generation/idl/IdlNameConvertor.js +15 -3
  55. package/build/lib/src/peer-generation/isMaterialized.js +1 -1
  56. package/build/lib/src/peer-generation/modules.d.ts +2 -0
  57. package/build/lib/src/peer-generation/modules.js +14 -1
  58. package/build/lib/src/transformers/GenericTransformer.js +70 -5
  59. package/build/lib/src/transformers/NullTransformer.d.ts +0 -1
  60. package/build/lib/src/transformers/NullTransformer.js +1 -2
  61. package/build/lib/src/transformers/OnSerializeTransformer.d.ts +3 -0
  62. package/build/lib/src/transformers/OnSerializeTransformer.js +19 -0
  63. package/build/lib/src/util.d.ts +10 -39
  64. package/build/lib/src/util.js +56 -371
  65. package/package.json +45 -49
@@ -13,11 +13,26 @@
13
13
  * limitations under the License.
14
14
  */
15
15
  import * as idl from '../../idl';
16
+ import { Language } from '../../Language';
17
+ import { isTopLevelConflicted } from '../../peer-generation/ConflictingDeclarations';
18
+ import { isDeclaredInCurrentFile, LayoutNodeRole } from '../../peer-generation/LayoutManager';
16
19
  import { maybeRestoreGenerics } from '../../transformers/GenericTransformer';
17
20
  import { convertNode, convertType } from '../nameConvertor';
18
21
  export class TSTypeNameConvertor {
19
- constructor(resolver) {
20
- this.resolver = resolver;
22
+ constructor(library) {
23
+ this.library = library;
24
+ }
25
+ mangleTopLevel(decl) {
26
+ if (!isDeclaredInCurrentFile(this.library.layout, { node: decl, role: LayoutNodeRole.INTERFACE }) && isTopLevelConflicted(this.library, Language.TS, decl)) {
27
+ const namespaces = idl.getNamespacesPathFor(decl);
28
+ if (namespaces.length === 0) {
29
+ return idl.getQualifiedName(decl, "package.namespace.name").replaceAll('.', '_');
30
+ }
31
+ const [rootNamespace, ...otherNamespaces] = idl.getNamespacesPathFor(decl);
32
+ const mangledRoot = idl.getQualifiedName(rootNamespace, "package.namespace.name").replaceAll('.', '_');
33
+ return [mangledRoot, ...otherNamespaces, decl.name].join(".");
34
+ }
35
+ return undefined;
21
36
  }
22
37
  convert(node) {
23
38
  return convertNode(this, node);
@@ -26,18 +41,22 @@ export class TSTypeNameConvertor {
26
41
  return node.name;
27
42
  }
28
43
  convertInterface(node) {
29
- return idl.getQualifiedName(node, "namespace.name");
44
+ var _a;
45
+ return (_a = this.mangleTopLevel(node)) !== null && _a !== void 0 ? _a : idl.getQualifiedName(node, "namespace.name");
30
46
  }
31
47
  convertEnum(node) {
32
- return idl.getQualifiedName(node, "namespace.name");
48
+ var _a;
49
+ return (_a = this.mangleTopLevel(node)) !== null && _a !== void 0 ? _a : idl.getQualifiedName(node, "namespace.name");
33
50
  }
34
51
  convertTypedef(node) {
35
- return node.name;
52
+ var _a;
53
+ return (_a = this.mangleTopLevel(node)) !== null && _a !== void 0 ? _a : idl.getQualifiedName(node, "namespace.name");
36
54
  }
37
55
  convertCallback(node) {
56
+ var _a;
38
57
  return idl.isSyntheticEntry(node)
39
58
  ? this.mapCallback(node)
40
- : node.name;
59
+ : (_a = this.mangleTopLevel(node)) !== null && _a !== void 0 ? _a : node.name;
41
60
  }
42
61
  convertMethod(node) {
43
62
  return node.name;
@@ -90,14 +109,14 @@ export class TSTypeNameConvertor {
90
109
  convertTypeReferenceAsImport(type, importClause) {
91
110
  var _a;
92
111
  const maybeTypeArguments = ((_a = type.typeArguments) === null || _a === void 0 ? void 0 : _a.length) ? `<${type.typeArguments.join(', ')}>` : "";
93
- let decl = this.resolver.resolveTypeReference(type);
112
+ let decl = this.library.resolveTypeReference(type);
94
113
  if (decl)
95
114
  return `${decl.name}${maybeTypeArguments}`;
96
115
  return `${type.name}${maybeTypeArguments}`;
97
116
  }
98
117
  convertTypeReference(type) {
99
- var _a, _b;
100
- let decl = this.resolver.resolveTypeReference(type);
118
+ var _a, _b, _c;
119
+ let decl = this.library.resolveTypeReference(type);
101
120
  if (decl) {
102
121
  if (idl.isSyntheticEntry(decl)) {
103
122
  if (idl.isCallback(decl)) {
@@ -116,10 +135,10 @@ export class TSTypeNameConvertor {
116
135
  // (can not cast MyEnum to exact MyEnum.Value1)
117
136
  decl = decl.parent;
118
137
  }
119
- let maybeRestoredGeneric = maybeRestoreGenerics(type, this.resolver);
138
+ let maybeRestoredGeneric = maybeRestoreGenerics(type, this.library);
120
139
  if (maybeRestoredGeneric) {
121
140
  type = maybeRestoredGeneric;
122
- decl = this.resolver.resolveTypeReference(maybeRestoredGeneric);
141
+ decl = this.library.resolveTypeReference(maybeRestoredGeneric);
123
142
  }
124
143
  let typeSpec = type.name;
125
144
  let typeArgs = (_b = (_a = type.typeArguments) === null || _a === void 0 ? void 0 : _a.map(it => this.convert(it))) !== null && _b !== void 0 ? _b : [];
@@ -131,7 +150,7 @@ export class TSTypeNameConvertor {
131
150
  if (decl) {
132
151
  const path = idl.getNamespacesPathFor(decl).map(it => it.name);
133
152
  path.push(decl.name);
134
- return `${path.join(".")}${maybeTypeArguments}`;
153
+ return `${(_c = this.mangleTopLevel(decl)) !== null && _c !== void 0 ? _c : path.join(".")}${maybeTypeArguments}`;
135
154
  }
136
155
  return `${type.name}${maybeTypeArguments}`;
137
156
  }
@@ -192,27 +211,16 @@ export class TSTypeNameConvertor {
192
211
  }
193
212
  return subst;
194
213
  }
195
- applySubstitution(subst, type) {
196
- var _a;
197
- if (idl.isContainerType(type)) {
198
- return idl.createContainerType(type.containerKind, type.elementType.map(it => this.applySubstitution(subst, it)));
199
- }
200
- if (idl.isReferenceType(type)) {
201
- return idl.createReferenceType(type.name, (_a = type.typeArguments) === null || _a === void 0 ? void 0 : _a.map(it => this.applySubstitution(subst, it)));
202
- }
203
- if (idl.isTypeParameterType(type)) {
204
- const record = subst.get(type.name);
205
- if (record) {
206
- return record;
207
- }
208
- }
209
- return type;
210
- }
211
214
  mapCallback(decl, args) {
212
215
  const subst = this.createTypeSubstitution(decl.typeParameters, args);
213
216
  const parameters = decl.parameters.map(it => {
217
+ if (subst.size == 0)
218
+ return it;
214
219
  const param = idl.clone(it);
215
- param.type = this.applySubstitution(subst, param.type);
220
+ param.parent = it.parent;
221
+ const type = applySubstitution(subst, param.type);
222
+ updateParent(param, type);
223
+ param.type = type;
216
224
  return param;
217
225
  });
218
226
  const params = parameters.map(it => `${it.isVariadic ? "..." : ""}${it.name}${it.isOptional ? "?" : ""}: ${this.convert(it.type)}${it.isVariadic ? "[]" : ""}`);
@@ -223,8 +231,13 @@ export class TSTypeNameConvertor {
223
231
  const name = `${isTuple ? "[" : "{"} ${decl.properties
224
232
  .map(it => isTuple ? this.processTupleType(it) : it)
225
233
  .map(it => {
234
+ if (subst.size == 0)
235
+ return it;
226
236
  const prop = idl.clone(it);
227
- prop.type = this.applySubstitution(subst, prop.type);
237
+ prop.parent = it.parent;
238
+ const type = applySubstitution(subst, prop.type);
239
+ updateParent(prop, type);
240
+ prop.type = type;
228
241
  return prop;
229
242
  })
230
243
  .map(it => {
@@ -287,4 +300,34 @@ export class TSInteropArgConvertor {
287
300
  throw new Error("Cannot pass union types through interop");
288
301
  }
289
302
  }
303
+ function applySubstitution(subst, type) {
304
+ var _a;
305
+ if (idl.isContainerType(type)) {
306
+ return idl.createContainerType(type.containerKind, type.elementType.map(it => applySubstitution(subst, it)));
307
+ }
308
+ if (idl.isReferenceType(type)) {
309
+ return idl.createReferenceType(type.name, (_a = type.typeArguments) === null || _a === void 0 ? void 0 : _a.map(it => applySubstitution(subst, it)));
310
+ }
311
+ if (idl.isTypeParameterType(type)) {
312
+ const record = subst.get(type.name);
313
+ if (record) {
314
+ return record;
315
+ }
316
+ }
317
+ return type;
318
+ }
319
+ // Update parents to properly find a file for conflicted types
320
+ function updateParent(parent, type) {
321
+ type.parent = parent;
322
+ if (idl.isOptionalType(type))
323
+ updateParent(type, type.type);
324
+ if (idl.isUnionType(type))
325
+ updateParents(type, type.types);
326
+ if (idl.isContainerType(type))
327
+ updateParents(type, type.elementType);
328
+ }
329
+ function updateParents(parent, types) {
330
+ for (const type of types)
331
+ updateParent(parent, type);
332
+ }
290
333
  //# sourceMappingURL=TSConvertors.js.map
@@ -1,8 +1,8 @@
1
1
  import { Language } from "../Language";
2
- import { ReferenceResolver } from "../peer-generation/ReferenceResolver";
2
+ import { LibraryInterface } from "../LibraryInterface";
3
3
  import { LanguageWriter } from "./LanguageWriter";
4
4
  import { TypeConvertor } from "./nameConvertor";
5
5
  export * from "./nameConvertor";
6
- export declare function createLanguageWriter(language: Language, resolver?: ReferenceResolver): LanguageWriter;
6
+ export declare function createLanguageWriter(language: Language, library: LibraryInterface): LanguageWriter;
7
7
  export declare function createInteropArgConvertor(language: Language): TypeConvertor<string>;
8
8
  //# sourceMappingURL=index.d.ts.map
@@ -5,26 +5,22 @@ import { createEmptyReferenceResolver } from "../peer-generation/ReferenceResolv
5
5
  import { CJIDLTypeToForeignStringConvertor, CJInteropArgConvertor, CJTypeNameConvertor } from "./convertors/CJConvertors";
6
6
  import { CppInteropArgConvertor, CppConvertor } from "./convertors/CppConvertors";
7
7
  import { ETSInteropArgConvertor, ETSTypeNameConvertor } from "./convertors/ETSConvertors";
8
- import { JavaInteropArgConvertor, JavaTypeNameConvertor } from "./convertors/JavaConvertors";
9
- import { KotlinTypeNameConvertor } from "./convertors/KotlinConvertors";
8
+ import { KotlinCInteropArgConvertor, KotlinTypeNameConvertor } from "./convertors/KotlinConvertors";
10
9
  import { TSInteropArgConvertor, TSTypeNameConvertor } from "./convertors/TSConvertors";
11
10
  import { CJLanguageWriter } from "./writers/CJLanguageWriter";
12
11
  import { CppLanguageWriter } from "./writers/CppLanguageWriter";
13
12
  import { ETSLanguageWriter } from "./writers/ETSLanguageWriter";
14
- import { JavaLanguageWriter } from "./writers/JavaLanguageWriter";
15
13
  import { KotlinLanguageWriter } from "./writers/KotlinLanguageWriter";
16
14
  import { TSLanguageWriter } from "./writers/TsLanguageWriter";
17
15
  export * from "./nameConvertor";
18
- export function createLanguageWriter(language, resolver) {
19
- resolver !== null && resolver !== void 0 ? resolver : (resolver = EmptyReferenceResolver);
16
+ export function createLanguageWriter(language, library) {
20
17
  const printer = new IndentedPrinter();
21
18
  switch (language) {
22
- case Language.TS: return new TSLanguageWriter(printer, resolver, new TSTypeNameConvertor(resolver));
23
- case Language.ARKTS: return new ETSLanguageWriter(printer, resolver, new ETSTypeNameConvertor(resolver), new CppConvertor(resolver));
24
- case Language.JAVA: return new JavaLanguageWriter(printer, resolver, new JavaTypeNameConvertor(resolver));
25
- case Language.CPP: return new CppLanguageWriter(printer, resolver, new CppConvertor(resolver), PrimitiveTypesInstance);
26
- case Language.CJ: return new CJLanguageWriter(printer, resolver, new CJTypeNameConvertor(resolver), new CJIDLTypeToForeignStringConvertor(resolver));
27
- case Language.KOTLIN: return new KotlinLanguageWriter(printer, resolver, new KotlinTypeNameConvertor(resolver));
19
+ case Language.TS: return new TSLanguageWriter(printer, library, new TSTypeNameConvertor(library));
20
+ case Language.ARKTS: return new ETSLanguageWriter(printer, library, new ETSTypeNameConvertor(library), new CppConvertor(library));
21
+ case Language.CPP: return new CppLanguageWriter(printer, library, new CppConvertor(library), PrimitiveTypesInstance);
22
+ case Language.CJ: return new CJLanguageWriter(printer, library, new CJTypeNameConvertor(library), new CJIDLTypeToForeignStringConvertor(library));
23
+ case Language.KOTLIN: return new KotlinLanguageWriter(printer, library, new KotlinTypeNameConvertor(library));
28
24
  default: throw new Error(`Language ${language.toString()} is not supported`);
29
25
  }
30
26
  }
@@ -33,9 +29,8 @@ export function createInteropArgConvertor(language) {
33
29
  case Language.TS: return new TSInteropArgConvertor();
34
30
  case Language.ARKTS: return new ETSInteropArgConvertor();
35
31
  case Language.CPP: return CppInteropArgConvertor.INSTANCE;
36
- case Language.JAVA: return new JavaInteropArgConvertor();
37
32
  case Language.CJ: return new CJInteropArgConvertor();
38
- case Language.KOTLIN: return new CJInteropArgConvertor();
33
+ case Language.KOTLIN: return new KotlinCInteropArgConvertor();
39
34
  }
40
35
  throw new Error(`InteropArgConvertor for language ${language} not implemented`);
41
36
  }
@@ -75,6 +75,7 @@ export declare class CJLanguageWriter extends LanguageWriter {
75
75
  resolver?: ReferenceResolver;
76
76
  }): LanguageWriter;
77
77
  getNodeName(type: idl.IDLNode): string;
78
+ get interopModule(): string;
78
79
  writeClass(name: string, op: (writer: this) => void, superClass?: string, interfaces?: string[], generics?: string[]): void;
79
80
  writeEnum(name: string, members: {
80
81
  name: string;
@@ -105,6 +106,7 @@ export declare class CJLanguageWriter extends LanguageWriter {
105
106
  writeGetterImplementation(method: Method, op?: (writer: this) => void): void;
106
107
  writeSetterImplementation(method: Method, op: (writer: this) => void): void;
107
108
  writeCJForeign(op: (writer: CJLanguageWriter) => void): void;
109
+ writeImports(moduleName: string, importedFeatures: string[], aliases: string[]): void;
108
110
  private writeDeclaration;
109
111
  writeNativeFunctionCall(printer: LanguageWriter, name: string, signature: MethodSignature): void;
110
112
  writeNativeMethodDeclaration(method: Method): void;
@@ -158,6 +160,8 @@ export declare class CJLanguageWriter extends LanguageWriter {
158
160
  popNamespace(options: {
159
161
  ident: boolean;
160
162
  }): void;
163
+ instanceOf(value: string, type: idl.IDLType): LanguageExpression;
164
+ discriminate(value: string, index: number, type: idl.IDLType, runtimeTypes: RuntimeType[]): string;
161
165
  castToInt(value: string, bitness: 8 | 32): string;
162
166
  castToBoolean(value: string): string;
163
167
  }
@@ -16,7 +16,7 @@ import * as idl from "../../idl";
16
16
  import { IndentedPrinter } from "../../IndentedPrinter";
17
17
  import { CJKeywords } from "../../languageSpecificKeywords";
18
18
  import { RuntimeType } from "../common";
19
- import { AssignStatement, BlockStatement, DelegationType, ExpressionStatement, FieldModifier, LambdaExpression, LanguageWriter, MethodModifier, MethodSignature, ReturnStatement } from "../LanguageWriter";
19
+ import { AssignStatement, BlockStatement, DelegationType, ExpressionStatement, FieldModifier, LambdaExpression, LanguageWriter, MethodModifier, MethodSignature, ReturnStatement, } from "../LanguageWriter";
20
20
  import { Language } from "../../Language";
21
21
  import { indentedBy, isDefined } from "../../util";
22
22
  ////////////////////////////////////////////////////////////////
@@ -255,6 +255,9 @@ export class CJLanguageWriter extends LanguageWriter {
255
255
  // rework for proper namespace logic
256
256
  return this.typeConvertor.convert(type);
257
257
  }
258
+ get interopModule() {
259
+ return "Interop";
260
+ }
258
261
  writeClass(name, op, superClass, interfaces, generics) {
259
262
  let extendsClause = superClass ? `${superClass}` : undefined;
260
263
  let implementsClause = interfaces ? `${interfaces.join(' & ')}` : undefined;
@@ -324,21 +327,6 @@ export class CJLanguageWriter extends LanguageWriter {
324
327
  this.writeDeclaration(name, signature, modifiers);
325
328
  }
326
329
  writeConstructorImplementation(className, signature, op, delegationCall, modifiers) {
327
- var _a;
328
- let i = 1;
329
- while (signature.isArgOptional(signature.args.length - i)) {
330
- let smallerSignature = signature.args.slice(0, -i);
331
- this.printer.print(`${modifiers ? modifiers.map((it) => MethodModifier[it].toLowerCase()).join(' ') + ' ' : ''}init(${smallerSignature.map((it, index) => `${this.escapeKeyword(signature.argName(index))}: ${this.getNodeName(it)}`).join(", ")}) {`);
332
- this.pushIndent();
333
- let lessArgs = (_a = signature.args) === null || _a === void 0 ? void 0 : _a.slice(0, -i).map((_, i) => this.escapeKeyword(signature.argName(i))).join(', ');
334
- for (let idx = 0; idx < i; idx++) {
335
- lessArgs = lessArgs.concat(`${i == signature.args.length && idx == 0 ? '' : ', '}Option.None`);
336
- }
337
- this.print(`this(${lessArgs})`);
338
- this.popIndent();
339
- this.printer.print(`}`);
340
- i += 1;
341
- }
342
330
  this.printer.print(`${modifiers ? modifiers.map((it) => MethodModifier[it].toLowerCase()).join(' ') + ' ' : ''}init(${signature.args.map((it, index) => `${this.escapeKeyword(signature.argName(index))}: ${this.getNodeName(idl.maybeOptional(it, signature.isArgOptional(index)))}`).join(", ")}) {`);
343
331
  this.pushIndent();
344
332
  if (delegationCall) {
@@ -416,6 +404,15 @@ export class CJLanguageWriter extends LanguageWriter {
416
404
  this.popIndent();
417
405
  this.print('}');
418
406
  }
407
+ writeImports(moduleName, importedFeatures, aliases) {
408
+ if (importedFeatures.length !== aliases.length) {
409
+ throw new Error(`Inconsistent imports from ${moduleName}`);
410
+ }
411
+ for (let i = 0; i < importedFeatures.length; i++) {
412
+ const alias = aliases[i] ? ` as ${aliases[i]}` : ``;
413
+ this.writeExpressionStatement(this.makeString(`import ${moduleName}.${importedFeatures[i]}` + alias));
414
+ }
415
+ }
419
416
  writeDeclaration(name, signature, modifiers, postfix, generics) {
420
417
  let prefix = modifiers === null || modifiers === void 0 ? void 0 : modifiers.filter(it => this.supportedModifiers.includes(it)).map(it => this.mapMethodModifier(it)).join(" ");
421
418
  prefix = prefix ? prefix + " " : "public ";
@@ -574,6 +571,17 @@ export class CJLanguageWriter extends LanguageWriter {
574
571
  }
575
572
  pushNamespace(namespace, options) { }
576
573
  popNamespace(options) { }
574
+ instanceOf(value, type) {
575
+ return this.makeString(`${value} is ${this.getNodeName(type)}`);
576
+ }
577
+ discriminate(value, index, type, runtimeTypes) {
578
+ if (runtimeTypes.includes(RuntimeType.UNDEFINED)) {
579
+ return `${value}.isNone()`;
580
+ }
581
+ else {
582
+ return `${value}.getSelector() == ${index}`;
583
+ }
584
+ }
577
585
  castToInt(value, bitness) {
578
586
  return `Int${bitness}(${this.escapeKeyword(value)})`;
579
587
  }
@@ -47,6 +47,7 @@ export declare class CppLanguageWriter extends CLikeLanguageWriter {
47
47
  fork(options?: {
48
48
  resolver?: ReferenceResolver;
49
49
  }): LanguageWriter;
50
+ get interopModule(): string;
50
51
  protected writeDeclaration(name: string, signature: MethodSignature, modifiers?: MethodModifier[], postfix?: string): void;
51
52
  writeClass(name: string, op: (writer: this) => void, superClass?: string, interfaces?: string[]): void;
52
53
  writeInterface(name: string, op: (writer: this) => void, superInterfaces?: string[], generics?: string[]): void;
@@ -63,6 +64,7 @@ export declare class CppLanguageWriter extends CLikeLanguageWriter {
63
64
  }): void;
64
65
  writeTypeDeclaration(decl: IDLTypedef): void;
65
66
  writeConstant(constName: string, constType: IDLType, constVal?: string): void;
67
+ writeImports(moduleName: string, importedFeatures: string[], aliases: string[]): void;
66
68
  /**
67
69
  * Writes multiline comments decorated with stars
68
70
  */
@@ -12,7 +12,7 @@
12
12
  * See the License for the specific language governing permissions and
13
13
  * limitations under the License.
14
14
  */
15
- import { createReferenceType, forceAsNamedNode } from '../../idl';
15
+ import { createReferenceType, forceAsNamedNode, } from '../../idl';
16
16
  import { Language } from '../../Language';
17
17
  import { PrimitiveTypeList } from "../../peer-generation/PrimitiveType";
18
18
  import { AssignStatement, BlockStatement, FieldModifier, PrintHint, MethodModifier, StringExpression, MethodStaticCallExpression } from "../LanguageWriter";
@@ -181,6 +181,9 @@ export class CppLanguageWriter extends CLikeLanguageWriter {
181
181
  var _a;
182
182
  return new CppLanguageWriter(new IndentedPrinter([], this.indentDepth()), (_a = options === null || options === void 0 ? void 0 : options.resolver) !== null && _a !== void 0 ? _a : this.resolver, this.typeConvertor, this.primitivesTypes);
183
183
  }
184
+ get interopModule() {
185
+ throw new Error(`Modules are not supported in C++`);
186
+ }
184
187
  writeDeclaration(name, signature, modifiers, postfix) {
185
188
  const realName = this.classMode === 'normal' ? name : `${this.currentClass.at(0)}::${name}`;
186
189
  const newModifiers = this.classMode === 'normal'
@@ -253,6 +256,9 @@ export class CppLanguageWriter extends CLikeLanguageWriter {
253
256
  writeConstant(constName, constType, constVal) {
254
257
  this.print(`${this.getNodeName(constType)} ${constName}${constVal ? ' = ' + constVal : ''};`);
255
258
  }
259
+ writeImports(moduleName, importedFeatures, aliases) {
260
+ throw new Error(`Imports are not supported in C++`);
261
+ }
256
262
  /**
257
263
  * Writes multiline comments decorated with stars
258
264
  */
@@ -1,5 +1,5 @@
1
1
  import { IndentedPrinter } from "../../IndentedPrinter";
2
- import { LambdaExpression, LanguageExpression, LanguageStatement, LanguageWriter, MakeAssignOptions, MakeCastOptions, Method, MethodModifier, MethodSignature, NamespaceOptions } from "../LanguageWriter";
2
+ import { LambdaExpression, LanguageExpression, LanguageStatement, LanguageWriter, MakeAssignOptions, MakeCastOptions, Method, MethodModifier, MethodSignature } from "../LanguageWriter";
3
3
  import { TSLanguageWriter } from "./TsLanguageWriter";
4
4
  import { IDLEnum, IDLType } from '../../idl';
5
5
  import { ArgConvertor } from "../ArgConvertors";
@@ -45,7 +45,6 @@ export declare function makeArrayTypeCheckCall(valueAccessor: string, typeName:
45
45
  export declare class ETSLanguageWriter extends TSLanguageWriter {
46
46
  private arrayConvertor;
47
47
  constructor(printer: IndentedPrinter, resolver: ReferenceResolver, typeConvertor: IdlNameConvertor, arrayConvertor: IdlNameConvertor);
48
- pushNamespace(namespace: string, options: NamespaceOptions): void;
49
48
  fork(options?: {
50
49
  resolver?: ReferenceResolver;
51
50
  }): LanguageWriter;
@@ -175,12 +175,6 @@ export class ETSLanguageWriter extends TSLanguageWriter {
175
175
  super(printer, resolver, typeConvertor, Language.ARKTS);
176
176
  this.arrayConvertor = arrayConvertor;
177
177
  }
178
- pushNamespace(namespace, options) {
179
- if (options.isDefault) {
180
- this.print(`export default ${namespace}`);
181
- }
182
- super.pushNamespace(namespace, options);
183
- }
184
178
  fork(options) {
185
179
  var _a;
186
180
  return new ETSLanguageWriter(new IndentedPrinter([], this.indentDepth()), (_a = options === null || options === void 0 ? void 0 : options.resolver) !== null && _a !== void 0 ? _a : this.resolver, this.typeConvertor, this.arrayConvertor);
@@ -29,6 +29,7 @@ export declare class JavaLanguageWriter extends CLikeLanguageWriter {
29
29
  fork(options?: {
30
30
  resolver?: ReferenceResolver;
31
31
  }): LanguageWriter;
32
+ get interopModule(): string;
32
33
  writeClass(name: string, op: (writer: this) => void, superClass?: string, interfaces?: string[], generics?: string[], isDeclared?: boolean, isExport?: boolean): void;
33
34
  writeInterface(name: string, op: (writer: this) => void, superInterfaces?: string[], generics?: string[]): void;
34
35
  writeMethodCall(receiver: string, method: string, params: string[], nullable?: boolean): void;
@@ -44,6 +45,7 @@ export declare class JavaLanguageWriter extends CLikeLanguageWriter {
44
45
  }, initExpr?: LanguageExpression): void;
45
46
  writeTypeDeclaration(decl: idl.IDLTypedef): void;
46
47
  writeConstant(constName: string, constType: idl.IDLType, constVal?: string): void;
48
+ writeImports(moduleName: string, importedFeatures: string[], aliases: string[]): void;
47
49
  makeAssign(variableName: string, type: idl.IDLType | undefined, expr: LanguageExpression, isDeclared?: boolean, isConst?: boolean): LanguageStatement;
48
50
  makeLambda(signature: MethodSignature, body?: LanguageStatement[]): LanguageExpression;
49
51
  makeReturn(expr: LanguageExpression): LanguageStatement;
@@ -105,6 +105,9 @@ export class JavaLanguageWriter extends CLikeLanguageWriter {
105
105
  var _a;
106
106
  return new JavaLanguageWriter(new IndentedPrinter([], this.indentDepth()), (_a = options === null || options === void 0 ? void 0 : options.resolver) !== null && _a !== void 0 ? _a : this.resolver, this.typeConvertor);
107
107
  }
108
+ get interopModule() {
109
+ return "org.koalaui.interop";
110
+ }
108
111
  writeClass(name, op, superClass, interfaces, generics, isDeclared, isExport = true) {
109
112
  let genericsClause = (generics === null || generics === void 0 ? void 0 : generics.length) ? `<${generics.join(', ')}> ` : ``;
110
113
  let extendsClause = superClass ? ` extends ${superClass}` : '';
@@ -179,6 +182,14 @@ export class JavaLanguageWriter extends CLikeLanguageWriter {
179
182
  writeConstant(constName, constType, constVal) {
180
183
  throw new Error("writeConstant for Java is not implemented yet.");
181
184
  }
185
+ writeImports(moduleName, importedFeatures, aliases) {
186
+ if (importedFeatures.length !== aliases.length) {
187
+ throw new Error(`Inconsistent imports from ${moduleName}`);
188
+ }
189
+ for (let i = 0; i < importedFeatures.length; i++) {
190
+ this.writeExpressionStatement(this.makeString(`import ${moduleName}.${importedFeatures[i]}`));
191
+ }
192
+ }
182
193
  makeAssign(variableName, type, expr, isDeclared = true, isConst = true) {
183
194
  return new JavaAssignStatement(variableName, type, expr, isDeclared, isConst);
184
195
  }
@@ -61,6 +61,8 @@ export declare class KotlinLanguageWriter extends LanguageWriter {
61
61
  resolver?: ReferenceResolver;
62
62
  }): LanguageWriter;
63
63
  getNodeName(type: idl.IDLNode): string;
64
+ get interopModule(): string;
65
+ maybeSemicolon(): string;
64
66
  writeClass(name: string, op: (writer: this) => void, superClass?: string, interfaces?: string[], generics?: string[], isDeclared?: boolean, isAbstract?: boolean): void;
65
67
  writeInterface(name: string, op: (writer: this) => void, superInterfaces?: string[], generics?: string[], isDeclared?: boolean): void;
66
68
  writeFunctionDeclaration(name: string, signature: MethodSignature, generics?: string[]): void;
@@ -78,6 +80,11 @@ export declare class KotlinLanguageWriter extends LanguageWriter {
78
80
  private writeDeclaration;
79
81
  writeFieldDeclaration(name: string, type: idl.IDLType, modifiers: FieldModifier[] | undefined, optional: boolean, initExpr?: LanguageExpression): void;
80
82
  writeNativeMethodDeclaration(method: Method): void;
83
+ private printForeignApiOptIn;
84
+ private get foreignApiOptIn();
85
+ private isPrimitiveArray;
86
+ private pinArrayArgument;
87
+ private unpinArrayArgument;
81
88
  private convertInteropArgument;
82
89
  private convertInteropReturnValue;
83
90
  writeMethodDeclaration(name: string, signature: MethodSignature, modifiers?: MethodModifier[]): void;
@@ -94,6 +101,7 @@ export declare class KotlinLanguageWriter extends LanguageWriter {
94
101
  writeSetterImplementation(method: Method, op: (writer: this) => void): void;
95
102
  writeTypeDeclaration(decl: idl.IDLTypedef): void;
96
103
  writeConstant(constName: string, constType: idl.IDLType, constVal?: string): void;
104
+ writeImports(moduleName: string, importedFeatures: string[], aliases: string[]): void;
97
105
  makeNull(): LanguageExpression;
98
106
  makeAssign(variableName: string, type: idl.IDLType | undefined, expr: LanguageExpression, isDeclared?: boolean, isConst?: boolean, options?: MakeAssignOptions): LanguageStatement;
99
107
  makeLambda(signature: MethodSignature, body?: LanguageStatement[]): LanguageExpression;