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 { 177c804472Sopenharmony_ci isCallSignatureDeclaration, 187c804472Sopenharmony_ci isConstructorDeclaration, 197c804472Sopenharmony_ci isHeritageClause, 207c804472Sopenharmony_ci isIndexSignatureDeclaration, 217c804472Sopenharmony_ci isMethodSignature, 227c804472Sopenharmony_ci isPropertySignature, 237c804472Sopenharmony_ci isTypeParameterDeclaration 247c804472Sopenharmony_ci} from 'typescript'; 257c804472Sopenharmony_ciimport type { InterfaceDeclaration, SourceFile } from 'typescript'; 267c804472Sopenharmony_ciimport { getExportKeyword } from '../common/commonUtils'; 277c804472Sopenharmony_ciimport { getCallSignatureDeclaration } from './callSignatureDeclaration'; 287c804472Sopenharmony_ciimport type { CallSignatureEntity } from './callSignatureDeclaration'; 297c804472Sopenharmony_ciimport { getConstructorDeclaration } from './constructorDeclaration'; 307c804472Sopenharmony_ciimport type { ConstructorEntity } from './constructorDeclaration'; 317c804472Sopenharmony_ciimport { getHeritageClauseDeclaration } from './heritageClauseDeclaration'; 327c804472Sopenharmony_ciimport type { HeritageClauseEntity } from './heritageClauseDeclaration'; 337c804472Sopenharmony_ciimport { getIndexSignatureDeclaration } from './indexSignatureDeclaration'; 347c804472Sopenharmony_ciimport type { IndexSignatureEntity } from './indexSignatureDeclaration'; 357c804472Sopenharmony_ciimport { getMethodSignatureDeclaration } from './methodSignatureDeclaration'; 367c804472Sopenharmony_ciimport type { MethodSignatureEntity } from './methodSignatureDeclaration'; 377c804472Sopenharmony_ciimport { getPropertySignatureDeclaration } from './propertySignatureDeclaration'; 387c804472Sopenharmony_ciimport type { PropertySignatureEntity } from './propertySignatureDeclaration'; 397c804472Sopenharmony_ciimport { getTypeParameterDeclaration } from './typeParameterDeclaration'; 407c804472Sopenharmony_ciimport type { TypeParameterEntity } from './typeParameterDeclaration'; 417c804472Sopenharmony_ci 427c804472Sopenharmony_ciinterface SubstepInterfaceEntity { 437c804472Sopenharmony_ci interfaceName: string; 447c804472Sopenharmony_ci heritageClauses: Array<HeritageClauseEntity>; 457c804472Sopenharmony_ci typeParameters: Array<TypeParameterEntity>; 467c804472Sopenharmony_ci interfaceConstructors: Array<Array<ConstructorEntity>>; 477c804472Sopenharmony_ci interfaceMethodSignature: Map<string, Array<MethodSignatureEntity>>; 487c804472Sopenharmony_ci interfacePropertySignatures: Array<PropertySignatureEntity>; 497c804472Sopenharmony_ci callSignatures: Array<CallSignatureEntity>; 507c804472Sopenharmony_ci indexSignature: Array<IndexSignatureEntity>; 517c804472Sopenharmony_ci} 527c804472Sopenharmony_ci 537c804472Sopenharmony_ciinterface SubstepGetClassparam { 547c804472Sopenharmony_ci interfaceNode: InterfaceDeclaration; 557c804472Sopenharmony_ci sourceFile: SourceFile; 567c804472Sopenharmony_ci heritageClauses: Array<HeritageClauseEntity>; 577c804472Sopenharmony_ci} 587c804472Sopenharmony_ciexport interface InterfaceEntity { 597c804472Sopenharmony_ci interfaceName: string; 607c804472Sopenharmony_ci typeParameters: Array<TypeParameterEntity>; 617c804472Sopenharmony_ci heritageClauses: Array<HeritageClauseEntity>; 627c804472Sopenharmony_ci interfaceConstructors: Array<Array<ConstructorEntity>>; 637c804472Sopenharmony_ci interfaceMethodSignature: Map<string, Array<MethodSignatureEntity>>; 647c804472Sopenharmony_ci interfacePropertySignatures: Array<PropertySignatureEntity>; 657c804472Sopenharmony_ci callSignatures: Array<CallSignatureEntity>; 667c804472Sopenharmony_ci exportModifiers: Array<number>; 677c804472Sopenharmony_ci indexSignature: Array<IndexSignatureEntity>; 687c804472Sopenharmony_ci} 697c804472Sopenharmony_ci 707c804472Sopenharmony_ci/** 717c804472Sopenharmony_ci * get interface info 727c804472Sopenharmony_ci * @param interfaceNode 737c804472Sopenharmony_ci * @param sourceFile 747c804472Sopenharmony_ci * @returns 757c804472Sopenharmony_ci */ 767c804472Sopenharmony_ciexport function getInterfaceDeclaration(interfaceNode: InterfaceDeclaration, sourceFile: SourceFile): InterfaceEntity { 777c804472Sopenharmony_ci let exportModifiers: Array<number> = []; 787c804472Sopenharmony_ci if (interfaceNode.modifiers !== undefined) { 797c804472Sopenharmony_ci exportModifiers = getExportKeyword(interfaceNode.modifiers); 807c804472Sopenharmony_ci } 817c804472Sopenharmony_ci 827c804472Sopenharmony_ci const heritageClauses: Array<HeritageClauseEntity> = []; 837c804472Sopenharmony_ci 847c804472Sopenharmony_ci if (interfaceNode.heritageClauses !== undefined) { 857c804472Sopenharmony_ci interfaceNode.heritageClauses.forEach(value => { 867c804472Sopenharmony_ci heritageClauses.push(getHeritageClauseDeclaration(value, sourceFile)); 877c804472Sopenharmony_ci }); 887c804472Sopenharmony_ci } 897c804472Sopenharmony_ci const SubstepInterfaceEntitys: SubstepInterfaceEntity = substepGetInterface({ 907c804472Sopenharmony_ci interfaceNode, 917c804472Sopenharmony_ci sourceFile, 927c804472Sopenharmony_ci heritageClauses 937c804472Sopenharmony_ci }); 947c804472Sopenharmony_ci 957c804472Sopenharmony_ci return { 967c804472Sopenharmony_ci ...SubstepInterfaceEntitys, 977c804472Sopenharmony_ci exportModifiers 987c804472Sopenharmony_ci }; 997c804472Sopenharmony_ci} 1007c804472Sopenharmony_ci 1017c804472Sopenharmony_ci/** 1027c804472Sopenharmony_ci * get some interface info 1037c804472Sopenharmony_ci * @param substepGetClassparam 1047c804472Sopenharmony_ci * @returns 1057c804472Sopenharmony_ci */ 1067c804472Sopenharmony_cifunction substepGetInterface(substepGetClassparam: SubstepGetClassparam): SubstepInterfaceEntity { 1077c804472Sopenharmony_ci const { interfaceNode, sourceFile, heritageClauses } = substepGetClassparam; 1087c804472Sopenharmony_ci const interfaceName = interfaceNode.name.escapedText.toString(); 1097c804472Sopenharmony_ci const interfaceConstructors: Array<Array<ConstructorEntity>> = []; 1107c804472Sopenharmony_ci const interfaceMethodSignature: Map<string, Array<MethodSignatureEntity>> = new Map< 1117c804472Sopenharmony_ci string, Array<MethodSignatureEntity> 1127c804472Sopenharmony_ci >(); 1137c804472Sopenharmony_ci const interfacePropertySignatures: Array<PropertySignatureEntity> = []; 1147c804472Sopenharmony_ci const callSignature: Array<CallSignatureEntity> = []; 1157c804472Sopenharmony_ci const typeParameters: Array<TypeParameterEntity> = []; 1167c804472Sopenharmony_ci const indexSignature: Array<IndexSignatureEntity> = []; 1177c804472Sopenharmony_ci interfaceNode.members.forEach(value => { 1187c804472Sopenharmony_ci if (isPropertySignature(value)) { 1197c804472Sopenharmony_ci interfacePropertySignatures.push(getPropertySignatureDeclaration(value, sourceFile)); 1207c804472Sopenharmony_ci } else if (isMethodSignature(value)) { 1217c804472Sopenharmony_ci const methodSignature = getMethodSignatureDeclaration(value, sourceFile); 1227c804472Sopenharmony_ci if (interfaceMethodSignature.get(methodSignature.functionName) !== undefined) { 1237c804472Sopenharmony_ci interfaceMethodSignature.get(methodSignature.functionName)?.push(methodSignature); 1247c804472Sopenharmony_ci } else { 1257c804472Sopenharmony_ci const methodSignatureArray: Array<MethodSignatureEntity> = []; 1267c804472Sopenharmony_ci methodSignatureArray.push(methodSignature); 1277c804472Sopenharmony_ci interfaceMethodSignature.set(methodSignature.functionName, methodSignatureArray); 1287c804472Sopenharmony_ci } 1297c804472Sopenharmony_ci } else if (isHeritageClause(value)) { 1307c804472Sopenharmony_ci heritageClauses.push(getHeritageClauseDeclaration(value, sourceFile)); 1317c804472Sopenharmony_ci } else if (isConstructorDeclaration(value)) { 1327c804472Sopenharmony_ci interfaceConstructors.push(getConstructorDeclaration(value, sourceFile)); 1337c804472Sopenharmony_ci } else if (isCallSignatureDeclaration(value)) { 1347c804472Sopenharmony_ci callSignature.push(getCallSignatureDeclaration(value, sourceFile)); 1357c804472Sopenharmony_ci } else if (isTypeParameterDeclaration(value)) { 1367c804472Sopenharmony_ci typeParameters.push(getTypeParameterDeclaration(value, sourceFile)); 1377c804472Sopenharmony_ci } else if (isIndexSignatureDeclaration(value)) { 1387c804472Sopenharmony_ci indexSignature.push(getIndexSignatureDeclaration(value, sourceFile)); 1397c804472Sopenharmony_ci } else { 1407c804472Sopenharmony_ci console.log('--------------------------- uncaught interface type start -----------------------'); 1417c804472Sopenharmony_ci console.log('interfaceName: ' + interfaceName); 1427c804472Sopenharmony_ci console.log(value); 1437c804472Sopenharmony_ci console.log('--------------------------- uncaught interface type end -----------------------'); 1447c804472Sopenharmony_ci } 1457c804472Sopenharmony_ci }); 1467c804472Sopenharmony_ci return { 1477c804472Sopenharmony_ci interfaceName, 1487c804472Sopenharmony_ci typeParameters, 1497c804472Sopenharmony_ci heritageClauses, 1507c804472Sopenharmony_ci interfaceConstructors, 1517c804472Sopenharmony_ci interfaceMethodSignature, 1527c804472Sopenharmony_ci interfacePropertySignatures, 1537c804472Sopenharmony_ci callSignatures: callSignature, 1547c804472Sopenharmony_ci indexSignature 1557c804472Sopenharmony_ci }; 1567c804472Sopenharmony_ci} 157