diff --git a/mjbase/dev_plan.md b/mjbase/dev_plan.md index 983b0b1..36ab9ad 100644 --- a/mjbase/dev_plan.md +++ b/mjbase/dev_plan.md @@ -919,3 +919,8 @@ mjt-deobf 侧尚在 mbase 栈消费的 opt pass 逐件裁决;"结构性吸收" 对 reflection_interpreter 的反射改写面消费保留为 asm⇒reference 单向。 终态零环:analysis⇏asm、spi⇏pass,全部跨模块边单向 (asm⇒{analysis,reference}、reference⇒asm、pass⇒spi)。 + → 补记(2026-10-29,reflection-interpreter 归位):上句申报与事实不 + 符——asm⇒reference 与 reference⇒asm 并存即模块环。reflection_interpreter + 本就是体级分析件(只吃 analysis/cp_refs + asm/analyzer 面),整迁 + asm/analyzer/(ns reference→asm_analyzer),member_remapper 消费转模 + 块内。终态真零环:asm⇏reference,唯一方向 reference⇒asm。 diff --git a/mjbase/src/mjbase/reference/reflection_interpreter.cpp b/mjbase/src/mjbase/asm/analyzer/reflection_interpreter.cpp similarity index 99% rename from mjbase/src/mjbase/reference/reflection_interpreter.cpp rename to mjbase/src/mjbase/asm/analyzer/reflection_interpreter.cpp index 12dc9e3..ec27ef9 100644 --- a/mjbase/src/mjbase/reference/reflection_interpreter.cpp +++ b/mjbase/src/mjbase/asm/analyzer/reflection_interpreter.cpp @@ -1,4 +1,4 @@ -#include "mjbase/reference/reflection_interpreter.hpp" +#include "mjbase/asm/analyzer/reflection_interpreter.hpp" #include #include @@ -9,7 +9,7 @@ #include "mjbase/analysis/cp_refs.hpp" #include "mjbase/asm/analyzer/frame_query.hpp" -namespace mjbase::reference { +namespace mjbase::asm_analyzer { using jbc::core::Op; using jbc::core::Shape; @@ -775,4 +775,4 @@ ReflectionSnapshot snapshotReflectionFacts(const ReflectionQueryContext& ctx) return ReflectionSnapshot{}; // 注入不收敛:保守 fail-open } -} // namespace mjbase::reference +} // namespace mjbase::asm_analyzer diff --git a/mjbase/src/mjbase/reference/reflection_interpreter.hpp b/mjbase/src/mjbase/asm/analyzer/reflection_interpreter.hpp similarity index 98% rename from mjbase/src/mjbase/reference/reflection_interpreter.hpp rename to mjbase/src/mjbase/asm/analyzer/reflection_interpreter.hpp index 44c60bd..e2f202f 100644 --- a/mjbase/src/mjbase/reference/reflection_interpreter.hpp +++ b/mjbase/src/mjbase/asm/analyzer/reflection_interpreter.hpp @@ -35,9 +35,9 @@ namespace mjbase::asm_analyzer { class AliasAnalysis; -} // namespace mjbase::analysis +} // namespace mjbase::asm_analyzer -namespace mjbase::reference { +namespace mjbase::asm_analyzer { /// @brief 类名归一化:`(Lfoo/Bar;)V` 描述符形态与点分名统一为 internal name。 /// @@ -161,4 +161,4 @@ struct ReflectionQueryContext /// @brief 计算方法内反射数据流快照(域引擎 + 迭代探测-注入 + FrameQuery 收口)。 ReflectionSnapshot snapshotReflectionFacts(const ReflectionQueryContext& ctx); -} // namespace mjbase::reference +} // namespace mjbase::asm_analyzer diff --git a/mjbase/src/mjbase/asm/remapper/member_remapper.cpp b/mjbase/src/mjbase/asm/remapper/member_remapper.cpp index 32916a6..153a401 100644 --- a/mjbase/src/mjbase/asm/remapper/member_remapper.cpp +++ b/mjbase/src/mjbase/asm/remapper/member_remapper.cpp @@ -12,7 +12,7 @@ #include "mjbase/asm/analyzer/alias_analysis.hpp" #include "mjbase/jasm/classfile_utf8.hpp" -#include "mjbase/reference/reflection_interpreter.hpp" +#include "mjbase/asm/analyzer/reflection_interpreter.hpp" namespace mjbase::asm_remapper { namespace { @@ -1166,7 +1166,7 @@ bool remapReflectionNames(const RemapCtx& ctx, CodeUnit& code, std::string_view } else if (c.kind == ClassSession::ConstSem::Kind::Class) { const std::string decoded = cpToUtf8(c.str); - const std::string_view tracking = reference::classLiteralTrackingName(decoded); + const std::string_view tracking = asm_analyzer::classLiteralTrackingName(decoded); if (!tracking.empty() && (!hasOwner || !hasLastString)) { reflectionOwner.assign(tracking); hasOwner = true; @@ -1226,7 +1226,7 @@ bool remapReflectionNames(const RemapCtx& ctx, CodeUnit& code, std::string_view // —— 数据流轨道(alias 快照;fail-open:引擎拒斥时保留线性轨道成果)—— if (aliases == nullptr) return changed; - reference::ReflectionQueryContext query; + asm_analyzer::ReflectionQueryContext query; query.code = &code; query.cp = &ctx.cf.cp; query.owner = className; @@ -1234,7 +1234,7 @@ bool remapReflectionNames(const RemapCtx& ctx, CodeUnit& code, std::string_view query.desc = methodDesc; query.isStatic = isStatic; query.aliases = aliases; - const reference::ReflectionSnapshot snapshot = reference::snapshotReflectionFacts(query); + const asm_analyzer::ReflectionSnapshot snapshot = asm_analyzer::snapshotReflectionFacts(query); if (!snapshot.ok) return changed; for (ca::usize pos = 0; pos < order.size(); ++pos) { @@ -1247,15 +1247,15 @@ bool remapReflectionNames(const RemapCtx& ctx, CodeUnit& code, std::string_view if (!methodLookup && !fieldLookup) continue; const auto it = snapshot.receivers.find(static_cast(pos)); if (it == snapshot.receivers.end()) continue; - reference::ReflectionValue receiver = it->second; + asm_analyzer::ReflectionValue receiver = it->second; if (const auto* alias = aliases->reflectionReceiverOf( className, methodName, methodDesc, static_cast(pos))) { if (alias->isKnown() && alias->identity.rfind("class:", 0) == 0) { - receiver.kind = reference::ReflectionValue::Kind::Class; + receiver.kind = asm_analyzer::ReflectionValue::Kind::Class; receiver.owner = alias->identity.substr(6); } } - if (receiver.kind != reference::ReflectionValue::Kind::Class) continue; + if (receiver.kind != asm_analyzer::ReflectionValue::Kind::Class) continue; for (ca::usize cursor = pos; cursor-- > 0;) { const Insn* cand = code.dom.peek(order[cursor]); diff --git a/mjbase/src/mjbase/reference/reference_index.cpp b/mjbase/src/mjbase/reference/reference_index.cpp index 64d398c..9f5ba40 100644 --- a/mjbase/src/mjbase/reference/reference_index.cpp +++ b/mjbase/src/mjbase/reference/reference_index.cpp @@ -16,7 +16,7 @@ #include "mjbase/analysis/class_scan.hpp" #include "mjbase/analysis/cp_refs.hpp" #include "mjbase/hierarchy/summary.hpp" -#include "mjbase/reference/reflection_interpreter.hpp" +#include "mjbase/asm/analyzer/reflection_interpreter.hpp" namespace mjbase::reference { @@ -28,6 +28,14 @@ using jbc::ir::SymbolId; using ConstSem = jbc::ir::ClassSession::ConstSem; using MemberRefSem = mjbase::analysis::MemberRefSem; using mjbase::asm_analyzer::aliasInterned; +using mjbase::asm_analyzer::ReflectionExecutionTarget; +using mjbase::asm_analyzer::ReflectionQueryContext; +using mjbase::asm_analyzer::ReflectionSnapshot; +using mjbase::asm_analyzer::ReflectionValue; +using mjbase::asm_analyzer::normalizeClassName; +using mjbase::asm_analyzer::reflectionArgumentDescriptor; +using mjbase::asm_analyzer::resolveReflectionExecution; +using mjbase::asm_analyzer::snapshotReflectionFacts; using mjbase::analysis::resolveClassName; using mjbase::analysis::resolveMemberRef; diff --git a/mjbase/src/mjbase/reference/reflection_binding_analyzer.cpp b/mjbase/src/mjbase/reference/reflection_binding_analyzer.cpp index 6b9ea4c..1638dc1 100644 --- a/mjbase/src/mjbase/reference/reflection_binding_analyzer.cpp +++ b/mjbase/src/mjbase/reference/reflection_binding_analyzer.cpp @@ -1,4 +1,5 @@ #include "mjbase/reference/reflection_binding_analyzer.hpp" +#include "mjbase/asm/analyzer/reflection_interpreter.hpp" #include #include @@ -14,7 +15,6 @@ #include "mjbase/analysis/cp_refs.hpp" #include "mjbase/asm/analyzer/frame_query.hpp" #include "mjbase/hierarchy/summary.hpp" -#include "mjbase/reference/reflection_interpreter.hpp" namespace mjbase::reference { @@ -27,6 +27,9 @@ using ConstSem = jbc::ir::ClassSession::ConstSem; using MemberRefSem = mjbase::analysis::MemberRefSem; using mjbase::analysis::resolveClassName; using mjbase::analysis::resolveMemberRef; +using mjbase::asm_analyzer::intConstantOf; +using mjbase::asm_analyzer::normalizeClassName; +using mjbase::asm_analyzer::regionHasIncomingBranches; namespace {