Package jadx.core.codegen
Class ClassGen
java.lang.Object
jadx.core.codegen.ClassGen
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final AnnotationGenprivate booleanprivate final ClassNodeprivate intprivate final booleanprivate final IntegerFormatprivate @Nullable NameGenprivate final ClassGenprivate final booleanprivate final boolean -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidaddClassBody(ICodeWriter clsCode) voidaddClassBody(ICodeWriter clsCode, boolean printClassName) voidaddClassCode(ICodeWriter code) voidaddClassDeclaration(ICodeWriter clsCode) private static voidaddClassUsageInfo(ICodeWriter code, ClassNode cls) voidaddClsName(ICodeWriter code, ClassInfo classInfo) voidaddClsShortNameForced(ICodeWriter code, ClassInfo classInfo) private voidaddEnumFields(ICodeWriter code) voidaddField(ICodeWriter code, FieldNode f) private voidaddFields(ICodeWriter code) private static voidaddFieldUsageInfo(ICodeWriter code, FieldNode fieldNode) private voidaddGenerics(ICodeWriter code, ArgType type) booleanaddGenericTypeParameters(ICodeWriter code, List<ArgType> generics, boolean classDeclaration) private voidprivate voidaddImports(ICodeWriter clsCode) private voidaddInnerClass(ICodeWriter code, ClassNode innerCls) private voidaddInnerClsAndMethods(ICodeWriter clsCode) private voidaddInnerType(ICodeWriter code, ArgType baseType) private voidaddInsnBody(InsnGen insnGen, ICodeWriter code, InsnNode insn) private voidaddMethod(ICodeWriter code, MethodNode mth) voidaddMethodCode(ICodeWriter code, MethodNode mth) (package private) static voidaddMthUsageInfo(ICodeWriter code, MethodNode mth) private voidaddPackage(ICodeWriter clsCode) private static booleancheckInnerCollision(RootNode root, @Nullable ClassInfo useCls, ClassInfo searchCls) private static booleancheckInPackageCollision(RootNode root, ClassInfo useCls, ClassInfo searchCls) Check if class with same name exists in current packageprivate StringexpandInnerClassName(ClassInfo useCls, ClassInfo extClsInfo) private intgetEnumCtrSkipArgsCount(@Nullable MethodNode callMth) private StringgetIntegerString(long lit, ArgType type) @Nullable NameGenbooleanprivate static booleanisBothClassesInOneTopClass(ClassInfo useCls, ClassInfo extClsInfo) private static booleanisClassInnerFor(ClassInfo inner, ClassInfo parent) booleanprivate booleanprivate booleanprivate booleanprivate InsnGenmakeInsnGen(MethodNode mth) private ICodeInfovoidsetBodyGenStarted(boolean bodyGenStarted) voidsetOuterNameGen(@NotNull NameGen outerNameGen) private booleanskipMethod(MethodNode mth) Additional checks for inlined methodsprivate booleanskipNode(NotificationAttrNode node) voiduseClass(ICodeWriter code, ClassInfo classInfo) voiduseClass(ICodeWriter code, ArgType type) voiduseClass(ICodeWriter code, ClassNode classNode) voiduseClass(ICodeWriter code, String rawCls) private StringuseClassInternal(ClassInfo useCls, ClassInfo extClsInfo) private voiduseClassWithShortName(ICodeWriter code, ArgType baseType, ArgType type) voiduseType(ICodeWriter code, ArgType type)
-
Field Details
-
cls
-
parentGen
-
annotationGen
-
fallback
private final boolean fallback -
useImports
private final boolean useImports -
showInconsistentCode
private final boolean showInconsistentCode -
integerFormat
-
imports
-
clsDeclOffset
private int clsDeclOffset -
bodyGenStarted
private boolean bodyGenStarted -
outerNameGen
-
-
Constructor Details
-
ClassGen
-
ClassGen
-
ClassGen
public ClassGen(ClassNode cls, ClassGen parentClsGen, boolean useImports, boolean fallback, boolean showBadCode, IntegerFormat integerFormat)
-
-
Method Details
-
getClassNode
-
makeClass
- Throws:
CodegenException
-
addPackage
-
addImports
-
makePackageInfo
-
addClassCode
- Throws:
CodegenException
-
addClassDeclaration
-
addGenericTypeParameters
public boolean addGenericTypeParameters(ICodeWriter code, List<ArgType> generics, boolean classDeclaration) -
addClassBody
- Throws:
CodegenException
-
addClassBody
- Parameters:
printClassName- allows to print the original class name as comment (e.g. for inlined classes)- Throws:
CodegenException
-
addInnerClsAndMethods
-
skipNode
-
addInnerClass
-
isInnerClassesPresents
private boolean isInnerClassesPresents() -
addMethod
-
skipMethod
Additional checks for inlined methods -
isMethodsPresents
private boolean isMethodsPresents() -
addMethodCode
- Throws:
CodegenException
-
addFields
- Throws:
CodegenException
-
addField
-
getIntegerString
-
isFieldsPresents
private boolean isFieldsPresents() -
addEnumFields
- Throws:
CodegenException
-
getEnumCtrSkipArgsCount
-
makeInsnGen
-
addInsnBody
-
useType
-
useClass
-
useClass
-
addInnerType
-
useClassWithShortName
-
addGenerics
-
useClass
-
useClass
-
addClsName
-
addClsShortNameForced
-
useClassInternal
-
expandInnerClassName
-
addImport
-
getImports
-
isBothClassesInOneTopClass
-
isClassInnerFor
-
checkInnerCollision
-
checkInPackageCollision
private static boolean checkInPackageCollision(RootNode root, ClassInfo useCls, ClassInfo searchCls) Check if class with same name exists in current package -
addClassUsageInfo
-
addMthUsageInfo
-
addFieldUsageInfo
-
getParentGen
-
getAnnotationGen
-
isFallbackMode
public boolean isFallbackMode() -
isBodyGenStarted
public boolean isBodyGenStarted() -
setBodyGenStarted
public void setBodyGenStarted(boolean bodyGenStarted) -
getOuterNameGen
-
setOuterNameGen
-