@idlizer/core 2.0.41 → 2.0.43

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 (50) hide show
  1. package/build/lib/src/LanguageWriters/LanguageWriter.d.ts +3 -2
  2. package/build/lib/src/LanguageWriters/LanguageWriter.js +4 -2
  3. package/build/lib/src/LanguageWriters/convertors/CppConvertors.d.ts +1 -0
  4. package/build/lib/src/LanguageWriters/convertors/CppConvertors.js +17 -2
  5. package/build/lib/src/LanguageWriters/convertors/ETSConvertors.d.ts +3 -1
  6. package/build/lib/src/LanguageWriters/convertors/ETSConvertors.js +3 -1
  7. package/build/lib/src/LanguageWriters/convertors/InteropConvertors.js +4 -4
  8. package/build/lib/src/LanguageWriters/convertors/TSConvertors.d.ts +11 -1
  9. package/build/lib/src/LanguageWriters/convertors/TSConvertors.js +44 -1
  10. package/build/lib/src/LanguageWriters/index.d.ts +2 -2
  11. package/build/lib/src/LanguageWriters/index.js +4 -5
  12. package/build/lib/src/LanguageWriters/writers/CJLanguageWriter.d.ts +3 -3
  13. package/build/lib/src/LanguageWriters/writers/CJLanguageWriter.js +5 -4
  14. package/build/lib/src/LanguageWriters/writers/CppLanguageWriter.d.ts +1 -1
  15. package/build/lib/src/LanguageWriters/writers/CppLanguageWriter.js +1 -1
  16. package/build/lib/src/LanguageWriters/writers/ETSLanguageWriter.d.ts +8 -3
  17. package/build/lib/src/LanguageWriters/writers/ETSLanguageWriter.js +44 -10
  18. package/build/lib/src/LanguageWriters/writers/JavaLanguageWriter.d.ts +2 -2
  19. package/build/lib/src/LanguageWriters/writers/JavaLanguageWriter.js +3 -3
  20. package/build/lib/src/LanguageWriters/writers/TsLanguageWriter.d.ts +2 -2
  21. package/build/lib/src/LanguageWriters/writers/TsLanguageWriter.js +15 -7
  22. package/build/lib/src/config.d.ts +892 -12
  23. package/build/lib/src/config.js +22 -2
  24. package/build/lib/src/configDescriber.d.ts +85 -0
  25. package/build/lib/src/configDescriber.js +297 -0
  26. package/build/lib/src/from-idl/DtsPrinter.js +4 -2
  27. package/build/lib/src/from-idl/IDLLinter.d.ts +24 -0
  28. package/build/lib/src/from-idl/IDLLinter.js +81 -0
  29. package/build/lib/src/from-idl/deserialize.js +41 -4
  30. package/build/lib/src/from-idl/webidl2-utils.d.ts +1 -0
  31. package/build/lib/src/from-idl/webidl2-utils.js +3 -0
  32. package/build/lib/src/idl.d.ts +23 -26
  33. package/build/lib/src/idl.js +31 -29
  34. package/build/lib/src/idlize.d.ts +10 -1
  35. package/build/lib/src/idlize.js +54 -26
  36. package/build/lib/src/index.d.ts +2 -0
  37. package/build/lib/src/index.js +2 -0
  38. package/build/lib/src/options.d.ts +1 -0
  39. package/build/lib/src/peer-generation/Materialized.d.ts +2 -1
  40. package/build/lib/src/peer-generation/Materialized.js +3 -2
  41. package/build/lib/src/peer-generation/PeerFile.d.ts +1 -2
  42. package/build/lib/src/peer-generation/PeerFile.js +1 -2
  43. package/build/lib/src/peer-generation/PeerLibrary.d.ts +0 -1
  44. package/build/lib/src/peer-generation/PeerLibrary.js +3 -3
  45. package/build/lib/src/peer-generation/idl/common.js +2 -2
  46. package/build/lib/src/peer-generation/isMaterialized.d.ts +1 -0
  47. package/build/lib/src/peer-generation/isMaterialized.js +6 -0
  48. package/build/lib/src/util.d.ts +1 -0
  49. package/build/lib/src/util.js +9 -0
  50. package/package.json +2 -2
@@ -227,7 +227,7 @@ export declare abstract class LanguageWriter {
227
227
  stringId: string | undefined;
228
228
  numberId: number;
229
229
  }[], op?: (writer: this) => void): void;
230
- abstract writeInterface(name: string, op: (writer: this) => void, superInterfaces?: string[], isDeclared?: boolean): void;
230
+ abstract writeInterface(name: string, op: (writer: this) => void, superInterfaces?: string[], generics?: string[], isDeclared?: boolean): void;
231
231
  abstract writeFieldDeclaration(name: string, type: idl.IDLType, modifiers: FieldModifier[] | undefined, optional: boolean, initExpr?: LanguageExpression): void;
232
232
  abstract writeFunctionDeclaration(name: string, signature: MethodSignature): void;
233
233
  abstract writeFunctionImplementation(name: string, signature: MethodSignature, op: (writer: this) => void): void;
