1/* 2 * Copyright (c) 2024 - 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 { ArkClass, ArkFile } from 'arkanalyzer'; 17import { ClassMatcher, isMatchedFile, isMatchedNamespace, isMatchedClass } from '../Matchers'; 18 19export function matchClass(arkFiles: ArkFile[], matcher: ClassMatcher, callback: Function): void { 20 for (let arkFile of arkFiles) { 21 if (matcher.file && !isMatchedFile(arkFile, matcher.file)) { 22 continue; 23 } 24 for (const ns of arkFile.getAllNamespacesUnderThisFile()) { 25 if (matcher.namespace && !isMatchedNamespace(ns, matcher.namespace)) { 26 continue; 27 } 28 matchClassProcess(matcher, ns.getClasses(), callback); 29 } 30 matchClassProcess(matcher, arkFile.getClasses(), callback); 31 } 32} 33 34function matchClassProcess(matcher: ClassMatcher, classes: ArkClass[], callback: Function): void { 35 for (const arkClass of classes) { 36 if (isMatchedClass(arkClass, [matcher])) { 37 callback(arkClass); 38 } 39 } 40} 41