From 7e8abbbeedae95c3d180571c53f51caa65fb21e6 Mon Sep 17 00:00:00 2001 From: zengzengran Date: Tue, 15 Jul 2025 10:59:00 +0800 Subject: [PATCH] warning patch Issue: https://gitee.com/openharmony/arkcompiler_ets_frontend/pulls/7098 Description: warning patch Tested-by: ninja tests (passed) ets_testrunner (passed) Signed-off-by: zengzengran # --- ets2panda/checker/ETSAnalyzer.cpp | 22 ++++++++++++++++++++++ ets2panda/checker/ETSAnalyzer.h | 1 + ets2panda/checker/checker.h | 3 +++ ets2panda/util/diagnostic/warning.yaml | 4 ++++ 4 files changed, 30 insertions(+) diff --git a/ets2panda/checker/ETSAnalyzer.cpp b/ets2panda/checker/ETSAnalyzer.cpp index 4748735b14..306409fa87 100644 --- a/ets2panda/checker/ETSAnalyzer.cpp +++ b/ets2panda/checker/ETSAnalyzer.cpp @@ -211,10 +211,32 @@ static bool IsInitializerBlockTransfer(std::string_view str) return str.size() >= prefix.size() && str.compare(0, prefix.size(), prefix) == 0; } +void ETSAnalyzer::CheckOutdatedOverload(ir::MethodDefinition *node) const +{ + if (node->Overloads().empty()) { + return; + } + ETSChecker *checker = GetETSChecker(); + auto overloadMethods = node->Overloads(); + if (node->IsConstructor() && + std::none_of(overloadMethods.begin(), overloadMethods.end(), + [](ir::MethodDefinition *overloadMethod) { return !overloadMethod->Function()->IsSynthetic(); })) { + return; + } + if (node->IsGetter() && overloadMethods.size() == 1 && overloadMethods.front()->IsSetter()) { + return; + } + + auto filePath = checker->GetProgram()->SourceFilePath(); + auto methodName = node->Id()->Name(); + checker->LogError(diagnostic::OVERLOAD_OUTDATED, {filePath, methodName}, node->Start()); +} + checker::Type *ETSAnalyzer::Check(ir::MethodDefinition *node) const { ETSChecker *checker = GetETSChecker(); auto *scriptFunc = node->Function(); + CheckOutdatedOverload(node); // CC-OFFNXT(G.FMT.14-CPP) project code style auto const returnErrorType = [checker, node]() -> checker::Type * { diff --git a/ets2panda/checker/ETSAnalyzer.h b/ets2panda/checker/ETSAnalyzer.h index c4a0d46ba6..9b3aab5cd6 100644 --- a/ets2panda/checker/ETSAnalyzer.h +++ b/ets2panda/checker/ETSAnalyzer.h @@ -49,6 +49,7 @@ private: ETSChecker *GetETSChecker() const; void CheckInstantatedClass(ir::ETSNewClassInstanceExpression *expr, ETSObjectType *&calleeObj) const; void CheckMethodModifiers(ir::MethodDefinition *node) const; + void CheckOutdatedOverload(ir::MethodDefinition *node) const; checker::Signature *ResolveSignature(ETSChecker *checker, ir::CallExpression *expr, checker::Type *calleeType) const; checker::Type *GetReturnType(ir::CallExpression *expr, checker::Type *calleeType) const; diff --git a/ets2panda/checker/checker.h b/ets2panda/checker/checker.h index 04d1c37692..9be63a8bd9 100644 --- a/ets2panda/checker/checker.h +++ b/ets2panda/checker/checker.h @@ -240,6 +240,9 @@ public: } bool IsDeclForDynamicStaticInterop() const; + parser::Program *GetProgram(){ + return program_; + } protected: parser::Program *Program() const; diff --git a/ets2panda/util/diagnostic/warning.yaml b/ets2panda/util/diagnostic/warning.yaml index 49f08b5c8e..cf34b326af 100644 --- a/ets2panda/util/diagnostic/warning.yaml +++ b/ets2panda/util/diagnostic/warning.yaml @@ -85,6 +85,10 @@ warning: id: 14 message: "Bad operand type, the operand of the non-nullish expression is 'null' or 'undefined'." +- name: OVERLOAD_OUTDATED + id: 31 + message: "Outdated overload, file path: '{}', method names: '{}'" + - name: PROHIBIT_TOP_LEVEL_STATEMENTS id: 3 message: "Prohibit top-level statements." -- Gitee