Wei Wang

178 papers A* 1A 1B 38C 4Misc 5Journal 62Unranked 65
YearRankTypeTitle / Venue / Authors
2025 B conf
WCNC
Animesh Rajpurohit, Michael Kelley, Wei Wang, Krishna Murthy Kattiyan Ramamoorthy
2025 conf
WASA (1)
Syed Samiul Alam, Haolin Tang, Guang Yang, Changqing Luo, Wei Wang, Yanxiao Zhao
2025 conf
ICC Workshops
Yahui Jiang, Thu Vu, Xiaocan Wang, Wei Wang
2025 B conf
WCNC
Junyu Liu, Min Sheng, Di Zhou, Zhu Han, Mohamed-Slim Alouini, Wei Wang
2024 Misc conf
ICNC
Krishna Murthy Kattiyan Ramamoorthy, Wei Wang, Kazem Sohraby, Yanxiao Zhao
2023 conf
ICC Workshops
Krishna Murthy Kattiyan Ramamoorthy, Wei Wang, Kazem Sohraby
2023 conf
COINS
Yutong Song, Krishna Murthy Kattiyan Ramamoorthy, Wei Wang, Kazem Sohraby
2023 B conf
WCNC
Krishna Murthy Kattiyan Ramamoorthy, Wei Wang, Kazem Sohraby
2023 conf
INFOCOM Workshops
Haolin Tang, Yanxiao Zhao, Guodong Wang, Changqing Luo, Wei Wang
2022 J jnl
IEEE Trans. Veh. Technol.
Krishna Murthy Kattiyan Ramamoorthy, Wei Wang
2022 B conf
WCNC
Krishna Murthy Kattiyan Ramamoorthy, Wei Wang, Kazem Sohraby
2022 conf
ICC
Krishna Murthy Kattiyan Ramamoorthy, Wei Wang, Kazem Sohraby
2022 B conf
ICCCN
Haolin Tang, Salih Sarp, Yanxiao Zhao, Wei Wang, Chunsheng Xin
2022 conf
CAMAD
Yutong Song, Wei Wang, Kazem Sohraby
2021 C conf
LANMAN
Krishna Murthy Kattiyan Ramamoorthy, Wei Wang, Kazem Sohraby
2021 conf
ICC
Krishna Murthy Kattiyan Ramamoorthy, Wei Wang
2021 J jnl
IET Commun.
Shuan He, Wei Wang
2020 J jnl
IEEE Trans. Wirel. Commun.
Yu Luo, Lina Pu, Yanxiao Zhao, Wei Wang, Qing Yang
2020 J jnl
IEEE Trans. Netw. Sci. Eng.
Shuan He, Wei Wang
2020 conf
ICC
Shuan He, Wei Wang
2020 J jnl
IET Networks
Shuan He, Wei Wang
2019 conf
CCNC
Shuan He, Wei Wang
2019 conf
CCNC
Shuan He, Wei Wang, Kazem Sohraby
2019 C conf
W2GIS
Shuan He, Wei Wang
2019 B conf
ICCCN
Shuan He, Wei Wang
2019 conf
ICC
Shuan He, Wei Wang, Kazem Sohraby
2019 B conf
GLOBECOM
Krishna Murthy Kattiyan Ramamoorthy, Wei Wang
2019 conf
EDGE
Krishna Murthy Kattiyan Ramamoorthy, Wei Wang, Kazem Sohraby
2018 B conf
GLOBECOM
Shuan He, Wei Wang
2018 J jnl
Mob. Networks Appl.
Kazem Sohraby, Daniel Minoli, Benedict Occhiogrosso, Wei Wang
2018 J jnl
Wirel. Commun. Mob. Comput.
Dongkyun Kim, Houbing Song, Juan-Carlos Cano, Wei Wang
2018 conf
ICC Workshops
Shuan He, Wei Wang
2018 J jnl
IEEE Commun. Mag.
Wei Wang, Qin Wang
2018 J jnl
Comput. Commun.
Qin Wang, Tracy Morgan Steinman, Wei Wang
2018 B conf
MobiHoc
Yu Luo, Lina Pu, Yanxiao Zhao, Wei Wang, Qing Yang, Zheng Peng
2018 conf
INFOCOM Workshops
Shuan He, Wei Wang
2017 J jnl
Multim. Tools Appl.
Samaneh Aminikhanghahi, Sung Y. Shin, Wei Wang, Soon-Ik Jeon, Seong-Ho Son
2017 J jnl
IEEE Syst. J.
Wei Wang
2017 conf
ICC
Yu Li, Zufan Zhang, Wei Wang, Honggang Wang
2017 conf
INFOCOM Workshops
Shuan He, Wei Wang
2017 J jnl
IET Commun.
Qin Wang, Wei Wang, Shi Jin, Hongbo Zhu
2017 J jnl
IEEE Trans. Emerg. Top. Comput.
Jun Huang, Xiang Li, Cong-Cong Xing, Wei Wang, Kun Hua, Song Guo
2017 J jnl
Mob. Networks Appl.
Zheng Yan, Wei Wang, Yonggang Wen, Chonggang Wang, Honggang Wang
2017 J jnl
IEEE Access
Yin Zhang, Giancarlo Fortino, Honggang Wang, Wei Wang
2017 J jnl
IEEE Internet Things J.
Jun Huang, Qiang Duan, Yanxiao Zhao, Zhong Zheng, Wei Wang
2017 conf
GIoTS
Qin Wang, Yanxiao Zhao, Wei Wang, Daniel Minoli, Kazem Sohraby, Hongbo Zhu, Benedict Occhiogrosso
2017 J jnl
IEEE Trans. Veh. Technol.
Qin Wang, Wei Wang, Kazem Sohraby
2017 J jnl
IEEE Internet Things J.
Wei Wang, Qin Wang, Kazem Sohraby
2017 A* conf
INFOCOM
Guangchi Liu, Qi Chen, Qing Yang, Binhai Zhu, Honggang Wang, Wei Wang
2017 J jnl
Comput. Commun.
Chunchao Liang, Sunho Lim, Manki Min, Wei Wang
2017 J jnl
IEEE Netw.
Guodong Wang, Yanxiao Zhao, Jun Huang, Wei Wang
2017 conf
WASA
Shuan He, Wei Wang
2016 J jnl
IEEE Trans. Emerg. Top. Comput.
Jun Huang, Ying Yin, Yanxiao Zhao, Qiang Duan, Wei Wang, Shui Yu
2016 J jnl
IEEE Trans. Veh. Technol.
Jun Huang, Yi Sun, Zi Xiong, Qiang Duan, Yanxiao Zhao, Xianghui Cao, Wei Wang
2016 conf
IC-NIDC
Tigang Jiang, Honggang Wang, Wei Wang
2016 conf
INFOCOM Workshops
Qin Wang, Wei Wang, Shi Jin, Hongbo Zhu, Naitong Zhang
2016 conf
CCNC
Chunchao Liang, Sunho Lim, Manki Min, Wei Wang
2016 J jnl
IET Commun.
Qin Wang, Wei Wang, Shi Jin, Hongbo Zhu, Naitong Zhang
2016 conf
VTC Spring
Shuan He, Wei Wang
2015 B conf
GLOBECOM
Jun Huang, Fang Fang, Yi Sun, Huifang Yan, Cong-Cong Xing, Qiang Duan, Wei Wang
2015 J jnl
EAI Endorsed Trans. Energy Web
Wei Wang, Kazem Sohraby
2015 J jnl
CoRR
Jianjun Yang, Yin Wang, Honggang Wang, Kun Hua, Wei Wang, Ju Shen
2015 J jnl
Int. J. Distributed Sens. Networks
Dongkyun Kim, Juan-Carlos Cano, Wei Wang, Floriano De Rango, Kun Hua
2015 J jnl
Multim. Tools Appl.
Gensheng Zhang, Wei Wang, Sung Y. Shin, Carrie B. Hruska, Seong-Ho Son
2015 J jnl
Telecommun. Syst.
Kun Hua, Wei Wang
2015 B conf
GLOBECOM
Qin Wang, Wei Wang, Shi Jin, Hongbo Zhu, Naitong Zhang
2015 conf
CCNC
Chunchao Liang, Sunho Lim, Manki Min, Wei Wang
2015 J jnl
Telecommun. Syst.
Lin Xing, Wei Wang, Sunho Lim, Feifei Gao, Kun Hua
2015 ed.
RACS
Esmaeil S. Nadimi, Tomás Cerný, Sung-Ryul Kim, Wei Wang
2015 J jnl
IEEE Trans. Veh. Technol.
Qin Wang, Wei Wang, Shi Jin, Hongbo Zhu, Naitong Zhang
2015 Misc conf
SAC
Samaneh Aminikhanghahi, Sung Y. Shin, Wei Wang, Soon-Ik Jeon, Seong-Ho Son, Chulwoo Pack
2015 J jnl
Int. J. Distributed Sens. Networks
Dongkyun Kim, Juan-Carlos Cano, Wei Wang, Floriano De Rango, Kun Hua
2015 conf
RACS
Wei Wang, Shivangi Pyasi, Kazem Sohraby, James Dudek
2015 J jnl
Int. J. Distributed Sens. Networks
Dongkyun Kim, Juan-Carlos Cano, Wei Wang, Floriano De Rango, Kun Hua
2014 B conf
GLOBECOM
Jun Huang, Yunlong He, Qiang Duan, Qing Yang, Wei Wang
2014 conf
RACS
Samaneh Aminikhanghahi, Sung Y. Shin, Wei Wang, Seong-Ho Son, Soon-Ik Jeon
2014 conf
INFOCOM Workshops
Jianjun Yang, Kun Hua, Yin Wang, Wei Wang, Honggang Wang, Ju Shen
2014 conf
RACS
Chunqiu Wang, Wei Wang, Sung Y. Shin, Soon-Ik Jeon
2014 J jnl
Int. J. Distributed Sens. Networks
Runan Yao, Wei Wang, Sung Y. Shin, Seong-Ho Son, Soon-Ik Jeon
2014 conf
RACS
Kun Hua, Yuenong Zhu, Wei Wang, Honggang Wang
2014 B conf
GLOBECOM
Yanxiao Zhao, Jun Huang, Wei Wang, Rafida Zaman
2014 Misc conf
SAC
Samaneh Aminikhanghahi, Wei Wang, Sung Y. Shin, Seong-Ho Son, Soon-Ik Jeon
2014 Misc conf
ICNC
Jianjun Yang, Yin Wang, Kun Hua, Wei Wang
2014 conf
RACS
Md Nashid Anjum, Jun Huang, Yanxiao Zhao, Wei Wang
2014 B conf
GLOBECOM
Qin Wang, Wei Wang, Shi Jin, Hongbo Zhu, Naitong Zhang
2014 conf
CCNC
Chunchao Liang, Sunho Lim, Manki Min, Wei Wang
2014 conf
MILCOM
Cong Pu, Tejaswi Gade, Sunho Lim, Manki Min, Wei Wang
2014 conf
WCSP
Qin Wang, Wei Wang, Shi Jin, Hongbo Zhu, Naitong Zhang
2014 ed.
RACS
Chao Lu, Esmaeil S. Nadimi, Sung-Ryul Kim, Wei Wang
2014 J jnl
IEEE J. Biomed. Health Informatics
Wei Wang, Chunqiu Wang, Min Zhao
2014 J jnl
IEEE Commun. Mag.
Honggang Wang, Shaoen Wu, Min Chen, Wei Wang
2014 Misc conf
SAC
Byung K. Jung, Sung Y. Shin, Wei Wang, Hyung Do Choi, Jeong-Ki Pack
2014 J jnl
Int. J. Distributed Sens. Networks
Dongkyun Kim, Juan-Carlos Cano, Wei Wang, Floriano De Rango, Kun Hua
2014 J jnl
Comput. Commun.
Sunho Lim, Yumin Lee, Jongpil Cheon, Manki Min, Wei Wang
2013 conf
WOCC
Wei Wang, Sung Y. Shin
2013 conf
RACS
Haokun Tang, Jun Huang, Wei Wang
2013 B conf
GLOBECOM
Kun Hua, Honggang Wang, Guang-Chong Zhu, Wei Wang, Athanasios V. Vasilakos
2013 J jnl
Int. J. Distributed Sens. Networks
Dongkyun Kim, Juan-Carlos Cano, Wei Wang, Floriano De Rango, Kun Hua
2013 B conf
GLOBECOM
Chunqiu Wang, Wei Wang, Kazem Sohraby, Yanxiao Zhao, James Dudek
2013 conf
EIT
Chunqiu Wang, Wei Wang, Runan Yao
2013 conf
WCSP
Qin Wang, Wei Wang, Shi Jin, Hongbo Zhu
2013 J jnl
Comput. Commun.
Lin Xing, Wei Wang
2013 conf
RACS
Zhe Li, Wei Wang, Sung Y. Shin, Hyung Do Choi
2013 J jnl
Ad Hoc Networks
Yong Xiang, Zheng Liu, Ruilin Liu, Weizhen Sun, Wei Wang
2013 J jnl
Int. J. Handheld Comput. Res.
Yanxiao Zhao, Bighnaraj Panigrahi, Kazem Sohraby, Wei Wang
2013 J jnl
IEICE Trans. Commun.
Qi Jiang, Xuewen Liao, Wei Wang, Shihua Zhu
2013 conf
WiSEE
Chunqiu Wang, Wei Wang, Kazem Sohraby, James Dudek
2013 J jnl
Multim. Tools Appl.
Honggang Wang, Wei Wang, Min Chen, Xingmiao Yao
2013 J jnl
IEEE Trans. Veh. Technol.
Guftaar Ahmad Sardar Sidhu, Feifei Gao, Wei Wang, Wen Chen
2013 conf
RACS
Hyun I. Kim, Sung Y. Shin, Wei Wang, Soon-Ik Jeon
2013 B conf
GLOBECOM
Qin Wang, Wei Wang, Shi Jin, Hongbo Zhu
2012 B conf
GLOBECOM
Runan Yao, Wei Wang, Kazem Sohraby, Shi Jin, Sunho Lim, Hongbo Zhu
2012 conf
RACS
Gensheng Zhang, Sung Y. Shin, Wei Wang, Carrie B. Hruska, Hyung Do Choi
2012 conf
RACS
Byung K. Jung, Wei Wang, Zhe Li, Seong-Ho Son, Jung-Yeop Kim
2012 B conf
IWCMC
Kun Hua, Honggang Wang, Wei Wang
2012 J jnl
Int. J. Heal. Inf. Syst. Informatics
Wei Wang, Min Zhao, Honggang Wang, Kun Hua
2012 J jnl
Int. J. Auton. Adapt. Commun. Syst.
Puttipong Mahasukhon, Hamid Sharif, Michael Hempel, Ting Zhou, Wei Wang, Tao Ma
2012 conf
WCSP
Di Zhang, Xuewen Liao, Jianguo Deng, Wei Wang
2012 B conf
WCNC
Guftaar Ahmad Sardar Sidhu, Feifei Gao, Wen Chen, Wei Wang
2012 B conf
GLOBECOM
Kun Hua, Wei Wang, Honggang Wang, Ali AlGhamdi
2012 conf
CHINACOM
Donghoon Kang, Wei Wang, Byung Eon Park, Lin Xing, Sung Shin
2011 B conf
GLOBECOM
Navid Tadayon, Honggang Wang, Bikash Sharma, Wei Wang, Kun Hua
2011 J jnl
IEEE J. Sel. Areas Commun.
Ting Zhou, Hamid Sharif, Michael Hempel, Puttipong Mahasukhon, Wei Wang, Tao Ma
2011 conf
RACS
Gensheng Zhang, Wei Wang, Jucheol Moon, Jeong-Ki Pack, Soon-Ik Jeon
2011 conf
SpringSim (ANSS)
Lin Xing, Wei Wang, Shaoen Wu, Kun Hua, Honggang Wang
2011 conf
SpringSim (ANSS)
Kun Hua, Shaoen Wu, Honggang Wang, Wei Wang
2011 conf
GLOBECOM Workshops
Tigang Jiang, Honggang Wang, Wei Wang
2011 B conf
GLOBECOM
Wei Wang, Honggang Wang, Kun Hua, Shaoen Wu, Feifei Gao, Xuewen Liao, Tigang Jiang
2011 conf
RACS
Lin Xing, Wei Wang, Gensheng Zhang, Feifei Gao, Xuewen Liao, Tigang Jiang
2011 J jnl
IEEE Syst. J.
Wei Wang, Honggang Wang, Michael Hempel, Dongming Peng, Hamid Sharif, Hsiao-Hwa Chen
2010 J jnl
IEEE Trans. Multim.
Wei Wang, Dongming Peng, Honggang Wang, Hamid Sharif, Hsiao-Hwa Chen
2010 conf
MOBILWARE
Honggang Wang, Wei Wang, Shaoen Wu, Kun Hua
2010 B conf
PIMRC
Wei Wang, Kun Hua, Michael Hempel, Dongming Peng, Hamid Sharif, Hsiao-Hwa Chen
2010 conf
CSE
Kun Hua, Honggang Wang, Wei Wang, Shaoen Wu
2010 conf
ICC
Wei Wang, Hamid Sharif, Michael Hempel, Ting Zhou, Puttipong Mahasukhon, Tao Ma
2010 J jnl
IEEE Trans. Multim.
Honggang Wang, Michael Hempel, Dongming Peng, Wei Wang, Hamid Sharif, Hsiao-Hwa Chen
2010 J jnl
IEEE Trans. Multim.
Wei Wang, Michael Hempel, Dongming Peng, Honggang Wang, Hamid Sharif, Hsiao-Hwa Chen
2010 B conf
GLOBECOM
Wei Wang, Michael Hempel, Dongming Peng, Hamid Sharif, Honggang Wang, Hsiao-Hwa Chen
2010 conf
ICC
Puttipong Mahasukhon, Hamid Sharif, Michael Hempel, Ting Zhou, Wei Wang, Tao Ma
2010 J jnl
IEEE Wirel. Commun.
Honggang Wang, Dongming Peng, Wei Wang, Hamid Sharif, Hsiao-Hwa Chen, A. Khoynezhad
2009 B conf
LCN
Ting Zhou, Hamid Sharif, Michael Hempel, Puttipong Mahasukhon, Wei Wang, Tao Ma
2009 conf
ICC
Ting Zhou, Hamid Sharif, Michael Hempel, Puttipong Mahasukhon, Wei Wang, Song Ci
2009 J jnl
Int. J. Auton. Adapt. Commun. Syst.
Michael Hempel, Hamid Sharif, Wei Wang, Ting Zhou, Puttipong Mahasukhon
2009 J jnl
Wirel. Commun. Mob. Comput.
Wei Wang, Dongming Peng, Honggang Wang, Hamid Sharif
2009 J jnl
IEEE Trans. Wirel. Commun.
Wei Wang, Dongming Peng, Honggang Wang, Hamid Sharif, Hsiao-Hwa Chen
2009 J jnl
IET Commun.
Puttipong Mahasukhon, Hamid Sharif, Michael Hempel, Ting Zhou, Wei Wang, Hsiao-Hwa Chen
2009 J jnl
IEEE Trans. Wirel. Commun.
Honggang Wang, Dongming Peng, Wei Wang, Hamid Sharif, Hsiao-Hwa Chen
2009 B conf
GLOBECOM
Wei Wang, Dongming Peng, Honggang Wang, Hamid Sharif, Hsiao-Hwa Chen
2009 J jnl
Mob. Networks Appl.
Ting Zhou, Hamid Sharif, Michael Hempel, Puttipong Mahasukhon, Wei Wang, Hsiao-Hwa Chen
2009 conf
CCNC
Ting Zhou, Hamid Sharif, Michael Hempel, Puttipong Mahasukhon, Wei Wang
2009 B conf
IWCMC
Puttipong Mahasukhon, Hamid Sharif, Michael Hempel, Ting Zhou, Wei Wang, Tao Ma
2008 conf
VTC Spring
Ting Zhou, Hamid Sharif, Michael Hempel, Puttipong Mahasukhon, Wei Wang, Song Ci
2008 J jnl
IEEE Trans. Wirel. Commun.
Honggang Wang, Dongming Peng, Wei Wang, Hamid Sharif, Hsiao-Hwa Chen
2008 conf
ICC
Honggang Wang, Dongming Peng, Wei Wang, Hamid Sharif, Hsiao-Hwa Chen
2008 J jnl
IEEE Trans. Multim.
Wei Wang, Dongming Peng, Honggang Wang, Hamid Sharif, Hsiao-Hwa Chen
2008 B conf
WCNC
Wei Wang, Dongming Peng, Honggang Wang, Hamid Sharif, Hsiao-Hwa Chen
2008 B conf
LCN
Michael Hempel, Wei Wang, Hamid Sharif, Ting Zhou, Puttipong Mahasukhon
2008 C conf
APSCC
Wei Wei, Yong Qi, Xin He, Wei Wang, Ruidong Li, Hui He
2008 B conf
WiMob
Puttipong Mahasukhon, Hamid Sharif, Michael Hempel, Ting Zhou, Wei Wang, Tadeusz A. Wysocki
2008 B conf
GLOBECOM
Wei Wang, Dongming Peng, Honggang Wang, Yaoqing Yang, Hamid Sharif, Hsiao-Hwa Chen
2008 conf
VTC Spring
Wei Wang, Hamid Sharif, Michael Hempel, Ting Zhou, Puttipong Mahasukhon
2008 conf
WTS
Wei Wei, Yong Qi, Wei Wang, Ruidong Li, Yi Shi, Yu Gu, Andrew Chen
2007 B conf
IWCMC
Wei Wang, Dongming Peng, Honggang Wang, Hamid Sharif
2007 B conf
AINA
Honggang Wang, Dongming Peng, Wei Wang, Hamid Sharif
2007 B conf
GLOBECOM
Honggang Wang, Dongming Peng, Wei Wang, Hamid Sharif
2007 B conf
PIMRC
Wei Wang, Dongming Peng, Honggang Wang, Hamid Sharif
2007 C conf
APSCC
Wei Wei, Yong Qi, Saiyu Qi, Di Hou, Wei Wang, Min Xi, Qingsong Yao
2007 B conf
WCNC
Wei Wang, Dongming Peng, Honggang Wang, Hamid Sharif, Hsiao-Hwa Chen
2007 J jnl
Adv. Multim.
Wei Wang, Dongming Peng, Honggang Wang, Hamid Sharif, Hsiao-Hwa Chen
2007 J jnl
J. Mobile Multimedia
Honggang Wang, Dongming Peng, Wei Wang, Hamid Sharif
2007 conf
ICC
Honggang Wang, Dongming Peng, Wei Wang, Hamid Sharif, Hsiao-Hwa Chen
2007 B conf
GLOBECOM
Wei Wang, Dongming Peng, Honggang Wang, Hamid Sharif, Hsiao-Hwa Chen
2007 A conf
ICME
Honggang Wang, Dongming Peng, Wei Wang, Hamid Sharif
2007 conf
VTC Spring
Wei Wang, Dongming Peng, Honggang Wang, Hamid Sharif, Hsiao-Hwa Chen
2006 conf
Q2SWinet
Honggang Wang, Dongming Peng, Wei Wang, Hamid Sharif
2006 conf
Q2SWinet
Wei Wang, Dongming Peng, Honggang Wang, Hamid Sharif
2006 conf
SUTC (2)
Wei Wang, Jong-Hoon Youn, Hamid Sharif
2003 conf
SOFTVIS
Qin Wang, Wei Wang, Rhodes Brown, Karel Driesen, Bruno Dufour, Laurie J. Hendren, Clark Verbrugge
redb/extractors/decompiler/apk/smali_parser.py
← Index redb/extractors/decompiler/apk/smali_parser.py python
"""Smali file parser — extracts individual method bodies from apktool output.

Parses .smali files produced by apktool and extracts per-method bodies,
instruction counts, and register counts.
"""

