From 201f68131b7d213bf3b96581394136d049ad1c10 Mon Sep 17 00:00:00 2001 From: ZhongNing Date: Thu, 12 Jun 2025 14:15:00 +0800 Subject: [PATCH] Fix for LimitedVoidTypeFromSdk Issue:https://gitee.com/openharmony/arkcompiler_ets_frontend/issues/ICEEBI Test scenarios:fix issue Signed-off-by: ZhongNing --- ets2panda/linter/src/lib/TypeScriptLinter.ts | 16 +++++- .../limit_void_type_sdk2.ets.arkts2.json | 10 ---- .../test/sdkwhite/limit_void_type_sdk3.ets | 14 +++++- .../limit_void_type_sdk3.ets.arkts2.json | 50 +++++++++++++++---- 4 files changed, 67 insertions(+), 23 deletions(-) diff --git a/ets2panda/linter/src/lib/TypeScriptLinter.ts b/ets2panda/linter/src/lib/TypeScriptLinter.ts index e99ab2db66..94340fa9ae 100644 --- a/ets2panda/linter/src/lib/TypeScriptLinter.ts +++ b/ets2panda/linter/src/lib/TypeScriptLinter.ts @@ -1211,7 +1211,16 @@ export class TypeScriptLinter extends BaseTypeScriptLinter { private updateDataSdkJsonInfo(importDeclNode: ts.ImportDeclaration, importClause: ts.ImportClause): void { const sdkInfo = TypeScriptLinter.pathMap.get(importDeclNode.moduleSpecifier.getText()); - if (sdkInfo && importClause.namedBindings) { + if (!sdkInfo) { + return; + } + if (importClause.name) { + const importClauseName = importClause.name.text; + sdkInfo.forEach((info) => { + TypeScriptLinter.addOrUpdateData(this.interfaceMap, importClauseName, info); + }); + } + if (importClause.namedBindings) { const namedImports = importClause.namedBindings as ts.NamedImports; if (!namedImports.elements) { return; @@ -3079,6 +3088,9 @@ export class TypeScriptLinter extends BaseTypeScriptLinter { methodName?: string ): boolean { return heritageClause.types.some((type) => { + const parentName = ts.isPropertyAccessExpression(type.expression) ? + type.expression.name.text : + type.expression.getText(); const fullTypeName = TypeScriptLinter.findFinalExpression(type).getText(); const sdkInfos = this.interfaceMap.get(fullTypeName); if (!sdkInfos || sdkInfos.size === 0) { @@ -3090,7 +3102,7 @@ export class TypeScriptLinter extends BaseTypeScriptLinter { return false; } - if (!methodName) { + if (!methodName && sdkInfo.parent_api[0].api_name === parentName) { this.processSdkInfoWithMembers(sdkInfo, tsClassDecl.members, tsClassDecl); return false; } diff --git a/ets2panda/linter/test/sdkwhite/limit_void_type_sdk2.ets.arkts2.json b/ets2panda/linter/test/sdkwhite/limit_void_type_sdk2.ets.arkts2.json index 5b41bb7baa..aab98f3e61 100644 --- a/ets2panda/linter/test/sdkwhite/limit_void_type_sdk2.ets.arkts2.json +++ b/ets2panda/linter/test/sdkwhite/limit_void_type_sdk2.ets.arkts2.json @@ -24,16 +24,6 @@ "rule": "Type \"void\" has no instances.(sdk-limited-void-type)", "severity": "ERROR" }, - { - "line": 18, - "column": 3, - "endLine": 20, - "endColumn": 4, - "problem": "LimitedVoidTypeFromSdk", - "suggest": "", - "rule": "Type \"void\" has no instances.(sdk-limited-void-type)", - "severity": "ERROR" - }, { "line": 18, "column": 48, diff --git a/ets2panda/linter/test/sdkwhite/limit_void_type_sdk3.ets b/ets2panda/linter/test/sdkwhite/limit_void_type_sdk3.ets index e05617b2ff..d7922e5530 100644 --- a/ets2panda/linter/test/sdkwhite/limit_void_type_sdk3.ets +++ b/ets2panda/linter/test/sdkwhite/limit_void_type_sdk3.ets @@ -13,7 +13,7 @@ * limitations under the License. */ -import { rcp } from '@kit.RemoteCommunicationKit'; +import mainRcp,{ rcp } from '@kit.RemoteCommunicationKit'; class LI implements rcp.WriteFile{ write(buffer: ArrayBuffer): Promise { // Error throw new Error('Method not implemented.'); @@ -41,4 +41,16 @@ export class LocalDataSource implements IDataSourcePrefetching { cancel(index: number): void | Promise { throw new Error("LocalDataSource Method not implemented."); } +} + +class L3 implements mainRcp.WriteFile { + write(buffer: ArrayBuffer): Promise { // error + throw new Error('Method not implemented.'); + } +} + +class L4 implements rcp.WriteFile { + write(buffer: ArrayBuffer): Promise { // error + throw new Error('Method not implemented.'); + } } \ No newline at end of file diff --git a/ets2panda/linter/test/sdkwhite/limit_void_type_sdk3.ets.arkts2.json b/ets2panda/linter/test/sdkwhite/limit_void_type_sdk3.ets.arkts2.json index 5d0e2d9cb6..bd352e358f 100644 --- a/ets2panda/linter/test/sdkwhite/limit_void_type_sdk3.ets.arkts2.json +++ b/ets2panda/linter/test/sdkwhite/limit_void_type_sdk3.ets.arkts2.json @@ -24,16 +24,6 @@ "rule": "Type \"void\" has no instances.(sdk-limited-void-type)", "severity": "ERROR" }, - { - "line": 18, - "column": 3, - "endLine": 20, - "endColumn": 4, - "problem": "LimitedVoidTypeFromSdk", - "suggest": "", - "rule": "Type \"void\" has no instances.(sdk-limited-void-type)", - "severity": "ERROR" - }, { "line": 18, "column": 48, @@ -113,6 +103,46 @@ "suggest": "", "rule": "Type \"void\" has no instances.(arkts-limited-void-type)", "severity": "ERROR" + }, + { + "line": 47, + "column": 3, + "endLine": 49, + "endColumn": 4, + "problem": "LimitedVoidTypeFromSdk", + "suggest": "", + "rule": "Type \"void\" has no instances.(sdk-limited-void-type)", + "severity": "ERROR" + }, + { + "line": 47, + "column": 48, + "endLine": 47, + "endColumn": 52, + "problem": "LimitedVoidType", + "suggest": "", + "rule": "Type \"void\" has no instances.(arkts-limited-void-type)", + "severity": "ERROR" + }, + { + "line": 53, + "column": 3, + "endLine": 55, + "endColumn": 4, + "problem": "LimitedVoidTypeFromSdk", + "suggest": "", + "rule": "Type \"void\" has no instances.(sdk-limited-void-type)", + "severity": "ERROR" + }, + { + "line": 53, + "column": 48, + "endLine": 53, + "endColumn": 52, + "problem": "LimitedVoidType", + "suggest": "", + "rule": "Type \"void\" has no instances.(arkts-limited-void-type)", + "severity": "ERROR" } ] } \ No newline at end of file -- Gitee