Class ClassNode

All Implemented Interfaces:
IRenameNode, ICodeAnnotation, ICodeNodeRef, IAttributeNode, ILineAttributeNode, ICodeNode, IDexNode, ILoadable, IPackageUpdate, IUsageInfoNode, Comparable<ClassNode>

public class ClassNode extends NotificationAttrNode implements ILoadable, ICodeNode, IPackageUpdate, Comparable<ClassNode>
  • Field Details

    • LOG

      private static final org.slf4j.Logger LOG
    • root

      private final RootNode root
    • clsData

      private final IClassData clsData
    • clsInfo

      private final ClassInfo clsInfo
    • packageNode

      private PackageNode packageNode
    • accessFlags

      private AccessInfo accessFlags
    • superClass

      private ArgType superClass
    • interfaces

      private List<ArgType> interfaces
    • generics

      private List<ArgType> generics
    • inputFileName

      private String inputFileName
    • methods

      private List<MethodNode> methods
    • fields

      private List<FieldNode> fields
    • innerClasses

      private List<ClassNode> innerClasses
    • inlinedClasses

      private List<ClassNode> inlinedClasses
    • smali

      private String smali
    • parentClass

      private ClassNode parentClass
    • state

      private volatile ProcessState state
    • loadStage

      private LoadStage loadStage
    • dependencies

      private List<ClassNode> dependencies
      Top level classes used in this class (only for top level classes, empty for inners)
    • codegenDeps

      private List<ClassNode> codegenDeps
      Top level classes needed for code generation stage
    • useIn

      private List<ClassNode> useIn
      Classes which uses this class
    • useInMth

      private List<MethodNode> useInMth
      Methods which uses this class (by instructions only, definition is excluded)
    • mthInfoMap

      private Map<MethodInfo,MethodNode> mthInfoMap
    • javaNode

      private JavaClass javaNode
    • DECOMPILE_WITH_MODE_SYNC

      private static final Object DECOMPILE_WITH_MODE_SYNC
  • Constructor Details

  • Method Details

    • load

      private void load(IClassData cls, boolean reloading)
    • restoreUsageData

      private void restoreUsageData()
    • checkSuperType

      private ArgType checkSuperType(IClassData cls)
    • updateGenericClsData

      public void updateGenericClsData(List<ArgType> generics, ArgType superClass, List<ArgType> interfaces)
    • processSpecialClasses

      private static void processSpecialClasses(ClassNode cls)
    • processAttributes

      private static void processAttributes(ClassNode cls)
    • getAccessFlags

      private int getAccessFlags(IClassData cls)
    • addSyntheticClass

      public static ClassNode addSyntheticClass(RootNode root, String name, int accessFlags)
    • addSyntheticClass

      public static ClassNode addSyntheticClass(RootNode root, ClassInfo clsInfo, int accessFlags)
    • initStaticValues

      private void initStaticValues(List<FieldNode> fields)
    • checkSourceFilenameAttr

      private boolean checkSourceFilenameAttr()
    • checkProcessed

      public boolean checkProcessed()
    • ensureProcessed

      public void ensureProcessed()
    • decompile

      public ICodeInfo decompile()
    • decompileWithMode

      public ICodeInfo decompileWithMode(DecompilationMode mode)
      WARNING: Slow operation! Use with caution!
    • getCode

      public ICodeInfo getCode()
    • reloadCode

      public ICodeInfo reloadCode()
    • unloadCode

      public void unloadCode()
    • deepUnload

      public void deepUnload()
    • unloadFromCache

      public void unloadFromCache()
    • decompile

      private ICodeInfo decompile(boolean searchInCache)
    • generateClassCode

      private ICodeInfo generateClassCode()
    • processDefinitionAnnotations

      private static void processDefinitionAnnotations(ICodeInfo codeInfo)
      Save node definition positions found in code
    • getCodeFromCache

      @Nullable public @Nullable ICodeInfo getCodeFromCache()
    • load

      public void load()
      Description copied from interface: ILoadable
      On demand loading
      Specified by:
      load in interface ILoadable
    • unload

      public void unload()
      Description copied from interface: ILoadable
      Free resources
      Specified by:
      unload in interface ILoadable
    • buildCache

      private void buildCache()
    • getSuperClass

      @Nullable public @Nullable ArgType getSuperClass()
    • getInterfaces

      public List<ArgType> getInterfaces()
    • getGenericTypeParameters

      public List<ArgType> getGenericTypeParameters()
    • getType

      public ArgType getType()
    • getMethods

      public List<MethodNode> getMethods()
    • getFields

      public List<FieldNode> getFields()
    • addField

      public void addField(FieldNode fld)
    • getConstField

      @Nullable public @Nullable IFieldInfoRef getConstField(Object obj)
    • getConstField

      @Nullable public @Nullable IFieldInfoRef getConstField(Object obj, boolean searchGlobal)
    • getConstFieldByLiteralArg

      @Nullable public @Nullable IFieldInfoRef getConstFieldByLiteralArg(LiteralArg arg)
    • searchField

      public FieldNode searchField(FieldInfo field)
    • searchFieldByNameAndType

      public FieldNode searchFieldByNameAndType(FieldInfo field)
    • searchFieldByName

      public FieldNode searchFieldByName(String name)
    • searchFieldByShortId

      public FieldNode searchFieldByShortId(String shortId)
    • searchMethod

      public MethodNode searchMethod(MethodInfo mth)
    • searchMethodByShortId

      public MethodNode searchMethodByShortId(String shortId)
    • searchMethodByShortName

      @Nullable public @Nullable MethodNode searchMethodByShortName(String name)
      Return first method by original short name Note: methods are not unique by name (class can have several methods with same name but different signature)
    • getDeclaringClass

      public ClassNode getDeclaringClass()
      Specified by:
      getDeclaringClass in interface ICodeNode
    • getParentClass

      public ClassNode getParentClass()
    • notInner

      public void notInner()
    • rename

      public void rename(String newName)
      Change class name and package (if full name provided) Leading dot can be used to move to default package. Package for inner classes can't be changed.
      Specified by:
      rename in interface IRenameNode
    • changeClassNodePackage

      private boolean changeClassNodePackage(String fullPkg)
    • removeAlias

      public void removeAlias()
    • onParentPackageUpdate

      public void onParentPackageUpdate(PackageNode updatedPkg)
      Specified by:
      onParentPackageUpdate in interface IPackageUpdate
    • getPackageNode

      public PackageNode getPackageNode()
    • getTopParentClass

      public ClassNode getTopParentClass()
    • visitParentClasses

      public void visitParentClasses(Consumer<ClassNode> consumer)
    • visitSuperTypes

      public void visitSuperTypes(BiConsumer<ArgType,ArgType> consumer)
    • hasNotGeneratedParent

      public boolean hasNotGeneratedParent()
    • getInnerClasses

      public List<ClassNode> getInnerClasses()
    • getInlinedClasses

      public List<ClassNode> getInlinedClasses()
    • getInnerAndInlinedClassesRecursive

      public void getInnerAndInlinedClassesRecursive(Set<ClassNode> resultClassesSet)
      Get all inner and inlined classes recursively
      Parameters:
      resultClassesSet - all identified inner and inlined classes are added to this set
    • getInnerClassesRecursive

      public void getInnerClassesRecursive(Set<ClassNode> resultClassesSet)
    • addInnerClass

      public void addInnerClass(ClassNode cls)
    • addInlinedClass

      public void addInlinedClass(ClassNode cls)
    • isEnum

      public boolean isEnum()
    • isAnonymous

      public boolean isAnonymous()
    • isSynthetic

      public boolean isSynthetic()
    • isInner

      public boolean isInner()
    • isTopClass

      public boolean isTopClass()
    • getClassInitMth

      @Nullable public @Nullable MethodNode getClassInitMth()
    • getDefaultConstructor

      @Nullable public @Nullable MethodNode getDefaultConstructor()
    • getAccessFlags

      public AccessInfo getAccessFlags()
      Specified by:
      getAccessFlags in interface ICodeNode
    • setAccessFlags

      public void setAccessFlags(AccessInfo accessFlags)
      Specified by:
      setAccessFlags in interface ICodeNode
    • root

      public RootNode root()
      Specified by:
      root in interface IDexNode
    • typeName

      public String typeName()
      Specified by:
      typeName in interface IDexNode
    • getRawName

      public String getRawName()
    • getClassInfo

      public ClassInfo getClassInfo()
      Internal class info (don't use in code generation and external api).
    • getName

      public String getName()
    • getAlias

      public String getAlias()
    • getShortName

      @Deprecated public String getShortName()
      Deprecated.
      Deprecated. Use getAlias()
    • getFullName

      public String getFullName()
    • getPackage

      public String getPackage()
    • getDisassembledCode

      public String getDisassembledCode()
    • getDisassembledCode

      protected void getDisassembledCode(SimpleCodeWriter code)
    • getClsData

      @Nullable public @Nullable IClassData getClsData()
      Low level class data access.
      Returns:
      null for classes generated by jadx
    • getState

      public ProcessState getState()
    • setState

      public void setState(ProcessState state)
    • getLoadStage

      public LoadStage getLoadStage()
    • setLoadStage

      public void setLoadStage(LoadStage loadStage)
    • reloadAtCodegenStage

      public void reloadAtCodegenStage()
    • getDependencies

      public List<ClassNode> getDependencies()
    • setDependencies

      public void setDependencies(List<ClassNode> dependencies)
    • removeDependency

      public void removeDependency(ClassNode dep)
    • getCodegenDeps

      public List<ClassNode> getCodegenDeps()
    • setCodegenDeps

      public void setCodegenDeps(List<ClassNode> codegenDeps)
    • addCodegenDep

      public void addCodegenDep(ClassNode dep)
    • getTotalDepsCount

      public int getTotalDepsCount()
    • getUseIn

      public List<ClassNode> getUseIn()
      Specified by:
      getUseIn in interface IUsageInfoNode
    • setUseIn

      public void setUseIn(List<ClassNode> useIn)
    • getUseInMth

      public List<MethodNode> getUseInMth()
    • setUseInMth

      public void setUseInMth(List<MethodNode> useInMth)
    • getInputFileName

      public String getInputFileName()
      Specified by:
      getInputFileName in interface IDexNode
    • setInputFileName

      public void setInputFileName(String inputFileName)
    • getJavaNode

      public JavaClass getJavaNode()
    • setJavaNode

      public void setJavaNode(JavaClass javaNode)
    • getAnnType

      public ICodeAnnotation.AnnType getAnnType()
      Specified by:
      getAnnType in interface ICodeAnnotation
    • hashCode

      public int hashCode()
      Overrides:
      hashCode in class Object
    • equals

      public boolean equals(Object o)
      Overrides:
      equals in class Object
    • compareTo

      public int compareTo(@NotNull @NotNull ClassNode o)
      Specified by:
      compareTo in interface Comparable<ClassNode>
    • toString

      public String toString()
      Overrides:
      toString in class Object