1/* 2 * Copyright (c) 2025 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 arkts from '@koalaui/libarkts'; 17import { PluginContext, Plugins } from '../../../common/plugin-context'; 18import { ProgramVisitor } from '../../../common/program-visitor'; 19import { EXTERNAL_SOURCE_PREFIX_NAMES } from '../../../common/predefines'; 20import { PositionalIdTracker } from '../../../memo-plugins/utils'; 21import { ParameterTransformer } from '../../../memo-plugins/parameter-transformer'; 22import { ReturnTransformer } from '../../../memo-plugins/return-transformer'; 23import { SignatureTransformer } from '../../../memo-plugins/signature-transformer'; 24import { FunctionTransformer } from '../../../memo-plugins/function-transformer'; 25 26/** 27 * AfterCheck unmemoizeTransform with no recheck AST. 28 */ 29export const memoNoRecheck: Plugins = { 30 name: 'memo-no-recheck', 31 checked(this: PluginContext): arkts.EtsScript | undefined { 32 const contextPtr = arkts.arktsGlobal.compilerContext?.peer ?? this.getContextPtr(); 33 if (!!contextPtr) { 34 let program = arkts.getOrUpdateGlobalContext(contextPtr).program; 35 let script = program.astNode; 36 const positionalIdTracker = new PositionalIdTracker(arkts.getFileName(), false); 37 const parameterTransformer = new ParameterTransformer({ 38 positionalIdTracker, 39 }); 40 const returnTransformer = new ReturnTransformer(); 41 const signatureTransformer = new SignatureTransformer(); 42 const functionTransformer = new FunctionTransformer({ 43 positionalIdTracker, 44 parameterTransformer, 45 returnTransformer, 46 signatureTransformer, 47 }); 48 const programVisitor = new ProgramVisitor({ 49 pluginName: memoNoRecheck.name, 50 state: arkts.Es2pandaContextState.ES2PANDA_STATE_CHECKED, 51 visitors: [functionTransformer], 52 skipPrefixNames: EXTERNAL_SOURCE_PREFIX_NAMES, 53 pluginContext: this, 54 }); 55 program = programVisitor.programVisitor(program); 56 script = program.astNode; 57 return script; 58 } 59 }, 60}; 61