@idlizer/core 2.1.10-arktscgen-4 → 2.1.10-arktscgen-5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/build/lib/src/Language.d.ts +0 -1
  2. package/build/lib/src/Language.js +0 -2
  3. package/build/lib/src/LanguageWriters/ArgConvertors.d.ts +3 -2
  4. package/build/lib/src/LanguageWriters/ArgConvertors.js +20 -16
  5. package/build/lib/src/LanguageWriters/LanguageWriter.d.ts +5 -1
  6. package/build/lib/src/LanguageWriters/LanguageWriter.js +2 -0
  7. package/build/lib/src/LanguageWriters/convertors/CJConvertors.d.ts +0 -1
  8. package/build/lib/src/LanguageWriters/convertors/CJConvertors.js +1 -3
  9. package/build/lib/src/LanguageWriters/convertors/CppConvertors.d.ts +7 -7
  10. package/build/lib/src/LanguageWriters/convertors/CppConvertors.js +37 -23
  11. package/build/lib/src/LanguageWriters/convertors/KotlinConvertors.js +9 -5
  12. package/build/lib/src/LanguageWriters/convertors/TSConvertors.d.ts +4 -4
  13. package/build/lib/src/LanguageWriters/convertors/TSConvertors.js +73 -30
  14. package/build/lib/src/LanguageWriters/index.d.ts +2 -2
  15. package/build/lib/src/LanguageWriters/index.js +8 -13
  16. package/build/lib/src/LanguageWriters/writers/CJLanguageWriter.d.ts +2 -0
  17. package/build/lib/src/LanguageWriters/writers/CJLanguageWriter.js +13 -1
  18. package/build/lib/src/LanguageWriters/writers/CppLanguageWriter.d.ts +2 -0
  19. package/build/lib/src/LanguageWriters/writers/CppLanguageWriter.js +7 -1
  20. package/build/lib/src/LanguageWriters/writers/ETSLanguageWriter.d.ts +1 -2
  21. package/build/lib/src/LanguageWriters/writers/ETSLanguageWriter.js +0 -3
  22. package/build/lib/src/LanguageWriters/writers/JavaLanguageWriter.d.ts +2 -0
  23. package/build/lib/src/LanguageWriters/writers/JavaLanguageWriter.js +11 -0
  24. package/build/lib/src/LanguageWriters/writers/KotlinLanguageWriter.d.ts +8 -0
  25. package/build/lib/src/LanguageWriters/writers/KotlinLanguageWriter.js +75 -27
  26. package/build/lib/src/LanguageWriters/writers/TsLanguageWriter.d.ts +2 -0
  27. package/build/lib/src/LanguageWriters/writers/TsLanguageWriter.js +35 -12
  28. package/build/lib/src/LibraryInterface.d.ts +0 -1
  29. package/build/lib/src/from-idl/DtsPrinter.js +1 -1
  30. package/build/lib/src/from-idl/deserialize.js +1 -1
  31. package/build/lib/src/idl.d.ts +5 -0
  32. package/build/lib/src/idl.js +19 -1
  33. package/build/lib/src/index.d.ts +1 -4
  34. package/build/lib/src/index.js +1 -4
  35. package/build/lib/src/inheritance.d.ts +0 -2
  36. package/build/lib/src/inheritance.js +0 -17
  37. package/build/lib/src/peer-generation/ConflictingDeclarations.d.ts +6 -0
  38. package/build/lib/src/peer-generation/ConflictingDeclarations.js +43 -0
  39. package/build/lib/src/peer-generation/LayoutManager.d.ts +2 -0
  40. package/build/lib/src/peer-generation/LayoutManager.js +15 -0
  41. package/build/lib/src/peer-generation/Materialized.d.ts +2 -0
  42. package/build/lib/src/peer-generation/Materialized.js +14 -1
  43. package/build/lib/src/peer-generation/PeerLibrary.d.ts +0 -3
  44. package/build/lib/src/peer-generation/PeerLibrary.js +53 -37
  45. package/build/lib/src/peer-generation/idl/IdlNameConvertor.d.ts +6 -0
  46. package/build/lib/src/peer-generation/idl/IdlNameConvertor.js +15 -3
  47. package/build/lib/src/util.d.ts +5 -39
  48. package/build/lib/src/util.js +43 -369
  49. package/package.json +45 -49
