@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
@@ -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, ExpressionStatement, FieldModifier, LambdaExpression, LanguageWriter, MethodModifier, MethodSignature, ReturnStatement, StringExpression } from "../LanguageWriter";
19
+ import { AssignStatement, BlockStatement, ExpressionStatement, FieldModifier, LambdaExpression, LanguageWriter, MethodModifier, MethodSignature, ReturnStatement, StringExpression } from "../LanguageWriter";
20
20
  import { Language } from "../../Language";
21
21
  import { indentedBy, isDefined } from "../../util";
22
22
  ////////////////////////////////////////////////////////////////
@@ -145,16 +145,16 @@ class CJLoopStatement {
145
145
  }
146
146
  }
147
147
  class CJMapForEachStatement {
148
- constructor(map, key, value, op) {
148
+ constructor(map, key, value, body) {
149
149
  this.map = map;
150
150
  this.key = key;
151
151
  this.value = value;
152
- this.op = op;
152
+ this.body = body;
153
153
  }
154
154
  write(writer) {
155
155
  writer.print(`for ((${this.key}, ${this.value}) in ${this.map}) {`);
156
156
  writer.pushIndent();
157
- this.op();
157
+ writer.writeStatement(new BlockStatement(this.body, false));
158
158
  writer.popIndent();
159
159
  writer.print(`}`);
160
160
  }
@@ -227,20 +227,6 @@ class CJThrowErrorStatement {
227
227
  writer.print(`throw Exception("${this.message}")`);
228
228
  }
229
229
  }
230
- class CJCheckOptionalStatement {
231
- constructor(undefinedValue, optionalExpression, doStatement) {
232
- this.undefinedValue = undefinedValue;
233
- this.optionalExpression = optionalExpression;
234
- this.doStatement = doStatement;
235
- }
236
- write(writer) {
237
- writer.print(`if (let Some(${this.optionalExpression.asString()}) <- ${this.optionalExpression.asString()}) {`);
238
- writer.pushIndent();
239
- this.doStatement.write(writer);
240
- writer.popIndent();
241
- writer.print('}');
242
- }
243
- }
244
230
  class CJArrayResizeStatement {
245
231
  constructor(array, arrayType, length, deserializer) {
246
232
  this.array = array;
@@ -377,7 +363,7 @@ export class CJLanguageWriter extends LanguageWriter {
377
363
  this.popIndent();
378
364
  this.printer.print(`}`);
379
365
  }
380
- writeProperty(propName, propType, modifiers, getter, setter) {
366
+ writeProperty(propName, propType, modifiers, getter, setter, initExpr) {
381
367
  let containerName = propName.concat("_container");
382
368
  let truePropName = this.escapeKeyword(propName);
383
369
  if (getter) {
@@ -387,7 +373,8 @@ export class CJLanguageWriter extends LanguageWriter {
387
373
  }
388
374
  let isStatic = modifiers.includes(FieldModifier.STATIC);
389
375
  let isMutable = !modifiers.includes(FieldModifier.READONLY);
390
- this.print(`public ${isMutable ? "mut " : ""}${isStatic ? "static " : "open "}prop ${truePropName}: ${this.getNodeName(propType)}`);
376
+ let initializer = initExpr ? ` = ${initExpr.asString()}` : "";
377
+ this.print(`public ${isMutable ? "mut " : ""}${isStatic ? "static " : "open "}prop ${truePropName}: ${this.getNodeName(propType)}${initializer}`);
391
378
  if (getter) {
392
379
  this.print('{');
393
380
  this.pushIndent();
@@ -490,17 +477,14 @@ export class CJLanguageWriter extends LanguageWriter {
490
477
  makeReturn(expr) {
491
478
  return new ReturnStatement(expr);
492
479
  }
493
- makeCheckOptional(optional, doStatement) {
494
- return new CJCheckOptionalStatement("undefined", optional, doStatement);
495
- }
496
480
  makeStatement(expr) {
497
481
  return new ExpressionStatement(expr);
498
482
  }
499
483
  makeLoop(counter, limit, statement) {
500
484
  return new CJLoopStatement(counter, limit, statement);
501
485
  }
502
- makeMapForEach(map, key, value, op) {
503
- return new CJMapForEachStatement(map, key, value, op);
486
+ makeMapForEach(map, key, value, body) {
487
+ return new CJMapForEachStatement(map, key, value, body);
504
488
  }
505
489
  makeDefinedCheck(value) {
506
490
  return new CJCheckDefinedExpression(this.escapeKeyword(value));
@@ -8,11 +8,6 @@ export declare class CLikeReturnStatement extends ReturnStatement {
8
8
  constructor(expression: LanguageExpression);
9
9
  write(writer: LanguageWriter): void;
10
10
  }
11
- export declare class CDefinedExpression implements LanguageExpression {
12
- private value;
13
- constructor(value: string);
14
- asString(): string;
15
- }
16
11
  export declare class CLikeLoopStatement implements LanguageStatement {
17
12
  private counter;
18
13
  private limit;
@@ -12,7 +12,6 @@
12
12
  * See the License for the specific language governing permissions and
13
13
  * limitations under the License.
14
14
  */
15
- import { PrimitiveTypeList } from "../../peer-generation/PrimitiveType";
16
15
  import { ExpressionStatement, LanguageWriter, Method, ReturnStatement } from "../LanguageWriter";
17
16
  ////////////////////////////////////////////////////////////////
18
17
  // STATEMENTS //
@@ -26,14 +25,6 @@ export class CLikeReturnStatement extends ReturnStatement {
26
25
  writer.print(this.expression ? `return ${this.expression.asString()};` : "return;");
27
26
  }
28
27
  }
29
- export class CDefinedExpression {
30
- constructor(value) {
31
- this.value = value;
32
- }
33
- asString() {
34
- return `${this.value} != ${PrimitiveTypeList.UndefinedTag}`;
35
- }
36
- }
37
28
  export class CLikeLoopStatement {
38
29
  constructor(counter, limit, statement) {
39
30
  this.counter = counter;
@@ -1,7 +1,7 @@
1
1
  import { IDLContainerType, IDLEnum, IDLNode, IDLType, IDLTypedef } from '../../idl';
2
2
  import { ArgConvertor, BaseArgConvertor } from "../ArgConvertors";
3
3
  import { PrimitiveTypeList } from "../../peer-generation/PrimitiveType";
4
- import { AssignStatement, FieldModifier, LanguageExpression, LanguageStatement, LanguageWriter, MakeAssignOptions, MakeCastOptions, MakeRefOptions, Method, PrintHint, MethodModifier, MethodSignature, NamedMethodSignature, ObjectArgs, DelegationCall, MethodStaticCallExpression } from "../LanguageWriter";
4
+ import { AssignStatement, FieldModifier, LanguageExpression, LanguageStatement, LanguageWriter, MakeAssignOptions, MakeCastOptions, MakeRefOptions, Method, PrintHint, MethodModifier, MethodSignature, ObjectArgs, DelegationCall, MethodStaticCallExpression } from "../LanguageWriter";
5
5
  import { CLikeLanguageWriter } from "./CLikeLanguageWriter";
6
6
  import { IdlNameConvertor } from "../nameConvertor";
7
7
  import { RuntimeType } from "../common";
@@ -85,16 +85,14 @@ export declare class CppLanguageWriter extends CLikeLanguageWriter {
85
85
  makeAssign(variableName: string, type: IDLType | undefined, expr: LanguageExpression | undefined, isDeclared?: boolean, isConst?: boolean, options?: MakeAssignOptions): LanguageStatement;
86
86
  makeLambda(signature: MethodSignature, body?: LanguageStatement[]): LanguageExpression;
87
87
  makeReturn(expr: LanguageExpression): LanguageStatement;
88
- makeCheckOptional(optional: LanguageExpression, doStatement: LanguageStatement): LanguageStatement;
89
88
  makeStatement(expr: LanguageExpression): LanguageStatement;
90
89
  makeArrayAccess(value: string, indexVar: string): LanguageExpression;
91
90
  makeTupleAccess(value: string, index: number): LanguageExpression;
92
91
  makeUnionSelector(value: string, valueType: string): LanguageStatement;
93
- makeUnionVariantCondition(_convertor: ArgConvertor, _valueName: string, valueType: string, type: string, convertorIndex: number): LanguageExpression;
94
92
  makeUnionVariantCast(value: string, type: string, convertor: ArgConvertor, index: number): LanguageExpression;
95
93
  makeStaticMethodCall(receiver: string, method: string, params: LanguageExpression[], nullable?: boolean): LanguageExpression;
96
94
  makeLoop(counter: string, limit: string, statement?: LanguageStatement): LanguageStatement;
97
- makeMapForEach(map: string, key: string, value: string, op: () => void): LanguageStatement;
95
+ makeMapForEach(map: string, key: string, value: string, body: LanguageStatement[]): LanguageStatement;
98
96
  makeArrayInit(type: IDLContainerType): LanguageExpression;
99
97
  makeClassInit(type: IDLType, paramenters: LanguageExpression[]): LanguageExpression;
100
98
  makeMapInit(type: IDLType): LanguageExpression;
@@ -103,7 +101,7 @@ export declare class CppLanguageWriter extends CLikeLanguageWriter {
103
101
  makeCast(expr: LanguageExpression, node: IDLNode, options?: MakeCastOptions): LanguageExpression;
104
102
  makePointerPropertyAccessExpression(expression: string, name: string): CppPointerPropertyAccessExpression;
105
103
  writePrintLog(message: string): void;
106
- makeDefinedCheck(value: string): LanguageExpression;
104
+ makeDefinedCheck(value: string, isTag?: boolean): LanguageExpression;
107
105
  makeSetUnionSelector(value: string, index: string): LanguageStatement;
108
106
  makeSetOptionTag(value: string, tag: LanguageExpression): LanguageStatement;
109
107
  getObjectAccessor(convertor: BaseArgConvertor, value: string, args?: ObjectArgs): string;
@@ -129,6 +127,6 @@ export declare class CppLanguageWriter extends CLikeLanguageWriter {
129
127
  stringifyMethodReturnType(type: IDLType, hint?: PrintHint): string;
130
128
  stringifyMethodArgType(type: IDLType, hint?: PrintHint): string;
131
129
  stringifyTypeWithReceiver(type: IDLType, receiver?: string): string;
132
- makeSerializerConstructorSignatures(): NamedMethodSignature[] | undefined;
130
+ discriminate(value: string, index: number, type: idl.IDLType, runtimeTypes: RuntimeType[]): string;
133
131
  }
134
132
  //# sourceMappingURL=CppLanguageWriter.d.ts.map
@@ -12,11 +12,11 @@
12
12
  * See the License for the specific language governing permissions and
13
13
  * limitations under the License.
14
14
  */
15
- import { createReferenceType, forceAsNamedNode, IDLU32Type, IDLVoidType } from '../../idl';
15
+ import { createReferenceType, forceAsNamedNode } from '../../idl';
16
16
  import { Language } from '../../Language';
17
17
  import { PrimitiveTypeList } from "../../peer-generation/PrimitiveType";
18
- import { AssignStatement, BlockStatement, FieldModifier, PrintHint, MethodModifier, NamedMethodSignature, StringExpression, MethodStaticCallExpression } from "../LanguageWriter";
19
- import { CDefinedExpression, CLikeExpressionStatement, CLikeLanguageWriter, CLikeLoopStatement, CLikeReturnStatement } from "./CLikeLanguageWriter";
18
+ import { AssignStatement, BlockStatement, FieldModifier, PrintHint, MethodModifier, StringExpression, MethodStaticCallExpression } from "../LanguageWriter";
19
+ import { CLikeExpressionStatement, CLikeLanguageWriter, CLikeLoopStatement, CLikeReturnStatement } from "./CLikeLanguageWriter";
20
20
  import { RuntimeType } from "../common";
21
21
  import { IndentedPrinter } from "../../IndentedPrinter";
22
22
  import { cppKeywords } from "../../languageSpecificKeywords";
@@ -123,18 +123,18 @@ class CppMapResizeStatement {
123
123
  }
124
124
  }
125
125
  class CppMapForEachStatement {
126
- constructor(map, key, value, op) {
126
+ constructor(map, key, value, body) {
127
127
  this.map = map;
128
128
  this.key = key;
129
129
  this.value = value;
130
- this.op = op;
130
+ this.body = body;
131
131
  }
132
132
  write(writer) {
133
133
  writer.print(`for (int32_t i = 0; i < ${this.map}.size; i++) {`);
134
134
  writer.pushIndent();
135
135
  writer.print(`auto ${this.key} = ${this.map}.keys[i];`);
136
136
  writer.print(`auto ${this.value} = ${this.map}.values[i];`);
137
- this.op();
137
+ writer.writeStatement(new BlockStatement(this.body, false));
138
138
  writer.popIndent();
139
139
  writer.print(`}`);
140
140
  }
@@ -179,7 +179,7 @@ export class CppLanguageWriter extends CLikeLanguageWriter {
179
179
  }
180
180
  fork(options) {
181
181
  var _a;
182
- return new CppLanguageWriter(new IndentedPrinter(), (_a = options === null || options === void 0 ? void 0 : options.resolver) !== null && _a !== void 0 ? _a : this.resolver, this.typeConvertor, this.primitivesTypes);
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
184
  writeDeclaration(name, signature, modifiers, postfix) {
185
185
  const realName = this.classMode === 'normal' ? name : `${this.currentClass.at(0)}::${name}`;
@@ -294,14 +294,11 @@ export class CppLanguageWriter extends CLikeLanguageWriter {
294
294
  return new CppAssignStatement(variableName, type, expr, isDeclared, isConst, options);
295
295
  }
296
296
  makeLambda(signature, body) {
297
- throw new Error(`TBD`);
297
+ throw new Error(`Improve`);
298
298
  }
299
299
  makeReturn(expr) {
300
300
  return new CLikeReturnStatement(expr);
301
301
  }
302
- makeCheckOptional(optional, doStatement) {
303
- throw new Error(`TBD`);
304
- }
305
302
  makeStatement(expr) {
306
303
  return new CLikeExpressionStatement(expr);
307
304
  }
@@ -314,9 +311,6 @@ export class CppLanguageWriter extends CLikeLanguageWriter {
314
311
  makeUnionSelector(value, valueType) {
315
312
  return this.makeAssign(valueType, undefined, this.makeString(`${value}.selector`), false);
316
313
  }
317
- makeUnionVariantCondition(_convertor, _valueName, valueType, type, convertorIndex) {
318
- return this.makeString(`${valueType} == ${convertorIndex}`);
319
- }
320
314
  makeUnionVariantCast(value, type, convertor, index) {
321
315
  return this.makeString(`${value}.value${index}`);
322
316
  }
@@ -326,8 +320,8 @@ export class CppLanguageWriter extends CLikeLanguageWriter {
326
320
  makeLoop(counter, limit, statement) {
327
321
  return new CLikeLoopStatement(counter, limit, statement);
328
322
  }
329
- makeMapForEach(map, key, value, op) {
330
- return new CppMapForEachStatement(map, key, value, op);
323
+ makeMapForEach(map, key, value, body) {
324
+ return new CppMapForEachStatement(map, key, value, body);
331
325
  }
332
326
  makeArrayInit(type) {
333
327
  return this.makeString(`{}`);
@@ -353,8 +347,9 @@ export class CppLanguageWriter extends CLikeLanguageWriter {
353
347
  writePrintLog(message) {
354
348
  this.print(`printf("${message}\\n");`);
355
349
  }
356
- makeDefinedCheck(value) {
357
- return new CDefinedExpression(value);
350
+ makeDefinedCheck(value, isTag) {
351
+ return this.makeString(isTag ? `${value} != ${PrimitiveTypeList.UndefinedTag}`
352
+ : `runtimeType(${value}) != ${PrimitiveTypeList.UndefinedRuntime}`);
358
353
  }
359
354
  makeSetUnionSelector(value, index) {
360
355
  return this.makeAssign(`${value}.selector`, undefined, this.makeString(index), false);
@@ -488,16 +483,8 @@ export class CppLanguageWriter extends CLikeLanguageWriter {
488
483
  }
489
484
  return this.getNodeName(type);
490
485
  }
491
- makeSerializerConstructorSignatures() {
492
- const fromBufferCtor = new NamedMethodSignature(IDLVoidType, [
493
- idl.IDLSerializerBuffer,
494
- IDLU32Type,
495
- createReferenceType("CallbackResourceHolder")
496
- ], ["data", "dataLength", "resourceHolder"], [undefined, `0`, `nullptr`], undefined, [undefined, undefined, undefined, PrintHint.AsPointer]);
497
- const ownedDataCtor = new NamedMethodSignature(IDLVoidType, [
498
- createReferenceType("CallbackResourceHolder")
499
- ], ["resourceHolder"], [`nullptr`], undefined, [undefined, PrintHint.AsPointer]);
500
- return [ownedDataCtor, fromBufferCtor];
486
+ discriminate(value, index, type, runtimeTypes) {
487
+ return `${value}.selector == ${index}`;
501
488
  }
502
489
  }
503
490
  //# sourceMappingURL=CppLanguageWriter.js.map
@@ -1,18 +1,26 @@
1
1
  import { IndentedPrinter } from "../../IndentedPrinter";
2
- import { LambdaExpression, LanguageExpression, LanguageStatement, LanguageWriter, MakeCastOptions, Method, MethodModifier, MethodSignature, ObjectArgs } 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";
6
6
  import * as idl from '../../idl';
7
7
  import { IdlNameConvertor } from "../nameConvertor";
8
+ import { RuntimeType } from "../common";
8
9
  import { ReferenceResolver } from "../../peer-generation/ReferenceResolver";
10
+ export declare class ETSStringExpression implements LanguageExpression {
11
+ value: string;
12
+ constructor(value: string);
13
+ private changeQuotes;
14
+ asString(): string;
15
+ }
9
16
  export declare class EtsAssignStatement implements LanguageStatement {
10
17
  variableName: string;
11
18
  type: IDLType | undefined;
12
19
  expression: LanguageExpression;
13
20
  isDeclared: boolean;
14
21
  protected isConst: boolean;
15
- constructor(variableName: string, type: IDLType | undefined, expression: LanguageExpression, isDeclared?: boolean, isConst?: boolean);
22
+ protected options?: MakeAssignOptions | undefined;
23
+ constructor(variableName: string, type: IDLType | undefined, expression: LanguageExpression, isDeclared?: boolean, isConst?: boolean, options?: MakeAssignOptions | undefined);
16
24
  write(writer: LanguageWriter): void;
17
25
  }
18
26
  export declare class ArkTSEnumEntityStatement implements LanguageStatement {
@@ -40,9 +48,10 @@ export declare class ETSLanguageWriter extends TSLanguageWriter {
40
48
  fork(options?: {
41
49
  resolver?: ReferenceResolver;
42
50
  }): LanguageWriter;
43
- makeAssign(variableName: string, type: IDLType | undefined, expr: LanguageExpression, isDeclared?: boolean, isConst?: boolean): LanguageStatement;
51
+ makeAssign(variableName: string, type: IDLType | undefined, expr: LanguageExpression, isDeclared?: boolean, isConst?: boolean, options?: MakeAssignOptions): LanguageStatement;
44
52
  makeLambda(signature: MethodSignature, body?: LanguageStatement[]): LanguageExpression;
45
- makeMapForEach(map: string, key: string, value: string, op: () => void): LanguageStatement;
53
+ makeString(value: string): LanguageExpression;
54
+ makeMapForEach(map: string, key: string, value: string, body: LanguageStatement[]): LanguageStatement;
46
55
  makeMapSize(map: string): LanguageExpression;
47
56
  get supportedModifiers(): MethodModifier[];
48
57
  runtimeType(param: ArgConvertor, valueType: string, value: string): void;
@@ -53,23 +62,18 @@ export declare class ETSLanguageWriter extends TSLanguageWriter {
53
62
  targetType: (writer: LanguageWriter) => string;
54
63
  }, value: string, accessors: string[], duplicates: Set<string>): LanguageExpression;
55
64
  makeValueFromOption(value: string, destinationConvertor: ArgConvertor): LanguageExpression;
56
- makeIsTypeCall(value: string, decl: idl.IDLInterface): LanguageExpression;
57
65
  makeEnumEntity(enumEntity: IDLEnum, options: {
58
66
  isExport: boolean;
59
67
  isDeclare?: boolean;
60
68
  }): LanguageStatement;
61
- getObjectAccessor(convertor: ArgConvertor, value: string, args?: ObjectArgs): string;
62
69
  writeMethodCall(receiver: string, method: string, params: string[], nullable?: boolean): void;
63
70
  isQuickType(type: IDLType): boolean;
64
71
  writeNativeMethodDeclaration(method: Method): void;
65
- makeUnionVariantCondition(convertor: ArgConvertor, valueName: string, valueType: string, type: string, convertorIndex: number, runtimeTypeIndex: number): LanguageExpression;
66
72
  makeCastCustomObject(customName: string, isGenericType: boolean): LanguageExpression;
67
- makeHasOwnProperty(value: string, valueTypeName: string, property: string, propertyTypeName: string): LanguageExpression;
68
73
  makeEquals(args: LanguageExpression[]): LanguageExpression;
69
- makeDiscriminatorConvertor(convertor: ArgConvertor, value: string, index: number): LanguageExpression;
74
+ discriminate(value: string, index: number, type: idl.IDLType, runtimeTypes: RuntimeType[]): string;
70
75
  castToInt(value: string, bitness: 8 | 32): string;
71
76
  castToBoolean(value: string): string;
72
- instanceOf(convertor: ArgConvertor, value: string, duplicateMembers?: Set<string>): LanguageExpression;
73
77
  typeInstanceOf(type: idl.IDLEntry, value: string, members?: string[]): LanguageExpression;
74
78
  makeTypeCast(value: LanguageExpression, type: idl.IDLType, options?: MakeCastOptions): LanguageExpression;
75
79
  makeCast(value: LanguageExpression, node: idl.IDLNode, options?: MakeCastOptions): LanguageExpression;
@@ -13,27 +13,45 @@
13
13
  * limitations under the License.
14
14
  */
15
15
  import { IndentedPrinter } from "../../IndentedPrinter";
16
- import { LambdaExpression, MethodModifier } from "../LanguageWriter";
16
+ import { BlockStatement, LambdaExpression, MethodModifier } from "../LanguageWriter";
17
17
  import { TSCastExpression, TSLanguageWriter } from "./TsLanguageWriter";
18
18
  import { getExtAttribute, IDLThisType } from '../../idl';
19
- import { AggregateConvertor, ArrayConvertor, CustomTypeConvertor, InterfaceConvertor, MaterializedClassConvertor, OptionConvertor, UnionConvertor, BufferConvertor } from "../ArgConvertors";
19
+ import { AggregateConvertor, CustomTypeConvertor, InterfaceConvertor, MaterializedClassConvertor } from "../ArgConvertors";
20
20
  import * as idl from '../../idl';
21
21
  import { convertDeclaration } from "../nameConvertor";
22
22
  import { createDeclarationNameConvertor } from "../../peer-generation/idl/IdlNameConvertor";
23
23
  import { Language } from "../../Language";
24
- import { RuntimeType } from "../common";
24
+ ////////////////////////////////////////////////////////////////
25
+ // EXPRESSIONS //
26
+ ////////////////////////////////////////////////////////////////
27
+ export class ETSStringExpression {
28
+ constructor(value) {
29
+ this.value = value;
30
+ }
31
+ changeQuotes(value) {
32
+ return `'${value.substring(1, value.length - 1)}'`;
33
+ }
34
+ asString() {
35
+ if (this.value.startsWith('"') && this.value.endsWith('"')) {
36
+ return this.changeQuotes(this.value);
37
+ }
38
+ return this.value;
39
+ }
40
+ }
25
41
  ////////////////////////////////////////////////////////////////
26
42
  // STATEMENTS //
27
43
  ////////////////////////////////////////////////////////////////
28
44
  export class EtsAssignStatement {
29
- constructor(variableName, type, expression, isDeclared = true, isConst = true) {
45
+ constructor(variableName, type, expression, isDeclared = true, isConst = true, options) {
30
46
  this.variableName = variableName;
31
47
  this.type = type;
32
48
  this.expression = expression;
33
49
  this.isDeclared = isDeclared;
34
50
  this.isConst = isConst;
51
+ this.options = options;
35
52
  }
36
53
  write(writer) {
54
+ var _a;
37
55
  if (this.isDeclared) {
38
56
  const typeClause = this.type !== undefined ? `: ${writer.getNodeName(this.type)}` : '';
39
57
  const maybeAssign = this.expression !== undefined ? " = " : "";
@@ -41,23 +59,25 @@ export class EtsAssignStatement {
41
59
  writer.print(`${this.isConst ? "const" : "let"} ${this.variableName} ${typeClause}${maybeAssign}${initValue.asString()}`);
42
60
  }
43
61
  else {
44
- writer.print(`${this.variableName} = ${this.expression.asString()}`);
62
+ const receiver = (_a = this.options) === null || _a === void 0 ? void 0 : _a.receiver;
63
+ const withReceiver = receiver ? `${receiver}.` : "";
64
+ writer.print(`${withReceiver}${this.variableName} = ${this.expression.asString()}`);
45
65
  }
46
66
  }
47
67
  }
48
68
  class ArkTSMapForEachStatement {
49
- constructor(map, key, value, op) {
69
+ constructor(map, key, value, body) {
50
70
  this.map = map;
51
71
  this.key = key;
52
72
  this.value = value;
53
- this.op = op;
73
+ this.body = body;
54
74
  }
55
75
  write(writer) {
56
76
  writer.print(`for (const pair of ${this.map}) {`);
57
77
  writer.pushIndent();
58
78
  writer.print(`const ${this.key} = pair[0]`);
59
79
  writer.print(`const ${this.value} = pair[1]`);
60
- this.op();
80
+ writer.writeStatement(new BlockStatement(this.body, false));
61
81
  writer.popIndent();
62
82
  writer.print(`}`);
63
83
  }
@@ -123,17 +143,17 @@ export class ETSLambdaExpression extends LambdaExpression {
123
143
  isRetTypeCallback = resolved !== undefined && idl.isCallback(resolved);
124
144
  }
125
145
  return `(${params.join(", ")})${isRetTypeCallback
126
- ? "" : `:${this.convertor.convert(this.signature.returnType)}`} => { ${this.bodyAsString()} }`;
146
+ ? "" : `:${this.convertor.convert(this.signature.returnType)}`} =>${this.bodyAsString(true)}`;
127
147
  }
128
148
  }
129
149
  ////////////////////////////////////////////////////////////////
130
150
  // UTILS //
131
151
  ////////////////////////////////////////////////////////////////
132
152
  export function generateTypeCheckerName(typeName) {
133
- typeName = typeName
153
+ return "is" + typeName
134
154
  .replaceAll('[]', 'BracketsArray')
135
- .split('.').join('_');
136
- return `is${typeName.replaceAll('[]', 'Brackets')}`;
155
+ .replaceAll(/<.*$/g, '') // delete type arguments
156
+ .replaceAll('.', '_');
137
157
  }
138
158
  export function generateEnumToNumericName(entry) {
139
159
  const typeName = idl.getQualifiedName(entry, "namespace.name").split('.').join('_');
@@ -157,16 +177,19 @@ export class ETSLanguageWriter extends TSLanguageWriter {
157
177
  }
158
178
  fork(options) {
159
179
  var _a;
160
- return new ETSLanguageWriter(new IndentedPrinter(), (_a = options === null || options === void 0 ? void 0 : options.resolver) !== null && _a !== void 0 ? _a : this.resolver, this.typeConvertor, this.arrayConvertor);
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);
161
181
  }
162
- makeAssign(variableName, type, expr, isDeclared = true, isConst = true) {
163
- return new EtsAssignStatement(variableName, type, expr, isDeclared, isConst);
182
+ makeAssign(variableName, type, expr, isDeclared = true, isConst = true, options) {
183
+ return new EtsAssignStatement(variableName, type, expr, isDeclared, isConst, options);
164
184
  }
165
185
  makeLambda(signature, body) {
166
186
  return new ETSLambdaExpression(this, this.typeConvertor, signature, this.resolver, body);
167
187
  }
168
- makeMapForEach(map, key, value, op) {
169
- return new ArkTSMapForEachStatement(map, key, value, op);
188
+ makeString(value) {
189
+ return new ETSStringExpression(value);
190
+ }
191
+ makeMapForEach(map, key, value, body) {
192
+ return new ArkTSMapForEachStatement(map, key, value, body);
170
193
  }
171
194
  makeMapSize(map) {
172
195
  return this.makeString(`${super.makeMapSize(map).asString()}`); // TODO: cast really needed?
@@ -202,7 +225,7 @@ export class ETSLanguageWriter extends TSLanguageWriter {
202
225
  || convertor instanceof InterfaceConvertor
203
226
  || convertor instanceof MaterializedClassConvertor
204
227
  || convertor instanceof CustomTypeConvertor) {
205
- return this.instanceOf(convertor, value, duplicates);
228
+ return this.instanceOf(value, convertor.idlType);
206
229
  }
207
230
  return this.makeString(`${value} instanceof ${convertor.targetType(this)}`);
208
231
  }
@@ -212,18 +235,12 @@ export class ETSLanguageWriter extends TSLanguageWriter {
212
235
  }
213
236
  return super.makeValueFromOption(value, destinationConvertor);
214
237
  }
215
- makeIsTypeCall(value, decl) {
216
- return makeInterfaceTypeCheckerCall(value, decl.name, decl.properties.map(it => it.name), new Set(), this);
217
- }
218
238
  makeEnumEntity(enumEntity, options) {
219
239
  return new ArkTSEnumEntityStatement(enumEntity, {
220
240
  isExport: options === null || options === void 0 ? void 0 : options.isExport,
221
241
  isDeclare: !!(options === null || options === void 0 ? void 0 : options.isDeclare),
222
242
  });
223
243
  }
224
- getObjectAccessor(convertor, value, args) {
225
- return super.getObjectAccessor(convertor, value, args);
226
- }
227
244
  writeMethodCall(receiver, method, params, nullable = false) {
228
245
  // ArkTS does not support - 'this.?'
229
246
  super.writeMethodCall(receiver, method, params, nullable && receiver !== "this");
@@ -237,46 +254,27 @@ export class ETSLanguageWriter extends TSLanguageWriter {
237
254
  }
238
255
  this.writeMethodDeclaration(method.name, method.signature, [MethodModifier.STATIC, MethodModifier.NATIVE]);
239
256
  }
240
- makeUnionVariantCondition(convertor, valueName, valueType, type, convertorIndex, runtimeTypeIndex) {
241
- if (idl.isEnum(this.resolver.toDeclaration(convertor.nativeType()))) {
242
- return this.instanceOf(convertor, valueName);
243
- }
244
- // TODO: in ArkTS SerializerBase.runtimeType returns RuntimeType.OBJECT for enum type and not RuntimeType.NUMBER as in TS
245
- if (convertor instanceof UnionConvertor || convertor instanceof OptionConvertor) {
246
- // Unwrapping of type
247
- const idlType = convertor instanceof UnionConvertor
248
- ? convertor.nativeType().types[runtimeTypeIndex]
249
- : idl.maybeUnwrapOptionalType(convertor.nativeType());
250
- if (idlType !== undefined && idl.isReferenceType(idlType)) {
251
- const resolved = this.resolver.resolveTypeReference(idlType);
252
- type = resolved != undefined && idl.isEnum(resolved) ? RuntimeType[RuntimeType.OBJECT] : type;
253
- }
254
- }
255
- return super.makeUnionVariantCondition(convertor, valueName, valueType, type, convertorIndex);
256
- }
257
257
  makeCastCustomObject(customName, isGenericType) {
258
258
  if (isGenericType) {
259
259
  return this.makeCast(this.makeString(customName), idl.IDLObjectType);
260
260
  }
261
261
  return super.makeCastCustomObject(customName, isGenericType);
262
262
  }
263
- makeHasOwnProperty(value, valueTypeName, property, propertyTypeName) {
264
- return this.makeNaryOp("&&", [
265
- this.makeString(`${value} instanceof ${valueTypeName}`),
266
- this.makeString(`isInstanceOf("${propertyTypeName}", ${value}.${property})`)
267
- ]);
268
- }
269
263
  makeEquals(args) {
270
264
  // TODO: Error elimination: 'TypeError: Both operands have to be reference types'
271
265
  // the '==' operator must be used when one of the operands is a reference
272
266
  return super.makeNaryOp('==', args);
273
267
  }
274
- makeDiscriminatorConvertor(convertor, value, index) {
275
- return this.instanceOf(convertor, value);
276
- // Or this ????????
277
- // return this.discriminatorFromExpressions(value, RuntimeType.OBJECT, [
278
- // makeEnumTypeCheckerCall(value, this.getNodeName(convertor.idlType), this)
279
- // ])
268
+ discriminate(value, index, type, runtimeTypes) {
269
+ // work around ArkTS compiler bugs
270
+ if (idl.IDLContainerUtils.isSequence(type)) {
271
+ const arrayTypeName = this.arrayConvertor.convert(type);
272
+ return `TypeChecker.${generateTypeCheckerName(arrayTypeName)}(${value})`;
273
+ }
274
+ if (this.getNodeName(type) === "DragPreviewMode") {
275
+ return `TypeChecker.isDragPreviewMode(${value})`;
276
+ }
277
+ return `${value} instanceof ${this.getNodeName(type)}`;
280
278
  }
281
279
  castToInt(value, bitness) {
282
280
  // This fix is used to avoid unnecessary writeInt8(value as int32) call, which is generated if value is already an int32
@@ -287,27 +285,6 @@ export class ETSLanguageWriter extends TSLanguageWriter {
287
285
  return `(${value}).toInt()`; // FIXME: is there int8 in ARKTS?
288
286
  }
289
287
  castToBoolean(value) { return `${value} ? 1 : 0`; }
290
- instanceOf(convertor, value, duplicateMembers) {
291
- if (convertor instanceof CustomTypeConvertor) {
292
- return makeInterfaceTypeCheckerCall(value, this.getNodeName(convertor.idlType), [], duplicateMembers, this);
293
- }
294
- if (convertor instanceof InterfaceConvertor || convertor instanceof MaterializedClassConvertor) {
295
- return makeInterfaceTypeCheckerCall(value, this.getNodeName(convertor.idlType), convertor.declaration.properties.filter(it => !it.isStatic).map(it => it.name), duplicateMembers, this);
296
- }
297
- if (convertor instanceof BufferConvertor) {
298
- return makeInterfaceTypeCheckerCall(value, this.getNodeName(convertor.idlType), [], new Set(), this);
299
- }
300
- if (convertor instanceof AggregateConvertor) {
301
- return makeInterfaceTypeCheckerCall(value, convertor.aliasName !== undefined ? convertor.aliasName : this.getNodeName(convertor.idlType), convertor.members.map(it => it[0]), duplicateMembers, this);
302
- }
303
- if (convertor instanceof ArrayConvertor) {
304
- return makeArrayTypeCheckCall(value, this.arrayConvertor.convert(convertor.idlType), this);
305
- }
306
- if (idl.isEnum(this.resolver.toDeclaration(convertor.nativeType()))) {
307
- return makeEnumTypeCheckerCall(value, this.getNodeName(convertor.idlType), this);
308
- }
309
- return super.instanceOf(convertor, value, duplicateMembers);
310
- }
311
288
  typeInstanceOf(type, value, members) {
312
289
  if (!members || members.length === 0) {
313
290
  throw new Error("At least one member needs to provided to pass it to TypeChecker!");
@@ -6,11 +6,6 @@ import { ArgConvertor, BaseArgConvertor } from "../ArgConvertors";
6
6
  import { IdlNameConvertor } from "../nameConvertor";
7
7
  import { RuntimeType } from "../common";
8
8
  import { ReferenceResolver } from "../../peer-generation/ReferenceResolver";
9
- export declare class JavaCheckDefinedExpression implements LanguageExpression {
10
- private value;
11
- constructor(value: string);
12
- asString(): string;
13
- }
14
9
  export declare class JavaCastExpression implements LanguageExpression {
15
10
  value: LanguageExpression;
16
11
  type: string;
@@ -46,16 +41,15 @@ export declare class JavaLanguageWriter extends CLikeLanguageWriter {
46
41
  }, setter?: {
47
42
  method: Method;
48
43
  op: () => void;
49
- }): void;
44
+ }, initExpr?: LanguageExpression): void;
50
45
  writeTypeDeclaration(decl: idl.IDLTypedef): void;
51
46
  writeConstant(constName: string, constType: idl.IDLType, constVal?: string): void;
52
47
  makeAssign(variableName: string, type: idl.IDLType | undefined, expr: LanguageExpression, isDeclared?: boolean, isConst?: boolean): LanguageStatement;
53
48
  makeLambda(signature: MethodSignature, body?: LanguageStatement[]): LanguageExpression;
54
49
  makeReturn(expr: LanguageExpression): LanguageStatement;
55
- makeCheckOptional(optional: LanguageExpression, doStatement: LanguageStatement): LanguageStatement;
56
50
  makeDefinedCheck(value: string): LanguageExpression;
57
51
  makeLoop(counter: string, limit: string, statement?: LanguageStatement): LanguageStatement;
58
- makeMapForEach(map: string, key: string, value: string, op: () => void): LanguageStatement;
52
+ makeMapForEach(map: string, key: string, value: string, body: LanguageStatement[]): LanguageStatement;
59
53
  makeMapSize(map: string): LanguageExpression;
60
54
  makeCast(value: LanguageExpression, node: idl.IDLNode, options?: MakeCastOptions): LanguageExpression;
61
55
  makeStatement(expr: LanguageExpression): LanguageStatement;