17c804472Sopenharmony_ci/* 27c804472Sopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd. 37c804472Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 47c804472Sopenharmony_ci * you may not use this file except in compliance with the License. 57c804472Sopenharmony_ci * You may obtain a copy of the License at 67c804472Sopenharmony_ci * 77c804472Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 87c804472Sopenharmony_ci * 97c804472Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 107c804472Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 117c804472Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 127c804472Sopenharmony_ci * See the License for the specific language governing permissions and 137c804472Sopenharmony_ci * limitations under the License. 147c804472Sopenharmony_ci */ 157c804472Sopenharmony_ci 167c804472Sopenharmony_ciimport { isComputedPropertyName } from 'typescript'; 177c804472Sopenharmony_ciimport type { MethodDeclaration, Node, SourceFile } from 'typescript'; 187c804472Sopenharmony_ciimport { getFunctionAndMethodReturnInfo, getModifiers, getParameter, getPropertyName } from '../common/commonUtils'; 197c804472Sopenharmony_ciimport type { ParameterEntity, ReturnTypeEntity } from '../common/commonUtils'; 207c804472Sopenharmony_ci 217c804472Sopenharmony_ci/** 227c804472Sopenharmony_ci * get method info 237c804472Sopenharmony_ci * @param node 247c804472Sopenharmony_ci * @param sourceFile 257c804472Sopenharmony_ci * @returns 267c804472Sopenharmony_ci */ 277c804472Sopenharmony_ciexport function getMethodDeclaration(node: Node, sourceFile: SourceFile): MethodEntity { 287c804472Sopenharmony_ci const methodNode = node as MethodDeclaration; 297c804472Sopenharmony_ci const functionName = { 307c804472Sopenharmony_ci name: '', 317c804472Sopenharmony_ci expressionKind: -1, 327c804472Sopenharmony_ci kind: -1 337c804472Sopenharmony_ci }; 347c804472Sopenharmony_ci 357c804472Sopenharmony_ci const args: Array<ParameterEntity> = []; 367c804472Sopenharmony_ci let modifiers: Array<number> = []; 377c804472Sopenharmony_ci 387c804472Sopenharmony_ci if (methodNode.modifiers !== undefined) { 397c804472Sopenharmony_ci modifiers = getModifiers(methodNode.modifiers); 407c804472Sopenharmony_ci } 417c804472Sopenharmony_ci 427c804472Sopenharmony_ci const returnType = getFunctionAndMethodReturnInfo(methodNode, sourceFile); 437c804472Sopenharmony_ci functionName.name = getPropertyName(methodNode.name, sourceFile); 447c804472Sopenharmony_ci if (isComputedPropertyName(methodNode.name)) { 457c804472Sopenharmony_ci functionName.expressionKind = methodNode.name.expression.kind; 467c804472Sopenharmony_ci } 477c804472Sopenharmony_ci 487c804472Sopenharmony_ci functionName.kind = methodNode.name.kind; 497c804472Sopenharmony_ci 507c804472Sopenharmony_ci methodNode.parameters.forEach(value => { 517c804472Sopenharmony_ci args.push(getParameter(value, sourceFile)); 527c804472Sopenharmony_ci }); 537c804472Sopenharmony_ci 547c804472Sopenharmony_ci return { 557c804472Sopenharmony_ci modifiers: modifiers, 567c804472Sopenharmony_ci functionName: functionName, 577c804472Sopenharmony_ci returnType: returnType, 587c804472Sopenharmony_ci args: args 597c804472Sopenharmony_ci }; 607c804472Sopenharmony_ci} 617c804472Sopenharmony_ci 627c804472Sopenharmony_ciexport interface StaticMethodEntity { 637c804472Sopenharmony_ci className: string; 647c804472Sopenharmony_ci methodEntity: MethodEntity; 657c804472Sopenharmony_ci} 667c804472Sopenharmony_ci 677c804472Sopenharmony_ciexport interface MethodEntity { 687c804472Sopenharmony_ci modifiers: Array<number>; 697c804472Sopenharmony_ci functionName: FunctionNameEntity; 707c804472Sopenharmony_ci returnType: ReturnTypeEntity; 717c804472Sopenharmony_ci args: Array<ParameterEntity>; 727c804472Sopenharmony_ci} 737c804472Sopenharmony_ci 747c804472Sopenharmony_ciexport interface FunctionNameEntity { 757c804472Sopenharmony_ci name: string; 767c804472Sopenharmony_ci expressionKind: number; 777c804472Sopenharmony_ci kind: number; 787c804472Sopenharmony_ci} 79