@idlizer/core 2.1.9-arktscgen-6 → 2.1.9-arktscgen-9

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 (60) hide show
  1. package/build/lib/src/IndentedPrinter.d.ts +2 -1
  2. package/build/lib/src/IndentedPrinter.js +9 -2
  3. package/build/lib/src/Language.d.ts +0 -1
  4. package/build/lib/src/Language.js +7 -8
  5. package/build/lib/src/LanguageWriters/ArgConvertors.d.ts +27 -40
  6. package/build/lib/src/LanguageWriters/ArgConvertors.js +167 -206
  7. package/build/lib/src/LanguageWriters/LanguageWriter.d.ts +13 -34
  8. package/build/lib/src/LanguageWriters/LanguageWriter.js +31 -82
  9. package/build/lib/src/LanguageWriters/convertors/ETSConvertors.js +2 -2
  10. package/build/lib/src/LanguageWriters/convertors/KotlinConvertors.d.ts +17 -1
  11. package/build/lib/src/LanguageWriters/convertors/KotlinConvertors.js +121 -6
  12. package/build/lib/src/LanguageWriters/convertors/TSConvertors.js +6 -0
  13. package/build/lib/src/LanguageWriters/writers/CJLanguageWriter.d.ts +2 -3
  14. package/build/lib/src/LanguageWriters/writers/CJLanguageWriter.js +9 -25
  15. package/build/lib/src/LanguageWriters/writers/CLikeLanguageWriter.d.ts +0 -5
  16. package/build/lib/src/LanguageWriters/writers/CLikeLanguageWriter.js +0 -9
  17. package/build/lib/src/LanguageWriters/writers/CppLanguageWriter.d.ts +4 -6
  18. package/build/lib/src/LanguageWriters/writers/CppLanguageWriter.js +15 -28
  19. package/build/lib/src/LanguageWriters/writers/ETSLanguageWriter.d.ts +14 -10
  20. package/build/lib/src/LanguageWriters/writers/ETSLanguageWriter.js +51 -74
  21. package/build/lib/src/LanguageWriters/writers/JavaLanguageWriter.d.ts +2 -8
  22. package/build/lib/src/LanguageWriters/writers/JavaLanguageWriter.js +11 -21
  23. package/build/lib/src/LanguageWriters/writers/KotlinLanguageWriter.d.ts +12 -9
  24. package/build/lib/src/LanguageWriters/writers/KotlinLanguageWriter.js +121 -32
  25. package/build/lib/src/LanguageWriters/writers/TsLanguageWriter.d.ts +5 -6
  26. package/build/lib/src/LanguageWriters/writers/TsLanguageWriter.js +17 -33
  27. package/build/lib/src/config.d.ts +402 -133
  28. package/build/lib/src/config.js +13 -7
  29. package/build/lib/src/diagnosticmessages.d.ts +45 -0
  30. package/build/lib/src/diagnosticmessages.js +66 -0
  31. package/build/lib/src/diagnostictypes.d.ts +140 -0
  32. package/build/lib/src/diagnostictypes.js +72 -0
  33. package/build/lib/src/formatter.d.ts +3 -0
  34. package/build/lib/src/formatter.js +98 -0
  35. package/build/lib/src/from-idl/deserialize.d.ts +1 -0
  36. package/build/lib/src/from-idl/deserialize.js +107 -5
  37. package/build/lib/src/idl.d.ts +8 -0
  38. package/build/lib/src/idl.js +16 -3
  39. package/build/lib/src/index.d.ts +7 -1
  40. package/build/lib/src/index.js +7 -1
  41. package/build/lib/src/peer-generation/Materialized.d.ts +2 -2
  42. package/build/lib/src/peer-generation/Materialized.js +4 -9
  43. package/build/lib/src/peer-generation/PeerLibrary.js +1 -5
  44. package/build/lib/src/peer-generation/PeerMethod.d.ts +0 -4
  45. package/build/lib/src/peer-generation/PeerMethod.js +18 -36
  46. package/build/lib/src/peer-generation/idl/common.js +1 -1
  47. package/build/lib/src/peer-generation/isMaterialized.js +0 -4
  48. package/build/lib/src/peer-generation/modules.d.ts +1 -0
  49. package/build/lib/src/peer-generation/modules.js +25 -6
  50. package/build/lib/src/peer-generation/unions.d.ts +0 -2
  51. package/build/lib/src/peer-generation/unions.js +3 -23
  52. package/build/lib/src/transformers/FqnTransformer.d.ts +4 -0
  53. package/build/lib/src/transformers/FqnTransformer.js +17 -0
  54. package/build/lib/src/transformers/GenericTransformer.d.ts +8 -0
  55. package/build/lib/src/transformers/GenericTransformer.js +141 -0
  56. package/build/lib/src/util.d.ts +5 -2
  57. package/build/lib/src/util.js +26 -12
  58. package/package.json +2 -2
  59. package/build/lib/src/peer-generation/isExternalType.d.ts +0 -4
  60. package/build/lib/src/peer-generation/isExternalType.js +0 -15
@@ -59,11 +59,6 @@ export declare class FieldAccessExpression {
59
59
  constructor(receiver: string, field: string, nullable?: boolean);
60
60
  asString(): string;
61
61
  }
62
- export declare class CheckDefinedExpression implements LanguageExpression {
63
- private value;
64
- constructor(value: string);
65
- asString(): string;
66
- }
67
62
  export interface LanguageStatement {
68
63
  write(writer: LanguageWriter): void;
69
64
  }
