@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
@@ -3,7 +3,6 @@ export declare class Language {
3
3
  extension: string;
4
4
  static TS: Language;
5
5
  static ARKTS: Language;
6
- static JAVA: Language;
7
6
  static CPP: Language;
8
7
  static CJ: Language;
9
8
  static KOTLIN: Language;
@@ -26,7 +26,6 @@ export class Language {
26
26
  static fromString(name) {
27
27
  switch (name) {
28
28
  case "arkts": return Language.ARKTS;
29
- case "java": return Language.JAVA;
30
29
  case "ts": return Language.TS;
31
30
  case "cangjie": return Language.CJ;
32
31
  case "cpp": return Language.CPP;
@@ -37,7 +36,6 @@ export class Language {
37
36
  }
38
37
  Language.TS = new Language("TS", ".ts");
39
38
  Language.ARKTS = new Language("ArkTS", ".ts"); // using .ts for ArkTS until we get rit of tsc preprocessing
40
- Language.JAVA = new Language("Java", ".java");
41
39
  Language.CPP = new Language("C++", ".cc");
42
40
  Language.CJ = new Language("CangJie", ".cj");
43
41
  Language.KOTLIN = new Language("Kotlin", ".kt");
@@ -6,7 +6,7 @@ import { LibraryInterface } from "../LibraryInterface";
6
6
  import { ReferenceResolver } from "../peer-generation/ReferenceResolver";
7
7
  import { PeerLibrary } from "../peer-generation/PeerLibrary";
8
8
  import { PeerMethodSignature } from "../peer-generation/PeerMethod";
9
- export declare function getSerializerName(declaration: idl.IDLEntry): string;
9
+ export declare function getSerializerName(library: LibraryInterface, language: Language, declaration: idl.IDLEntry): string;
10
10
  export interface ArgConvertor {
11
11
  param: string;
12
12
  idlType: idl.IDLType;
@@ -106,8 +106,9 @@ export declare class NumberConvertor extends BaseArgConvertor {
106
106
  isPointerType(): boolean;
107
107
  }
108
108
  export declare class NumericConvertor extends BaseArgConvertor {
109
+ protected library: LibraryInterface;
109
110
  private readonly interopNameConvertor;
110
- constructor(param: string, type: idl.IDLPrimitiveType);
111
+ constructor(library: LibraryInterface, param: string, type: idl.IDLPrimitiveType);
111
112
  convertorArg(param: string, writer: LanguageWriter): string;
112
113
  convertorSerialize(param: string, value: string, writer: LanguageWriter): LanguageStatement;
113
114
  convertorDeserialize(bufferName: string, deserializerName: string, assigneer: ExpressionAssigner, writer: LanguageWriter): LanguageStatement;
@@ -343,5 +344,17 @@ export declare function generateCallbackKindAccess(callback: idl.IDLCallback, la
343
344
  export declare function generateCallbackKindValue(callback: idl.IDLCallback): number;
344
345
  export declare function generateCallbackAPIArguments(library: LibraryInterface, callback: idl.IDLCallback): string[];
345
346
  export declare function maybeTransformManagedCallback(callback: idl.IDLCallback, library: ReferenceResolver): idl.IDLCallback | undefined;
347
+ export declare class TransformOnSerializeConvertor extends BaseArgConvertor {
348
+ protected library: PeerLibrary;
349
+ protected managedDeclaration: idl.IDLEntry;
350
+ protected target: idl.IDLType;
351
+ private targetConvertor;
352
+ constructor(param: string, library: PeerLibrary, managedDeclaration: idl.IDLEntry, target: idl.IDLType);
353
+ isPointerType(): boolean;
354
+ nativeType(): idl.IDLType;
355
+ convertorArg(param: string, writer: LanguageWriter): string;
356
+ convertorSerialize(param: string, value: string, writer: LanguageWriter): LanguageStatement;
357
+ convertorDeserialize(bufferName: string, deserializerName: string, assigneer: ExpressionAssigner, writer: LanguageWriter): LanguageStatement;
358
+ }
346
359
  export declare function createOutArgConvertor(library: PeerLibrary, type: idl.IDLType | undefined, otherParams: string[]): ArgConvertor | undefined;
347
360
  //# sourceMappingURL=ArgConvertors.d.ts.map
@@ -17,17 +17,18 @@ import { Language } from "../Language";
17
17
  import { BlockStatement, PrintHint, StringExpression, MethodModifier, NamedMethodSignature, ProxyStatement, ExpressionStatement } from "./LanguageWriter";
18
18
  import { RuntimeType } from "./common";
19
19
  import { generatorConfiguration, generatorTypePrefix } from "../config";
20
- import { capitalize, getExtractor, hashCodeFromString, throwException, warn } from "../util";
20
+ import { capitalize, getExtractor, getTransformer, hashCodeFromString, throwException, warn } from "../util";
21
21
  import { UnionRuntimeTypeChecker } from "../peer-generation/unions";
22
22
  import { CppConvertor, CppNameConvertor } from "./convertors/CppConvertors";
23
- import { createEmptyReferenceResolver } from "../peer-generation/ReferenceResolver";
24
23
  import { PrimitiveTypesInstance } from "../peer-generation/PrimitiveType";
25
- import { qualifiedName } from "../peer-generation/idl/common";
26
24
  import { LayoutNodeRole } from "../peer-generation/LayoutManager";
27
25
  import { PeerMethodSignature } from "../peer-generation/PeerMethod";
28
26
  import { isInExternalModule } from "../peer-generation/modules";
29
- export function getSerializerName(declaration) {
30
- return `${idl.getQualifiedName(declaration, "namespace.name").split('.').join('_')}_serializer`;
27
+ import { isTopLevelConflicted } from "../peer-generation/ConflictingDeclarations";
28
+ export function getSerializerName(library, language, declaration) {
29
+ const qualifier = isTopLevelConflicted(library, language, declaration)
30
+ ? "package.namespace.name" : "namespace.name";
31
+ return `${idl.getQualifiedName(declaration, qualifier).split('.').join('_')}_serializer`;
31
32
  }
32
33
  export function isDirectConvertedType(originalType, library) {
33
34
  const debug = false;
@@ -298,10 +299,11 @@ export class NumberConvertor extends BaseArgConvertor {
298
299
  }
299
300
  }
300
301
  export class NumericConvertor extends BaseArgConvertor {
301
- constructor(param, type) {
302
+ constructor(library, param, type) {
302
303
  // check numericPrimitiveTypes.include(type)
303
304
  super(type, [RuntimeType.NUMBER], false, false, param);
304
- this.interopNameConvertor = new CppNameConvertor(createEmptyReferenceResolver());
305
+ this.library = library;
306
+ this.interopNameConvertor = new CppNameConvertor(this.library);
305
307
  }
306
308
  convertorArg(param, writer) {
307
309
  return param;
@@ -577,12 +579,12 @@ export class InterfaceConvertor extends BaseArgConvertor {
577
579
  throw new Error("Must never be used");
578
580
  }
579
581
  convertorSerialize(param, value, writer) {
580
- const accessor = getSerializerName(this.declaration);
582
+ const accessor = getSerializerName(this.library, writer.language, this.declaration);
581
583
  writer.addFeature(accessor, this.library.layout.resolve({ node: this.declaration, role: LayoutNodeRole.SERIALIZER }));
582
- return writer.makeStatement(writer.makeStaticMethodCall(accessor, 'write', [writer.makeString(`${param}Serializer`), writer.makeString(value)]));
584
+ return writer.makeStatement(writer.makeStaticMethodCall(accessor, 'write', [writer.makeString(`${param}Serializer`), writer.makeString(writer.escapeKeyword(value))]));
583
585
  }
584
586
  convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
585
- const accessor = getSerializerName(this.declaration);
587
+ const accessor = getSerializerName(this.library, writer.language, this.declaration);
586
588
  writer.addFeature(accessor, this.library.layout.resolve({ node: this.declaration, role: LayoutNodeRole.SERIALIZER }));
587
589
  return assigneer(writer.makeStaticMethodCall(accessor, 'read', [writer.makeString(deserializerName)]));
588
590
  }
@@ -888,7 +890,7 @@ export class OptionConvertor extends BaseArgConvertor {
888
890
  const bufferType = this.nativeType();
889
891
  statements.push(writer.makeAssign(bufferName, bufferType, writer.language === Language.CPP ? undefined : writer.makeNull(this.type), true, false)); // maybe change to generic None
890
892
  const thenStatement = new BlockStatement([
891
- this.typeConvertor.convertorDeserialize(`${bufferName}_`, deserializerName, (expr) => {
893
+ this.typeConvertor.convertorDeserialize(`${bufferName}Opt`, deserializerName, (expr) => {
892
894
  const receiver = writer.language === Language.CPP
893
895
  ? `${bufferName}.value` : bufferName;
894
896
  return writer.makeAssign(receiver, undefined, expr, false);
@@ -1018,11 +1020,10 @@ export class MaterializedClassConvertor extends BaseArgConvertor {
1018
1020
  this.declaration = declaration;
1019
1021
  }
1020
1022
  convertorArg(param, writer) {
1023
+ const nameConvertor = this.library.createTypeNameConvertor(Language.CPP);
1021
1024
  switch (writer.language) {
1022
1025
  case Language.CPP:
1023
- return `static_cast<${generatorTypePrefix()}${qualifiedName(this.declaration, "_", "namespace.name")}>(${param})`;
1024
- case Language.JAVA:
1025
- case Language.KOTLIN:
1026
+ return `static_cast<${nameConvertor.convert(this.declaration)}>(${param})`;
1026
1027
  case Language.CJ:
1027
1028
  return `MaterializedBase.toPeerPtr(${writer.escapeKeyword(param)})`;
1028
1029
  default:
@@ -1034,12 +1035,12 @@ export class MaterializedClassConvertor extends BaseArgConvertor {
1034
1035
  }
1035
1036
  }
1036
1037
  convertorSerialize(param, value, printer) {
1037
- const accessorRoot = getSerializerName(this.declaration);
1038
+ const accessorRoot = getSerializerName(this.library, printer.language, this.declaration);
1038
1039
  printer.addFeature(accessorRoot, this.library.layout.resolve({ node: this.declaration, role: LayoutNodeRole.SERIALIZER }));
1039
1040
  return printer.makeStatement(printer.makeStaticMethodCall(accessorRoot, 'write', [printer.makeString(`${param}Serializer`), printer.makeString(value)]));
1040
1041
  }
1041
1042
  convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
1042
- const accessorRoot = getSerializerName(this.declaration);
1043
+ const accessorRoot = getSerializerName(this.library, writer.language, this.declaration);
1043
1044
  writer.addFeature(accessorRoot, this.library.layout.resolve({ node: this.declaration, role: LayoutNodeRole.SERIALIZER }));
1044
1045
  const readStatement = writer.makeCast(writer.makeStaticMethodCall(accessorRoot, "read", [writer.makeString(deserializerName)]), this.declaration);
1045
1046
  return assigneer(readStatement);
@@ -1116,8 +1117,10 @@ export class CallbackConvertor extends BaseArgConvertor {
1116
1117
  writer.makeStatement(writer.makeMethodCall(`${param}Serializer`, "writePointer", [writer.makeCast(new StringExpression(`${value}.callSync`), idl.IDLPointerType, { unsafe: true })]))
1117
1118
  ], false);
1118
1119
  }
1119
- if (this.isTransformed)
1120
- value = `CallbackTransformer.transformFrom${this.library.getInteropName(this.decl)}(${value})`;
1120
+ if (this.isTransformed) {
1121
+ const convertor = this.library.createTypeNameConvertor(Language.CPP);
1122
+ value = `CallbackTransformer.transformFrom${convertor.convert(this.decl)}(${value})`;
1123
+ }
1121
1124
  return writer.makeStatement(writer.makeMethodCall(`${param}Serializer`, `holdAndWriteCallback`, [writer.makeString(`${value}`)]));
1122
1125
  }
1123
1126
  convertorDeserialize(bufferName, deserializerName, assigneer, writer, useSyncVersion = true) {
@@ -1222,7 +1225,7 @@ function warnCustomObject(type, msg) {
1222
1225
  }
1223
1226
  export const CallbackKind = "CallbackKind";
1224
1227
  export function generateCallbackKindName(callback) {
1225
- return `Kind_${callback.name}`;
1228
+ return `KIND_${callback.name.toUpperCase()}`;
1226
1229
  }
1227
1230
  export function generateCallbackKindAccess(callback, language) {
1228
1231
  const name = generateCallbackKindName(callback);
@@ -1295,6 +1298,59 @@ class PromiseOutArgConvertor extends BaseArgConvertor {
1295
1298
  return true;
1296
1299
  }
1297
1300
  }
1301
+ export class TransformOnSerializeConvertor extends BaseArgConvertor {
1302
+ constructor(param, library, managedDeclaration, target) {
1303
+ const targetConvertor = library.typeConvertor(param, target);
1304
+ super(target, targetConvertor.runtimeTypes, false, targetConvertor.useArray, param);
1305
+ this.library = library;
1306
+ this.managedDeclaration = managedDeclaration;
1307
+ this.target = target;
1308
+ this.targetConvertor = targetConvertor;
1309
+ }
1310
+ isPointerType() {
1311
+ return this.targetConvertor.isPointerType();
1312
+ }
1313
+ nativeType() {
1314
+ return this.targetConvertor.nativeType();
1315
+ }
1316
+ convertorArg(param, writer) {
1317
+ throw new Error("Method not implemented.");
1318
+ }
1319
+ convertorSerialize(param, value, writer) {
1320
+ if (writer.language === Language.CPP) {
1321
+ return this.targetConvertor.convertorSerialize(param, value, writer);
1322
+ }
1323
+ if (idl.isReferenceType(this.target)) {
1324
+ writer.addFeature(this.target);
1325
+ }
1326
+ const transformerInfo = getTransformer(this.library, this.managedDeclaration, this.target);
1327
+ const transformCallExpression = transformerInfo.receiver
1328
+ ? writer.makeMethodCall(transformerInfo.receiver, transformerInfo.method, [writer.makeString(value)])
1329
+ : writer.makeFunctionCall(transformerInfo.method, [writer.makeString(value)]);
1330
+ const statements = [
1331
+ writer.makeAssign(`${value}Transformed`, this.target, transformCallExpression, true),
1332
+ this.targetConvertor.convertorSerialize(param, `${value}Transformed`, writer)
1333
+ ];
1334
+ return writer.makeBlock(statements, false);
1335
+ }
1336
+ convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
1337
+ if (writer.language === Language.CPP) {
1338
+ return this.targetConvertor.convertorDeserialize(bufferName, deserializerName, assigneer, writer);
1339
+ }
1340
+ if (idl.isReferenceType(this.target)) {
1341
+ writer.addFeature(this.target);
1342
+ }
1343
+ const targetDeserialize = this.targetConvertor.convertorDeserialize(`${bufferName}D`, deserializerName, (expr) => writer.makeAssign(`${bufferName}Deserialized`, this.target, expr, true), writer);
1344
+ const transformerInfo = getTransformer(this.library, this.target, this.managedDeclaration);
1345
+ const transformCallExpression = transformerInfo.receiver
1346
+ ? writer.makeMethodCall(transformerInfo.receiver, transformerInfo.method, [writer.makeString(`${bufferName}Deserialized`)])
1347
+ : writer.makeFunctionCall(transformerInfo.method, [writer.makeString(`${bufferName}Deserialized`)]);
1348
+ return writer.makeBlock([
1349
+ targetDeserialize,
1350
+ assigneer(transformCallExpression)
1351
+ ], false);
1352
+ }
1353
+ }
1298
1354
  export function createOutArgConvertor(library, type, otherParams) {
1299
1355
  if (type && idl.isContainerType(type) && idl.IDLContainerUtils.isPromise(type)) {
1300
1356
  const param = (entropy) => `outputArgumentForReturningPromise${entropy || ''}`;
@@ -146,7 +146,9 @@ export declare enum FieldModifier {
146
146
  FINAL = 5,
147
147
  VOLATILE = 6,
148
148
  INTERNAL = 7,
149
- OVERRIDE = 8
149
+ OVERRIDE = 8,
150
+ GET = 9,
151
+ SET = 10
150
152
  }
151
153
  export declare enum MethodModifier {
152
154
  PUBLIC = 0,
@@ -244,8 +246,17 @@ export declare abstract class LanguageWriter {
244
246
  language: Language);
245
247
  indentDepth(): number;
246
248
  maybeSemicolon(): string;
247
- features: [string, string][];
249
+ features: ({
250
+ type: "raw";
251
+ feature: string;
252
+ module: string;
253
+ } | {
254
+ type: "idl";
255
+ node: idl.IDLEntry | idl.IDLReferenceType;
256
+ })[];
257
+ addFeature(node: idl.IDLEntry | idl.IDLReferenceType): void;
248
258
  addFeature(feature: string, module: string): void;
259
+ abstract get interopModule(): string;
249
260
  abstract writeClass(name: string, op: (writer: this) => void, superClass?: string, interfaces?: string[], generics?: string[], isDeclared?: boolean, isExport?: boolean): void;
250
261
  abstract writeEnum(name: string, members: {
251
262
  name: string;
@@ -272,6 +283,7 @@ export declare abstract class LanguageWriter {
272
283
  }, initExpr?: LanguageExpression): void;
273
284
  abstract writeTypeDeclaration(decl: idl.IDLTypedef): void;
274
285
  abstract writeConstant(constName: string, constType: idl.IDLType, constVal?: string): void;
286
+ abstract writeImports(moduleName: string, importedFeatures: string[], aliases: string[]): void;
275
287
  abstract makeAssign(variableName: string, type: idl.IDLType | undefined, expr: LanguageExpression | undefined, isDeclared: boolean, isConst?: boolean, options?: MakeAssignOptions): LanguageStatement;
276
288
  abstract makeLambda(signature: MethodSignature, body?: LanguageStatement[]): LanguageExpression;
277
289
  abstract makeThrowError(message: string): LanguageStatement;
@@ -278,8 +278,11 @@ export class LambdaExpression {
278
278
  if (this.body) {
279
279
  writer.writeStatement(new BlockStatement(this.body, isScoped, false));
280
280
  }
281
- writer.features.forEach(([feature, module]) => {
282
- this.originalWriter.addFeature(feature, module);
281
+ writer.features.forEach((feature) => {
282
+ if (feature.type === "raw")
283
+ this.originalWriter.addFeature(feature.feature, feature.module);
284
+ else
285
+ this.originalWriter.addFeature(feature.node);
283
286
  });
284
287
  return writer.getOutput()
285
288
  .map(line => (line.endsWith('{') || line.endsWith('}') || line.endsWith(';')) ? line : `${line};`)
@@ -304,6 +307,8 @@ export var FieldModifier;
304
307
  FieldModifier[FieldModifier["VOLATILE"] = 6] = "VOLATILE";
305
308
  FieldModifier[FieldModifier["INTERNAL"] = 7] = "INTERNAL";
306
309
  FieldModifier[FieldModifier["OVERRIDE"] = 8] = "OVERRIDE";
310
+ FieldModifier[FieldModifier["GET"] = 9] = "GET";
311
+ FieldModifier[FieldModifier["SET"] = 10] = "SET";
307
312
  })(FieldModifier || (FieldModifier = {}));
308
313
  export var MethodModifier;
309
314
  (function (MethodModifier) {
@@ -421,8 +426,11 @@ export class LanguageWriter {
421
426
  return this.printer.indentDepth();
422
427
  }
423
428
  maybeSemicolon() { return ";"; }
424
- addFeature(feature, module) {
425
- this.features.push([feature, module]);
429
+ addFeature(featureOrNode, module) {
430
+ if (typeof featureOrNode === "string")
431
+ this.features.push({ type: "raw", feature: featureOrNode, module: module });
432
+ else
433
+ this.features.push({ type: "idl", node: featureOrNode });
426
434
  }
427
435
  // version of makeCast which uses TypeCheck.typeCast<T>(value) call for ETS language writer
428
436
  // Use it only if TypeChecker class is added as import to the generated file
@@ -32,5 +32,4 @@ export declare class CJIDLTypeToForeignStringConvertor extends CJTypeNameConvert
32
32
  export declare class CJInteropArgConvertor extends InteropArgConvertor {
33
33
  convertPrimitiveType(type: idl.IDLPrimitiveType): string;
34
34
  }
35
- export declare function removePoints(s: string): string;
36
35
  //# sourceMappingURL=CJConvertors.d.ts.map
@@ -15,6 +15,7 @@
15
15
  import * as idl from '../../idl';
16
16
  import { CJKeywords } from '../../languageSpecificKeywords';
17
17
  import { generateSyntheticIdlNodeName } from '../../peer-generation/idl/common';
18
+ import { removePoints } from '../../util';
18
19
  import { convertNode, convertType } from '../nameConvertor';
19
20
  import { InteropArgConvertor } from './InteropConvertors';
20
21
  export class CJTypeNameConvertor {
@@ -149,7 +150,7 @@ export class CJTypeNameConvertor {
149
150
  throw new Error(`Unsupported IDL primitive ${idl.DebugUtils.debugPrintType(type)}`);
150
151
  }
151
152
  callbackType(decl) {
152
- const params = decl.parameters.map(it => `${CJKeywords.has(it.name) ? it.name.concat("_") : it.name}: ${this.convert(it.type)}`);
153
+ const params = decl.parameters.map(it => `${CJKeywords.has(it.name) ? it.name.concat("_") : it.name}: ${it.isOptional ? "?" : ""}${this.convert(it.type)}`);
153
154
  return `((${params.join(", ")}) -> ${this.convert(decl.returnType)})`;
154
155
  }
155
156
  productType(decl, isTuple, includeFieldNames) {
@@ -199,7 +200,4 @@ export class CJInteropArgConvertor extends InteropArgConvertor {
199
200
  return super.convertPrimitiveType(type);
200
201
  }
201
202
  }
202
- export function removePoints(s) {
203
- return s.split(/[\.\-]/g).join('_');
204
- }
205
203
  //# sourceMappingURL=CJConvertors.js.map
@@ -1,15 +1,15 @@
1
1
  import * as idl from '../../idl';
2
2
  import { IdlNameConvertor, NodeConvertor, TypeConvertor } from "../nameConvertor";
3
3
  import { InteropArgConvertor } from './InteropConvertors';
4
- import { ReferenceResolver } from '../../peer-generation/ReferenceResolver';
4
+ import { LibraryInterface } from '../../LibraryInterface';
5
5
  export interface ConvertResult {
6
6
  text: string;
7
7
  noPrefix: boolean;
8
8
  resolvedType: idl.IDLType;
9
9
  }
10
10
  export declare class GenericCppConvertor implements NodeConvertor<ConvertResult> {
11
- protected resolver: ReferenceResolver;
12
- constructor(resolver: ReferenceResolver);
11
+ protected library: LibraryInterface;
12
+ constructor(library: LibraryInterface);
13
13
  private make;
14
14
  convertNode(node: idl.IDLNode): ConvertResult;
15
15
  convertNamespace(node: idl.IDLNamespace): ConvertResult;
@@ -36,9 +36,9 @@ export declare class CppConvertor extends GenericCppConvertor implements IdlName
36
36
  convert(node: idl.IDLNode): string;
37
37
  }
38
38
  export declare class CppNameConvertor implements IdlNameConvertor {
39
- protected resolver: ReferenceResolver;
39
+ protected library: LibraryInterface;
40
40
  private readonly cppConvertor;
41
- constructor(resolver: ReferenceResolver);
41
+ constructor(library: LibraryInterface);
42
42
  convert(node: idl.IDLNode): string;
43
43
  }
44
44
  export declare class CppInteropArgConvertor extends InteropArgConvertor {
@@ -47,9 +47,9 @@ export declare class CppInteropArgConvertor extends InteropArgConvertor {
47
47
  convertPrimitiveType(type: idl.IDLPrimitiveType): string;
48
48
  }
49
49
  export declare class CppReturnTypeConvertor implements TypeConvertor<string> {
50
- private resolver;
50
+ private library;
51
51
  private convertor;
52
- constructor(resolver: ReferenceResolver);
52
+ constructor(library: LibraryInterface);
53
53
  isVoid(returnType: idl.IDLType): boolean;
54
54
  convert(type: idl.IDLType): string;
55
55
  convertContainer(type: idl.IDLContainerType): string;
@@ -13,18 +13,30 @@
13
13
  * limitations under the License.
14
14
  */
15
15
  import * as idl from '../../idl';
16
- import { generatorConfiguration, generatorTypePrefix } from "../../config";
16
+ import { generatorConfiguration } from "../../config";
17
17
  import { convertNode, convertType } from "../nameConvertor";
18
18
  import { PrimitiveTypesInstance } from '../../peer-generation/PrimitiveType';
19
19
  import { InteropArgConvertor } from './InteropConvertors';
20
20
  import { maybeTransformManagedCallback } from '../ArgConvertors';
21
21
  import { qualifiedName } from '../../peer-generation/idl/common';
22
- import { capitalize } from '../../util';
23
- import { isMaterialized } from '../../peer-generation/isMaterialized';
24
- import { isInIdlizeInternal } from '../../idlize';
22
+ import { isInIdlizeInternal } from '../../idl';
23
+ import { isTopLevelConflicted } from '../../peer-generation/ConflictingDeclarations';
24
+ import { Language } from '../../Language';
25
+ function isSubtypeTopLevelConflicted(library, node) {
26
+ let hasConflicts = false;
27
+ idl.forEachChild(node, (child) => {
28
+ if (idl.isReferenceType(child)) {
29
+ const decl = library.resolveTypeReference(child);
30
+ if (decl) {
31
+ hasConflicts || (hasConflicts = isTopLevelConflicted(library, Language.CPP, decl));
32
+ }
33
+ }
34
+ });
35
+ return hasConflicts;
36
+ }
25
37
  export class GenericCppConvertor {
26
- constructor(resolver) {
27
- this.resolver = resolver;
38
+ constructor(library) {
39
+ this.library = library;
28
40
  }
29
41
  make(text, resolvedType, noPrefix = false) {
30
42
  return { text, noPrefix, resolvedType };
@@ -78,6 +90,12 @@ export class GenericCppConvertor {
78
90
  return this.make(prefix + converted.text, type, true);
79
91
  }
80
92
  convertUnion(type) {
93
+ if (isSubtypeTopLevelConflicted(this.library, type)) {
94
+ if (type.parent && idl.isTypedef(type.parent)) {
95
+ return this.make(type.parent.name, type, false);
96
+ }
97
+ return this.make('Union_' + type.types.map(it => convertType(this, it).text).join("_"), type, false);
98
+ }
81
99
  return this.make(type.name, type, false);
82
100
  }
83
101
  convertContainer(type) {
@@ -108,14 +126,11 @@ export class GenericCppConvertor {
108
126
  if (generatorConfiguration().parameterized.includes(refName)) {
109
127
  return this.make('CustomObject', idl.IDLCustomObjectType);
110
128
  }
111
- let decl = this.resolver.toDeclaration(type);
129
+ let decl = this.library.toDeclaration(type);
112
130
  if (idl.isCallback(decl)) {
113
- decl = (_a = maybeTransformManagedCallback(decl, this.resolver)) !== null && _a !== void 0 ? _a : decl;
131
+ decl = (_a = maybeTransformManagedCallback(decl, this.library)) !== null && _a !== void 0 ? _a : decl;
114
132
  }
115
133
  if (idl.isType(decl)) {
116
- if (idl.isReferenceType(decl)) {
117
- return this.make(`${capitalize(decl.name)}`, decl);
118
- }
119
134
  return this.convertNode(decl);
120
135
  }
121
136
  let res = this.convertNode(decl);
@@ -159,6 +174,9 @@ export class GenericCppConvertor {
159
174
  throw new Error(`Unmapped primitive type ${idl.DebugUtils.debugPrintType(type)}`);
160
175
  }
161
176
  qualifiedName(target) {
177
+ if (idl.isEntry(target) && isTopLevelConflicted(this.library, Language.CPP, target)) {
178
+ return qualifiedName(target, "_", "package.namespace.name");
179
+ }
162
180
  return qualifiedName(target, "_", "namespace.name");
163
181
  }
164
182
  computeTargetTypeLiteralName(decl) {
@@ -188,10 +206,10 @@ export class CppConvertor extends GenericCppConvertor {
188
206
  isPrimitiveOrPrimitiveAlias(type) {
189
207
  if (!idl.isType(type))
190
208
  return false;
191
- const { resolver } = this;
209
+ const { library } = this;
192
210
  const seen = new Set;
193
211
  while (type && idl.isReferenceType(type)) {
194
- const resolved = resolver.resolveTypeReference(type);
212
+ const resolved = library.resolveTypeReference(type);
195
213
  if (!resolved)
196
214
  return false;
197
215
  if (!idl.isTypedef(resolved))
@@ -208,9 +226,9 @@ export class CppConvertor extends GenericCppConvertor {
208
226
  }
209
227
  }
210
228
  export class CppNameConvertor {
211
- constructor(resolver) {
212
- this.resolver = resolver;
213
- this.cppConvertor = new GenericCppConvertor(resolver);
229
+ constructor(library) {
230
+ this.library = library;
231
+ this.cppConvertor = new GenericCppConvertor(library);
214
232
  }
215
233
  convert(node) {
216
234
  return this.cppConvertor.convertNode(node).text;
@@ -236,9 +254,9 @@ export class CppInteropArgConvertor extends InteropArgConvertor {
236
254
  }
237
255
  CppInteropArgConvertor.INSTANCE = new CppInteropArgConvertor();
238
256
  export class CppReturnTypeConvertor {
239
- constructor(resolver) {
240
- this.resolver = resolver;
241
- this.convertor = new CppConvertor(resolver);
257
+ constructor(library) {
258
+ this.library = library;
259
+ this.convertor = new CppConvertor(library);
242
260
  }
243
261
  isVoid(returnType) {
244
262
  return this.convert(returnType) == 'void';
@@ -271,10 +289,6 @@ export class CppReturnTypeConvertor {
271
289
  return this.convertor.convert(type);
272
290
  }
273
291
  convertTypeReference(type) {
274
- const decl = this.resolver.resolveTypeReference(type);
275
- if (decl && idl.isInterface(decl) && isMaterialized(decl, this.resolver)) {
276
- return generatorTypePrefix() + qualifiedName(decl, "_", "namespace.name");
277
- }
278
292
  return this.convertor.convert(type);
279
293
  }
280
294
  convertUnion(type) {
@@ -16,7 +16,7 @@ import * as idl from '../../idl';
16
16
  import { generateSyntheticIdlNodeName } from '../../peer-generation/idl/common';
17
17
  import { isMaterialized } from '../../peer-generation/isMaterialized';
18
18
  import { convertNode, convertType } from '../nameConvertor';
19
- import { removePoints } from './CJConvertors';
19
+ import { removePoints } from '../../util';
20
20
  import { InteropReturnTypeConvertor } from './InteropConvertors';
21
21
  export class KotlinTypeNameConvertor {
22
22
  constructor(resolver) {
@@ -55,6 +55,11 @@ export class KotlinTypeNameConvertor {
55
55
  }
56
56
  convertContainer(type) {
57
57
  if (idl.IDLContainerUtils.isSequence(type)) {
58
+ switch (type.elementType[0]) {
59
+ case idl.IDLU8Type: return "UByteArray";
60
+ case idl.IDLI32Type: return "IntArray";
61
+ case idl.IDLF32Type: return "FloatArray";
62
+ }
58
63
  return `ArrayList<${convertType(this, type.elementType[0])}>`;
59
64
  }
60
65
  if (idl.IDLContainerUtils.isRecord(type)) {
@@ -93,7 +98,7 @@ export class KotlinTypeNameConvertor {
93
98
  case idl.IDLUnknownType:
94
99
  case idl.IDLCustomObjectType: return 'Any';
95
100
  case idl.IDLThisType: return 'this';
96
- case idl.IDLObjectType: return 'Object';
101
+ case idl.IDLObjectType: return 'Any';
97
102
  case idl.IDLAnyType: return 'Any';
98
103
  case idl.IDLUndefinedType: return 'Nothing?';
99
104
  case idl.IDLPointerType: return 'KPointer';
@@ -135,7 +140,6 @@ const KLong = "KLong";
135
140
  const KFloat = "KFloat";
136
141
  const KDouble = "KDouble";
137
142
  const KNativePointer = "KNativePointer";
138
- const KInteropNumber = "KInteropNumber";
139
143
  const KStringPtr = "KStringPtr";
140
144
  const KInteropReturnBuffer = "KInteropReturnBuffer";
141
145
  const KInteropBuffer = "KInteropBuffer";
@@ -154,7 +158,7 @@ export class KotlinCInteropReturnTypeConvertor extends InteropReturnTypeConverto
154
158
  case idl.IDLF16Type:
155
159
  case idl.IDLF32Type:
156
160
  case idl.IDLF64Type: return KInt;
157
- case idl.IDLNumberType: return KInteropNumber;
161
+ case idl.IDLNumberType: return KDouble;
158
162
  case idl.IDLBooleanType: return KBoolean;
159
163
  case idl.IDLBigintType: return KLong;
160
164
  case idl.IDLAnyType:
@@ -218,7 +222,7 @@ export class KotlinCInteropArgConvertor {
218
222
  case idl.IDLU32Type: return KInt;
219
223
  case idl.IDLF32Type: return KFloat;
220
224
  case idl.IDLF64Type: return KDouble;
221
- case idl.IDLNumberType: return KInteropNumber;
225
+ case idl.IDLNumberType: return KDouble;
222
226
  case idl.IDLBigintType: return KLong;
223
227
  case idl.IDLSerializerBuffer: return KSerializerBuffer;
224
228
  case idl.IDLBooleanType:
@@ -1,9 +1,10 @@
1
1
  import * as idl from '../../idl';
2
- import { ReferenceResolver } from '../../peer-generation/ReferenceResolver';
2
+ import { LibraryInterface } from '../../LibraryInterface';
3
3
  import { IdlNameConvertor, NodeConvertor, TypeConvertor } from '../nameConvertor';
4
4
  export declare class TSTypeNameConvertor implements NodeConvertor<string>, IdlNameConvertor {
5
- protected resolver: ReferenceResolver;
6
- constructor(resolver: ReferenceResolver);
5
+ protected library: LibraryInterface;
6
+ constructor(library: LibraryInterface);
7
+ protected mangleTopLevel(decl: idl.IDLEntry): string | undefined;
7
8
  convert(node: idl.IDLNode): string;
8
9
  convertNamespace(node: idl.IDLNamespace): string;
9
10
  convertInterface(node: idl.IDLInterface): string;
@@ -22,7 +23,6 @@ export declare class TSTypeNameConvertor implements NodeConvertor<string>, IdlNa
22
23
  convertPrimitiveType(type: idl.IDLPrimitiveType): string;
23
24
  protected processTupleType(idlProperty: idl.IDLProperty): idl.IDLProperty;
24
25
  protected createTypeSubstitution(parameters: string[] | undefined, args: idl.IDLType[] | undefined): Map<string, idl.IDLType>;
25
- protected applySubstitution(subst: Map<string, idl.IDLType>, type: idl.IDLType): idl.IDLType;
26
26
  protected mapCallback(decl: idl.IDLCallback, args?: idl.IDLType[]): string;
27
27
  protected productType(decl: idl.IDLInterface, args: idl.IDLType[] | undefined, isTuple: boolean, includeFieldNames: boolean): string;
28
28
  protected mapFunctionType(typeArgs: string[]): string;