@idlizer/core 2.0.15
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.
- package/build/lib/src/IndentedPrinter.d.ts +28 -0
- package/build/lib/src/IndentedPrinter.js +81 -0
- package/build/lib/src/Language.d.ts +15 -0
- package/build/lib/src/Language.js +42 -0
- package/build/lib/src/LanguageWriters/ArgConvertors.d.ts +318 -0
- package/build/lib/src/LanguageWriters/ArgConvertors.js +1015 -0
- package/build/lib/src/LanguageWriters/InteropConvertor.d.ts +36 -0
- package/build/lib/src/LanguageWriters/InteropConvertor.js +174 -0
- package/build/lib/src/LanguageWriters/LanguageWriter.d.ts +386 -0
- package/build/lib/src/LanguageWriters/LanguageWriter.js +746 -0
- package/build/lib/src/LanguageWriters/common.d.ts +17 -0
- package/build/lib/src/LanguageWriters/common.js +33 -0
- package/build/lib/src/LanguageWriters/convertors/CppConvertors.d.ts +8 -0
- package/build/lib/src/LanguageWriters/convertors/CppConvertors.js +35 -0
- package/build/lib/src/LanguageWriters/index.d.ts +3 -0
- package/build/lib/src/LanguageWriters/index.js +3 -0
- package/build/lib/src/LanguageWriters/nameConvertor.d.ts +28 -0
- package/build/lib/src/LanguageWriters/nameConvertor.js +61 -0
- package/build/lib/src/LanguageWriters/writers/CJLanguageWriter.d.ts +147 -0
- package/build/lib/src/LanguageWriters/writers/CJLanguageWriter.js +578 -0
- package/build/lib/src/LanguageWriters/writers/CLikeLanguageWriter.d.ts +46 -0
- package/build/lib/src/LanguageWriters/writers/CLikeLanguageWriter.js +121 -0
- package/build/lib/src/LanguageWriters/writers/CppLanguageWriter.d.ts +116 -0
- package/build/lib/src/LanguageWriters/writers/CppLanguageWriter.js +472 -0
- package/build/lib/src/LanguageWriters/writers/ETSLanguageWriter.d.ts +72 -0
- package/build/lib/src/LanguageWriters/writers/ETSLanguageWriter.js +329 -0
- package/build/lib/src/LanguageWriters/writers/JavaLanguageWriter.d.ts +83 -0
- package/build/lib/src/LanguageWriters/writers/JavaLanguageWriter.js +275 -0
- package/build/lib/src/LanguageWriters/writers/TsLanguageWriter.d.ts +93 -0
- package/build/lib/src/LanguageWriters/writers/TsLanguageWriter.js +390 -0
- package/build/lib/src/LibraryInterface.d.ts +21 -0
- package/build/lib/src/LibraryInterface.js +2 -0
- package/build/lib/src/config.d.ts +8 -0
- package/build/lib/src/config.js +20 -0
- package/build/lib/src/from-idl/DtsPrinter.d.ts +35 -0
- package/build/lib/src/from-idl/DtsPrinter.js +375 -0
- package/build/lib/src/from-idl/common.d.ts +5 -0
- package/build/lib/src/from-idl/common.js +83 -0
- package/build/lib/src/from-idl/deserialize.d.ts +9 -0
- package/build/lib/src/from-idl/deserialize.js +384 -0
- package/build/lib/src/from-idl/toString.d.ts +2 -0
- package/build/lib/src/from-idl/toString.js +18 -0
- package/build/lib/src/from-idl/webidl2-utils.d.ts +20 -0
- package/build/lib/src/from-idl/webidl2-utils.js +84 -0
- package/build/lib/src/idl.d.ts +404 -0
- package/build/lib/src/idl.js +1015 -0
- package/build/lib/src/idlize.d.ts +4 -0
- package/build/lib/src/idlize.js +52 -0
- package/build/lib/src/index.d.ts +34 -0
- package/build/lib/src/index.js +48 -0
- package/build/lib/src/inheritance.d.ts +16 -0
- package/build/lib/src/inheritance.js +76 -0
- package/build/lib/src/languageSpecificKeywords.d.ts +5 -0
- package/build/lib/src/languageSpecificKeywords.js +51 -0
- package/build/lib/src/library.d.ts +67 -0
- package/build/lib/src/library.js +190 -0
- package/build/lib/src/options.d.ts +11 -0
- package/build/lib/src/options.js +16 -0
- package/build/lib/src/peer-generation/PrimitiveType.d.ts +24 -0
- package/build/lib/src/peer-generation/PrimitiveType.js +52 -0
- package/build/lib/src/peer-generation/ReferenceResolver.d.ts +9 -0
- package/build/lib/src/peer-generation/ReferenceResolver.js +37 -0
- package/build/lib/src/peer-generation/idl/IdlNameConvertor.d.ts +28 -0
- package/build/lib/src/peer-generation/idl/IdlNameConvertor.js +82 -0
- package/build/lib/src/peer-generation/idl/common.d.ts +9 -0
- package/build/lib/src/peer-generation/idl/common.js +70 -0
- package/build/lib/src/peer-generation/unions.d.ts +29 -0
- package/build/lib/src/peer-generation/unions.js +111 -0
- package/build/lib/src/rand_utils.d.ts +6 -0
- package/build/lib/src/rand_utils.js +100 -0
- package/build/lib/src/util.d.ts +75 -0
- package/build/lib/src/util.js +622 -0
- package/package.json +49 -0
- package/webidl2.js/LICENSE +21 -0
- package/webidl2.js/README.md +827 -0
- package/webidl2.js/dist/package.json +3 -0
- package/webidl2.js/dist/webidl2.js +4547 -0
- package/webidl2.js/package.json +55 -0
|
@@ -0,0 +1,329 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2024 Huawei Device Co., Ltd.
|
|
3
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
* you may not use this file except in compliance with the License.
|
|
5
|
+
* You may obtain a copy of the License at
|
|
6
|
+
*
|
|
7
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
*
|
|
9
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
* See the License for the specific language governing permissions and
|
|
13
|
+
* limitations under the License.
|
|
14
|
+
*/
|
|
15
|
+
import { IndentedPrinter } from "../../IndentedPrinter";
|
|
16
|
+
import { LambdaExpression, MethodModifier } from "../LanguageWriter";
|
|
17
|
+
import { TSCastExpression, TSLanguageWriter } from "./TsLanguageWriter";
|
|
18
|
+
import { getExtAttribute, IDLI32Type, IDLThisType } from '../../idl';
|
|
19
|
+
import { AggregateConvertor, ArrayConvertor, CustomTypeConvertor, InterfaceConvertor, MaterializedClassConvertor, OptionConvertor, UnionConvertor } from "../ArgConvertors";
|
|
20
|
+
import * as idl from '../../idl';
|
|
21
|
+
import { convertDeclaration } from "../nameConvertor";
|
|
22
|
+
import { createDeclarationNameConvertor } from "../../peer-generation/idl/IdlNameConvertor";
|
|
23
|
+
import { Language } from "../../Language";
|
|
24
|
+
import { RuntimeType } from "../common";
|
|
25
|
+
import { throwException } from "../../util";
|
|
26
|
+
////////////////////////////////////////////////////////////////
|
|
27
|
+
// STATEMENTS //
|
|
28
|
+
////////////////////////////////////////////////////////////////
|
|
29
|
+
export class EtsAssignStatement {
|
|
30
|
+
constructor(variableName, type, expression, isDeclared = true, isConst = true) {
|
|
31
|
+
this.variableName = variableName;
|
|
32
|
+
this.type = type;
|
|
33
|
+
this.expression = expression;
|
|
34
|
+
this.isDeclared = isDeclared;
|
|
35
|
+
this.isConst = isConst;
|
|
36
|
+
}
|
|
37
|
+
write(writer) {
|
|
38
|
+
if (this.isDeclared) {
|
|
39
|
+
const typeClause = this.type !== undefined ? `: ${writer.getNodeName(this.type)}` : '';
|
|
40
|
+
const maybeAssign = this.expression !== undefined ? " = " : "";
|
|
41
|
+
const initValue = this.expression !== undefined ? this.expression : writer.makeString("");
|
|
42
|
+
writer.print(`${this.isConst ? "const" : "let"} ${this.variableName} ${typeClause}${maybeAssign}${initValue.asString()}`);
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
writer.print(`${this.variableName} = ${this.expression.asString()}`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
class ArkTSMapForEachStatement {
|
|
50
|
+
constructor(map, key, value, op) {
|
|
51
|
+
this.map = map;
|
|
52
|
+
this.key = key;
|
|
53
|
+
this.value = value;
|
|
54
|
+
this.op = op;
|
|
55
|
+
}
|
|
56
|
+
write(writer) {
|
|
57
|
+
writer.print(`// TODO: map serialization not implemented`);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
export class ArkTSEnumEntityStatement {
|
|
61
|
+
constructor(enumEntity, isExport) {
|
|
62
|
+
this.enumEntity = enumEntity;
|
|
63
|
+
this.isExport = isExport;
|
|
64
|
+
}
|
|
65
|
+
write(writer) {
|
|
66
|
+
const enumName = convertDeclaration(createDeclarationNameConvertor(Language.ARKTS), this.enumEntity);
|
|
67
|
+
const members = this.enumEntity.elements
|
|
68
|
+
.flatMap((member, index) => {
|
|
69
|
+
var _a;
|
|
70
|
+
const initText = (_a = member.initializer) !== null && _a !== void 0 ? _a : index;
|
|
71
|
+
const isTypeString = typeof initText !== "number";
|
|
72
|
+
const originalName = getExtAttribute(member, idl.IDLExtendedAttributes.OriginalEnumMemberName);
|
|
73
|
+
const res = [{
|
|
74
|
+
name: member.name,
|
|
75
|
+
alias: undefined,
|
|
76
|
+
stringId: isTypeString ? initText : undefined,
|
|
77
|
+
numberId: initText
|
|
78
|
+
}];
|
|
79
|
+
if (originalName !== undefined) {
|
|
80
|
+
res.push({
|
|
81
|
+
name: originalName,
|
|
82
|
+
alias: undefined,
|
|
83
|
+
stringId: isTypeString ? initText : undefined,
|
|
84
|
+
numberId: initText
|
|
85
|
+
});
|
|
86
|
+
//TODO: enums do not support member aliases
|
|
87
|
+
// res.push({
|
|
88
|
+
// name: originalName,
|
|
89
|
+
// alias: member.name,
|
|
90
|
+
// stringId: undefined,
|
|
91
|
+
// numberId: initText as number
|
|
92
|
+
// })
|
|
93
|
+
}
|
|
94
|
+
return res;
|
|
95
|
+
});
|
|
96
|
+
writer.writeEnum(enumName, members);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
export class ETSLambdaExpression extends LambdaExpression {
|
|
100
|
+
constructor(writer, convertor, signature, resolver, body) {
|
|
101
|
+
super(writer, signature, resolver, body);
|
|
102
|
+
this.convertor = convertor;
|
|
103
|
+
}
|
|
104
|
+
get statementHasSemicolon() {
|
|
105
|
+
return false;
|
|
106
|
+
}
|
|
107
|
+
asString() {
|
|
108
|
+
const params = this.signature.args.map((it, i) => {
|
|
109
|
+
const maybeOptional = idl.isOptionalType(it) ? "?" : "";
|
|
110
|
+
return `${this.signature.argName(i)}${maybeOptional}: ${this.convertor.convert(it)}`;
|
|
111
|
+
});
|
|
112
|
+
// Workaround to fix ArkTS error: SyntaxError: Unexpected token, arrow (=>)
|
|
113
|
+
// Issue: https://rnd-gitlab-msc.huawei.com/rus-os-team/virtual-machines-and-tools/panda/-/issues/21333
|
|
114
|
+
let isRetTypeCallback = idl.isCallback(this.signature.returnType);
|
|
115
|
+
if (idl.isReferenceType(this.signature.returnType)) {
|
|
116
|
+
const resolved = this.resolver.resolveTypeReference(idl.createReferenceType(this.signature.returnType.name, undefined, this.signature.returnType));
|
|
117
|
+
isRetTypeCallback = resolved !== undefined && idl.isCallback(resolved);
|
|
118
|
+
}
|
|
119
|
+
return `(${params.join(", ")})${isRetTypeCallback
|
|
120
|
+
? "" : `:${this.convertor.convert(this.signature.returnType)}`} => { ${this.bodyAsString()} }`;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
////////////////////////////////////////////////////////////////
|
|
124
|
+
// UTILS //
|
|
125
|
+
////////////////////////////////////////////////////////////////
|
|
126
|
+
export function generateTypeCheckerName(typeName) {
|
|
127
|
+
typeName = typeName.replaceAll('[]', 'BracketsArray')
|
|
128
|
+
.replaceAll('.', ''); // Todo: hack for namespaces
|
|
129
|
+
return `is${typeName.replaceAll('[]', 'Brackets')}`;
|
|
130
|
+
}
|
|
131
|
+
export function makeArrayTypeCheckCall(valueAccessor, typeName, writer) {
|
|
132
|
+
return writer.makeMethodCall("TypeChecker", generateTypeCheckerName(typeName), [writer.makeString(valueAccessor)
|
|
133
|
+
]);
|
|
134
|
+
}
|
|
135
|
+
////////////////////////////////////////////////////////////////
|
|
136
|
+
// WRITER //
|
|
137
|
+
////////////////////////////////////////////////////////////////
|
|
138
|
+
export class ETSLanguageWriter extends TSLanguageWriter {
|
|
139
|
+
constructor(printer, resolver, typeConvertor, arrayConvertor) {
|
|
140
|
+
super(printer, resolver, typeConvertor, Language.ARKTS);
|
|
141
|
+
this.arrayConvertor = arrayConvertor;
|
|
142
|
+
}
|
|
143
|
+
fork(options) {
|
|
144
|
+
var _a;
|
|
145
|
+
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);
|
|
146
|
+
}
|
|
147
|
+
writeNativeMethodDeclaration(name, signature) {
|
|
148
|
+
if (signature.returnType === IDLThisType) {
|
|
149
|
+
throw new Error('static method can not return this!');
|
|
150
|
+
}
|
|
151
|
+
this.writeMethodDeclaration(name, signature, [MethodModifier.STATIC, MethodModifier.NATIVE]);
|
|
152
|
+
}
|
|
153
|
+
makeAssign(variableName, type, expr, isDeclared = true, isConst = true) {
|
|
154
|
+
return new EtsAssignStatement(variableName, type, expr, isDeclared, isConst);
|
|
155
|
+
}
|
|
156
|
+
makeLambda(signature, body) {
|
|
157
|
+
return new ETSLambdaExpression(this, this.typeConvertor, signature, this.resolver, body);
|
|
158
|
+
}
|
|
159
|
+
makeMapForEach(map, key, value, op) {
|
|
160
|
+
return new ArkTSMapForEachStatement(map, key, value, op);
|
|
161
|
+
}
|
|
162
|
+
makeMapSize(map) {
|
|
163
|
+
return this.makeString(`${super.makeMapSize(map).asString()} as int32`); // TODO: cast really needed?
|
|
164
|
+
}
|
|
165
|
+
get supportedModifiers() {
|
|
166
|
+
return [MethodModifier.PUBLIC, MethodModifier.PRIVATE, MethodModifier.NATIVE, MethodModifier.STATIC];
|
|
167
|
+
}
|
|
168
|
+
makeUnsafeCast(convertor, param) {
|
|
169
|
+
if (idl.isEnum(convertor.idlType) && !param.endsWith(".value")) {
|
|
170
|
+
const isStringEnum = idl.isStringEnum(convertor.idlType);
|
|
171
|
+
return `(${param} as ${this.typeConvertor.convert(convertor.idlType)}).${isStringEnum ? 'ordinal' : 'value'}`;
|
|
172
|
+
}
|
|
173
|
+
return super.makeUnsafeCast(convertor, param);
|
|
174
|
+
}
|
|
175
|
+
runtimeType(param, valueType, value) {
|
|
176
|
+
super.runtimeType(param, valueType, value);
|
|
177
|
+
}
|
|
178
|
+
makeUnionVariantCast(value, type, convertor, index) {
|
|
179
|
+
return this.makeString(`${value} as ${type}`);
|
|
180
|
+
}
|
|
181
|
+
enumFromOrdinal(value, enumEntry) {
|
|
182
|
+
const enumName = this.getNodeName(enumEntry);
|
|
183
|
+
return this.makeString(`${value.asString()} as ${enumName}`);
|
|
184
|
+
}
|
|
185
|
+
ordinalFromEnum(value, _) {
|
|
186
|
+
return this.makeCast(this.makeString(`${value.asString()}`), IDLI32Type);
|
|
187
|
+
}
|
|
188
|
+
makeDiscriminatorFromFields(convertor, value, accessors, duplicates) {
|
|
189
|
+
if (convertor instanceof AggregateConvertor
|
|
190
|
+
|| convertor instanceof InterfaceConvertor
|
|
191
|
+
|| convertor instanceof MaterializedClassConvertor
|
|
192
|
+
|| convertor instanceof CustomTypeConvertor) {
|
|
193
|
+
return this.instanceOf(convertor, value, duplicates);
|
|
194
|
+
}
|
|
195
|
+
return this.makeString(`${value} instanceof ${convertor.targetType(this)}`);
|
|
196
|
+
}
|
|
197
|
+
makeValueFromOption(value, destinationConvertor) {
|
|
198
|
+
if (idl.isEnum(this.resolver.toDeclaration(destinationConvertor.nativeType()))) {
|
|
199
|
+
return this.makeCast(this.makeString(value), destinationConvertor.idlType);
|
|
200
|
+
}
|
|
201
|
+
return super.makeValueFromOption(value, destinationConvertor);
|
|
202
|
+
}
|
|
203
|
+
makeCallIsResource(value) {
|
|
204
|
+
return this.makeString(`isResource(${value})`);
|
|
205
|
+
}
|
|
206
|
+
makeEnumEntity(enumEntity, isExport) {
|
|
207
|
+
return new ArkTSEnumEntityStatement(enumEntity, isExport);
|
|
208
|
+
}
|
|
209
|
+
getObjectAccessor(convertor, value, args) {
|
|
210
|
+
return super.getObjectAccessor(convertor, value, args);
|
|
211
|
+
}
|
|
212
|
+
writeMethodCall(receiver, method, params, nullable = false) {
|
|
213
|
+
// ArkTS does not support - 'this.?'
|
|
214
|
+
super.writeMethodCall(receiver, method, params, nullable && receiver !== "this");
|
|
215
|
+
}
|
|
216
|
+
writeProperty(propName, propType) {
|
|
217
|
+
throw new Error("writeProperty for ArkTS is not implemented yet.");
|
|
218
|
+
}
|
|
219
|
+
makeEnumCast(value, _unsafe, convertor) {
|
|
220
|
+
if (convertor === undefined) {
|
|
221
|
+
throwException(`The makeEnumCast function required EnumConvertor`);
|
|
222
|
+
}
|
|
223
|
+
const decl = this.resolver.toDeclaration(convertor.nativeType());
|
|
224
|
+
if (!idl.isEnum(decl)) {
|
|
225
|
+
throwException(`Declaration type must be Enum`);
|
|
226
|
+
}
|
|
227
|
+
return this.makeCast(this.makeString(`${value}${idl.isStringEnum(decl) ? "" : ".valueOf()"}`), IDLI32Type).asString();
|
|
228
|
+
}
|
|
229
|
+
makeUnionVariantCondition(convertor, valueName, valueType, type, convertorIndex, runtimeTypeIndex) {
|
|
230
|
+
if (idl.isEnum(this.resolver.toDeclaration(convertor.nativeType()))) {
|
|
231
|
+
return this.instanceOf(convertor, valueName);
|
|
232
|
+
}
|
|
233
|
+
// TODO: in ArkTS SerializerBase.runtimeType returns RuntimeType.OBJECT for enum type and not RuntimeType.NUMBER as in TS
|
|
234
|
+
if (convertor instanceof UnionConvertor || convertor instanceof OptionConvertor) {
|
|
235
|
+
// Unwrapping of type
|
|
236
|
+
const idlType = convertor instanceof UnionConvertor
|
|
237
|
+
? convertor.nativeType().types[runtimeTypeIndex]
|
|
238
|
+
: idl.maybeUnwrapOptionalType(convertor.nativeType());
|
|
239
|
+
if (idlType !== undefined && idl.isReferenceType(idlType)) {
|
|
240
|
+
const resolved = this.resolver.resolveTypeReference(idl.createReferenceType(idlType.name, undefined, idlType));
|
|
241
|
+
type = resolved != undefined && idl.isEnum(resolved) ? RuntimeType[RuntimeType.OBJECT] : type;
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
return super.makeUnionVariantCondition(convertor, valueName, valueType, type, convertorIndex);
|
|
245
|
+
}
|
|
246
|
+
makeCastCustomObject(customName, isGenericType) {
|
|
247
|
+
if (isGenericType) {
|
|
248
|
+
return this.makeCast(this.makeString(customName), idl.IDLObjectType);
|
|
249
|
+
}
|
|
250
|
+
return super.makeCastCustomObject(customName, isGenericType);
|
|
251
|
+
}
|
|
252
|
+
makeHasOwnProperty(value, valueTypeName, property, propertyTypeName) {
|
|
253
|
+
return this.makeNaryOp("&&", [
|
|
254
|
+
this.makeString(`${value} instanceof ${valueTypeName}`),
|
|
255
|
+
this.makeString(`isInstanceOf("${propertyTypeName}", ${value}.${property})`)
|
|
256
|
+
]);
|
|
257
|
+
}
|
|
258
|
+
makeEquals(args) {
|
|
259
|
+
// TODO: Error elimination: 'TypeError: Both operands have to be reference types'
|
|
260
|
+
// the '==' operator must be used when one of the operands is a reference
|
|
261
|
+
return super.makeNaryOp('==', args);
|
|
262
|
+
}
|
|
263
|
+
makeDiscriminatorConvertor(convertor, value, index) {
|
|
264
|
+
return this.instanceOf(convertor, value);
|
|
265
|
+
// Or this ????????
|
|
266
|
+
// return this.discriminatorFromExpressions(value, RuntimeType.OBJECT, [
|
|
267
|
+
// makeEnumTypeCheckerCall(value, this.getNodeName(convertor.idlType), this)
|
|
268
|
+
// ])
|
|
269
|
+
}
|
|
270
|
+
castToInt(value, bitness) {
|
|
271
|
+
return `${value} as int32`; // FIXME: is there int8 in ARKTS?
|
|
272
|
+
}
|
|
273
|
+
castToBoolean(value) { return `${value} ? 1 : 0`; }
|
|
274
|
+
instanceOf(convertor, value, duplicateMembers) {
|
|
275
|
+
if (convertor instanceof CustomTypeConvertor) {
|
|
276
|
+
return makeInterfaceTypeCheckerCall(value, this.getNodeName(convertor.idlType), [], duplicateMembers, this);
|
|
277
|
+
}
|
|
278
|
+
if (convertor instanceof InterfaceConvertor || convertor instanceof MaterializedClassConvertor) {
|
|
279
|
+
return makeInterfaceTypeCheckerCall(value, this.getNodeName(convertor.idlType), convertor.declaration.properties.filter(it => !it.isStatic).map(it => it.name), duplicateMembers, this);
|
|
280
|
+
}
|
|
281
|
+
if (convertor instanceof AggregateConvertor) {
|
|
282
|
+
return makeInterfaceTypeCheckerCall(value, convertor.aliasName !== undefined ? convertor.aliasName : this.getNodeName(convertor.idlType), convertor.members.map(it => it[0]), duplicateMembers, this);
|
|
283
|
+
}
|
|
284
|
+
if (convertor instanceof ArrayConvertor) {
|
|
285
|
+
return makeArrayTypeCheckCall(value, this.arrayConvertor.convert(convertor.idlType), this);
|
|
286
|
+
}
|
|
287
|
+
if (idl.isEnum(this.resolver.toDeclaration(convertor.nativeType()))) {
|
|
288
|
+
return makeEnumTypeCheckerCall(value, this.getNodeName(convertor.idlType), this);
|
|
289
|
+
}
|
|
290
|
+
return super.instanceOf(convertor, value, duplicateMembers);
|
|
291
|
+
}
|
|
292
|
+
typeInstanceOf(type, value, members) {
|
|
293
|
+
if (!members || members.length === 0) {
|
|
294
|
+
throw new Error("At least one member needs to provided to pass it to TypeChecker!");
|
|
295
|
+
}
|
|
296
|
+
const prop = members[0];
|
|
297
|
+
// Use the same typeInstanceOf<T>(...) method to compile the ETS code by two compilers ArkTS and TS
|
|
298
|
+
return this.makeString(`TypeChecker.typeInstanceOf<${this.getNodeName(type)}>(value, "${prop}")`);
|
|
299
|
+
}
|
|
300
|
+
makeTypeCast(value, type, options) {
|
|
301
|
+
return this.makeString(`TypeChecker.typeCast<${this.getNodeName(type)}>(value)`);
|
|
302
|
+
}
|
|
303
|
+
makeCast(value, type, options) {
|
|
304
|
+
var _a;
|
|
305
|
+
return new TSCastExpression(value, `${this.getNodeName(type)}`, (_a = options === null || options === void 0 ? void 0 : options.unsafe) !== null && _a !== void 0 ? _a : false);
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
const builtInInterfaceTypes = new Map([
|
|
309
|
+
["Resource",
|
|
310
|
+
(writer, value) => writer.makeCallIsResource(value)],
|
|
311
|
+
["Object",
|
|
312
|
+
(writer, value) => writer.makeCallIsObject(value)],
|
|
313
|
+
["ArrayBuffer",
|
|
314
|
+
(writer, value) => writer.makeCallIsArrayBuffer(value)]
|
|
315
|
+
]);
|
|
316
|
+
function makeInterfaceTypeCheckerCall(valueAccessor, interfaceName, allFields, duplicates, writer) {
|
|
317
|
+
if (builtInInterfaceTypes.has(interfaceName)) {
|
|
318
|
+
return builtInInterfaceTypes.get(interfaceName)(writer, valueAccessor);
|
|
319
|
+
}
|
|
320
|
+
return writer.makeMethodCall("TypeChecker", generateTypeCheckerName(interfaceName), [writer.makeString(valueAccessor),
|
|
321
|
+
...allFields.map(it => {
|
|
322
|
+
return writer.makeString(duplicates.has(it) ? "true" : "false");
|
|
323
|
+
})
|
|
324
|
+
]);
|
|
325
|
+
}
|
|
326
|
+
export function makeEnumTypeCheckerCall(valueAccessor, enumName, writer) {
|
|
327
|
+
return writer.makeMethodCall("TypeChecker", generateTypeCheckerName(enumName), [writer.makeString(valueAccessor)]);
|
|
328
|
+
}
|
|
329
|
+
//# sourceMappingURL=ETSLanguageWriter.js.map
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { IndentedPrinter } from "../../IndentedPrinter";
|
|
2
|
+
import { AssignStatement, FieldModifier, LanguageExpression, LanguageStatement, LanguageWriter, MakeCastOptions, Method, MethodModifier, MethodSignature, ObjectArgs } from "../LanguageWriter";
|
|
3
|
+
import { CLikeLanguageWriter } from "./CLikeLanguageWriter";
|
|
4
|
+
import * as idl from '../../idl';
|
|
5
|
+
import { ArgConvertor, BaseArgConvertor } from "../ArgConvertors";
|
|
6
|
+
import { IdlNameConvertor } from "../nameConvertor";
|
|
7
|
+
import { RuntimeType } from "../common";
|
|
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
|
+
export declare class JavaCastExpression implements LanguageExpression {
|
|
15
|
+
value: LanguageExpression;
|
|
16
|
+
type: string;
|
|
17
|
+
private unsafe;
|
|
18
|
+
constructor(value: LanguageExpression, type: string, unsafe?: boolean);
|
|
19
|
+
asString(): string;
|
|
20
|
+
}
|
|
21
|
+
export declare class JavaAssignStatement extends AssignStatement {
|
|
22
|
+
variableName: string;
|
|
23
|
+
type: idl.IDLType | undefined;
|
|
24
|
+
expression: LanguageExpression;
|
|
25
|
+
isDeclared: boolean;
|
|
26
|
+
protected isConst: boolean;
|
|
27
|
+
constructor(variableName: string, type: idl.IDLType | undefined, expression: LanguageExpression, isDeclared?: boolean, isConst?: boolean);
|
|
28
|
+
write(writer: LanguageWriter): void;
|
|
29
|
+
}
|
|
30
|
+
export declare class JavaLanguageWriter extends CLikeLanguageWriter {
|
|
31
|
+
protected typeConvertor: IdlNameConvertor;
|
|
32
|
+
constructor(printer: IndentedPrinter, resolver: ReferenceResolver, typeConvertor: IdlNameConvertor);
|
|
33
|
+
getNodeName(type: idl.IDLNode): string;
|
|
34
|
+
fork(options?: {
|
|
35
|
+
resolver?: ReferenceResolver;
|
|
36
|
+
}): LanguageWriter;
|
|
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;
|
|
39
|
+
writeMethodCall(receiver: string, method: string, params: string[], nullable?: boolean): void;
|
|
40
|
+
writeFieldDeclaration(name: string, type: idl.IDLType, modifiers: FieldModifier[] | undefined, optional: boolean, initExpr?: LanguageExpression): void;
|
|
41
|
+
writeNativeMethodDeclaration(name: string, signature: MethodSignature): void;
|
|
42
|
+
writeConstructorImplementation(className: string, signature: MethodSignature, op: (writer: this) => void, superCall?: Method, modifiers?: MethodModifier[]): void;
|
|
43
|
+
writeProperty(propName: string, propType: idl.IDLType): void;
|
|
44
|
+
makeAssign(variableName: string, type: idl.IDLType | undefined, expr: LanguageExpression, isDeclared?: boolean, isConst?: boolean): LanguageStatement;
|
|
45
|
+
makeLambda(signature: MethodSignature, body?: LanguageStatement[]): LanguageExpression;
|
|
46
|
+
makeReturn(expr: LanguageExpression): LanguageStatement;
|
|
47
|
+
makeCheckOptional(optional: LanguageExpression, doStatement: LanguageStatement): LanguageStatement;
|
|
48
|
+
makeDefinedCheck(value: string): LanguageExpression;
|
|
49
|
+
makeLoop(counter: string, limit: string, statement?: LanguageStatement): LanguageStatement;
|
|
50
|
+
makeMapForEach(map: string, key: string, value: string, op: () => void): LanguageStatement;
|
|
51
|
+
makeMapSize(map: string): LanguageExpression;
|
|
52
|
+
makeCast(value: LanguageExpression, type: idl.IDLType, options?: MakeCastOptions): LanguageExpression;
|
|
53
|
+
makeStatement(expr: LanguageExpression): LanguageStatement;
|
|
54
|
+
makeUnionSelector(value: string, valueType: string): LanguageStatement;
|
|
55
|
+
makeUnionVariantCondition(_convertor: ArgConvertor, _valueName: string, valueType: string, _type: string, convertorIndex: number): LanguageExpression;
|
|
56
|
+
makeUnionVariantCast(value: string, type: string, convertor: ArgConvertor, index: number): LanguageExpression;
|
|
57
|
+
makeUnionTypeDefaultInitializer(): LanguageExpression;
|
|
58
|
+
writePrintLog(message: string): void;
|
|
59
|
+
mapIDLContainerType(type: idl.IDLContainerType): string;
|
|
60
|
+
applyToObject(p: BaseArgConvertor, param: string, value: string, args?: ObjectArgs): LanguageStatement;
|
|
61
|
+
getObjectAccessor(convertor: ArgConvertor, value: string, args?: ObjectArgs): string;
|
|
62
|
+
makeUndefined(): LanguageExpression;
|
|
63
|
+
makeRuntimeType(rt: RuntimeType): LanguageExpression;
|
|
64
|
+
makeRuntimeTypeGetterCall(value: string): LanguageExpression;
|
|
65
|
+
makeMapInsert(keyAccessor: string, key: string, valueAccessor: string, value: string): LanguageStatement;
|
|
66
|
+
getTagType(): idl.IDLType;
|
|
67
|
+
getRuntimeType(): idl.IDLType;
|
|
68
|
+
makeTupleAssign(receiver: string, tupleFields: string[]): LanguageStatement;
|
|
69
|
+
get supportedModifiers(): MethodModifier[];
|
|
70
|
+
get supportedFieldModifiers(): FieldModifier[];
|
|
71
|
+
makeArrayInit(type: idl.IDLContainerType, size?: number): LanguageExpression;
|
|
72
|
+
makeClassInit(type: idl.IDLType, paramenters: LanguageExpression[]): LanguageExpression;
|
|
73
|
+
makeMapInit(type: idl.IDLType): LanguageExpression;
|
|
74
|
+
makeTupleAccess(value: string, index: number): LanguageExpression;
|
|
75
|
+
enumFromOrdinal(value: LanguageExpression, _: idl.IDLType): LanguageExpression;
|
|
76
|
+
ordinalFromEnum(value: LanguageExpression, _: idl.IDLType): LanguageExpression;
|
|
77
|
+
makeValueFromOption(value: string): LanguageExpression;
|
|
78
|
+
runtimeType(param: ArgConvertor, valueType: string, value: string): void;
|
|
79
|
+
makeEnumCast(enumName: string, _unsafe: boolean, _convertor: ArgConvertor | undefined): string;
|
|
80
|
+
castToBoolean(value: string): string;
|
|
81
|
+
makeLengthSerializer(serializer: string, value: string): LanguageStatement | undefined;
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=JavaLanguageWriter.d.ts.map
|