idlize
59 строк · 2.0 Кб
1/*
2* Copyright (c) 2022-2023 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
16import * as ts from 'ohos-typescript'17import { AbstractVisitor } from "./AbstractVisitor"18import { Importer } from './Importer'19import { IssueTable, adaptorComponentName } from './utils'20import { id } from './ApiUtils'21
22
23export class NewTransformer extends AbstractVisitor {24
25private static constructableEts = ['Path', 'Rect', 'Circle', 'Ellipse', 'Line', 'Polygon', 'Polyline', 'Shape']26
27constructor(28sourceFile: ts.SourceFile,29ctx: ts.TransformationContext,30private importer: Importer,31private issueTable: IssueTable32) {33super(sourceFile, ctx)34}35
36visitor(beforeChildren: ts.Node): ts.Node {37const node = this.visitEachChild(beforeChildren)38
39if (ts.isNewExpression(node)) {40const constructible = node.expression41if (ts.isIdentifier(constructible)) {42const component = ts.idText(constructible)43if (NewTransformer.constructableEts.includes(component)) {44const arkComponent = adaptorComponentName(component)45this.importer.addAdaptorImport(arkComponent)46
47return ts.factory.updateNewExpression(48node,49id(arkComponent),50node.typeArguments,51node.arguments,52)53}54}55}56
57return node58}59}
60