import os
import re
from dataclasses import dataclass, field
from typing import Dict, List, Optional


@dataclass
class SmaliMethod:
    """Parsed smali method data."""
    class_name: str
    method_name: str
    method_signature: str
    body: str
    instruction_count: int = 0
    register_count: int = 0
    access_flags: List[str] = field(default_factory=list)


# Directives start with '.' — these are metadata, not instructions
_DIRECTIVE_RE = re.compile(r"^\s*\.")
# Labels start with ':'
_LABEL_RE = re.compile(r"^\s*:")
# Blank or comment lines
_BLANK_OR_COMMENT_RE = re.compile(r"^\s*(#.*)?$")
# Method declaration
_METHOD_START_RE = re.compile(
    r"^\.method\s+(.*?)\s+(\S+)\(([^)]*)\)(\S+)\s*$"
)
_METHOD_START_SIMPLE_RE = re.compile(
    r"^\.method\s+(.*)"
)
# .registers or .locals directive
_REGISTERS_RE = re.compile(r"^\s*\.registers\s+(\d+)")
_LOCALS_RE = re.compile(r"^\s*\.locals\s+(\d+)")
# .line directive
_LINE_RE = re.compile(r"^\s*\.line\s+\d+")


class SmaliParser:
    """Parser for apktool smali output files."""

    @staticmethod
    def parse_smali_file(filepath: str) -> List[SmaliMethod]:
        """Parse a single .smali file and return list of methods.

        Each .smali file contains one class with all its methods.
        """
        with open(filepath, "r", encoding="utf-8", errors="replace") as f:
            content = f.read()

        return SmaliParser._parse_smali_content(content, filepath)

    @staticmethod
    def _parse_smali_content(content: str, source: str = "") -> List[SmaliMethod]:
        """Parse smali text content and extract methods."""
        lines = content.split("\n")
        methods = []

        # Extract class name from .class directive
        class_name = ""
        for line in lines:
            if line.startswith(".class "):
                parts = line.split()
                class_name = parts[-1]  # Last token is the class descriptor
                break

        in_method = False
        method_lines = []
        method_header = ""
        access_flags = []
        skip_method = False

        for line in lines:
            if line.startswith(".method "):
                in_method = True
                method_lines = []
                method_header = line
                skip_method = False

                # Parse access flags and method signature
                remainder = line[len(".method "):].strip()
                tokens = remainder.split()
                access_flags = []
                method_sig_token = tokens[-1] if tokens else ""

                for t in tokens[:-1]:
                    access_flags.append(t)

                # Skip abstract and native methods (no body)
                if "abstract" in access_flags or "native" in access_flags:
                    skip_method = True

            elif line.startswith(".end method"):
                if in_method and not skip_method:
                    body = "\n".join(method_lines)
                    method_name, signature = SmaliParser._parse_method_sig(
                        method_header
                    )
                    instruction_count = SmaliParser.count_instructions(body)
                    register_count = SmaliParser._extract_register_count(body)

                    methods.append(
                        SmaliMethod(
                            class_name=class_name,
                            method_name=method_name,
                            method_signature=signature,
                            body=body,
                            instruction_count=instruction_count,
                            register_count=register_count,
                            access_flags=access_flags,
                        )
                    )
                in_method = False
                method_lines = []
                access_flags = []

            elif in_method and not skip_method:
                method_lines.append(line)

        return methods

    @staticmethod
    def parse_smali_directory(dirpath: str) -> Dict[str, SmaliMethod]:
        """Parse all .smali files in a directory tree.

        Returns dict keyed by 'ClassName->methodName(signature)ReturnType'.
        """
        result = {}
        for root, _dirs, files in os.walk(dirpath):
            for fname in files:
                if fname.endswith(".smali"):
                    fpath = os.path.join(root, fname)
                    try:
                        methods = SmaliParser.parse_smali_file(fpath)
                        for m in methods:
                            key = SmaliParser.make_method_key(
                                m.class_name, m.method_name, m.method_signature
                            )
                            result[key] = m
                    except Exception:
                        continue
        return result

    @staticmethod
    def normalize_smali_body(body: str) -> str:
        """Normalize smali body for consistent hashing.

        Strips comments, .line directives, normalizes whitespace.
        """
        lines = []
        for line in body.split("\n"):
            stripped = line.strip()
            # Skip empty lines, comments, and .line directives
            if not stripped or stripped.startswith("#"):
                continue
            if _LINE_RE.match(stripped):
                continue
            lines.append(stripped)
        return "\n".join(lines)

    @staticmethod
    def count_instructions(body: str) -> int:
        """Count actual Dalvik instructions (skip directives, labels, blanks)."""
        count = 0
        for line in body.split("\n"):
            stripped = line.strip()
            if not stripped:
                continue
            if _DIRECTIVE_RE.match(stripped):
                continue
            if _LABEL_RE.match(stripped):
                continue
            if _BLANK_OR_COMMENT_RE.match(stripped):
                continue
            count += 1
        return count

    @staticmethod
    def _extract_register_count(body: str) -> int:
        """Extract register count from .registers or .locals directive.

        apktool outputs .locals (local registers only) by default.
        .registers (total = locals + params) is used with --use-registers.
        We return whichever is present.
        """
        for line in body.split("\n"):
            stripped = line.strip()
            m = _REGISTERS_RE.match(stripped)
            if m:
                return int(m.group(1))
            m = _LOCALS_RE.match(stripped)
            if m:
                return int(m.group(1))
        return 0

    @staticmethod
    def _parse_method_sig(header_line: str) -> tuple:
        """Parse method name and signature from .method header line.

        Input: '.method public onCreate(Landroid/os/Bundle;)V'
        Returns: ('onCreate', '(Landroid/os/Bundle;)V')
        """
        remainder = header_line[len(".method "):].strip()
        tokens = remainder.split()
        if not tokens:
            return ("unknown", "()")

        # Last token contains methodName(params)returnType
        method_part = tokens[-1]

        paren_idx = method_part.find("(")
        if paren_idx == -1:
            return (method_part, "()")

        method_name = method_part[:paren_idx]
        signature = method_part[paren_idx:]

        return (method_name, signature)

    @staticmethod
    def make_method_key(class_name: str, method_name: str, signature: str) -> str:
        """Build a canonical method key for cross-tool matching.

        Format: 'Lcom/example/Foo;->methodName(params)ReturnType'
        """
        return f"{class_name}->{method_name}{signature}"