@@ -3,7 +3,6 @@ export declare class Language {
3
3
  extension: string;
4
4
  static TS: Language;
5
5
  static ARKTS: Language;
6
- static JAVA: Language;
7
6
  static CPP: Language;
8
7
  static CJ: Language;
9
8
  static KOTLIN: Language;
@@ -26,7 +26,6 @@ export class Language {
26
26
  static fromString(name) {
27
27
  switch (name) {
28
28
  case "arkts": return Language.ARKTS;
29
- case "java": return Language.JAVA;
30
29
  case "ts": return Language.TS;
31
30
  case "cangjie": return Language.CJ;
32
31
  case "cpp": return Language.CPP;
@@ -37,7 +36,6 @@ export class Language {
37
36
  }
38
37
  Language.TS = new Language("TS", ".ts");
39
38
  Language.ARKTS = new Language("ArkTS", ".ts"); // using .ts for ArkTS until we get rit of tsc preprocessing
40
- Language.JAVA = new Language("Java", ".java");
41
39
  Language.CPP = new Language("C++", ".cc");
42
40
  Language.CJ = new Language("CangJie", ".cj");
43
41
  Language.KOTLIN = new Language("Kotlin", ".kt");
@@ -6,7 +6,7 @@ import { LibraryInterface } from "../LibraryInterface";
6
6
  import { ReferenceResolver } from "../peer-generation/ReferenceResolver";
7
7
  import { PeerLibrary } from "../peer-generation/PeerLibrary";
8
8
  import { PeerMethodSignature } from "../peer-generation/PeerMethod";
9
- export declare function getSerializerName(declaration: idl.IDLEntry): string;
9
+ export declare function getSerializerName(library: LibraryInterface, language: Language, declaration: idl.IDLEntry): string;
10
10
  export interface ArgConvertor {
11
11
  param: string;
12
12
  idlType: idl.IDLType;
@@ -106,8 +106,9 @@ export declare class NumberConvertor extends BaseArgConvertor {
106
106
  isPointerType(): boolean;
107
107
  }
108
108
  export declare class NumericConvertor extends BaseArgConvertor {
109
+ protected library: LibraryInterface;
109
110
  private readonly interopNameConvertor;
110
- constructor(param: string, type: idl.IDLPrimitiveType);
111
+ constructor(library: LibraryInterface, param: string, type: idl.IDLPrimitiveType);
111
112
  convertorArg(param: string, writer: LanguageWriter): string;
112
113
  convertorSerialize(param: string, value: string, writer: LanguageWriter): LanguageStatement;
113
114
  convertorDeserialize(bufferName: string, deserializerName: string, assigneer: ExpressionAssigner, writer: LanguageWriter): LanguageStatement;
@@ -20,14 +20,15 @@ import { generatorConfiguration, generatorTypePrefix } from "../config";
20
20
  import { capitalize, getExtractor, getTransformer, hashCodeFromString, throwException, warn } from "../util";
21
21
  import { UnionRuntimeTypeChecker } from "../peer-generation/unions";
22
22
  import { CppConvertor, CppNameConvertor } from "./convertors/CppConvertors";
23
- import { createEmptyReferenceResolver } from "../peer-generation/ReferenceResolver";
24
23
  import { PrimitiveTypesInstance } from "../peer-generation/PrimitiveType";
25
- import { qualifiedName } from "../peer-generation/idl/common";
26
24
  import { LayoutNodeRole } from "../peer-generation/LayoutManager";
27
25
  import { PeerMethodSignature } from "../peer-generation/PeerMethod";
28
26
  import { isInExternalModule } from "../peer-generation/modules";
29
- export function getSerializerName(declaration) {
30
- return `${idl.getQualifiedName(declaration, "namespace.name").split('.').join('_')}_serializer`;
27
+ import { isTopLevelConflicted } from "../peer-generation/ConflictingDeclarations";
28
+ export function getSerializerName(library, language, declaration) {
29
+ const qualifier = isTopLevelConflicted(library, language, declaration)
30
+ ? "package.namespace.name" : "namespace.name";
31
+ return `${idl.getQualifiedName(declaration, qualifier).split('.').join('_')}_serializer`;
31
32
  }
32
33
  export function isDirectConvertedType(originalType, library) {
33
34
  const debug = false;
@@ -298,10 +299,11 @@ export class NumberConvertor extends BaseArgConvertor {
298
299
  }
299
300
  }
300
301
  export class NumericConvertor extends BaseArgConvertor {
301
- constructor(param, type) {
302
+ constructor(library, param, type) {
302
303
  // check numericPrimitiveTypes.include(type)
303
304
  super(type, [RuntimeType.NUMBER], false, false, param);
304
- this.interopNameConvertor = new CppNameConvertor(createEmptyReferenceResolver());
305
+ this.library = library;
306
+ this.interopNameConvertor = new CppNameConvertor(this.library);
305
307
  }
306
308
  convertorArg(param, writer) {
307
309
  return param;
@@ -577,12 +579,12 @@ export class InterfaceConvertor extends BaseArgConvertor {
577
579
  throw new Error("Must never be used");
578
580
  }
579
581
  convertorSerialize(param, value, writer) {
580
- const accessor = getSerializerName(this.declaration);
582
+ const accessor = getSerializerName(this.library, writer.language, this.declaration);
581
583
  writer.addFeature(accessor, this.library.layout.resolve({ node: this.declaration, role: LayoutNodeRole.SERIALIZER }));
582
584
  return writer.makeStatement(writer.makeStaticMethodCall(accessor, 'write', [writer.makeString(`${param}Serializer`), writer.makeString(writer.escapeKeyword(value))]));
583
585
  }
584
586
  convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
585
- const accessor = getSerializerName(this.declaration);
587
+ const accessor = getSerializerName(this.library, writer.language, this.declaration);
586
588
  writer.addFeature(accessor, this.library.layout.resolve({ node: this.declaration, role: LayoutNodeRole.SERIALIZER }));
587
589
  return assigneer(writer.makeStaticMethodCall(accessor, 'read', [writer.makeString(deserializerName)]));
588
590
  }
@@ -888,7 +890,7 @@ export class OptionConvertor extends BaseArgConvertor {
888
890
  const bufferType = this.nativeType();
889
891
  statements.push(writer.makeAssign(bufferName, bufferType, writer.language === Language.CPP ? undefined : writer.makeNull(this.type), true, false)); // maybe change to generic None
890
892
  const thenStatement = new BlockStatement([
891
- this.typeConvertor.convertorDeserialize(`${bufferName}_`, deserializerName, (expr) => {
893
+ this.typeConvertor.convertorDeserialize(`${bufferName}Opt`, deserializerName, (expr) => {
892
894
  const receiver = writer.language === Language.CPP
893
895
  ? `${bufferName}.value` : bufferName;
894
896
  return writer.makeAssign(receiver, undefined, expr, false);
@@ -1018,10 +1020,10 @@ export class MaterializedClassConvertor extends BaseArgConvertor {
1018
1020
  this.declaration = declaration;
1019
1021
  }
1020
1022
  convertorArg(param, writer) {
1023
+ const nameConvertor = this.library.createTypeNameConvertor(Language.CPP);
1021
1024
  switch (writer.language) {
1022
1025
  case Language.CPP:
1023
- return `static_cast<${generatorTypePrefix()}${qualifiedName(this.declaration, "_", "namespace.name")}>(${param})`;
1024
- case Language.JAVA:
1026
+ return `static_cast<${nameConvertor.convert(this.declaration)}>(${param})`;
1025
1027
  case Language.CJ:
1026
1028
  return `MaterializedBase.toPeerPtr(${writer.escapeKeyword(param)})`;
1027
1029
  default:
@@ -1033,12 +1035,12 @@ export class MaterializedClassConvertor extends BaseArgConvertor {
1033
1035
  }
1034
1036
  }
1035
1037
  convertorSerialize(param, value, printer) {
1036
- const accessorRoot = getSerializerName(this.declaration);
1038
+ const accessorRoot = getSerializerName(this.library, printer.language, this.declaration);
1037
1039
  printer.addFeature(accessorRoot, this.library.layout.resolve({ node: this.declaration, role: LayoutNodeRole.SERIALIZER }));
1038
1040
  return printer.makeStatement(printer.makeStaticMethodCall(accessorRoot, 'write', [printer.makeString(`${param}Serializer`), printer.makeString(value)]));
1039
1041
  }
1040
1042
  convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
1041
- const accessorRoot = getSerializerName(this.declaration);
1043
+ const accessorRoot = getSerializerName(this.library, writer.language, this.declaration);
1042
1044
  writer.addFeature(accessorRoot, this.library.layout.resolve({ node: this.declaration, role: LayoutNodeRole.SERIALIZER }));
1043
1045
  const readStatement = writer.makeCast(writer.makeStaticMethodCall(accessorRoot, "read", [writer.makeString(deserializerName)]), this.declaration);
1044
1046
  return assigneer(readStatement);
@@ -1115,8 +1117,10 @@ export class CallbackConvertor extends BaseArgConvertor {
1115
1117
  writer.makeStatement(writer.makeMethodCall(`${param}Serializer`, "writePointer", [writer.makeCast(new StringExpression(`${value}.callSync`), idl.IDLPointerType, { unsafe: true })]))
1116
1118
  ], false);
1117
1119
  }
1118
- if (this.isTransformed)
1119
- value = `CallbackTransformer.transformFrom${this.library.getInteropName(this.decl)}(${value})`;
1120
+ if (this.isTransformed) {
1121
+ const convertor = this.library.createTypeNameConvertor(Language.CPP);
1122
+ value = `CallbackTransformer.transformFrom${convertor.convert(this.decl)}(${value})`;
1123
+ }
1120
1124
  return writer.makeStatement(writer.makeMethodCall(`${param}Serializer`, `holdAndWriteCallback`, [writer.makeString(`${value}`)]));
1121
1125
  }
1122
1126
  convertorDeserialize(bufferName, deserializerName, assigneer, writer, useSyncVersion = true) {
@@ -1221,7 +1225,7 @@ function warnCustomObject(type, msg) {
1221
1225
  }
1222
1226
  export const CallbackKind = "CallbackKind";
1223
1227
  export function generateCallbackKindName(callback) {
1224
- return `Kind_${callback.name}`;
1228
+ return `KIND_${callback.name.toUpperCase()}`;
1225
1229
  }
1226
1230
  export function generateCallbackKindAccess(callback, language) {
1227
1231
  const name = generateCallbackKindName(callback);
@@ -146,7 +146,9 @@ export declare enum FieldModifier {
146
146
  FINAL = 5,
147
147
  VOLATILE = 6,
148
148
  INTERNAL = 7,
149
- OVERRIDE = 8
149
+ OVERRIDE = 8,
150
+ GET = 9,
151
+ SET = 10
150
152
  }
151
153
  export declare enum MethodModifier {
152
154
  PUBLIC = 0,
@@ -254,6 +256,7 @@ export declare abstract class LanguageWriter {
254
256
  })[];
255
257
  addFeature(node: idl.IDLEntry | idl.IDLReferenceType): void;
256
258
  addFeature(feature: string, module: string): void;
259
+ abstract get interopModule(): string;
257
260
  abstract writeClass(name: string, op: (writer: this) => void, superClass?: string, interfaces?: string[], generics?: string[], isDeclared?: boolean, isExport?: boolean): void;
258
261
  abstract writeEnum(name: string, members: {
259
262
  name: string;
@@ -280,6 +283,7 @@ export declare abstract class LanguageWriter {
280
283
  }, initExpr?: LanguageExpression): void;
281
284
  abstract writeTypeDeclaration(decl: idl.IDLTypedef): void;
282
285
  abstract writeConstant(constName: string, constType: idl.IDLType, constVal?: string): void;
286
+ abstract writeImports(moduleName: string, importedFeatures: string[], aliases: string[]): void;
283
287
  abstract makeAssign(variableName: string, type: idl.IDLType | undefined, expr: LanguageExpression | undefined, isDeclared: boolean, isConst?: boolean, options?: MakeAssignOptions): LanguageStatement;
284
288
  abstract makeLambda(signature: MethodSignature, body?: LanguageStatement[]): LanguageExpression;
285
289
  abstract makeThrowError(message: string): LanguageStatement;
@@ -307,6 +307,8 @@ export var FieldModifier;
307
307
  FieldModifier[FieldModifier["VOLATILE"] = 6] = "VOLATILE";
308
308
  FieldModifier[FieldModifier["INTERNAL"] = 7] = "INTERNAL";
309
309
  FieldModifier[FieldModifier["OVERRIDE"] = 8] = "OVERRIDE";
310
+ FieldModifier[FieldModifier["GET"] = 9] = "GET";
311
+ FieldModifier[FieldModifier["SET"] = 10] = "SET";
310
312
  })(FieldModifier || (FieldModifier = {}));
311
313
  export var MethodModifier;
312
314
  (function (MethodModifier) {
@@ -32,5 +32,4 @@ export declare class CJIDLTypeToForeignStringConvertor extends CJTypeNameConvert
32
32
  export declare class CJInteropArgConvertor extends InteropArgConvertor {
33
33
  convertPrimitiveType(type: idl.IDLPrimitiveType): string;
34
34
  }
35
- export declare function removePoints(s: string): string;
36
35
  //# sourceMappingURL=CJConvertors.d.ts.map
@@ -15,6 +15,7 @@
15
15
  import * as idl from '../../idl';
16
16
  import { CJKeywords } from '../../languageSpecificKeywords';
17
17
  import { generateSyntheticIdlNodeName } from '../../peer-generation/idl/common';
18
+ import { removePoints } from '../../util';
18
19
  import { convertNode, convertType } from '../nameConvertor';
19
20
  import { InteropArgConvertor } from './InteropConvertors';
20
21
  export class CJTypeNameConvertor {
@@ -199,7 +200,4 @@ export class CJInteropArgConvertor extends InteropArgConvertor {
199
200
  return super.convertPrimitiveType(type);
200
201
  }
201
202
  }
202
- export function removePoints(s) {
203
- return s.split(/[\.\-]/g).join('_');
204
- }
205
203
  //# sourceMappingURL=CJConvertors.js.map
@@ -1,15 +1,15 @@
1
1
  import * as idl from '../../idl';
2
2
  import { IdlNameConvertor, NodeConvertor, TypeConvertor } from "../nameConvertor";
3
3
  import { InteropArgConvertor } from './InteropConvertors';
4
- import { ReferenceResolver } from '../../peer-generation/ReferenceResolver';
4
+ import { LibraryInterface } from '../../LibraryInterface';
5
5
  export interface ConvertResult {
6
6
  text: string;
7
7
  noPrefix: boolean;
8
8
  resolvedType: idl.IDLType;
9
9
  }
10
10
  export declare class GenericCppConvertor implements NodeConvertor<ConvertResult> {
11
- protected resolver: ReferenceResolver;
12
- constructor(resolver: ReferenceResolver);
11
+ protected library: LibraryInterface;
12
+ constructor(library: LibraryInterface);
13
13
  private make;
14
14
  convertNode(node: idl.IDLNode): ConvertResult;
15
15
  convertNamespace(node: idl.IDLNamespace): ConvertResult;
@@ -36,9 +36,9 @@ export declare class CppConvertor extends GenericCppConvertor implements IdlName
36
36
  convert(node: idl.IDLNode): string;
37
37
  }
38
38
  export declare class CppNameConvertor implements IdlNameConvertor {
39
- protected resolver: ReferenceResolver;
39
+ protected library: LibraryInterface;
40
40
  private readonly cppConvertor;
41
- constructor(resolver: ReferenceResolver);
41
+ constructor(library: LibraryInterface);
42
42
  convert(node: idl.IDLNode): string;
43
43
  }
44
44
  export declare class CppInteropArgConvertor extends InteropArgConvertor {
@@ -47,9 +47,9 @@ export declare class CppInteropArgConvertor extends InteropArgConvertor {
47
47
  convertPrimitiveType(type: idl.IDLPrimitiveType): string;
48
48
  }
49
49
  export declare class CppReturnTypeConvertor implements TypeConvertor<string> {
50
- private resolver;
50
+ private library;
51
51
  private convertor;
52
- constructor(resolver: ReferenceResolver);
52
+ constructor(library: LibraryInterface);
53
53
  isVoid(returnType: idl.IDLType): boolean;
54
54
  convert(type: idl.IDLType): string;
55
55
  convertContainer(type: idl.IDLContainerType): string;
@@ -13,18 +13,30 @@
13
13
  * limitations under the License.
14
14
  */
15
15
  import * as idl from '../../idl';
16
- import { generatorConfiguration, generatorTypePrefix } from "../../config";
16
+ import { generatorConfiguration } from "../../config";
17
17
  import { convertNode, convertType } from "../nameConvertor";
18
18
  import { PrimitiveTypesInstance } from '../../peer-generation/PrimitiveType';
19
19
  import { InteropArgConvertor } from './InteropConvertors';
20
20
  import { maybeTransformManagedCallback } from '../ArgConvertors';
21
21
  import { qualifiedName } from '../../peer-generation/idl/common';
22
- import { capitalize } from '../../util';
23
- import { isMaterialized } from '../../peer-generation/isMaterialized';
24
- import { isInIdlizeInternal } from '../../idlize';
22
+ import { isInIdlizeInternal } from '../../idl';
23
+ import { isTopLevelConflicted } from '../../peer-generation/ConflictingDeclarations';
24
+ import { Language } from '../../Language';
25
+ function isSubtypeTopLevelConflicted(library, node) {
26
+ let hasConflicts = false;
27
+ idl.forEachChild(node, (child) => {
28
+ if (idl.isReferenceType(child)) {
29
+ const decl = library.resolveTypeReference(child);
30
+ if (decl) {
31
+ hasConflicts || (hasConflicts = isTopLevelConflicted(library, Language.CPP, decl));
32
+ }
33
+ }
34
+ });
35
+ return hasConflicts;
36
+ }
25
37
  export class GenericCppConvertor {
26
- constructor(resolver) {
27
- this.resolver = resolver;
38
+ constructor(library) {
39
+ this.library = library;
28
40
  }
29
41
  make(text, resolvedType, noPrefix = false) {
30
42
  return { text, noPrefix, resolvedType };
@@ -78,6 +90,12 @@ export class GenericCppConvertor {
78
90
  return this.make(prefix + converted.text, type, true);
79
91
  }
80
92
  convertUnion(type) {
93
+ if (isSubtypeTopLevelConflicted(this.library, type)) {
94
+ if (type.parent && idl.isTypedef(type.parent)) {
95
+ return this.make(type.parent.name, type, false);
96
+ }
97
+ return this.make('Union_' + type.types.map(it => convertType(this, it).text).join("_"), type, false);
98
+ }
81
99
  return this.make(type.name, type, false);
82
100
  }
83
101
  convertContainer(type) {
@@ -108,14 +126,11 @@ export class GenericCppConvertor {
108
126
  if (generatorConfiguration().parameterized.includes(refName)) {
109
127
  return this.make('CustomObject', idl.IDLCustomObjectType);
110
128
  }
111
- let decl = this.resolver.toDeclaration(type);
129
+ let decl = this.library.toDeclaration(type);
112
130
  if (idl.isCallback(decl)) {
113
- decl = (_a = maybeTransformManagedCallback(decl, this.resolver)) !== null && _a !== void 0 ? _a : decl;
131
+ decl = (_a = maybeTransformManagedCallback(decl, this.library)) !== null && _a !== void 0 ? _a : decl;
114
132
  }
115
133
  if (idl.isType(decl)) {
116
- if (idl.isReferenceType(decl)) {
117
- return this.make(`${capitalize(decl.name)}`, decl);
118
- }
119
134
  return this.convertNode(decl);
120
135
  }
121
136
  let res = this.convertNode(decl);
@@ -159,6 +174,9 @@ export class GenericCppConvertor {
159
174
  throw new Error(`Unmapped primitive type ${idl.DebugUtils.debugPrintType(type)}`);
160
175
  }
161
176
  qualifiedName(target) {
177
+ if (idl.isEntry(target) && isTopLevelConflicted(this.library, Language.CPP, target)) {
178
+ return qualifiedName(target, "_", "package.namespace.name");
179
+ }
162
180
  return qualifiedName(target, "_", "namespace.name");
163
181
  }
164
182
  computeTargetTypeLiteralName(decl) {
@@ -188,10 +206,10 @@ export class CppConvertor extends GenericCppConvertor {
188
206
  isPrimitiveOrPrimitiveAlias(type) {
189
207
  if (!idl.isType(type))
190
208
  return false;
191
- const { resolver } = this;
209
+ const { library } = this;
192
210
  const seen = new Set;
193
211
  while (type && idl.isReferenceType(type)) {
194
- const resolved = resolver.resolveTypeReference(type);
212
+ const resolved = library.resolveTypeReference(type);
195
213
  if (!resolved)
196
214
  return false;
197
215
  if (!idl.isTypedef(resolved))
@@ -208,9 +226,9 @@ export class CppConvertor extends GenericCppConvertor {
208
226
  }
209
227
  }
210
228
  export class CppNameConvertor {
211
- constructor(resolver) {
212
- this.resolver = resolver;
213
- this.cppConvertor = new GenericCppConvertor(resolver);
229
+ constructor(library) {
230
+ this.library = library;
231
+ this.cppConvertor = new GenericCppConvertor(library);
214
232
  }
215
233
  convert(node) {
216
234
  return this.cppConvertor.convertNode(node).text;
@@ -236,9 +254,9 @@ export class CppInteropArgConvertor extends InteropArgConvertor {
236
254
  }
237
255
  CppInteropArgConvertor.INSTANCE = new CppInteropArgConvertor();
238
256
  export class CppReturnTypeConvertor {
239
- constructor(resolver) {
240
- this.resolver = resolver;
241
- this.convertor = new CppConvertor(resolver);
257
+ constructor(library) {
258
+ this.library = library;
259
+ this.convertor = new CppConvertor(library);
242
260
  }
243
261
  isVoid(returnType) {
244
262
  return this.convert(returnType) == 'void';
@@ -271,10 +289,6 @@ export class CppReturnTypeConvertor {
271
289
  return this.convertor.convert(type);
272
290
  }
273
291
  convertTypeReference(type) {
274
- const decl = this.resolver.resolveTypeReference(type);
275
- if (decl && idl.isInterface(decl) && isMaterialized(decl, this.resolver)) {
276
- return generatorTypePrefix() + qualifiedName(decl, "_", "namespace.name");
277
- }
278
292
  return this.convertor.convert(type);
279
293
  }
280
294
  convertUnion(type) {
@@ -16,7 +16,7 @@ import * as idl from '../../idl';
16
16
  import { generateSyntheticIdlNodeName } from '../../peer-generation/idl/common';
17
17
  import { isMaterialized } from '../../peer-generation/isMaterialized';
18
18
  import { convertNode, convertType } from '../nameConvertor';
19
- import { removePoints } from './CJConvertors';
19
+ import { removePoints } from '../../util';
20
20
  import { InteropReturnTypeConvertor } from './InteropConvertors';
21
21
  export class KotlinTypeNameConvertor {
22
22
  constructor(resolver) {
@@ -55,6 +55,11 @@ export class KotlinTypeNameConvertor {
55
55
  }
56
56
  convertContainer(type) {
57
57
  if (idl.IDLContainerUtils.isSequence(type)) {
58
+ switch (type.elementType[0]) {
59
+ case idl.IDLU8Type: return "UByteArray";
60
+ case idl.IDLI32Type: return "IntArray";
61
+ case idl.IDLF32Type: return "FloatArray";
62
+ }
58
63
  return `ArrayList<${convertType(this, type.elementType[0])}>`;
59
64
  }
60
65
  if (idl.IDLContainerUtils.isRecord(type)) {
@@ -93,7 +98,7 @@ export class KotlinTypeNameConvertor {
93
98
  case idl.IDLUnknownType:
94
99
  case idl.IDLCustomObjectType: return 'Any';
95
100
  case idl.IDLThisType: return 'this';
96
- case idl.IDLObjectType: return 'Object';
101
+ case idl.IDLObjectType: return 'Any';
97
102
  case idl.IDLAnyType: return 'Any';
98
103
  case idl.IDLUndefinedType: return 'Nothing?';
99
104
  case idl.IDLPointerType: return 'KPointer';
@@ -135,7 +140,6 @@ const KLong = "KLong";
135
140
  const KFloat = "KFloat";
136
141
  const KDouble = "KDouble";
137
142
  const KNativePointer = "KNativePointer";
138
- const KInteropNumber = "KInteropNumber";
139
143
  const KStringPtr = "KStringPtr";
140
144
  const KInteropReturnBuffer = "KInteropReturnBuffer";
141
145
  const KInteropBuffer = "KInteropBuffer";
@@ -154,7 +158,7 @@ export class KotlinCInteropReturnTypeConvertor extends InteropReturnTypeConverto
154
158
  case idl.IDLF16Type:
155
159
  case idl.IDLF32Type:
156
160
  case idl.IDLF64Type: return KInt;
157
- case idl.IDLNumberType: return KInteropNumber;
161
+ case idl.IDLNumberType: return KDouble;
158
162
  case idl.IDLBooleanType: return KBoolean;
159
163
  case idl.IDLBigintType: return KLong;
160
164
  case idl.IDLAnyType:
@@ -218,7 +222,7 @@ export class KotlinCInteropArgConvertor {
218
222
  case idl.IDLU32Type: return KInt;
219
223
  case idl.IDLF32Type: return KFloat;
220
224
  case idl.IDLF64Type: return KDouble;
221
- case idl.IDLNumberType: return KInteropNumber;
225
+ case idl.IDLNumberType: return KDouble;
222
226
  case idl.IDLBigintType: return KLong;
223
227
  case idl.IDLSerializerBuffer: return KSerializerBuffer;
224
228
  case idl.IDLBooleanType:
@@ -1,9 +1,10 @@
1
1
  import * as idl from '../../idl';
2
- import { ReferenceResolver } from '../../peer-generation/ReferenceResolver';
2
+ import { LibraryInterface } from '../../LibraryInterface';
3
3
  import { IdlNameConvertor, NodeConvertor, TypeConvertor } from '../nameConvertor';
4
4
  export declare class TSTypeNameConvertor implements NodeConvertor<string>, IdlNameConvertor {
5
- protected resolver: ReferenceResolver;
6
- constructor(resolver: ReferenceResolver);
5
+ protected library: LibraryInterface;
6
+ constructor(library: LibraryInterface);
7
+ protected mangleTopLevel(decl: idl.IDLEntry): string | undefined;
7
8
  convert(node: idl.IDLNode): string;
8
9
  convertNamespace(node: idl.IDLNamespace): string;
9
10
  convertInterface(node: idl.IDLInterface): string;
@@ -22,7 +23,6 @@ export declare class TSTypeNameConvertor implements NodeConvertor<string>, IdlNa
22
23
  convertPrimitiveType(type: idl.IDLPrimitiveType): string;
23
24
  protected processTupleType(idlProperty: idl.IDLProperty): idl.IDLProperty;
24
25
  protected createTypeSubstitution(parameters: string[] | undefined, args: idl.IDLType[] | undefined): Map<string, idl.IDLType>;
25
- protected applySubstitution(subst: Map<string, idl.IDLType>, type: idl.IDLType): idl.IDLType;
26
26
  protected mapCallback(decl: idl.IDLCallback, args?: idl.IDLType[]): string;
27
27
  protected productType(decl: idl.IDLInterface, args: idl.IDLType[] | undefined, isTuple: boolean, includeFieldNames: boolean): string;
28
28
  protected mapFunctionType(typeArgs: string[]): string;
@@ -13,11 +13,26 @@
13
13
  * limitations under the License.
14
14
  */
15
15
  import * as idl from '../../idl';
16
+ import { Language } from '../../Language';
17
+ import { isTopLevelConflicted } from '../../peer-generation/ConflictingDeclarations';
18
+ import { isDeclaredInCurrentFile, LayoutNodeRole } from '../../peer-generation/LayoutManager';
16
19
  import { maybeRestoreGenerics } from '../../transformers/GenericTransformer';
17
20
  import { convertNode, convertType } from '../nameConvertor';
18
21
  export class TSTypeNameConvertor {
19
- constructor(resolver) {
20
- this.resolver = resolver;
22
+ constructor(library) {
23
+ this.library = library;
24
+ }
25
+ mangleTopLevel(decl) {
26
+ if (!isDeclaredInCurrentFile(this.library.layout, { node: decl, role: LayoutNodeRole.INTERFACE }) && isTopLevelConflicted(this.library, Language.TS, decl)) {
27
+ const namespaces = idl.getNamespacesPathFor(decl);
28
+ if (namespaces.length === 0) {
29
+ return idl.getQualifiedName(decl, "package.namespace.name").replaceAll('.', '_');
30
+ }
31
+ const [rootNamespace, ...otherNamespaces] = idl.getNamespacesPathFor(decl);
32
+ const mangledRoot = idl.getQualifiedName(rootNamespace, "package.namespace.name").replaceAll('.', '_');
33
+ return [mangledRoot, ...otherNamespaces, decl.name].join(".");
34
+ }
35
+ return undefined;
21
36
  }
22
37
  convert(node) {
23
38
  return convertNode(this, node);
@@ -26,18 +41,22 @@ export class TSTypeNameConvertor {
26
41
  return node.name;
27
42
  }
28
43
  convertInterface(node) {
29
- return idl.getQualifiedName(node, "namespace.name");
44
+ var _a;
45
+ return (_a = this.mangleTopLevel(node)) !== null && _a !== void 0 ? _a : idl.getQualifiedName(node, "namespace.name");
30
46
  }
31
47
  convertEnum(node) {
32
- return idl.getQualifiedName(node, "namespace.name");
48
+ var _a;
49
+ return (_a = this.mangleTopLevel(node)) !== null && _a !== void 0 ? _a : idl.getQualifiedName(node, "namespace.name");
33
50
  }
34
51
  convertTypedef(node) {
35
- return node.name;
52
+ var _a;
53
+ return (_a = this.mangleTopLevel(node)) !== null && _a !== void 0 ? _a : idl.getQualifiedName(node, "namespace.name");
36
54
  }
37
55
  convertCallback(node) {
56
+ var _a;
38
57
  return idl.isSyntheticEntry(node)
39
58
  ? this.mapCallback(node)
40
- : node.name;
59
+ : (_a = this.mangleTopLevel(node)) !== null && _a !== void 0 ? _a : node.name;
41
60
  }
42
61
  convertMethod(node) {
43
62
  return node.name;
@@ -90,14 +109,14 @@ export class TSTypeNameConvertor {
90
109
  convertTypeReferenceAsImport(type, importClause) {
91
110
  var _a;
92
111
  const maybeTypeArguments = ((_a = type.typeArguments) === null || _a === void 0 ? void 0 : _a.length) ? `<${type.typeArguments.join(', ')}>` : "";
93
- let decl = this.resolver.resolveTypeReference(type);
112
+ let decl = this.library.resolveTypeReference(type);
94
113
  if (decl)
95
114
  return `${decl.name}${maybeTypeArguments}`;
96
115
  return `${type.name}${maybeTypeArguments}`;
97
116
  }
98
117
  convertTypeReference(type) {
99
- var _a, _b;
100
- let decl = this.resolver.resolveTypeReference(type);
118
+ var _a, _b, _c;
119
+ let decl = this.library.resolveTypeReference(type);
101
120
  if (decl) {
102
121
  if (idl.isSyntheticEntry(decl)) {
103
122
  if (idl.isCallback(decl)) {
@@ -116,10 +135,10 @@ export class TSTypeNameConvertor {
116
135
  // (can not cast MyEnum to exact MyEnum.Value1)
117
136
  decl = decl.parent;
118
137
  }
119
- let maybeRestoredGeneric = maybeRestoreGenerics(type, this.resolver);
138
+ let maybeRestoredGeneric = maybeRestoreGenerics(type, this.library);
120
139
  if (maybeRestoredGeneric) {
121
140
  type = maybeRestoredGeneric;
122
- decl = this.resolver.resolveTypeReference(maybeRestoredGeneric);
141
+ decl = this.library.resolveTypeReference(maybeRestoredGeneric);
123
142
  }
124
143
  let typeSpec = type.name;
125
144
  let typeArgs = (_b = (_a = type.typeArguments) === null || _a === void 0 ? void 0 : _a.map(it => this.convert(it))) !== null && _b !== void 0 ? _b : [];
@@ -131,7 +150,7 @@ export class TSTypeNameConvertor {
131
150
  if (decl) {
132
151
  const path = idl.getNamespacesPathFor(decl).map(it => it.name);
133
152
  path.push(decl.name);
134
- return `${path.join(".")}${maybeTypeArguments}`;
153
+ return `${(_c = this.mangleTopLevel(decl)) !== null && _c !== void 0 ? _c : path.join(".")}${maybeTypeArguments}`;
135
154
  }
136
155
  return `${type.name}${maybeTypeArguments}`;
137
156
  }
@@ -192,27 +211,16 @@ export class TSTypeNameConvertor {
192
211
  }
193
212
  return subst;
194
213
  }
195
- applySubstitution(subst, type) {
196
- var _a;
197
- if (idl.isContainerType(type)) {
198
- return idl.createContainerType(type.containerKind, type.elementType.map(it => this.applySubstitution(subst, it)));
199
- }
200
- if (idl.isReferenceType(type)) {
201
- return idl.createReferenceType(type.name, (_a = type.typeArguments) === null || _a === void 0 ? void 0 : _a.map(it => this.applySubstitution(subst, it)));
202
- }
203
- if (idl.isTypeParameterType(type)) {
204
- const record = subst.get(type.name);
205
- if (record) {
206
- return record;
207
- }
208
- }
209
- return type;
210
- }
211
214
  mapCallback(decl, args) {
212
215
  const subst = this.createTypeSubstitution(decl.typeParameters, args);
213
216
  const parameters = decl.parameters.map(it => {
217
+ if (subst.size == 0)
218
+ return it;
214
219
  const param = idl.clone(it);
215
- param.type = this.applySubstitution(subst, param.type);
220
+ param.parent = it.parent;
221
+ const type = applySubstitution(subst, param.type);
222
+ updateParent(param, type);
223
+ param.type = type;
216
224
  return param;
217
225
  });
218
226
  const params = parameters.map(it => `${it.isVariadic ? "..." : ""}${it.name}${it.isOptional ? "?" : ""}: ${this.convert(it.type)}${it.isVariadic ? "[]" : ""}`);
@@ -223,8 +231,13 @@ export class TSTypeNameConvertor {
223
231
  const name = `${isTuple ? "[" : "{"} ${decl.properties
224
232
  .map(it => isTuple ? this.processTupleType(it) : it)
225
233
  .map(it => {
234
+ if (subst.size == 0)
235
+ return it;
226
236
  const prop = idl.clone(it);
227
- prop.type = this.applySubstitution(subst, prop.type);
237
+ prop.parent = it.parent;
238
+ const type = applySubstitution(subst, prop.type);
239
+ updateParent(prop, type);
240
+ prop.type = type;
228
241
  return prop;
229
242
  })
230
243
  .map(it => {
@@ -287,4 +300,34 @@ export class TSInteropArgConvertor {
287
300
  throw new Error("Cannot pass union types through interop");
288
301
  }
289
302
  }
303
+ function applySubstitution(subst, type) {
304
+ var _a;
305
+ if (idl.isContainerType(type)) {
306
+ return idl.createContainerType(type.containerKind, type.elementType.map(it => applySubstitution(subst, it)));
307
+ }
308
+ if (idl.isReferenceType(type)) {
309
+ return idl.createReferenceType(type.name, (_a = type.typeArguments) === null || _a === void 0 ? void 0 : _a.map(it => applySubstitution(subst, it)));
310
+ }
311
+ if (idl.isTypeParameterType(type)) {
312
+ const record = subst.get(type.name);
313
+ if (record) {
314
+ return record;
315
+ }
316
+ }
317
+ return type;
318
+ }
319
+ // Update parents to properly find a file for conflicted types
320
+ function updateParent(parent, type) {
321
+ type.parent = parent;
322
+ if (idl.isOptionalType(type))
323
+ updateParent(type, type.type);
324
+ if (idl.isUnionType(type))
325
+ updateParents(type, type.types);
326
+ if (idl.isContainerType(type))
327
+ updateParents(type, type.elementType);
328
+ }
329
+ function updateParents(parent, types) {
330
+ for (const type of types)
331
+ updateParent(parent, type);
332
+ }
290
333
  //# sourceMappingURL=TSConvertors.js.map
@@ -1,8 +1,8 @@
1
1
  import { Language } from "../Language";
2
- import { ReferenceResolver } from "../peer-generation/ReferenceResolver";
2
+ import { LibraryInterface } from "../LibraryInterface";
3
3
  import { LanguageWriter } from "./LanguageWriter";
4
4
  import { TypeConvertor } from "./nameConvertor";
5
5
  export * from "./nameConvertor";
6
- export declare function createLanguageWriter(language: Language, resolver?: ReferenceResolver): LanguageWriter;
6
+ export declare function createLanguageWriter(language: Language, library: LibraryInterface): LanguageWriter;
7
7
  export declare function createInteropArgConvertor(language: Language): TypeConvertor<string>;
8
8
  //# sourceMappingURL=index.d.ts.map