tools/redex-tool/DexSqlDump.cpp (14 lines): - line 136: // TODO: annotations? - line 137: // TODO: inheritance? - line 138: // TODO: string usage - line 139: // TODO: size estimate - line 156: // TODO: more fixup here on this crapped up name/signature - line 157: // TODO: break down signature - line 158: // TODO: annotations? - line 159: // TODO: string usage (encoded_value for static fields) - line 177: // TODO: more fixup here on this crapped up name/signature - line 178: // TODO: break down signature - line 179: // TODO: throws? - line 180: // TODO: annotations? - line 181: // TODO: string usage - line 182: // TODO: size estimate service/cse/CommonSubexpressionElimination.cpp (11 lines): - line 351: // TODO: Explore other (variations of this) heuristics. - line 456: // TODO: The following loops are probably the most expensive thing in this - line 596: // TODO: Support capturing pre-state values - line 704: // TODO: Allow this here, but also insert a check-cast instead of a simple - line 792: // TODO: Is this really safe for all virtual/interface invokes? This - line 1061: // TODO: Implement - line 1516: // TODO: Do better, use less. A subset and its superset can share a temp. - line 1743: // TODO: Consider throwing a custom exception, possibly created by code - line 1750: // TODO: Investigate why. Until then, disable that pass to test CSE. - line 1790: // TODO: Handle floats and doubles via Float.floatToIntBits and - line 1792: // TODO: Improve TypeInference so that we never have to deal with libredex/ControlFlow.h (8 lines): - line 58: * TODO: Add useful CFG editing methods - line 59: * TODO: phase out edits to the IRCode and move them all to the editable CFG - line 60: * TODO: remove non-editable CFG option - line 418: // TODO delete these - line 474: // TODO: We should probably have an API to offer iterators into the blocks map - line 520: * TODO: detect changes and recompute when necessary. - line 1329: // TODO: Is it possible to recover a valid state of iterators into the CFG - line 1608: // FIXME: Copying the outgoing throw edges isn't enough. service/dedup-blocks/DedupBlocks.cpp (8 lines): - line 260: * TODO: Some split blocks might not actually get dedup, as deduping checks - line 429: // TODO: Consider splitting all in-edges of the canonical block and - line 535: // @TODO - Instead of keeping track of just one group, in the future we can - line 610: // @TODO - Instead of only keeping one group and calculate best savings - line 796: // TODO: It's not worth the goto to merge return-only blocks. What size is - line 973: // TODO: Instead of just dropping all blocks in this case, do finer-grained - line 995: // TODO: Instead of just dropping all blocks in this case, do finer-grained - line 1024: // TODO: Can we be even more lenient without actually deduping and libredex/ControlFlow.cpp (7 lines): - line 275: // TODO (cnli): put back 'always_assert(m_parent->editable());' - line 652: // TODO: fix the optimizations that don't track registers size correctly. - line 948: // FIXME: "Empty" blocks with only `DexPosition`s should be merged - line 1796: // FIXME: this algorithm ignores real infinite loops in the block graph - line 1800: // TODO: Sort the outputs by edge type, case key, and throw index - line 1932: // TODO: relax the constraint that move-result-pseudo must be - line 2914: // TODO: Positions should be connected to instructions rather than preceding opt/outliner/InstructionSequenceOutliner.cpp (6 lines): - line 60: * - Other minor TODO ideas in the code - line 684: // TODO: Remove this limitation imposed by symbolication infrastructure. - line 847: // TODO: Handle not just conditional trees, but DAGs or even arbitrary - line 2254: // TODO: Consider making those methods static if they can be renamed, - line 3085: // TODO: Keep around all store dependencies and reuse when possible - line 3109: // TODO: Merge candidates that are equivalent except that one returns opt/branch-prefix-hoisting/BranchPrefixHoisting.cpp (5 lines): - line 240: // TODO: If the existing continuitions are not move-results, and the - line 247: // TODO: If the successors of the successors do not contain - line 417: // TODO: Collapse equivalent source blocks? - line 418: // TODO: Deal with duplication. - line 437: // TODO: Revisit. service/constant-propagation/ConstantPropagationTransform.cpp (5 lines): - line 192: // TODO: SUB to RSUB - line 251: // TODO: SUB to RSUB - line 463: // TODO: More complicated version of the above. - line 884: // TODO: Support side-effect-free instruction sequences involving - line 986: // TODO: Forwarding may leave behind trivial conditional branches that can tools/oatmeal/dump-oat.cpp (4 lines): - line 1349: // TODO: Handle compiled classes. Need to read method bitmap - line 1404: // TODO: Handle compiled classes. Need to read method bitmap size, - line 1869: // TODO: This is probably the most memory hungry part of the whole building - line 2657: // TODO: do we need to handle endian-ness? I think all platforms we opt/outliner/OutlinerTypeAnalysis.cpp (4 lines): - line 145: // TODO: I saw that most often, when multiple object type demands - line 1042: // TODO: Figure out a most general way of doing this. - line 1087: // TODO: Consider folding the above attempts to reduce the types set - line 1097: // TODO: Do some careful widening. opt/remove-unused-args/RemoveUnusedArgs.cpp (4 lines): - line 98: // TODO: T31388603 -- Remove unused results for true virtuals. - line 363: // TODO: T31388603 -- Remove unused args for true virtuals. - line 443: // TODO: T31388603 -- Remove unused args for true virtuals. - line 654: // TODO: T31388603 -- Remove unused args for true virtuals. libredex/IRCode.cpp (3 lines): - line 235: // TODO: erase fopcode from map - line 509: // TODO: merge this and MethodSplicer. - line 963: // TODO: Any integrity checks should really be in the DexOpcodeData opt/class-merging/ModelSpecGenerator.cpp (3 lines): - line 117: // TODO: Can merge named classes. - line 136: // TODO: Investigate error P444184021 when merging simple classes without - line 220: // TODO: Currently not able to merge classes that only extend opt/obfuscate/ObfuscateUtils.h (3 lines): - line 420: // TODO: deep-inspect array, but likely little impact - line 424: // TODO: deep-inspect this, but doesn't seem to occur in practice - line 777: // TODO: revisit for methods to be careful around Object libredex/InstructionLowering.cpp (3 lines): - line 246: // TODO: have load param opcodes store the actual type of the param and - line 280: // TODO: Assert that this never happens. IOPCODE_INIT_CLASS should never make - line 333: // TODO: factor this code a little libredex/SourceBlocks.cpp (3 lines): - line 443: // TODO: Per-interaction stats. - line 464: // TODO: This needs to be adapted to sum up the predecessors. - line 483: // TODO: Isn't that the same as before, just this time correct w/ counting? opt/string_concatenator/StringConcatenator.cpp (3 lines): - line 45: * TODO: someday, this should probably be subsumed by a more general purpose - line 213: // TODO: allow static initializers that have other unrelated code - line 387: // TODO maybe later? If we expand to non-clinit methods, `analyze()` libredex/JavaParserUtil.h (2 lines): - line 26: * TODO: have more robust support for above 1 and 2 - line 44: * TODO: have more robust support for above 1 and 2 libredex/OptData.h (2 lines): - line 53: * TODO (anwangster) Is method-method opt data needed? - line 62: * TODO (anwangster) Is class-class opt data needed? libredex/DexClass.cpp (2 lines): - line 204: // FIXME assert if already concrete - line 1522: // FIXME: This isn't deterministic. We're keeping whichever class we loaded opt/virtual_merging/VirtualMerging.cpp (2 lines): - line 134: // TODO: Relax this. Some portions of those virtual scopes could still - line 1470: // TODO: Check the orderings. service/cross-dex-ref-minimizer/CrossDexRefMinimizer.cpp (2 lines): - line 49: // TODO: Try some other variations. - line 213: // TODO: Try some other variations. libredex/Show.cpp (2 lines): - line 69: // TODO: make sure names reported handles collisions correctly. - line 943: ss << ""; // TODO: print something more informative opt/singleimpl/SingleImplOptimize.cpp (2 lines): - line 476: // TODO: this is horrible. After we remove methods, we shouldn't - line 524: // TODO: this is a hack to fix a problem with enclosing methods only. opt/class-splitting/ClassSplitting.cpp (2 lines): - line 686: // TODO: Could be done with trampolines if we remove "final" flag from - line 699: // TODO: Could be done with trampolines if we remove "final" flag from service/regalloc/GraphColoring.cpp (2 lines): - line 882: // TODO: account for "close" defs and uses. See [Briggs92], section 8.7 - line 1055: // TODO we should coalesce here too, but we'll need to avoid removing libredex/DexClass.h (2 lines): - line 706: // TODO: make it private and find a better way to allow code creation - line 1201: // TODO: There must be a logarithmic approach to this. dmethods are sorted! opt/remove_redundant_check_casts/CheckCastAnalysis.cpp (2 lines): - line 303: // TODO: Weaking across enums is technically correct, but exposes a - line 337: // TODO: Weaking across enums is technically correct, but exposes a libredex/PassManager.cpp (2 lines): - line 533: // TODO: "Linking" error: Change this to an assertion failure - line 555: // TODO: For better human readability, change this to CSV of native,java? opt/interdex/InterDex.cpp (2 lines): - line 589: // TODO: check for unterminated markers - line 749: // TODO: Does the above need to filter? Do we need to transitively close libresource/ResourceTypes.cpp (2 lines): - line 82: // TODO: This code uses 0xFFFFFFFF converted to bag_set* as a sentinel value. This is bad practice. - line 3113: // TODO: We may be able to support dynamic references in overlays opt/partial-application/PartialApplication.cpp (2 lines): - line 239: // TODO: We also likely need a move if there are more than 16 args - line 1203: // TODO: Support interface callees. opt/interdex/DexStructure.cpp (2 lines): - line 69: // TODO: we could be redexing object some day... :) - line 422: // TODO: do we need to re-check linear_alloc_limit? service/constant-propagation/ConstantEnvironment.h (2 lines): - line 61: // TODO: Refactor so that we don't have to list every single possible - line 294: // TODO: Instead of this custom meet function, the ConstantValue should get a opt/object-sensitive-dce/ObjectSensitiveDcePass.h (2 lines): - line 25: m_external_side_effect_summaries_file, "TODO: Document me!", - line 28: "TODO: Document me!", libredex/DexUtil.h (2 lines): - line 94: * TODO: Consider integrating the full visibility check in - line 192: * TODO: Add a way to define a real store. opt/instrument/BlockInstrument.cpp (2 lines): - line 823: // TODO: There is a potential register allocation issue when we instrument - line 1035: // TODO: What about no exit blocks possibly due to infinite loops? Such case libredex/Purity.cpp (2 lines): - line 485: // TODO: Instead of custom fixpoint computation using WTO, consider using the - line 792: // TODO: Support properly. service/method-inliner/MethodInliner.cpp (2 lines): - line 94: // TODO: Use type inference to figure out required array (component) type. - line 608: // TODO: Try harder. libredex/DexOutput.cpp (2 lines): - line 25: // TODO: Rewrite open/write/close with C/C++ standards. But it works for now. - line 2191: // TODO: If a whole cluster does not have IODI, we should emit base service/method-inliner/CFGInliner.cpp (2 lines): - line 22: // TODO: - line 425: // TODO: tail call optimization (if callsite_split is a return & inline_after) libredex/Configurable.h (2 lines): - line 232: static constexpr const char* default_doc() { return "TODO: Document this"; } - line 261: // TODO: wrapping this in json wrapper is stupid, can we use raw service/type-analysis/WholeProgramState.cpp (2 lines): - line 149: // TODO: revisit this for multiple callee call graph. - line 193: * TODO: tools/oatmeal/elf-writer.cpp (2 lines): - line 221: // TODO: probably want the real name here. - line 371: // TODO: 064 hash table is different! opt/reduce-array-literals/ReduceArrayLiterals.cpp (2 lines): - line 419: // TODO: Find true root cause, and make this exception more targetted. - line 426: // TODO: Consider using an annotation-based scheme. opt/interdex/InterDex.h (1 line): - line 201: // TODO: Encapsulate (primary|all) dex flags under one config. opt/delsuper/DelSuper.cpp (1 line): - line 154: // TODO: rewrite the following code to not require a random-access opt/interdex/CrossDexRelocator.cpp (1 line): - line 121: // TODO: Track dependencies at more fine-grained level, and use that opt/result-propagation/ResultPropagation.cpp (1 line): - line 309: // TODO: Are we doing something about abstract methods without any overrides service/reduce-boolean-branches/ReduceBooleanBranches.cpp (1 line): - line 123: // TODO: Analyze other common opcodes, and try to support them. libredex/ApkResources.cpp (1 line): - line 1223: // TODO: also do a similar step for type strings pool, and any empty type service/method-dedup/NormalizeConstructor.cpp (1 line): - line 244: // TODO: Give up if there's exception handling. opt/dedup-strings/DedupStrings.cpp (1 line): - line 661: // TODO: Instead of a user-defined limit, or over-approximating by default, opt/app_module_usage/AppModuleUsage.cpp (1 line): - line 131: // TODO: Remove classes from scope that are exempt from checking. libredex/GraphVisualizer.cpp (1 line): - line 357: // TODO: Is this really necessary? If so, fill in correctly. tools/hprof/dump_classes_from_hprof.py (1 line): - line 296: # TODO: support 64-bit libresource/String8.cpp (1 line): - line 625: // TODO: The test below will fail for Win32 paths. Fix later or ignore. libredex/BundleResources.h (1 line): - line 10: // TODO (T91001948): Integrate protobuf dependency in supported platforms for opt/split_huge_switches/SplitHugeSwitchPass.cpp (1 line): - line 286: // TODO: Support load-param instruction in blocks other than the entry opt/bridge/Bridge.cpp (1 line): - line 376: // TODO: Bridgee won't necessarily be direct once we expand this libredex/DexStore.h (1 line): - line 162: * TODO: this probably need to rely on metadata to be correct. Right now it libredex/ProguardParser.cpp (1 line): - line 1230: // TODO: Make the set of excluded rules configurable. libresource/utils/FileMap.h (1 line): - line 46: * TODO: we should be able to create a new FileMap that is a subset of service/method-inliner/LegacyInliner.cpp (1 line): - line 162: // to the parent's active catch handler. TODO: Make this more precise libredex/DexPosition.cpp (1 line): - line 262: // TODO: Should we undo this when we are done writing the map? cmake_modules/FindJsonCpp.cmake (1 line): - line 377: # TODO don't know why we get errors like: opt/optimize_enums/EnumAnalyzeGeneratedMethods.h (1 line): - line 48: // TODO: Share `m_config` with `optimize_enums::replace_enum_with_int` tools/redex-all/main.cpp (1 line): - line 1386: // TODO: Make the command line -jarpath option like a colon separated opt/resolve-proguard-values/ResolveProguardAssumeValues.h (1 line): - line 47: // TODO: Extend this (with Proguard parsing) to support the following: opt/kotlin-lambda/KotlinObjectInliner.cpp (1 line): - line 111: // 4. Will not have any fields (TODO We could extend to support sfields) service/dedup-blocks/DedupBlockValueNumbering.h (1 line): - line 39: // TODO There are elements of this is used in InstructionSequenceOutliner and opt/throw-propagation/ThrowPropagationPass.cpp (1 line): - line 25: * TODO: Run constant-propagation in caller, and then do callsite-specific opt/verifier/Verifier.cpp (1 line): - line 51: // TODO: walk through annotations libredex/Configurable.cpp (1 line): - line 189: // TODO: add std::string API for contains libredex/DexLoader.cpp (1 line): - line 76: // T58562665: TODO - actually update states for callsites/methodhandles service/constant-propagation/DefinitelyAssignedIFields.cpp (1 line): - line 315: // TODO: Consider using the SummaryGenerator to analyze AOSP classes to libredex/JarLoader.cpp (1 line): - line 421: // TODO: There are still blocking issues in instrumentation test that are libredex/VirtualScope.h (1 line): - line 36: * of visibility but could be made static (FIXME: This flag currently seems opt/class-merging/IntraDexClassMergingPass.h (1 line): - line 11: * TODO: It now requires inliner to inline the merge virtual methods to libredex/PluginRegistry.cpp (1 line): - line 13: // TODO t19478845 opt/virtual_merging/DedupVirtualMethods.cpp (1 line): - line 93: // TODO: look at the abstract methods and we can lift the opt/final_inline/FinalInlineV2.cpp (1 line): - line 714: // TODO: Switch to a proper interprocedural fixpoint analysis. service/type-analysis/WholeProgramState.h (1 line): - line 119: * TODO: The complete solution requires some kind of call graph analysis from service/local-dce/LocalDce.cpp (1 line): - line 313: // TODO: This normalization optimization doesn't really belong to local-dce, libredex/Transform.cpp (1 line): - line 93: * TODO: The method is deprecated since it doesn't delete the edges associated opt/class-merging/ModelSpecGenerator.h (1 line): - line 43: * TODO: Deprecate this method and use the new version instead. service/method-inliner/Inliner.h (1 line): - line 108: // TODO: Also check that reduced_cfg's are equivalent opt/optimize_enums/OptimizeEnums.cpp (1 line): - line 137: // TODO: We could order them instead of looping ... libredex/IRAssembler.cpp (1 line): - line 911: // FIXME: I don't think this handles wides correctly opt/remove-builders/RemoveBuildersHelper.cpp (1 line): - line 987: // TODO: we should be able to relax the check above to be simply opt/copy-propagation/CopyPropagationPass.h (1 line): - line 33: // TODO: detect the type of constant for each alias group redex_gdb_hooks.py (1 line): - line 114: # TODO printing IRCode seems to crash gdb opt/interdex/InterDexPass.cpp (1 line): - line 225: // TODO: Make this logic cleaner when these features get enabled for non-root service/type-analysis/TypeAnalysisTransform.cpp (1 line): - line 40: * TODO: cover other branch type for constant values. service/class-merging/MergerType.h (1 line): - line 193: // TODO: make order based on field position if a proper annotation is libredex/RedexResources.cpp (1 line): - line 53: // TODO (T91001948): Integrate protobuf dependency in supported platforms for libredex/CallGraph.h (1 line): - line 37: * TODO: Once we have points-to information, we should expand the callgraph opt/methodinline/PerfMethodInlinePass.cpp (1 line): - line 784: // TODO: Maybe do this? opt/constant-propagation/ConstantPropagationRuntimeAssert.cpp (1 line): - line 96: "TODO: Upgrade RuntimeAssertTransform to use cfg."); service/cross-dex-ref-minimizer/CrossDexRefMinimizer.h (1 line): - line 60: // TODO: Try some other variations. libredex/BundleResources.cpp (1 line): - line 8: // TODO (T91001948): Integrate protobuf dependency in supported platforms for libredex/ReferencedState.h (1 line): - line 276: // TODO: Remove the XML-related keep reasons service/class-merging/ModelMerger.cpp (1 line): - line 554: // TODO: replace this with an annotation. libredex/GlobalConfig.cpp (1 line): - line 137: // TODO: Remove unused profiled_methods_file option and all build system libredex/Purity.h (1 line): - line 104: * TODO: Derive this list with static analysis rather than hard-coding libredex/MethodUtil.h (1 line): - line 45: * TODO: We can assume no side effect for more cases, like if it only accesses tools/redex-tool/Verifier.cpp (1 line): - line 81: // TODO: walk through annotations service/class-merging/ModelMethodMerger.cpp (1 line): - line 453: // TODO (cnli): use editable CFG and update insert logic. libredex/IRList.cpp (1 line): - line 411: // TODO: T62185151 - better way of applying this on CFGs libredex/OptData.cpp (1 line): - line 414: // TODO In case of invokes, we want to show the deobfuscated name for clarity, service/method-inliner/Inliner.cpp (1 line): - line 1865: // TODO: Remove this limitation imposed by symbolication infrastructure. libredex/RedexContext.cpp (1 line): - line 407: // TODO: Need a better interface. libredex/DexPosition.h (1 line): - line 74: // TODO: Enable the following flag. It's off for now to ensures that the libredex/Creators.cpp (1 line): - line 20: // TODO: make naming of methods smart opt/remove-apilevel-checks/RemoveApiLevelChecks.h (1 line): - line 16: // TODO: Support ranges in ConstantPropagation instead of this one-off pass. service/escape-analysis/LocalPointersAnalysis.cpp (1 line): - line 483: // FIXME: fix cfg's GraphInterface so this const_cast isn't necessary libredex/PluginRegistry.h (1 line): - line 25: // TODO: Make this an error once all existing configurations have been service/regalloc-fast/LinearScan.cpp (1 line): - line 71: // TODO: (in the future) add spill here given dex constraints service/class-merging/Model.cpp (1 line): - line 727: // TODO: If we split by interaction, we could check here specifically. service/class-merging/MergingStrategies.h (1 line): - line 137: // TODO: Consider making this configurable. It represents the maximum number opt/stringbuilder-outliner/StringBuilderOutliner.cpp (1 line): - line 242: // TODO: filter out length zero/one states? service/constant-propagation/ConstantPropagationAnalysis.cpp (1 line): - line 124: // TODO: Don't mattern match at all, but make this a deep semantic service/constant-propagation/ConstantEnvironment.cpp (1 line): - line 32: // TODO: Instead of this custom meet function, the ConstantValue should get a opt/final_inline/FinalInline.cpp (1 line): - line 495: // TODO: Should we allow static finals that are initialized w/ const,