@@ -89,8 +84,9 @@ export declare class ExpressionStatement implements LanguageStatement {
89
84
  }
90
85
  export declare class BlockStatement implements LanguageStatement {
91
86
  statements: LanguageStatement[];
92
- private inScope;
93
- constructor(statements: LanguageStatement[], inScope?: boolean);
87
+ readonly inScope: boolean;
88
+ private newLine;
89
+ constructor(statements: LanguageStatement[], inScope?: boolean, newLine?: boolean);
94
90
  write(writer: LanguageWriter): void;
95
91
  }
96
92
  export declare class IfStatement implements LanguageStatement {
@@ -113,13 +109,6 @@ export declare class MultiBranchIfStatement implements LanguageStatement {
113
109
  constructor(statements: BranchStatement[], elseStatement: LanguageStatement | undefined);
114
110
  write(writer: LanguageWriter): void;
115
111
  }
116
- export declare class CheckOptionalStatement implements LanguageStatement {
117
- undefinedValue: string;
118
- optionalExpression: LanguageExpression;
119
- doStatement: LanguageStatement;
120
- constructor(undefinedValue: string, optionalExpression: LanguageExpression, doStatement: LanguageStatement);
121
- write(writer: LanguageWriter): void;
122
- }
123
112
  export declare class TsEnumEntityStatement implements LanguageStatement {
124
113
  private readonly enumEntity;
125
114
  private readonly options;
@@ -143,7 +132,7 @@ export declare abstract class LambdaExpression implements LanguageExpression {
143
132
  constructor(originalWriter: LanguageWriter, signature: MethodSignature, resolver: ReferenceResolver, body?: LanguageStatement[] | undefined);
144
133
  protected abstract get statementHasSemicolon(): boolean;
145
134
  abstract asString(): string;
146
- bodyAsString(): string;
135
+ bodyAsString(isScoped?: boolean): string;
147
136
  }
148
137
  export declare enum ArgumentModifier {
149
138
  OPTIONAL = 0
@@ -156,7 +145,8 @@ export declare enum FieldModifier {
156
145
  PROTECTED = 4,
157
146
  FINAL = 5,
158
147
  VOLATILE = 6,
159
- INTERNAL = 7
148
+ INTERNAL = 7,
149
+ OVERRIDE = 8
160
150
  }
161
151
  export declare enum MethodModifier {
162
152
  PUBLIC = 0,
@@ -274,14 +264,13 @@ export declare abstract class LanguageWriter {
274
264
  }, setter?: {
275
265
  method: Method;
276
266
  op: () => void;
277
- }): void;
267
+ }, initExpr?: LanguageExpression): void;
278
268
  abstract writeTypeDeclaration(decl: idl.IDLTypedef): void;
279
269
  abstract writeConstant(constName: string, constType: idl.IDLType, constVal?: string): void;
280
270
  abstract makeAssign(variableName: string, type: idl.IDLType | undefined, expr: LanguageExpression | undefined, isDeclared: boolean, isConst?: boolean, options?: MakeAssignOptions): LanguageStatement;
281
271
  abstract makeLambda(signature: MethodSignature, body?: LanguageStatement[]): LanguageExpression;
282
272
  abstract makeThrowError(message: string): LanguageStatement;
283
273
  abstract makeReturn(expr?: LanguageExpression): LanguageStatement;
284
- abstract makeCheckOptional(optional: LanguageExpression, doStatement: LanguageStatement): LanguageStatement;
285
274
  abstract makeRuntimeType(rt: RuntimeType): LanguageExpression;
286
275
  abstract getObjectAccessor(convertor: ArgConvertor, value: string, args?: ObjectArgs): string;
287
276
  abstract makeCast(value: LanguageExpression, node: idl.IDLNode, options?: MakeCastOptions): LanguageExpression;
@@ -295,7 +284,7 @@ export declare abstract class LanguageWriter {
295
284
  abstract makeMapInsert(keyAccessor: string, key: string, valueAccessor: string, value: string): LanguageStatement;
296
285
  abstract makeLoop(counter: string, limit: string): LanguageStatement;
297
286
  abstract makeLoop(counter: string, limit: string, statement: LanguageStatement): LanguageStatement;
298
- abstract makeMapForEach(map: string, key: string, value: string, op: () => void): LanguageStatement;
287
+ abstract makeMapForEach(map: string, key: string, value: string, body: LanguageStatement[]): LanguageStatement;
299
288
  abstract getTagType(): idl.IDLType;
300
289
  abstract getRuntimeType(): idl.IDLType;
301
290
  abstract makeTupleAssign(receiver: string, tupleFields: string[]): LanguageStatement;
@@ -324,6 +313,7 @@ export declare abstract class LanguageWriter {
324
313
  makeThis(): LanguageExpression;
325
314
  makeNull(value?: string): LanguageExpression;
326
315
  makeVoid(): LanguageExpression;
316
+ makeLambdaReturn(expr?: LanguageExpression): LanguageStatement;
327
317
  makeRuntimeTypeCondition(typeVarName: string, equals: boolean, type: RuntimeType, varName?: string): LanguageExpression;
328
318
  makeValueFromOption(value: string, destinationConvertor: ArgConvertor): LanguageExpression;
329
319
  makeNewObject(objectName: string, params?: LanguageExpression[]): LanguageExpression;
@@ -335,7 +325,7 @@ export declare abstract class LanguageWriter {
335
325
  makeNativeCall(nativeModule: NativeModuleType, method: string, params: LanguageExpression[], nullable?: boolean): LanguageExpression;
336
326
  makeBlock(statements: LanguageStatement[], inScope?: boolean): BlockStatement;
337
327
  nativeReceiver(nativeModule: NativeModuleType): string;
338
- makeDefinedCheck(value: string): LanguageExpression;
328
+ abstract makeDefinedCheck(value: string, isTag?: boolean): LanguageExpression;
339
329
  makeRuntimeTypeDefinedCheck(runtimeType: string): LanguageExpression;
340
330
  makeCondition(condition: LanguageExpression, thenStatement: LanguageStatement, elseStatement?: LanguageStatement, insideIfOp?: () => void, insideElseOp?: () => void): LanguageStatement;
341
331
  makeMultiBranchCondition(conditions: BranchStatement[], elseStatement?: LanguageStatement): LanguageStatement;
@@ -344,7 +334,6 @@ export declare abstract class LanguageWriter {
344
334
  makeArrayAccess(value: string, indexVar: string): LanguageExpression;
345
335
  makeTupleAccess(value: string, index: number): LanguageExpression;
346
336
  makeUnionSelector(value: string, valueType: string): LanguageStatement;
347
- makeUnionVariantCondition(_convertor: ArgConvertor, _valueName: string, valueType: string, type: string, _convertorIndex?: number, _runtimeTypeIndex?: number): LanguageExpression;
348
337
  makeUnionVariantCast(value: string, type: string, convertor: ArgConvertor, index?: number): LanguageExpression;
349
338
  makeUnionTypeDefaultInitializer(): LanguageExpression;
350
339
  makeArrayResize(array: string, arrayType: string, length: string, deserializer: string): LanguageStatement;
@@ -357,15 +346,11 @@ export declare abstract class LanguageWriter {
357
346
  makeNaryOp(op: string, args: LanguageExpression[]): LanguageExpression;
358
347
  makeStatement(expr: LanguageExpression): LanguageStatement;
359
348
  writeNativeMethodDeclaration(method: Method): void;
360
- writeUnsafeNativeMethodDeclaration(name: string, signature: MethodSignature): void;
361
349
  pushIndent(): void;
362
350
  popIndent(): void;
363
351
  print(string: stringOrNone): void;
364
352
  getOutput(): string[];
365
353
  makeSignature(returnType: idl.IDLType, parameters: idl.IDLParameter[]): MethodSignature;
366
- makeNamedSignature(returnType: idl.IDLType, parameters: idl.IDLParameter[]): NamedMethodSignature;
367
- makeNativeMethodNamedSignature(returnType: idl.IDLType, parameters: idl.IDLParameter[]): NamedMethodSignature;
368
- makeSerializerConstructorSignatures(): NamedMethodSignature[] | undefined;
369
354
  mapFieldModifier(modifier: FieldModifier): string;
370
355
  mapMethodModifier(modifier: MethodModifier): string;
371
356
  /**
@@ -374,10 +359,6 @@ export declare abstract class LanguageWriter {
374
359
  makeUnsafeCast(param: string): string;
375
360
  makeUnsafeCast_(value: LanguageExpression, type: idl.IDLType, typeOptions?: PrintHint): string;
376
361
  runtimeType(param: ArgConvertor, valueType: string, value: string): void;
377
- makeDiscriminatorFromFields(convertor: {
378
- targetType: (writer: LanguageWriter) => string;
379
- }, value: string, accessors: string[], duplicates: Set<string>): LanguageExpression;
380
- makeIsTypeCall(value: string, decl: idl.IDLInterface): LanguageExpression;
381
362
  makeEnumEntity(enumEntity: idl.IDLEnum, options: {
382
363
  isExport: boolean;
383
364
  isDeclare?: boolean;
@@ -385,9 +366,8 @@ export declare abstract class LanguageWriter {
385
366
  makeFieldModifiersList(modifiers: FieldModifier[] | undefined, customFieldFilter?: (field: FieldModifier) => boolean): string;
386
367
  escapeKeyword(keyword: string): string;
387
368
  makeCastCustomObject(customName: string, _isGenericType: boolean): LanguageExpression;
388
- makeHasOwnProperty(value: string, _valueTypeName: string, property: string, propertyTypeName?: string): LanguageExpression;
389
- discriminatorFromExpressions(value: string, runtimeType: RuntimeType, exprs: LanguageExpression[]): LanguageExpression;
390
- makeDiscriminatorConvertor(_convertor: ArgConvertor, _value: string, _index: number): LanguageExpression | undefined;
369
+ makeHasOwnProperty(value: string, property: string, propertyTypeName?: string): LanguageExpression;
370
+ discriminate(value: string, index: number, type: idl.IDLType, runtimeTypes: RuntimeType[]): string;
391
371
  makeNot(expr: LanguageExpression): LanguageExpression;
392
372
  makeSerializedBufferGetter(serializer: string): LanguageExpression;
393
373
  makeEquals(args: LanguageExpression[]): LanguageExpression;
@@ -395,9 +375,8 @@ export declare abstract class LanguageWriter {
395
375
  castToBoolean(value: string): string;
396
376
  makeCallIsObject(value: string): LanguageExpression;
397
377
  makeStaticBlock(op: (writer: LanguageWriter) => void): void;
398
- instanceOf(convertor: ArgConvertor, value: string, _duplicateMembers?: Set<string>): LanguageExpression;
378
+ instanceOf(value: string, type: idl.IDLType): LanguageExpression;
399
379
  typeInstanceOf(type: idl.IDLEntry, value: string, members?: string[]): LanguageExpression;
400
- stringifyTypeOrEmpty(type: idl.IDLType | undefined): string;
401
380
  /**
402
381
  * Writes `namespace <namespace> {` and adds extra indent
403
382
  * @param namespace Namespace to begin
@@ -13,7 +13,6 @@
13
13
  * limitations under the License.
14
14
  */
15
15
  import * as idl from "../idl";
16
- import { indentedBy } from "../util";
17
16
  import * as fs from "fs";
18
17
  import { RuntimeType } from "./common";
19
18
  export class TernaryExpression {
@@ -95,14 +94,6 @@ export class FieldAccessExpression {
95
94
  return `${this.receiver}${this.nullable ? "?" : ""}.${this.field}`;
96
95
  }
97
96
  }
98
- export class CheckDefinedExpression {
99
- constructor(value) {
100
- this.value = value;
101
- }
102
- asString() {
103
- return `${this.value} != undefined`;
104
- }
105
- }
106
97
  export class ProxyStatement {
107
98
  constructor(cb) {
108
99
  this.cb = cb;
@@ -121,7 +112,7 @@ export class AssignStatement {
121
112
  this.options = options;
122
113
  }
123
114
  write(writer) {
124
- var _a, _b;
115
+ var _a, _b, _c;
125
116
  if (this.isDeclared) {
126
117
  const typeSpec = ((_a = this.options) === null || _a === void 0 ? void 0 : _a.overrideTypeName)
127
118
  ? `: ${this.options.overrideTypeName}`
@@ -133,7 +124,9 @@ export class AssignStatement {
133
124
  writer.print(`${constSpec} ${this.variableName}${typeSpec} ${initValue}`);
134
125
  }
135
126
  else {
136
- writer.print(`${this.variableName} = ${(_b = this.expression) === null || _b === void 0 ? void 0 : _b.asString()}`);
127
+ const receiver = (_b = this.options) === null || _b === void 0 ? void 0 : _b.receiver;
128
+ const withReceiver = receiver ? `${receiver}.` : "";
129
+ writer.print(`${withReceiver}${this.variableName} = ${(_c = this.expression) === null || _c === void 0 ? void 0 : _c.asString()}`);
137
130
  }
138
131
  }
139
132
  }
@@ -149,13 +142,14 @@ export class ExpressionStatement {
149
142
  }
150
143
  }
151
144
  export class BlockStatement {
152
- constructor(statements, inScope = true) {
145
+ constructor(statements, inScope = true, newLine = true) {
153
146
  this.statements = statements;
154
147
  this.inScope = inScope;
148
+ this.newLine = newLine;
155
149
  }
156
150
  write(writer) {
157
151
  if (this.inScope) {
158
- writer.print("{");
152
+ this.newLine ? writer.print("{") : writer.printer.appendLastString(" {");
159
153
  writer.pushIndent();
160
154
  }
161
155
  this.statements.forEach(s => s.write(writer));
@@ -181,7 +175,12 @@ export class IfStatement {
181
175
  }
182
176
  });
183
177
  if (this.elseStatement !== undefined) {
184
- writer.print("else");
178
+ if ((this.thenStatement instanceof BlockStatement) && this.thenStatement.inScope) {
179
+ writer.printer.appendLastString(" else");
180
+ }
181
+ else {
182
+ writer.print("else");
183
+ }
185
184
  this.writeBody(writer, this.elseStatement, () => {
186
185
  if (this.insideElseOp) {
187
186
  this.insideElseOp();
@@ -212,7 +211,7 @@ export class MultiBranchIfStatement {
212
211
  writer.print(`if (${expr.asString()}) {`);
213
212
  }
214
213
  else {
215
- writer.print(`else if (${expr.asString()}) {`);
214
+ writer.printer.appendLastString(` else if (${expr.asString()}) {`);
216
215
  }
217
216
  writer.pushIndent();
218
217
  stmt.write(writer);
@@ -220,7 +219,7 @@ export class MultiBranchIfStatement {
220
219
  writer.print("}");
221
220
  });
222
221
  if (this.statements.length > 0 && this.elseStatement !== undefined) {
223
- writer.print("else {");
222
+ writer.printer.appendLastString(" else {");
224
223
  writer.pushIndent();
225
224
  this.elseStatement.write(writer);
226
225
  writer.popIndent();
@@ -228,19 +227,6 @@ export class MultiBranchIfStatement {
228
227
  }
229
228
  }
230
229
  }
231
- export class CheckOptionalStatement {
232
- constructor(undefinedValue, optionalExpression, doStatement) {
233
- this.undefinedValue = undefinedValue;
234
- this.optionalExpression = optionalExpression;
235
- this.doStatement = doStatement;
236
- }
237
- write(writer) {
238
- writer.print(`if (${this.optionalExpression.asString()} != ${this.undefinedValue})`);
239
- writer.pushIndent();
240
- this.doStatement.write(writer);
241
- writer.popIndent();
242
- }
243
- }
244
230
  // maybe rename or move of fix
245
231
  export class TsEnumEntityStatement {
246
232
  constructor(enumEntity, options) {
@@ -287,21 +273,17 @@ export class LambdaExpression {
287
273
  this.resolver = resolver;
288
274
  this.body = body;
289
275
  }
290
- bodyAsString() {
291
- var _a;
276
+ bodyAsString(isScoped = false) {
292
277
  const writer = this.originalWriter.fork();
293
278
  if (this.body) {
294
- for (const stmt of this.body) {
295
- stmt.write(writer);
296
- }
279
+ writer.writeStatement(new BlockStatement(this.body, isScoped, false));
297
280
  }
298
281
  writer.features.forEach(([feature, module]) => {
299
282
  this.originalWriter.addFeature(feature, module);
300
283
  });
301
- return (this.body ? ((_a = this.body) === null || _a === void 0 ? void 0 : _a.length) > 1 ? '\n' : '' : '').concat(writer.getOutput()
302
- .filter(line => line !== "")
303
- .map(line => indentedBy(line.endsWith('{') || line.endsWith('}') || line.endsWith(';') ? line : `${line};`, 1))
304
- .join("\n"));
284
+ return writer.getOutput()
285
+ .map(line => (line.endsWith('{') || line.endsWith('}') || line.endsWith(';')) ? line : `${line};`)
286
+ .join("\n");
305
287
  }
306
288
  }
307
289
  ////////////////////////////////////////////////////////////////
@@ -321,6 +303,7 @@ export var FieldModifier;
321
303
  FieldModifier[FieldModifier["FINAL"] = 5] = "FINAL";
322
304
  FieldModifier[FieldModifier["VOLATILE"] = 6] = "VOLATILE";
323
305
  FieldModifier[FieldModifier["INTERNAL"] = 7] = "INTERNAL";
306
+ FieldModifier[FieldModifier["OVERRIDE"] = 8] = "OVERRIDE";
324
307
  })(FieldModifier || (FieldModifier = {}));
325
308
  export var MethodModifier;
326
309
  (function (MethodModifier) {
@@ -509,9 +492,12 @@ export class LanguageWriter {
509
492
  makeVoid() {
510
493
  return this.makeUndefined();
511
494
  }
495
+ makeLambdaReturn(expr) {
496
+ return this.makeReturn(expr);
497
+ }
512
498
  makeRuntimeTypeCondition(typeVarName, equals, type, varName) {
513
499
  const op = equals ? "==" : "!=";
514
- return this.makeNaryOp(op, [this.makeRuntimeType(type), this.makeString(typeVarName)]);
500
+ return this.makeNaryOp(op, [this.makeString(typeVarName), this.makeRuntimeType(type)]);
515
501
  }
516
502
  makeValueFromOption(value, destinationConvertor) {
517
503
  return this.makeString(`${value}!`);
@@ -548,9 +534,6 @@ export class LanguageWriter {
548
534
  nativeReceiver(nativeModule) {
549
535
  return nativeModule.name;
550
536
  }
551
- makeDefinedCheck(value) {
552
- return new CheckDefinedExpression(value);
553
- }
554
537
  makeRuntimeTypeDefinedCheck(runtimeType) {
555
538
  return this.makeRuntimeTypeCondition(runtimeType, false, RuntimeType.UNDEFINED);
556
539
  }
@@ -575,9 +558,6 @@ export class LanguageWriter {
575
558
  makeUnionSelector(value, valueType) {
576
559
  return this.makeAssign(valueType, undefined, this.makeString(`runtimeType(${value})`), false);
577
560
  }
578
- makeUnionVariantCondition(_convertor, _valueName, valueType, type, _convertorIndex, _runtimeTypeIndex) {
579
- return this.makeString(`RuntimeType.${type.toUpperCase()} == ${valueType}`);
580
- }
581
561
  makeUnionVariantCast(value, type, convertor, index) {
582
562
  return this.makeString(`unsafeCast<${type}>(${value})`);
583
563
  }
@@ -616,9 +596,6 @@ export class LanguageWriter {
616
596
  writeNativeMethodDeclaration(method) {
617
597
  this.writeMethodDeclaration(method.name, method.signature);
618
598
  }
619
- writeUnsafeNativeMethodDeclaration(name, signature) {
620
- return;
621
- }
622
599
  pushIndent() {
623
600
  this.printer.pushIndent();
624
601
  }
@@ -634,18 +611,6 @@ export class LanguageWriter {
634
611
  makeSignature(returnType, parameters) {
635
612
  return new MethodSignature(returnType, parameters.map(it => it.type));
636
613
  }
637
- makeNamedSignature(returnType, parameters) {
638
- return NamedMethodSignature.make(returnType, parameters.map(it => ({
639
- name: it.name,
640
- type: it.isOptional ? idl.createOptionalType(it.type) : it.type
641
- })));
642
- }
643
- makeNativeMethodNamedSignature(returnType, parameters) {
644
- return this.makeNamedSignature(returnType, parameters);
645
- }
646
- makeSerializerConstructorSignatures() {
647
- return undefined;
648
- }
649
614
  mapFieldModifier(modifier) {
650
615
  return `${FieldModifier[modifier].toLowerCase()}`;
651
616
  }
@@ -664,12 +629,6 @@ export class LanguageWriter {
664
629
  runtimeType(param, valueType, value) {
665
630
  this.writeStatement(this.makeAssign(valueType, idl.IDLI32Type, this.makeFunctionCall("runtimeType", [this.makeString(value)]), false));
666
631
  }
667
- makeDiscriminatorFromFields(convertor, value, accessors, duplicates) {
668
- return this.makeString(`(${this.makeNaryOp("||", accessors.map(it => this.makeString(`${value}!.hasOwnProperty("${it}")`))).asString()})`);
669
- }
670
- makeIsTypeCall(value, decl) {
671
- return this.makeString(`is${decl.name}(${value})`);
672
- }
673
632
  makeEnumEntity(enumEntity, options) {
674
633
  return new TsEnumEntityStatement(enumEntity, { isExport: options.isExport, isDeclare: !!options.isDeclare });
675
634
  }
@@ -687,21 +646,16 @@ export class LanguageWriter {
687
646
  makeCastCustomObject(customName, _isGenericType) {
688
647
  return this.makeString(customName);
689
648
  }
690
- makeHasOwnProperty(value, _valueTypeName, property, propertyTypeName) {
649
+ makeHasOwnProperty(value, property, propertyTypeName) {
691
650
  const expressions = [this.makeString(`${value}.hasOwnProperty("${property}")`)];
692
651
  if (propertyTypeName) {
693
652
  expressions.push(this.makeString(`isInstanceOf("${propertyTypeName}", ${value}.${property})`));
694
653
  }
695
654
  return this.makeNaryOp("&&", expressions);
696
655
  }
697
- discriminatorFromExpressions(value, runtimeType, exprs) {
698
- return this.makeNaryOp("&&", [
699
- this.makeNaryOp("==", [this.makeRuntimeType(runtimeType), this.makeString(`${value}_type`)]),
700
- ...exprs
701
- ]);
702
- }
703
- makeDiscriminatorConvertor(_convertor, _value, _index) {
704
- return undefined;
656
+ discriminate(value, index, type, runtimeTypes) {
657
+ // return most common form, suitable for languages that don't have sum types
658
+ return `${value}.getSelector() == ${index}`;
705
659
  }
706
660
  makeNot(expr) {
707
661
  return this.makeString(`!(${expr.asString()})`);
@@ -720,18 +674,13 @@ export class LanguageWriter {
720
674
  makeStaticBlock(op) {
721
675
  op(this);
722
676
  }
723
- instanceOf(convertor, value, _duplicateMembers) {
724
- return this.makeString(`${value} instanceof ${this.getNodeName(convertor.idlType)}`);
677
+ instanceOf(value, type) {
678
+ return this.makeString(`${value} instanceof ${this.getNodeName(type)}`);
725
679
  }
726
680
  // The version of instanceOf() which does not use ArgConvertors
727
681
  typeInstanceOf(type, value, members) {
728
682
  return this.makeString(`${value} instanceof ${this.getNodeName(type)}`);
729
683
  }
730
- stringifyTypeOrEmpty(type) {
731
- if (type === undefined)
732
- return "";
733
- return this.getNodeName(type);
734
- }
735
684
  /**
736
685
  * Writes `namespace <namespace> {` and adds extra indent
737
686
  * @param namespace Namespace to begin
@@ -58,9 +58,9 @@ export class ETSTypeNameConvertor extends TSTypeNameConvertor {
58
58
  case idl.IDLU64Type:
59
59
  return 'int64';
60
60
  case idl.IDLF32Type:
61
- return 'float32';
61
+ return 'float';
62
62
  case idl.IDLF64Type:
63
- return 'float64';
63
+ return 'double';
64
64
  case idl.IDLNumberType:
65
65
  return 'number';
66
66
  case idl.IDLStringType: return 'string';
@@ -1,6 +1,7 @@
1
1
  import * as idl from '../../idl';
2
2
  import { ReferenceResolver } from '../../peer-generation/ReferenceResolver';
3
- import { IdlNameConvertor, NodeConvertor } from '../nameConvertor';
3
+ import { IdlNameConvertor, NodeConvertor, TypeConvertor } from '../nameConvertor';
4
+ import { InteropReturnTypeConvertor } from './InteropConvertors';
4
5
  export declare class KotlinTypeNameConvertor implements NodeConvertor<string>, IdlNameConvertor {
5
6
  protected resolver: ReferenceResolver;
6
7
  constructor(resolver: ReferenceResolver);
@@ -22,4 +23,19 @@ export declare class KotlinTypeNameConvertor implements NodeConvertor<string>, I
22
23
  convertPrimitiveType(type: idl.IDLPrimitiveType): string;
23
24
  private callbackType;
24
25
  }
26
+ export declare class KotlinCInteropReturnTypeConvertor extends InteropReturnTypeConvertor {
27
+ convertPrimitiveType(type: idl.IDLPrimitiveType): string;
28
+ convertTypeReference(type: idl.IDLReferenceType): string;
29
+ }
30
+ export declare class KotlinCInteropArgConvertor implements TypeConvertor<string> {
31
+ convert(type: idl.IDLType): string;
32
+ convertContainer(type: idl.IDLContainerType): string;
33
+ convertImport(type: idl.IDLImport): string;
34
+ convertTypeReferenceAsImport(type: idl.IDLReferenceType, importClause: string): string;
35
+ convertOptional(type: idl.IDLOptionalType): string;
36
+ convertPrimitiveType(type: idl.IDLPrimitiveType): string;
37
+ convertTypeParameter(type: idl.IDLTypeParameterType): string;
38
+ convertTypeReference(type: idl.IDLReferenceType): string;
39
+ convertUnion(type: idl.IDLUnionType): string;
40
+ }
25
41
  //# sourceMappingURL=KotlinConvertors.d.ts.map
@@ -13,7 +13,11 @@
13
13
  * limitations under the License.
14
14
  */
15
15
  import * as idl from '../../idl';
16
+ import { generateSyntheticIdlNodeName } from '../../peer-generation/idl/common';
17
+ import { isMaterialized } from '../../peer-generation/isMaterialized';
16
18
  import { convertNode, convertType } from '../nameConvertor';
19
+ import { removePoints } from './CJConvertors';
20
+ import { InteropReturnTypeConvertor } from './InteropConvertors';
17
21
  export class KotlinTypeNameConvertor {
18
22
  constructor(resolver) {
19
23
  this.resolver = resolver;
@@ -25,10 +29,10 @@ export class KotlinTypeNameConvertor {
25
29
  return node.name;
26
30
  }
27
31
  convertInterface(node) {
28
- return node.name;
32
+ return removePoints(idl.getQualifiedName(node, 'namespace.name'));
29
33
  }
30
34
  convertEnum(node) {
31
- return node.name;
35
+ return removePoints(idl.getQualifiedName(node, 'namespace.name'));
32
36
  }
33
37
  convertTypedef(node) {
34
38
  return node.name;
@@ -47,15 +51,15 @@ export class KotlinTypeNameConvertor {
47
51
  return `${this.convert(type.type)}?`;
48
52
  }
49
53
  convertUnion(type) {
50
- return type.name;
54
+ return "Union_" + type.types.map(it => generateSyntheticIdlNodeName(it)).join("_");
51
55
  }
52
56
  convertContainer(type) {
53
57
  if (idl.IDLContainerUtils.isSequence(type)) {
54
- return `Array<${convertType(this, type.elementType[0])}>`;
58
+ return `ArrayList<${convertType(this, type.elementType[0])}>`;
55
59
  }
56
60
  if (idl.IDLContainerUtils.isRecord(type)) {
57
61
  const stringes = type.elementType.slice(0, 2).map(it => convertType(this, it));
58
- return `Map<${stringes[0]}, ${stringes[1]}>`;
62
+ return `MutableMap<${stringes[0]}, ${stringes[1]}>`;
59
63
  }
60
64
  if (idl.IDLContainerUtils.isPromise(type)) {
61
65
  return `Any`;
@@ -76,7 +80,7 @@ export class KotlinTypeNameConvertor {
76
80
  }
77
81
  }
78
82
  if (decl) {
79
- return decl.name;
83
+ return removePoints(idl.getQualifiedName(decl, 'namespace.name'));
80
84
  }
81
85
  return this.convert(idl.IDLCustomObjectType);
82
86
  }
@@ -125,4 +129,115 @@ export class KotlinTypeNameConvertor {
125
129
  return `((${params.join(", ")}) -> ${this.convert(decl.returnType)})`;
126
130
  }
127
131
  }
132
+ const KBoolean = "KBoolean";
133
+ const KInt = "KInt";
134
+ const KLong = "KLong";
135
+ const KFloat = "KFloat";
136
+ const KNativePointer = "KNativePointer";
137
+ const KInteropNumber = "KInteropNumber";
138
+ const KStringPtr = "KStringPtr";
139
+ const KInteropReturnBuffer = "KInteropReturnBuffer";
140
+ const KInteropBuffer = "KInteropBuffer";
141
+ const KSerializerBuffer = "KSerializerBuffer";
142
+ export class KotlinCInteropReturnTypeConvertor extends InteropReturnTypeConvertor {
143
+ convertPrimitiveType(type) {
144
+ switch (type) {
145
+ case idl.IDLI8Type:
146
+ case idl.IDLU8Type:
147
+ case idl.IDLI16Type:
148
+ case idl.IDLU16Type:
149
+ case idl.IDLI32Type:
150
+ case idl.IDLU32Type:
151
+ case idl.IDLI64Type:
152
+ case idl.IDLU64Type:
153
+ case idl.IDLF16Type:
154
+ case idl.IDLF32Type:
155
+ case idl.IDLF64Type: return KInt;
156
+ case idl.IDLNumberType: return KInteropNumber;
157
+ case idl.IDLBooleanType: return KBoolean;
158
+ case idl.IDLBigintType: return KLong;
159
+ case idl.IDLAnyType:
160
+ case idl.IDLThisType:
161
+ case idl.IDLUndefinedType:
162
+ case idl.IDLUnknownType:
163
+ case idl.IDLObjectType:
164
+ case idl.IDLVoidType: return idl.IDLVoidType.name;
165
+ case idl.IDLBufferType: return KInteropReturnBuffer;
166
+ case idl.IDLStringType: return KStringPtr;
167
+ case idl.IDLPointerType: return KNativePointer;
168
+ }
169
+ throw new Error(`Cannot pass primitive type ${type.name} through interop`);
170
+ }
171
+ convertTypeReference(type) {
172
+ if (this.resolver != undefined && idl.isCallback(this.resolver.toDeclaration(type))) {
173
+ return KNativePointer;
174
+ }
175
+ if (type.name.endsWith("Attribute"))
176
+ return idl.IDLVoidType.name;
177
+ const decl = this.resolver.resolveTypeReference(type);
178
+ if (decl) {
179
+ // Callbacks and array types return by value
180
+ if (idl.isCallback(this.resolver.toDeclaration(type))) {
181
+ return type.name;
182
+ }
183
+ if (idl.isInterface(decl)) {
184
+ if (isMaterialized(decl, this.resolver)) {
185
+ return KNativePointer;
186
+ }
187
+ return KInteropReturnBuffer;
188
+ }
189
+ if (idl.isEnum(decl)) {
190
+ return KInt;
191
+ }
192
+ }
193
+ return idl.IDLVoidType.name;
194
+ }
195
+ }
196
+ export class KotlinCInteropArgConvertor {
197
+ convert(type) {
198
+ return convertType(this, type);
199
+ }
200
+ convertContainer(type) {
201
+ throw new Error(`Cannot pass container types through interop`);
202
+ }
203
+ convertImport(type) {
204
+ throw new Error(`Cannot pass import types through interop`);
205
+ }
206
+ convertTypeReferenceAsImport(type, importClause) {
207
+ throw new Error(`Cannot pass import types through interop`);
208
+ }
209
+ convertOptional(type) {
210
+ return KNativePointer;
211
+ }
212
+ convertPrimitiveType(type) {
213
+ switch (type) {
214
+ case idl.IDLI64Type: return KLong;
215
+ case idl.IDLU64Type: return KLong;
216
+ case idl.IDLI32Type: return KInt;
217
+ case idl.IDLU32Type: return KInt;
218
+ case idl.IDLF32Type: return KFloat;
219
+ case idl.IDLNumberType: return KInteropNumber;
220
+ case idl.IDLBigintType: return KLong;
221
+ case idl.IDLSerializerBuffer: return KSerializerBuffer;
222
+ case idl.IDLBooleanType:
223
+ case idl.IDLFunctionType: return KInt;
224
+ case idl.IDLStringType: return KStringPtr;
225
+ case idl.IDLBufferType: return KInteropBuffer;
226
+ case idl.IDLDate: return KLong;
227
+ case idl.IDLUndefinedType:
228
+ case idl.IDLVoidType:
229
+ case idl.IDLPointerType: return KNativePointer;
230
+ }
231
+ throw new Error(`Cannot pass primitive type ${type.name} through interop`);
232
+ }
233
+ convertTypeParameter(type) {
234
+ throw new Error("Cannot pass type parameters through interop");
235
+ }
236
+ convertTypeReference(type) {
237
+ throw new Error(`Cannot pass type references through interop`);
238
+ }
239
+ convertUnion(type) {
240
+ throw new Error("Cannot pass union types through interop");
241
+ }
242
+ }
128
243
  //# sourceMappingURL=KotlinConvertors.js.map
@@ -13,6 +13,7 @@
13
13
  * limitations under the License.
14
14
  */
15
15
  import * as idl from '../../idl';
16
+ import { maybeRestoreGenerics } from '../../transformers/GenericTransformer';
16
17
  import { convertNode, convertType } from '../nameConvertor';
17
18
  export class TSTypeNameConvertor {
18
19
  constructor(resolver) {
@@ -107,6 +108,11 @@ export class TSTypeNameConvertor {
107
108
  // (can not cast MyEnum to exact MyEnum.Value1)
108
109
  decl = decl.parent;
109
110
  }
111
+ let maybeRestoredGeneric = maybeRestoreGenerics(type, this.resolver);
112
+ if (maybeRestoredGeneric) {
113
+ type = maybeRestoredGeneric;
114
+ decl = this.resolver.resolveTypeReference(maybeRestoredGeneric);
115
+ }
110
116
  let typeSpec = type.name;
111
117
  let typeArgs = (_b = (_a = type.typeArguments) === null || _a === void 0 ? void 0 : _a.map(it => this.convert(it))) !== null && _b !== void 0 ? _b : [];
112
118
  if (typeSpec === `Optional`)
@@ -101,7 +101,7 @@ export declare class CJLanguageWriter extends LanguageWriter {
101
101
  }, setter?: {
102
102
  method: Method;
103
103
  op: () => void;
104
- }): void;
104
+ }, initExpr?: LanguageExpression): void;
105
105
  writeGetterImplementation(method: Method, op?: (writer: this) => void): void;
106
106
  writeSetterImplementation(method: Method, op: (writer: this) => void): void;
107
107
  writeCJForeign(op: (writer: CJLanguageWriter) => void): void;
@@ -121,10 +121,9 @@ export declare class CJLanguageWriter extends LanguageWriter {
121
121
  makeThrowError(message: string): LanguageStatement;
122
122
  makeTernary(condition: LanguageExpression, trueExpression: LanguageExpression, falseExpression: LanguageExpression): LanguageExpression;
123
123
  makeReturn(expr: LanguageExpression): LanguageStatement;
124
- makeCheckOptional(optional: LanguageExpression, doStatement: LanguageStatement): LanguageStatement;
125
124
  makeStatement(expr: LanguageExpression): LanguageStatement;
126
125
  makeLoop(counter: string, limit: string, statement?: LanguageStatement): LanguageStatement;
127
- makeMapForEach(map: string, key: string, value: string, op: () => void): LanguageStatement;
126
+ makeMapForEach(map: string, key: string, value: string, body: LanguageStatement[]): LanguageStatement;
128
127
  makeDefinedCheck(value: string): LanguageExpression;
129
128
  makeNewObject(objectName: string, params?: LanguageExpression[]): LanguageExpression;
130
129
  writePrintLog(message: string): void;