@@ -315,7 +315,8 @@ export declare abstract class LanguageWriter {
315
315
  makeString(value: string): LanguageExpression;
316
316
  makeNaryOp(op: string, args: LanguageExpression[]): LanguageExpression;
317
317
  makeStatement(expr: LanguageExpression): LanguageStatement;
318
- writeNativeMethodDeclaration(name: string, signature: MethodSignature, isNative?: boolean): void;
318
+ tryWriteQuick(method: Method): void;
319
+ writeNativeMethodDeclaration(method: Method): void;
319
320
  writeUnsafeNativeMethodDeclaration(name: string, signature: MethodSignature): void;
320
321
  pushIndent(): void;
321
322
  popIndent(): void;
@@ -565,8 +565,10 @@ export class LanguageWriter {
565
565
  makeStatement(expr) {
566
566
  return new ExpressionStatement(expr);
567
567
  }
568
- writeNativeMethodDeclaration(name, signature, isNative) {
569
- this.writeMethodDeclaration(name, signature);
568
+ tryWriteQuick(method) { }
569
+ writeNativeMethodDeclaration(method) {
570
+ this.tryWriteQuick(method);
571
+ this.writeMethodDeclaration(method.name, method.signature);
570
572
  }
571
573
  writeUnsafeNativeMethodDeclaration(name, signature) {
572
574
  return;
@@ -30,6 +30,7 @@ export declare class GenericCppConvertor implements NodeConvertor<ConvertResult>
30
30
  }
31
31
  export declare class CppConvertor extends GenericCppConvertor implements IdlNameConvertor {
32
32
  private unwrap;
33
+ private isPrimitiveOrPrimitiveAlias;
33
34
  convert(node: idl.IDLNode): string;
34
35
  }
35
36
  export declare class CppNameConvertor implements IdlNameConvertor {
@@ -21,6 +21,7 @@ import { maybeTransformManagedCallback } from '../ArgConvertors';
21
21
  import { qualifiedName } from '../../peer-generation/idl/common';
22
22
  import { capitalize } from '../../util';
23
23
  import { isMaterialized } from '../../peer-generation/isMaterialized';
24
+ import { isInIdlizeInternal } from '../../idlize';
24
25
  export class GenericCppConvertor {
25
26
  constructor(resolver) {
26
27
  this.resolver = resolver;
@@ -42,7 +43,7 @@ export class GenericCppConvertor {
42
43
  : this.make(this.computeTargetTypeLiteralName(node), true);
43
44
  case idl.IDLInterfaceSubkind.Interface:
44
45
  case idl.IDLInterfaceSubkind.Class:
45
- if (idl.hasExtAttribute(node, idl.IDLExtendedAttributes.Predefined)) {
46
+ if (isInIdlizeInternal(node)) {
46
47
  return this.make(node.name, true);
47
48
  }
48
49
  return this.make(node.name);
@@ -178,9 +179,23 @@ export class CppConvertor extends GenericCppConvertor {
178
179
  const typePrefix = conf.TypePrefix;
179
180
  // TODO remove this ugly hack for CustomObject's
180
181
  const convertedToCustomObject = result.text === idl.IDLCustomObjectType.name;
181
- const libPrefix = idl.isPrimitiveType(type) || convertedToCustomObject ? "" : conf.LibraryPrefix;
182
+ const libPrefix = this.isPrimitiveOrPrimitiveAlias(type) || convertedToCustomObject ? "" : conf.LibraryPrefix;
182
183
  return `${typePrefix}${libPrefix}${result.text}`;
183
184
  }
185
+ isPrimitiveOrPrimitiveAlias(type) {
186
+ if (!idl.isType(type))
187
+ return false;
188
+ const { resolver } = this;
189
+ while (type && idl.isReferenceType(type)) {
190
+ const resolved = resolver.resolveTypeReference(type);
191
+ if (!resolved)
192
+ return false;
193
+ if (!idl.isTypedef(resolved))
194
+ break;
195
+ type = resolved.type;
196
+ }
197
+ return idl.isPrimitiveType(type);
198
+ }
184
199
  convert(node) {
185
200
  return this.unwrap(node, this.convertNode(node));
186
201
  }
@@ -1,5 +1,5 @@
1
1
  import * as idl from "../../idl";
2
- import { TSTypeNameConvertor } from "./TSConvertors";
2
+ import { TSInteropArgConvertor, TSTypeNameConvertor } from "./TSConvertors";
3
3
  export declare class ETSTypeNameConvertor extends TSTypeNameConvertor {
4
4
  convertTypeReference(type: idl.IDLReferenceType): string;
5
5
  convertContainer(type: idl.IDLContainerType): string;
@@ -9,4 +9,6 @@ export declare class ETSTypeNameConvertor extends TSTypeNameConvertor {
9
9
  protected mapCallback(decl: idl.IDLCallback): string;
10
10
  protected mapFunctionType(typeArgs: string[]): string;
11
11
  }
12
+ export declare class ETSInteropArgConvertor extends TSInteropArgConvertor {
13
+ }
12
14
  //# sourceMappingURL=ETSConvertors.d.ts.map
@@ -16,7 +16,7 @@ import * as idl from "../../idl";
16
16
  import { Language } from "../../Language";
17
17
  import { createDeclarationNameConvertor } from "../../peer-generation/idl/IdlNameConvertor";
18
18
  import { convertDeclaration } from "../nameConvertor";
19
- import { TSTypeNameConvertor } from "./TSConvertors";
19
+ import { TSInteropArgConvertor, TSTypeNameConvertor } from "./TSConvertors";
20
20
  export class ETSTypeNameConvertor extends TSTypeNameConvertor {
21
21
  convertTypeReference(type) {
22
22
  // Only to deal with namespaces. TODO: remove later
@@ -109,4 +109,6 @@ export class ETSTypeNameConvertor extends TSTypeNameConvertor {
109
109
  return `Function${typeArgs.length - 1}<${typeArgs.join(",")}>`;
110
110
  }
111
111
  }
112
+ export class ETSInteropArgConvertor extends TSInteropArgConvertor {
113
+ }
112
114
  //# sourceMappingURL=ETSConvertors.js.map
@@ -114,16 +114,16 @@ export class InteropArgConvertor {
114
114
  case idl.IDLU64Type: return "KLong";
115
115
  case idl.IDLI32Type: return "KInt";
116
116
  case idl.IDLF32Type: return "KFloat";
117
- case idl.IDLNumberType: return 'number'; // should be removed! It is KInteropNumber or smth
118
- case idl.IDLBigintType: return 'bigint'; // should be removed! It is KLong or smth
117
+ case idl.IDLNumberType: return 'KInteropNumber';
118
+ case idl.IDLBigintType: return 'KLong';
119
119
  case idl.IDLBooleanType:
120
120
  case idl.IDLFunctionType: return 'KInt';
121
121
  case idl.IDLStringType: return 'KStringPtr';
122
- case idl.IDLBufferType: return `ArrayBuffer`;
122
+ case idl.IDLBufferType: return `KInteropBuffer`;
123
123
  case idl.IDLLengthType: return 'Length';
124
124
  case idl.IDLDate: return 'KLong';
125
125
  case idl.IDLUndefinedType:
126
- case idl.IDLVoidType: return PrimitiveTypesInstance.NativePointer.getText();
126
+ case idl.IDLVoidType:
127
127
  case idl.IDLPointerType: return 'KPointer'; // return PrimitiveTypesInstance.NativePointer.getText()
128
128
  }
129
129
  throw new Error(`Cannot pass primitive type ${type.name} through interop`);
@@ -1,6 +1,6 @@
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
4
  export declare class TSTypeNameConvertor implements NodeConvertor<string>, IdlNameConvertor {
5
5
  protected resolver: ReferenceResolver;
6
6
  constructor(resolver: ReferenceResolver);
@@ -24,4 +24,14 @@ export declare class TSTypeNameConvertor implements NodeConvertor<string>, IdlNa
24
24
  protected productType(decl: idl.IDLInterface, isTuple: boolean, includeFieldNames: boolean): string;
25
25
  protected mapFunctionType(typeArgs: string[]): string;
26
26
  }
27
+ export declare class TSInteropArgConvertor implements TypeConvertor<string> {
28
+ convert(type: idl.IDLType): string;
29
+ convertContainer(type: idl.IDLContainerType): string;
30
+ convertImport(type: idl.IDLReferenceType, importClause: string): string;
31
+ convertOptional(type: idl.IDLOptionalType): string;
32
+ convertPrimitiveType(type: idl.IDLPrimitiveType): string;
33
+ convertTypeParameter(type: idl.IDLTypeParameterType): string;
34
+ convertTypeReference(type: idl.IDLReferenceType): string;
35
+ convertUnion(type: idl.IDLUnionType): string;
36
+ }
27
37
  //# sourceMappingURL=TSConvertors.d.ts.map
@@ -13,7 +13,7 @@
13
13
  * limitations under the License.
14
14
  */
15
15
  import * as idl from '../../idl';
16
- import { convertNode } from '../nameConvertor';
16
+ import { convertNode, convertType } from '../nameConvertor';
17
17
  export class TSTypeNameConvertor {
18
18
  constructor(resolver) {
19
19
  this.resolver = resolver;
@@ -173,4 +173,47 @@ export class TSTypeNameConvertor {
173
173
  return `Function${typeArgs.length ? `<${typeArgs.join(",")}>` : ''}`;
174
174
  }
175
175
  }
176
+ export class TSInteropArgConvertor {
177
+ convert(type) {
178
+ return convertType(this, type);
179
+ }
180
+ convertContainer(type) {
181
+ throw new Error(`Cannot pass container types through interop`);
182
+ }
183
+ convertImport(type, importClause) {
184
+ throw new Error(`Cannot pass import types through interop`);
185
+ }
186
+ convertOptional(type) {
187
+ return "KNativePointer";
188
+ }
189
+ convertPrimitiveType(type) {
190
+ switch (type) {
191
+ case idl.IDLI64Type: return "KLong";
192
+ case idl.IDLU64Type: return "KLong";
193
+ case idl.IDLI32Type: return "KInt";
194
+ case idl.IDLF32Type: return "KFloat";
195
+ case idl.IDLNumberType: return 'number';
196
+ case idl.IDLBigintType: return 'bigint';
197
+ case idl.IDLBooleanType:
198
+ case idl.IDLFunctionType: return 'KInt';
199
+ case idl.IDLStringType: return 'KStringPtr';
200
+ case idl.IDLBufferType: return `ArrayBuffer`;
201
+ case idl.IDLLengthType: return 'Length';
202
+ case idl.IDLDate: return 'number';
203
+ case idl.IDLUndefinedType:
204
+ case idl.IDLVoidType:
205
+ case idl.IDLPointerType: return 'KPointer';
206
+ }
207
+ throw new Error(`Cannot pass primitive type ${type.name} through interop`);
208
+ }
209
+ convertTypeParameter(type) {
210
+ throw new Error("Cannot pass type parameters through interop");
211
+ }
212
+ convertTypeReference(type) {
213
+ throw new Error(`Cannot pass type references through interop`);
214
+ }
215
+ convertUnion(type) {
216
+ throw new Error("Cannot pass union types through interop");
217
+ }
218
+ }
176
219
  //# sourceMappingURL=TSConvertors.js.map
@@ -1,8 +1,8 @@
1
1
  import { Language } from "../Language";
2
2
  import { ReferenceResolver } from "../peer-generation/ReferenceResolver";
3
- import { InteropArgConvertor } from "./convertors/InteropConvertors";
4
3
  import { LanguageWriter } from "./LanguageWriter";
4
+ import { TypeConvertor } from "./nameConvertor";
5
5
  export * from "./nameConvertor";
6
6
  export declare function createLanguageWriter(language: Language, resolver?: ReferenceResolver): LanguageWriter;
7
- export declare function createInteropArgConvertor(language: Language): InteropArgConvertor;
7
+ export declare function createInteropArgConvertor(language: Language): TypeConvertor<string>;
8
8
  //# sourceMappingURL=index.d.ts.map
@@ -4,10 +4,9 @@ import { PrimitiveTypesInstance } from "../peer-generation/PrimitiveType";
4
4
  import { createEmptyReferenceResolver } from "../peer-generation/ReferenceResolver";
5
5
  import { CJIDLTypeToForeignStringConvertor, CJInteropArgConvertor, CJTypeNameConvertor } from "./convertors/CJConvertors";
6
6
  import { CppInteropArgConvertor, CppConvertor } from "./convertors/CppConvertors";
7
- import { ETSTypeNameConvertor } from "./convertors/ETSConvertors";
8
- import { InteropArgConvertor } from "./convertors/InteropConvertors";
7
+ import { ETSInteropArgConvertor, ETSTypeNameConvertor } from "./convertors/ETSConvertors";
9
8
  import { JavaInteropArgConvertor, JavaTypeNameConvertor } from "./convertors/JavaConvertors";
10
- import { TSTypeNameConvertor } from "./convertors/TSConvertors";
9
+ import { TSInteropArgConvertor, TSTypeNameConvertor } from "./convertors/TSConvertors";
11
10
  import { CJLanguageWriter } from "./writers/CJLanguageWriter";
12
11
  import { CppLanguageWriter } from "./writers/CppLanguageWriter";
13
12
  import { ETSLanguageWriter } from "./writers/ETSLanguageWriter";
@@ -28,8 +27,8 @@ export function createLanguageWriter(language, resolver) {
28
27
  }
29
28
  export function createInteropArgConvertor(language) {
30
29
  switch (language) {
31
- case Language.TS:
32
- case Language.ARKTS: return new InteropArgConvertor();
30
+ case Language.TS: return new TSInteropArgConvertor();
31
+ case Language.ARKTS: return new ETSInteropArgConvertor();
33
32
  case Language.CPP: return CppInteropArgConvertor.INSTANCE;
34
33
  case Language.JAVA: return new JavaInteropArgConvertor();
35
34
  case Language.CJ: return new CJInteropArgConvertor();
@@ -2,7 +2,7 @@ import * as idl from "../../idl";
2
2
  import { IndentedPrinter } from "../../IndentedPrinter";
3
3
  import { ArgConvertor, BaseArgConvertor } from "../ArgConvertors";
4
4
  import { RuntimeType } from "../common";
5
- import { AssignStatement, FieldModifier, LambdaExpression, LanguageExpression, LanguageStatement, LanguageWriter, MakeCastOptions, Method, MethodModifier, MethodSignature, NamedMethodSignature, ObjectArgs } from "../LanguageWriter";
5
+ import { AssignStatement, FieldModifier, LambdaExpression, LanguageExpression, LanguageStatement, LanguageWriter, MakeCastOptions, Method, MethodModifier, MethodSignature, ObjectArgs } from "../LanguageWriter";
6
6
  import { IdlNameConvertor } from "../nameConvertor";
7
7
  import { Language } from "../../Language";
8
8
  import { ReferenceResolver } from "../../peer-generation/ReferenceResolver";
@@ -81,7 +81,7 @@ export declare class CJLanguageWriter extends LanguageWriter {
81
81
  stringId: string | undefined;
82
82
  numberId: number;
83
83
  }[], op: (writer: LanguageWriter) => void): void;
84
- writeInterface(name: string, op: (writer: this) => void, superInterfaces?: string[]): void;
84
+ writeInterface(name: string, op: (writer: this) => void, superInterfaces?: string[], generics?: string[]): void;
85
85
  writeFunctionDeclaration(name: string, signature: MethodSignature): void;
86
86
  writeFunctionImplementation(name: string, signature: MethodSignature, op: (writer: this) => void): void;
87
87
  private generateFunctionDeclaration;
@@ -96,7 +96,7 @@ export declare class CJLanguageWriter extends LanguageWriter {
96
96
  writeCJForeign(op: (writer: CJLanguageWriter) => void): void;
97
97
  private writeDeclaration;
98
98
  writeNativeFunctionCall(printer: LanguageWriter, name: string, signature: MethodSignature): void;
99
- writeNativeMethodDeclaration(name: string, signature: NamedMethodSignature): void;
99
+ writeNativeMethodDeclaration(method: Method): void;
100
100
  makeEnumCast(enumName: string, _unsafe: boolean, _convertor: ArgConvertor | undefined): string;
101
101
  makeAssign(variableName: string, type: idl.IDLType | undefined, expr: LanguageExpression, isDeclared?: boolean, isConst?: boolean): LanguageStatement;
102
102
  makeClassInit(type: idl.IDLType, parameters: LanguageExpression[]): LanguageExpression;
@@ -293,7 +293,7 @@ export class CJLanguageWriter extends LanguageWriter {
293
293
  this.popIndent();
294
294
  this.printer.print(`}`);
295
295
  }
296
- writeInterface(name, op, superInterfaces) {
296
+ writeInterface(name, op, superInterfaces, generics) {
297
297
  let extendsClause = superInterfaces ? ` <: ${superInterfaces.join(" & ")}` : '';
298
298
  this.printer.print(`public interface ${name}${extendsClause} {`);
299
299
  this.pushIndent();
@@ -404,10 +404,11 @@ export class CJLanguageWriter extends LanguageWriter {
404
404
  writeNativeFunctionCall(printer, name, signature) {
405
405
  printer.print(`return unsafe { ${name}(${signature.args.map((it, index) => `${signature.argName(index)}`).join(", ")}) }`);
406
406
  }
407
- writeNativeMethodDeclaration(name, signature) {
408
- let signture = `${signature.args.map((it, index) => `${this.escapeKeyword(signature.argName(index))}: ${this.typeForeignConvertor.convert(it)}`).join(", ")}`;
407
+ writeNativeMethodDeclaration(method) {
408
+ let name = method.name;
409
+ let signture = `${method.signature.args.map((it, index) => `${this.escapeKeyword(method.signature.argName(index))}: ${this.typeForeignConvertor.convert(it)}`).join(", ")}`;
409
410
  name = name.startsWith('_') ? name.slice(1) : name;
410
- this.print(`func ${name}(${signture}): ${this.typeForeignConvertor.convert(signature.returnType)}`);
411
+ this.print(`func ${name}(${signture}): ${this.typeForeignConvertor.convert(method.signature.returnType)}`);
411
412
  }
412
413
  makeEnumCast(enumName, _unsafe, _convertor) {
413
414
  return `${enumName}.value`;
@@ -41,7 +41,7 @@ export declare class CppLanguageWriter extends CLikeLanguageWriter {
41
41
  resolver?: ReferenceResolver;
42
42
  }): LanguageWriter;
43
43
  writeClass(name: string, op: (writer: this) => void, superClass?: string, interfaces?: string[]): void;
44
- writeInterface(name: string, op: (writer: this) => void, superInterfaces?: string[]): void;
44
+ writeInterface(name: string, op: (writer: this) => void, superInterfaces?: string[], generics?: string[]): void;
45
45
  writeMethodCall(receiver: string, method: string, params: string[], nullable?: boolean): void;
46
46
  writeFieldDeclaration(name: string, type: IDLType, modifiers: FieldModifier[] | undefined, optional: boolean, initExpr?: LanguageExpression): void;
47
47
  writeConstructorImplementation(className: string, signature: MethodSignature, op: (writer: this) => void, superCall?: Method, modifiers?: MethodModifier[]): void;
@@ -180,7 +180,7 @@ export class CppLanguageWriter extends CLikeLanguageWriter {
180
180
  this.popIndent();
181
181
  this.printer.print(`};`);
182
182
  }
183
- writeInterface(name, op, superInterfaces) {
183
+ writeInterface(name, op, superInterfaces, generics) {
184
184
  throw new Error("Method not implemented.");
185
185
  }
186
186
  writeMethodCall(receiver, method, params, nullable = false) {
@@ -1,5 +1,5 @@
1
1
  import { IndentedPrinter } from "../../IndentedPrinter";
2
- import { LambdaExpression, LanguageExpression, LanguageStatement, LanguageWriter, MakeCastOptions, MethodModifier, MethodSignature, ObjectArgs } from "../LanguageWriter";
2
+ import { LambdaExpression, LanguageExpression, LanguageStatement, LanguageWriter, MakeCastOptions, Method, MethodModifier, MethodSignature, ObjectArgs } from "../LanguageWriter";
3
3
  import { TSLanguageWriter } from "./TsLanguageWriter";
4
4
  import { IDLEnum, IDLType } from '../../idl';
5
5
  import { ArgConvertor } from "../ArgConvertors";
@@ -28,6 +28,8 @@ export declare class ETSLambdaExpression extends LambdaExpression {
28
28
  asString(): string;
29
29
  }
30
30
  export declare function generateTypeCheckerName(typeName: string): string;
31
+ export declare function generateEnumToOrdinalName(typeName: string): string;
32
+ export declare function generateEnumFromOrdinalName(typeName: string): string;
31
33
  export declare function makeArrayTypeCheckCall(valueAccessor: string, typeName: string, writer: LanguageWriter): LanguageExpression;
32
34
  export declare class ETSLanguageWriter extends TSLanguageWriter {
33
35
  private arrayConvertor;
@@ -35,7 +37,6 @@ export declare class ETSLanguageWriter extends TSLanguageWriter {
35
37
  fork(options?: {
36
38
  resolver?: ReferenceResolver;
37
39
  }): LanguageWriter;
38
- writeNativeMethodDeclaration(name: string, signature: MethodSignature): void;
39
40
  makeAssign(variableName: string, type: IDLType | undefined, expr: LanguageExpression, isDeclared?: boolean, isConst?: boolean): LanguageStatement;
40
41
  makeLambda(signature: MethodSignature, body?: LanguageStatement[]): LanguageExpression;
41
42
  makeMapForEach(map: string, key: string, value: string, op: () => void): LanguageStatement;
@@ -45,7 +46,7 @@ export declare class ETSLanguageWriter extends TSLanguageWriter {
45
46
  runtimeType(param: ArgConvertor, valueType: string, value: string): void;
46
47
  makeUnionVariantCast(value: string, type: string, convertor: ArgConvertor, index?: number): LanguageExpression;
47
48
  enumFromOrdinal(value: LanguageExpression, enumEntry: idl.IDLType): LanguageExpression;
48
- ordinalFromEnum(value: LanguageExpression, _: idl.IDLType): LanguageExpression;
49
+ ordinalFromEnum(value: LanguageExpression, enumEntry: idl.IDLType): LanguageExpression;
49
50
  makeDiscriminatorFromFields(convertor: {
50
51
  targetType: (writer: LanguageWriter) => string;
51
52
  }, value: string, accessors: string[], duplicates: Set<string>): LanguageExpression;
@@ -54,6 +55,10 @@ export declare class ETSLanguageWriter extends TSLanguageWriter {
54
55
  makeEnumEntity(enumEntity: IDLEnum, isExport: boolean): LanguageStatement;
55
56
  getObjectAccessor(convertor: ArgConvertor, value: string, args?: ObjectArgs): string;
56
57
  writeMethodCall(receiver: string, method: string, params: string[], nullable?: boolean): void;
58
+ isDirectType(type: IDLType): boolean;
59
+ isQuickType(type: IDLType): boolean;
60
+ tryWriteQuick(method: Method): void;
61
+ writeNativeMethodDeclaration(method: Method): void;
57
62
  writeProperty(propName: string, propType: IDLType): void;
58
63
  makeEnumCast(value: string, _unsafe: boolean, convertor: ArgConvertor | undefined): string;
59
64
  makeUnionVariantCondition(convertor: ArgConvertor, valueName: string, valueType: string, type: string, convertorIndex: number, runtimeTypeIndex: number): LanguageExpression;
@@ -16,7 +16,7 @@ import { IndentedPrinter } from "../../IndentedPrinter";
16
16
  import { LambdaExpression, MethodModifier } from "../LanguageWriter";
17
17
  import { TSCastExpression, TSLanguageWriter } from "./TsLanguageWriter";
18
18
  import { getExtAttribute, IDLI32Type, IDLThisType } from '../../idl';
19
- import { AggregateConvertor, ArrayConvertor, CustomTypeConvertor, InterfaceConvertor, MaterializedClassConvertor, OptionConvertor, UnionConvertor } from "../ArgConvertors";
19
+ import { AggregateConvertor, ArrayConvertor, CustomTypeConvertor, InterfaceConvertor, MaterializedClassConvertor, OptionConvertor, UnionConvertor, BufferConvertor } from "../ArgConvertors";
20
20
  import * as idl from '../../idl';
21
21
  import { convertDeclaration } from "../nameConvertor";
22
22
  import { createDeclarationNameConvertor } from "../../peer-generation/idl/IdlNameConvertor";
@@ -138,6 +138,14 @@ export function generateTypeCheckerName(typeName) {
138
138
  .replaceAll('.', ''); // Todo: hack for namespaces
139
139
  return `is${typeName.replaceAll('[]', 'Brackets')}`;
140
140
  }
141
+ export function generateEnumToOrdinalName(typeName) {
142
+ typeName = typeName.split(".").join("_");
143
+ return `${typeName}_ToOrdinal`;
144
+ }
145
+ export function generateEnumFromOrdinalName(typeName) {
146
+ typeName = typeName.split(".").join("_");
147
+ return `${typeName}_FromOrdinal`;
148
+ }
141
149
  export function makeArrayTypeCheckCall(valueAccessor, typeName, writer) {
142
150
  return writer.makeMethodCall("TypeChecker", generateTypeCheckerName(typeName), [writer.makeString(valueAccessor)
143
151
  ]);
@@ -154,12 +162,6 @@ export class ETSLanguageWriter extends TSLanguageWriter {
154
162
  var _a;
155
163
  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);
156
164
  }
157
- writeNativeMethodDeclaration(name, signature) {
158
- if (signature.returnType === IDLThisType) {
159
- throw new Error('static method can not return this!');
160
- }
161
- this.writeMethodDeclaration(name, signature, [MethodModifier.STATIC, MethodModifier.NATIVE]);
162
- }
163
165
  makeAssign(variableName, type, expr, isDeclared = true, isConst = true) {
164
166
  return new EtsAssignStatement(variableName, type, expr, isDeclared, isConst);
165
167
  }
@@ -190,10 +192,11 @@ export class ETSLanguageWriter extends TSLanguageWriter {
190
192
  }
191
193
  enumFromOrdinal(value, enumEntry) {
192
194
  const enumName = this.getNodeName(enumEntry);
193
- return this.makeString(`${value.asString()} as ${enumName}`);
195
+ return this.makeMethodCall('TypeChecker', generateEnumFromOrdinalName(enumName), [this.makeString(value.asString())]);
194
196
  }
195
- ordinalFromEnum(value, _) {
196
- return this.makeCast(this.makeString(`${value.asString()}`), IDLI32Type);
197
+ ordinalFromEnum(value, enumEntry) {
198
+ const enumName = this.getNodeName(enumEntry);
199
+ return this.makeMethodCall('TypeChecker', generateEnumToOrdinalName(enumName), [this.makeString(value.asString())]);
197
200
  }
198
201
  makeDiscriminatorFromFields(convertor, value, accessors, duplicates) {
199
202
  if (convertor instanceof AggregateConvertor
@@ -223,6 +226,34 @@ export class ETSLanguageWriter extends TSLanguageWriter {
223
226
  // ArkTS does not support - 'this.?'
224
227
  super.writeMethodCall(receiver, method, params, nullable && receiver !== "this");
225
228
  }
229
+ isDirectType(type) {
230
+ let converted = this.getNodeName(type);
231
+ return type == idl.IDLI32Type || type == idl.IDLPointerType || type == idl.IDLBooleanType
232
+ || type == idl.IDLVoidType || converted == "KPointer" || converted == "KInt";
233
+ }
234
+ isQuickType(type) {
235
+ return idl.asPromise(type) == undefined;
236
+ }
237
+ tryWriteQuick(method) {
238
+ var _a;
239
+ if ((_a = method.modifiers) === null || _a === void 0 ? void 0 : _a.includes(MethodModifier.THROWS))
240
+ return;
241
+ if (false && this.isDirectType(method.signature.returnType) && method.signature.args.every((type) => this.isDirectType(type))) {
242
+ this.print('@ani.unsafe.Direct');
243
+ return;
244
+ }
245
+ if (this.isQuickType(method.signature.returnType)) {
246
+ this.print('@ani.unsafe.Quick');
247
+ return;
248
+ }
249
+ }
250
+ writeNativeMethodDeclaration(method) {
251
+ if (method.signature.returnType === IDLThisType) {
252
+ throw new Error('static method can not return this!');
253
+ }
254
+ this.tryWriteQuick(method);
255
+ this.writeMethodDeclaration(method.name, method.signature, [MethodModifier.STATIC, MethodModifier.NATIVE]);
256
+ }
226
257
  writeProperty(propName, propType) {
227
258
  throw new Error("writeProperty for ArkTS is not implemented yet.");
228
259
  }
@@ -289,6 +320,9 @@ export class ETSLanguageWriter extends TSLanguageWriter {
289
320
  if (convertor instanceof InterfaceConvertor || convertor instanceof MaterializedClassConvertor) {
290
321
  return makeInterfaceTypeCheckerCall(value, this.getNodeName(convertor.idlType), convertor.declaration.properties.filter(it => !it.isStatic).map(it => it.name), duplicateMembers, this);
291
322
  }
323
+ if (convertor instanceof BufferConvertor) {
324
+ return makeInterfaceTypeCheckerCall(value, this.getNodeName(convertor.idlType), [], new Set(), this);
325
+ }
292
326
  if (convertor instanceof AggregateConvertor) {
293
327
  return makeInterfaceTypeCheckerCall(value, convertor.aliasName !== undefined ? convertor.aliasName : this.getNodeName(convertor.idlType), convertor.members.map(it => it[0]), duplicateMembers, this);
294
328
  }
@@ -35,10 +35,10 @@ export declare class JavaLanguageWriter extends CLikeLanguageWriter {
35
35
  resolver?: ReferenceResolver;
36
36
  }): LanguageWriter;
37
37
  writeClass(name: string, op: (writer: this) => void, superClass?: string, interfaces?: string[], generics?: string[], isDeclared?: boolean, isExport?: boolean): void;
38
- writeInterface(name: string, op: (writer: this) => void, superInterfaces?: string[]): void;
38
+ writeInterface(name: string, op: (writer: this) => void, superInterfaces?: string[], generics?: string[]): void;
39
39
  writeMethodCall(receiver: string, method: string, params: string[], nullable?: boolean): void;
40
40
  writeFieldDeclaration(name: string, type: idl.IDLType, modifiers: FieldModifier[] | undefined, optional: boolean, initExpr?: LanguageExpression): void;
41
- writeNativeMethodDeclaration(name: string, signature: MethodSignature): void;
41
+ writeNativeMethodDeclaration(method: Method): void;
42
42
  writeConstructorImplementation(className: string, signature: MethodSignature, op: (writer: this) => void, superCall?: Method, modifiers?: MethodModifier[]): void;
43
43
  writeProperty(propName: string, propType: idl.IDLType): void;
44
44
  writeTypeDeclaration(decl: idl.IDLTypedef): void;
@@ -116,7 +116,7 @@ export class JavaLanguageWriter extends CLikeLanguageWriter {
116
116
  this.popIndent();
117
117
  this.printer.print(`}`);
118
118
  }
119
- writeInterface(name, op, superInterfaces) {
119
+ writeInterface(name, op, superInterfaces, generics) {
120
120
  let extendsClause = superInterfaces ? ` extends ${superInterfaces.join(",")}` : '';
121
121
  this.printer.print(`interface ${name}${extendsClause} {`);
122
122
  this.pushIndent();
@@ -136,8 +136,8 @@ export class JavaLanguageWriter extends CLikeLanguageWriter {
136
136
  let prefix = this.makeFieldModifiersList(modifiers);
137
137
  this.printer.print(`${prefix} ${(this.getNodeName(type))} ${name}${initExpr ? ` = ${initExpr.asString()}` : ""};`);
138
138
  }
139
- writeNativeMethodDeclaration(name, signature) {
140
- this.writeMethodDeclaration(name, signature, [MethodModifier.STATIC, MethodModifier.NATIVE]);
139
+ writeNativeMethodDeclaration(method) {
140
+ this.writeMethodDeclaration(method.name, method.signature, [MethodModifier.STATIC, MethodModifier.NATIVE]);
141
141
  }
142
142
  writeConstructorImplementation(className, signature, op, superCall, modifiers) {
143
143
  this.printer.print(`${modifiers ? modifiers.map((it) => MethodModifier[it].toLowerCase()).join(' ') : ''} ${className}(${signature.args.map((it, index) => `${this.getNodeName(it)} ${signature.argName(index)}`).join(", ")}) {`);
@@ -38,7 +38,7 @@ export declare class TSLanguageWriter extends LanguageWriter {
38
38
  }): LanguageWriter;
39
39
  getNodeName(type: idl.IDLNode): string;
40
40
  writeClass(name: string, op: (writer: this) => void, superClass?: string, interfaces?: string[], generics?: string[], isDeclared?: boolean, isAbstract?: boolean): void;
41
- writeInterface(name: string, op: (writer: this) => void, superInterfaces?: string[], isDeclared?: boolean): void;
41
+ writeInterface(name: string, op: (writer: this) => void, superInterfaces?: string[], generics?: string[], isDeclared?: boolean): void;
42
42
  writeFunctionDeclaration(name: string, signature: MethodSignature): void;
43
43
  writeFunctionImplementation(name: string, signature: MethodSignature, op: (writer: this) => void): void;
44
44
  private generateFunctionDeclaration;
@@ -49,7 +49,7 @@ export declare class TSLanguageWriter extends LanguageWriter {
49
49
  numberId: number;
50
50
  }[]): void;
51
51
  writeFieldDeclaration(name: string, type: idl.IDLType, modifiers: FieldModifier[] | undefined, optional: boolean, initExpr?: LanguageExpression): void;
52
- writeNativeMethodDeclaration(name: string, signature: MethodSignature, isNative?: boolean): void;
52
+ writeNativeMethodDeclaration(method: Method): void;
53
53
  writeMethodDeclaration(name: string, signature: MethodSignature, modifiers?: MethodModifier[]): void;
54
54
  writeConstructorImplementation(className: string, signature: MethodSignature, op: (writer: this) => void, superCall?: Method, modifiers?: MethodModifier[]): void;
55
55
  writeMethodImplementation(method: Method, op: (writer: this) => void): void;
@@ -17,8 +17,9 @@ import { Language } from '../../Language';
17
17
  import { IndentedPrinter } from "../../IndentedPrinter";
18
18
  import { AssignStatement, BlockStatement, CheckOptionalStatement, ExpressionStatement, FieldModifier, IfStatement, LambdaExpression, LanguageWriter, Method, MethodModifier, NamedMethodSignature, NaryOpExpression, ReturnStatement, StringExpression } from "../LanguageWriter";
19
19
  import { RuntimeType } from "../common";
20
- import { throwException } from "../../util";
20
+ import { rightmostIndexOf, throwException } from "../../util";
21
21
  import { TSKeywords } from '../../languageSpecificKeywords';
22
+ import { isOptionalType } from "../../idl";
22
23
  ////////////////////////////////////////////////////////////////
23
24
  // EXPRESSIONS //
24
25
  ////////////////////////////////////////////////////////////////
@@ -155,9 +156,10 @@ export class TSLanguageWriter extends LanguageWriter {
155
156
  this.popIndent();
156
157
  this.printer.print(`}`);
157
158
  }
158
- writeInterface(name, op, superInterfaces, isDeclared) {
159
+ writeInterface(name, op, superInterfaces, generics, isDeclared) {
160
+ const genericsClause = (generics === null || generics === void 0 ? void 0 : generics.length) ? `<${generics.join(", ")}>` : '';
159
161
  let extendsClause = superInterfaces ? ` extends ${superInterfaces.join(",")}` : '';
160
- this.printer.print(`export ${isDeclared ? "declare " : ""}interface ${name}${extendsClause} {`);
162
+ this.printer.print(`export ${isDeclared ? "declare " : ""}interface ${name}${genericsClause}${extendsClause} {`);
161
163
  this.pushIndent();
162
164
  op(this);
163
165
  this.popIndent();
@@ -174,7 +176,11 @@ export class TSLanguageWriter extends LanguageWriter {
174
176
  this.printer.print('}');
175
177
  }
176
178
  generateFunctionDeclaration(name, signature) {
177
- const args = signature.args.map((it, index) => `${signature.argName(index)}${idl.isOptionalType(it) ? '?' : ''}: ${this.getNodeName(it)}`);
179
+ const rightmostRegularParameterIndex = rightmostIndexOf(signature.args, it => !isOptionalType(it));
180
+ const args = signature.args.map((it, index) => {
181
+ const optionalToken = idl.isOptionalType(it) && index > rightmostRegularParameterIndex ? '?' : '';
182
+ return `${signature.argName(index)}${optionalToken}: ${this.getNodeName(it)}`;
183
+ });
178
184
  const returnType = this.getNodeName(signature.returnType);
179
185
  return `export function ${name}(${args.join(", ")}): ${returnType}`;
180
186
  }
@@ -202,7 +208,9 @@ export class TSLanguageWriter extends LanguageWriter {
202
208
  prefix += " ";
203
209
  this.printer.print(`${prefix}${name}${optional ? "?" : ""}: ${this.getNodeName(type)}${init}`);
204
210
  }
205
- writeNativeMethodDeclaration(name, signature, isNative) {
211
+ writeNativeMethodDeclaration(method) {
212
+ let name = method.name;
213
+ let signature = method.signature;
206
214
  this.writeMethodImplementation(new Method(name, signature, [MethodModifier.STATIC]), writer => {
207
215
  const selfCallExpression = writer.makeFunctionCall(`this.${name}`, signature.args.map((_, i) => writer.makeString(this.escapeKeyword(signature.argName(i)))));
208
216
  writer.writeStatement(new IfStatement(new NaryOpExpression("==", [writer.makeFunctionCall("this._LoadOnce", []), writer.makeString("true")]), new BlockStatement([
@@ -272,7 +280,7 @@ export class TSLanguageWriter extends LanguageWriter {
272
280
  canBeOptional.reverse();
273
281
  const isOptional = signature.args.map((it, i) => idl.isOptionalType(it) && canBeOptional[i] && !isSetter);
274
282
  const normalizedArgs = signature.args.map((it, i) => idl.isOptionalType(it) && isOptional[i] ? idl.maybeUnwrapOptionalType(it) : it);
275
- this.printer.print(`${prefix}${name}${typeParams}(${normalizedArgs.map((it, index) => `${this.escapeKeyword(signature.argName(index))}${isOptional[index] ? "?" : ""}: ${this.getNodeName(it)}${signature.argDefault(index) ? ' = ' + signature.argDefault(index) : ""}`).join(", ")})${needReturn ? ": " + this.getNodeName(signature.returnType) : ""} ${needBracket ? "{" : ""}`);
283
+ this.printer.print(`${prefix}${name}${typeParams}(${normalizedArgs.map((it, index) => `${this.escapeKeyword(signature.argName(index))}${isOptional[index] ? "?" : ""}: ${this.getNodeName(it)}${signature.argDefault(index) ? ' = ' + signature.argDefault(index) : ""}`).join(", ")})${needReturn ? ": " + this.getNodeName(signature.returnType) : ""}${needBracket ? " {" : ""}`);
276
284
  }
277
285
  makeNull() {
278
286
  return new StringExpression("undefined");
@@ -364,7 +372,7 @@ export class TSLanguageWriter extends LanguageWriter {
364
372
  return this.makeAssign(receiver, undefined, this.makeString(`[${fields.map(it => `${it}!`).join(",")}]`), false);
365
373
  }
366
374
  get supportedModifiers() {
367
- return [MethodModifier.PUBLIC, MethodModifier.PRIVATE, MethodModifier.STATIC];
375
+ return [MethodModifier.PUBLIC, MethodModifier.PRIVATE, MethodModifier.PROTECTED, MethodModifier.STATIC];
368
376
  }
369
377
  get supportedFieldModifiers() {
370
378
  return [FieldModifier.PUBLIC, FieldModifier.PRIVATE, FieldModifier.PROTECTED, FieldModifier.READONLY, FieldModifier.STATIC];