diff --git a/static_core/plugins/ets/runtime/intrinsics/helpers/json_helper.cpp b/static_core/plugins/ets/runtime/intrinsics/helpers/json_helper.cpp index caf3225b43f2f0656982e89898757c68d8ea9c03..53261eb7c0398bf2bf08fe668a3b33dfe15538b0 100644 --- a/static_core/plugins/ets/runtime/intrinsics/helpers/json_helper.cpp +++ b/static_core/plugins/ets/runtime/intrinsics/helpers/json_helper.cpp @@ -75,13 +75,12 @@ void JSONStringifier::AppendJSONPointPrimitive(const PandaString &value, bool ha bool JSONStringifier::SerializeFields(EtsHandle &value) { bool hasContent = false; - auto keys = PandaUnorderedSet(); bool isSuccessful = false; value->GetClass()->EnumerateBaseClasses([&](EtsClass *c) { auto fields = c->GetRuntimeClass()->GetFields(); for (auto &field : fields) { - if (!HandleField(value, EtsField::FromRuntimeField(&field), hasContent, keys)) { + if (!HandleField(value, EtsField::FromRuntimeField(&field), hasContent)) { isSuccessful = false; return true; } @@ -522,8 +521,7 @@ bool JSONStringifier::SerializeObject(EtsHandle &value) } // CC-OFFNXT(huge_method[C++], G.FUN.01-CPP) solid logic -bool JSONStringifier::HandleField(EtsHandle &obj, EtsField *etsField, bool &hasContent, - PandaUnorderedSet &keys) +bool JSONStringifier::HandleField(EtsHandle &obj, EtsField *etsField, bool &hasContent) { if (etsField->IsStatic()) { return true; @@ -533,10 +531,6 @@ bool JSONStringifier::HandleField(EtsHandle &obj, EtsField *etsField, return false; } key_ = ResolveDisplayName(etsField); - if (keys.find(key_) != keys.end()) { - return false; - } - keys.insert(key_); auto coro = EtsCoroutine::GetCurrent(); auto etsType = etsField->GetEtsType(); diff --git a/static_core/plugins/ets/runtime/intrinsics/helpers/json_helper.h b/static_core/plugins/ets/runtime/intrinsics/helpers/json_helper.h index 2f40433b2caae10358ad89b3e5700ddc1bdf2e50..e1c7f79c605cf65e6dbd35ebe1e489390b6a5a41 100644 --- a/static_core/plugins/ets/runtime/intrinsics/helpers/json_helper.h +++ b/static_core/plugins/ets/runtime/intrinsics/helpers/json_helper.h @@ -80,8 +80,7 @@ private: PandaString ResolveDisplayName(const EtsField *field); bool SerializeObject(EtsHandle &value); - bool HandleField(EtsHandle &obj, EtsField *field, bool &hasContent, - PandaUnorderedSet &keys); + bool HandleField(EtsHandle &obj, EtsField *field, bool &hasContent); bool CheckUnsupportedAnnotation(EtsField *field); diff --git a/static_core/plugins/ets/tests/ets_func_tests/escompat/JsonAnnotationTest.ets b/static_core/plugins/ets/tests/ets_func_tests/escompat/JsonAnnotationTest.ets index aaf8f5a3281dc2f23985d1fb29de984c884f296d..ef1c8143217c8dd91799258bf75a795fd9a0731c 100644 --- a/static_core/plugins/ets/tests/ets_func_tests/escompat/JsonAnnotationTest.ets +++ b/static_core/plugins/ets/tests/ets_func_tests/escompat/JsonAnnotationTest.ets @@ -193,7 +193,11 @@ function jsonStringifyExtend() { let obj6: TestClass6 = new TestClass6() let obj7: TestClass7 = new TestClass7() let json6 = JSON.stringify(obj6) - arktest.assertEQ(json6, '{"name1":"class6","nickname":"class6_nickname"}') + /** + * Attention: after the overriding fields problem is solved, we should only have field in subclass + * the expected output should be "{"name1":"class6","nickname":"class6_nickname"}" + */ + arktest.assertEQ(json6, '{"name1":"class5","name1":"class6","nickname":"class6_nickname"}') let json7 = JSON.stringify(obj7) /** * Attention: after the overriding fields problem is solved, we should only have field in subclass