Showing preview only (759K chars total). Download the full file or copy to clipboard to get everything.
Repository: ItzSomebody/Radon
Branch: master
Commit: 7d3e8719afdb
Files: 203
Total size: 684.8 KB
Directory structure:
gitextract__kzzqxxi/
├── .editorconfig
├── .gitignore
├── .travis.yml
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── build.gradle
├── docs/
│ ├── changelog.md
│ ├── exclusions.md
│ └── index.md
├── gradle/
│ └── wrapper/
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── settings.gradle
├── xyz.itzsomebody.codegen/
│ ├── README.md
│ ├── build.gradle
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── xyz/
│ │ └── itzsomebody/
│ │ └── codegen/
│ │ ├── BytecodeBlock.java
│ │ ├── GenerationContext.java
│ │ ├── Utils.java
│ │ ├── WrappedHandle.java
│ │ ├── WrappedType.java
│ │ ├── exceptions/
│ │ │ └── UncompilableNodeException.java
│ │ ├── expressions/
│ │ │ ├── IRExpression.java
│ │ │ ├── IRExpressions.java
│ │ │ ├── IRVariable.java
│ │ │ ├── flow/
│ │ │ │ ├── IRFlowStructure.java
│ │ │ │ ├── IRForStructure.java
│ │ │ │ ├── IRIfStructure.java
│ │ │ │ ├── IRSwitchStructure.java
│ │ │ │ ├── IRSynchronizedStructure.java
│ │ │ │ ├── IRTryCatchStructure.java
│ │ │ │ └── IRWhileStructure.java
│ │ │ └── predefined/
│ │ │ ├── IRArithmeticExpression.java
│ │ │ ├── IRArrayLengthExpression.java
│ │ │ ├── IRCastExpression.java
│ │ │ ├── IRConstantExpression.java
│ │ │ ├── IRGetArrayElementExpression.java
│ │ │ ├── IRGetFieldExpression.java
│ │ │ ├── IRInstanceOfExpression.java
│ │ │ ├── IRInvocationExpression.java
│ │ │ ├── IRInvokeDynamicExpression.java
│ │ │ ├── IRNegateExpression.java
│ │ │ ├── IRNewArrayExpression.java
│ │ │ ├── IRNewInstanceExpression.java
│ │ │ ├── IRReturnExpression.java
│ │ │ ├── IRSetArrayElementExpression.java
│ │ │ ├── IRSetFieldExpression.java
│ │ │ ├── IRSetVariableExpression.java
│ │ │ └── IRThrowExceptionExpression.java
│ │ └── instructions/
│ │ ├── BytecodeLabel.java
│ │ ├── CompilableNode.java
│ │ ├── ConstantNode.java
│ │ ├── FieldAccessNode.java
│ │ ├── InvokeDynamicNode.java
│ │ ├── InvokeNode.java
│ │ ├── JumpNode.java
│ │ ├── NewArrayNode.java
│ │ ├── RegisterNode.java
│ │ ├── SimpleNode.java
│ │ ├── SwitchNode.java
│ │ └── TypeNode.java
│ └── test/
│ └── java/
│ └── xyz/
│ └── itzsomebody/
│ └── codegen/
│ ├── UtilsTester.java
│ ├── WrappedTypeTester.java
│ ├── expressions/
│ │ ├── IRVariableTester.java
│ │ └── predefined/
│ │ ├── IRArithmeticExpressionTester.java
│ │ ├── IRArrayLengthTester.java
│ │ ├── IRCastExpressionTester.java
│ │ ├── IRConstantTester.java
│ │ ├── IRGetArrayElementExpressionTester.java
│ │ ├── IRGetFieldExpressionTester.java
│ │ ├── IRInstanceOfExpressionTester.java
│ │ ├── IRInvocationExpressionTester.java
│ │ ├── IRInvokeDynamicExpressionTester.java
│ │ ├── IRNegateExpressionTester.java
│ │ ├── IRNewArrayExpressionTester.java
│ │ ├── IRNewInstanceExpressionTester.java
│ │ ├── IRReturnExpressionTester.java
│ │ ├── IRSetArrayElementExpressionTester.java
│ │ ├── IRSetFieldExpressionTester.java
│ │ └── IRSetVariableExpressionTester.java
│ └── instructions/
│ ├── BytecodeLabelTester.java
│ ├── ConstantNodeTester.java
│ ├── FieldAccessNodeTester.java
│ ├── InvokeDynamicNodeTester.java
│ ├── InvokeNodeTester.java
│ ├── NewArrayNodeTester.java
│ └── TypeNodeTester.java
├── xyz.itzsomebody.commons/
│ ├── README.md
│ ├── build.gradle
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── xyz/
│ │ └── itzsomebody/
│ │ └── commons/
│ │ ├── InsnListModifier.java
│ │ ├── MaxLocalsUpdater.java
│ │ ├── analysis/
│ │ │ ├── callgraph/
│ │ │ │ └── CallGraphAnalyzer.java
│ │ │ ├── cfg/
│ │ │ │ └── CFGAnalyzer.java
│ │ │ └── frame/
│ │ │ └── FrameAnalyzer.java
│ │ └── matcher/
│ │ ├── InstructionMatcher.java
│ │ ├── InstructionPattern.java
│ │ └── rules/
│ │ ├── AccessFieldRule.java
│ │ ├── DoubleConstRule.java
│ │ ├── FloatConstRule.java
│ │ ├── InstructionRule.java
│ │ ├── IntConstRule.java
│ │ ├── InvocationRule.java
│ │ ├── LongConstRule.java
│ │ ├── OpcodeRule.java
│ │ └── WildcardRule.java
│ └── test/
│ └── java/
│ └── xyz/
│ └── itzsomebody/
│ └── commons/
│ ├── InsnListModifierTester.java
│ ├── MaxLocalsUpdaterTester.java
│ ├── TestingUtils.java
│ └── matcher/
│ ├── InstructionMatcherTester.java
│ └── rules/
│ ├── AccessFieldRuleTester.java
│ ├── DoubleConstRuleTester.java
│ ├── FloatConstRuleTester.java
│ ├── IntConstRuleTester.java
│ ├── InvocationRuleTester.java
│ └── LongConstRuleTester.java
├── xyz.itzsomebody.radon/
│ ├── build.gradle
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── xyz/
│ │ │ └── itzsomebody/
│ │ │ └── radon/
│ │ │ ├── Radon.java
│ │ │ ├── RadonConstants.java
│ │ │ ├── RadonMain.java
│ │ │ ├── cli/
│ │ │ │ ├── CmdArgsParser.java
│ │ │ │ └── CmdSwitch.java
│ │ │ ├── config/
│ │ │ │ ├── ConfigurationParser.java
│ │ │ │ ├── DictionaryDeserializer.java
│ │ │ │ ├── ExclusionsDeserializer.java
│ │ │ │ ├── ObfConfig.java
│ │ │ │ └── TransformerDeserializer.java
│ │ │ ├── dictionaries/
│ │ │ │ ├── Dictionary.java
│ │ │ │ ├── DictionaryFactory.java
│ │ │ │ └── defined/
│ │ │ │ ├── AlphaNumericDictionary.java
│ │ │ │ ├── AlphabeticalDictionary.java
│ │ │ │ ├── CustomCharsetDictionary.java
│ │ │ │ ├── RandomUnicodeDictionary.java
│ │ │ │ ├── SpacesDictionary.java
│ │ │ │ └── UnrecognizedDictionary.java
│ │ │ ├── exceptions/
│ │ │ │ ├── FatalRadonException.java
│ │ │ │ ├── MissingClassException.java
│ │ │ │ ├── MissingResourceException.java
│ │ │ │ └── PreventableRadonException.java
│ │ │ ├── exclusions/
│ │ │ │ ├── Exclusion.java
│ │ │ │ └── ExclusionManager.java
│ │ │ ├── transformers/
│ │ │ │ ├── Transformer.java
│ │ │ │ ├── Transformers.java
│ │ │ │ ├── exploiter/
│ │ │ │ │ └── ExploiterTransformer.java
│ │ │ │ ├── flow/
│ │ │ │ │ └── FlowTransformer.java
│ │ │ │ ├── math/
│ │ │ │ │ └── NumberTransformer.java
│ │ │ │ ├── misc/
│ │ │ │ │ ├── AddBridgeAccess.java
│ │ │ │ │ ├── AddDeprecatedAccess.java
│ │ │ │ │ ├── AddSyntheticAccess.java
│ │ │ │ │ ├── AddTrashClasses.java
│ │ │ │ │ ├── AntiDebugger.java
│ │ │ │ │ ├── ExpirationKillSwitch.java
│ │ │ │ │ ├── Packer.java
│ │ │ │ │ ├── Renamer.java
│ │ │ │ │ ├── ResourceRenamer.java
│ │ │ │ │ ├── ScrambleLineNumbers.java
│ │ │ │ │ ├── ShuffleMembers.java
│ │ │ │ │ └── Watermarker.java
│ │ │ │ ├── references/
│ │ │ │ │ └── ReferenceTransformer.java
│ │ │ │ ├── shrinker/
│ │ │ │ │ ├── RemoveDeprecatedAccess.java
│ │ │ │ │ ├── RemoveInnerClassesAttribute.java
│ │ │ │ │ ├── RemoveInvisibleAnnotations.java
│ │ │ │ │ ├── RemoveInvisibleParameterAnnotations.java
│ │ │ │ │ ├── RemoveInvisibleTypeAnnotations.java
│ │ │ │ │ ├── RemoveLineNumbers.java
│ │ │ │ │ ├── RemoveLocalVariableTable.java
│ │ │ │ │ ├── RemoveOuterMethodAttribute.java
│ │ │ │ │ ├── RemoveSignatureAttribute.java
│ │ │ │ │ ├── RemoveSourceDebugAttribute.java
│ │ │ │ │ ├── RemoveSourceFileAttribute.java
│ │ │ │ │ ├── RemoveSyntheticAccessAttribute.java
│ │ │ │ │ ├── RemoveUnknownAttributes.java
│ │ │ │ │ ├── RemoveVisibleAnnotations.java
│ │ │ │ │ ├── RemoveVisibleParameterAnnotations.java
│ │ │ │ │ ├── RemoveVisibleTypeAnnotations.java
│ │ │ │ │ └── ShrinkerTransformer.java
│ │ │ │ └── strings/
│ │ │ │ ├── AESPCBCEncryptor.java
│ │ │ │ ├── AESPCBCStringEncryption.java
│ │ │ │ ├── StaticFieldStrPool.java
│ │ │ │ ├── Str2Base64Encoding.java
│ │ │ │ └── StringTransformer.java
│ │ │ └── utils/
│ │ │ ├── IOUtils.java
│ │ │ ├── JarLoader.java
│ │ │ ├── JarWriter.java
│ │ │ ├── RandomUtils.java
│ │ │ ├── asm/
│ │ │ │ ├── ASMUtils.java
│ │ │ │ ├── ClassWrapper.java
│ │ │ │ ├── FieldWrapper.java
│ │ │ │ ├── FieldWrappers.java
│ │ │ │ ├── MethodWrapper.java
│ │ │ │ ├── MethodWrappers.java
│ │ │ │ ├── RadonClassWriter.java
│ │ │ │ ├── RadonRemapper.java
│ │ │ │ └── ResourceNameRemapper.java
│ │ │ └── logging/
│ │ │ ├── RadonConsoleHandler.java
│ │ │ └── RadonLogger.java
│ │ └── resources/
│ │ ├── asm-license.txt
│ │ ├── jackson-license.txt
│ │ └── radon-license.txt
│ └── test/
│ └── java/
│ └── me/
│ └── itzsomebody/
│ └── radon/
│ └── transformers/
│ └── TransformersTest.java
└── xyz.itzsomebody.radon.template/
├── build.gradle
└── src/
├── README.md
└── main/
└── java/
└── xyz/
└── itzsomebody/
└── radon/
└── templates/
└── string/
└── AESPCBCDecryptor.java
================================================
FILE CONTENTS
================================================
================================================
FILE: .editorconfig
================================================
root = true
[*]
charset = utf-8
end_of_line = lf
indent_size = 4
indent_style = space
insert_final_newline = false
max_line_length = 120
tab_width = 4
ij_continuation_indent_size = 8
ij_formatter_off_tag = @formatter:off
ij_formatter_on_tag = @formatter:on
ij_formatter_tags_enabled = false
ij_smart_tabs = false
ij_wrap_on_typing = false
[*.java]
ij_java_align_consecutive_assignments = false
ij_java_align_consecutive_variable_declarations = false
ij_java_align_group_field_declarations = false
ij_java_align_multiline_annotation_parameters = false
ij_java_align_multiline_array_initializer_expression = false
ij_java_align_multiline_assignment = false
ij_java_align_multiline_binary_operation = false
ij_java_align_multiline_chained_methods = false
ij_java_align_multiline_extends_list = false
ij_java_align_multiline_for = true
ij_java_align_multiline_method_parentheses = false
ij_java_align_multiline_parameters = true
ij_java_align_multiline_parameters_in_calls = false
ij_java_align_multiline_parenthesized_expression = false
ij_java_align_multiline_records = true
ij_java_align_multiline_resources = true
ij_java_align_multiline_ternary_operation = false
ij_java_align_multiline_text_blocks = false
ij_java_align_multiline_throws_list = false
ij_java_align_subsequent_simple_methods = false
ij_java_align_throws_keyword = false
ij_java_annotation_parameter_wrap = off
ij_java_array_initializer_new_line_after_left_brace = false
ij_java_array_initializer_right_brace_on_new_line = false
ij_java_array_initializer_wrap = off
ij_java_assert_statement_colon_on_next_line = false
ij_java_assert_statement_wrap = off
ij_java_assignment_wrap = off
ij_java_binary_operation_sign_on_next_line = false
ij_java_binary_operation_wrap = off
ij_java_blank_lines_after_anonymous_class_header = 0
ij_java_blank_lines_after_class_header = 0
ij_java_blank_lines_after_imports = 1
ij_java_blank_lines_after_package = 1
ij_java_blank_lines_around_class = 1
ij_java_blank_lines_around_field = 0
ij_java_blank_lines_around_field_in_interface = 0
ij_java_blank_lines_around_initializer = 1
ij_java_blank_lines_around_method = 1
ij_java_blank_lines_around_method_in_interface = 1
ij_java_blank_lines_before_class_end = 0
ij_java_blank_lines_before_imports = 1
ij_java_blank_lines_before_method_body = 0
ij_java_blank_lines_before_package = 0
ij_java_block_brace_style = end_of_line
ij_java_block_comment_at_first_column = true
ij_java_call_parameters_new_line_after_left_paren = false
ij_java_call_parameters_right_paren_on_new_line = false
ij_java_call_parameters_wrap = off
ij_java_case_statement_on_separate_line = true
ij_java_catch_on_new_line = false
ij_java_class_annotation_wrap = split_into_lines
ij_java_class_brace_style = end_of_line
ij_java_class_count_to_use_import_on_demand = 5
ij_java_class_names_in_javadoc = 1
ij_java_do_not_indent_top_level_class_members = false
ij_java_do_not_wrap_after_single_annotation = false
ij_java_do_while_brace_force = never
ij_java_doc_add_blank_line_after_description = true
ij_java_doc_add_blank_line_after_param_comments = false
ij_java_doc_add_blank_line_after_return = false
ij_java_doc_add_p_tag_on_empty_lines = true
ij_java_doc_align_exception_comments = true
ij_java_doc_align_param_comments = true
ij_java_doc_do_not_wrap_if_one_line = false
ij_java_doc_enable_formatting = true
ij_java_doc_enable_leading_asterisks = true
ij_java_doc_indent_on_continuation = false
ij_java_doc_keep_empty_lines = true
ij_java_doc_keep_empty_parameter_tag = true
ij_java_doc_keep_empty_return_tag = true
ij_java_doc_keep_empty_throws_tag = true
ij_java_doc_keep_invalid_tags = true
ij_java_doc_param_description_on_new_line = false
ij_java_doc_preserve_line_breaks = false
ij_java_doc_use_throws_not_exception_tag = true
ij_java_else_on_new_line = false
ij_java_entity_dd_suffix = EJB
ij_java_entity_eb_suffix = Bean
ij_java_entity_hi_suffix = Home
ij_java_entity_lhi_prefix = Local
ij_java_entity_lhi_suffix = Home
ij_java_entity_li_prefix = Local
ij_java_entity_pk_class = java.lang.String
ij_java_entity_vo_suffix = VO
ij_java_enum_constants_wrap = off
ij_java_extends_keyword_wrap = off
ij_java_extends_list_wrap = off
ij_java_field_annotation_wrap = split_into_lines
ij_java_finally_on_new_line = false
ij_java_for_brace_force = never
ij_java_for_statement_new_line_after_left_paren = false
ij_java_for_statement_right_paren_on_new_line = false
ij_java_for_statement_wrap = off
ij_java_generate_final_locals = false
ij_java_generate_final_parameters = false
ij_java_if_brace_force = never
ij_java_imports_layout = *,|,javax.**,java.**,|,$*
ij_java_indent_case_from_switch = true
ij_java_insert_inner_class_imports = false
ij_java_insert_override_annotation = true
ij_java_keep_blank_lines_before_right_brace = 2
ij_java_keep_blank_lines_between_package_declaration_and_header = 2
ij_java_keep_blank_lines_in_code = 2
ij_java_keep_blank_lines_in_declarations = 2
ij_java_keep_control_statement_in_one_line = true
ij_java_keep_first_column_comment = true
ij_java_keep_indents_on_empty_lines = false
ij_java_keep_line_breaks = true
ij_java_keep_multiple_expressions_in_one_line = false
ij_java_keep_simple_blocks_in_one_line = false
ij_java_keep_simple_classes_in_one_line = false
ij_java_keep_simple_lambdas_in_one_line = false
ij_java_keep_simple_methods_in_one_line = false
ij_java_label_indent_absolute = false
ij_java_label_indent_size = 0
ij_java_lambda_brace_style = end_of_line
ij_java_layout_static_imports_separately = true
ij_java_line_comment_add_space = false
ij_java_line_comment_at_first_column = true
ij_java_message_dd_suffix = EJB
ij_java_message_eb_suffix = Bean
ij_java_method_annotation_wrap = split_into_lines
ij_java_method_brace_style = end_of_line
ij_java_method_call_chain_wrap = off
ij_java_method_parameters_new_line_after_left_paren = false
ij_java_method_parameters_right_paren_on_new_line = false
ij_java_method_parameters_wrap = off
ij_java_modifier_list_wrap = false
ij_java_names_count_to_use_import_on_demand = 3
ij_java_new_line_after_lparen_in_record_header = false
ij_java_packages_to_use_import_on_demand = java.awt.*,javax.swing.*
ij_java_parameter_annotation_wrap = off
ij_java_parentheses_expression_new_line_after_left_paren = false
ij_java_parentheses_expression_right_paren_on_new_line = false
ij_java_place_assignment_sign_on_next_line = false
ij_java_prefer_longer_names = true
ij_java_prefer_parameters_wrap = false
ij_java_record_components_wrap = normal
ij_java_repeat_synchronized = true
ij_java_replace_instanceof_and_cast = false
ij_java_replace_null_check = true
ij_java_replace_sum_lambda_with_method_ref = true
ij_java_resource_list_new_line_after_left_paren = false
ij_java_resource_list_right_paren_on_new_line = false
ij_java_resource_list_wrap = off
ij_java_rparen_on_new_line_in_record_header = false
ij_java_session_dd_suffix = EJB
ij_java_session_eb_suffix = Bean
ij_java_session_hi_suffix = Home
ij_java_session_lhi_prefix = Local
ij_java_session_lhi_suffix = Home
ij_java_session_li_prefix = Local
ij_java_session_si_suffix = Service
ij_java_space_after_closing_angle_bracket_in_type_argument = false
ij_java_space_after_colon = true
ij_java_space_after_comma = true
ij_java_space_after_comma_in_type_arguments = true
ij_java_space_after_for_semicolon = true
ij_java_space_after_quest = true
ij_java_space_after_type_cast = true
ij_java_space_before_annotation_array_initializer_left_brace = false
ij_java_space_before_annotation_parameter_list = false
ij_java_space_before_array_initializer_left_brace = false
ij_java_space_before_catch_keyword = true
ij_java_space_before_catch_left_brace = true
ij_java_space_before_catch_parentheses = true
ij_java_space_before_class_left_brace = true
ij_java_space_before_colon = true
ij_java_space_before_colon_in_foreach = true
ij_java_space_before_comma = false
ij_java_space_before_do_left_brace = true
ij_java_space_before_else_keyword = true
ij_java_space_before_else_left_brace = true
ij_java_space_before_finally_keyword = true
ij_java_space_before_finally_left_brace = true
ij_java_space_before_for_left_brace = true
ij_java_space_before_for_parentheses = true
ij_java_space_before_for_semicolon = false
ij_java_space_before_if_left_brace = true
ij_java_space_before_if_parentheses = true
ij_java_space_before_method_call_parentheses = false
ij_java_space_before_method_left_brace = true
ij_java_space_before_method_parentheses = false
ij_java_space_before_opening_angle_bracket_in_type_parameter = false
ij_java_space_before_quest = true
ij_java_space_before_switch_left_brace = true
ij_java_space_before_switch_parentheses = true
ij_java_space_before_synchronized_left_brace = true
ij_java_space_before_synchronized_parentheses = true
ij_java_space_before_try_left_brace = true
ij_java_space_before_try_parentheses = true
ij_java_space_before_type_parameter_list = false
ij_java_space_before_while_keyword = true
ij_java_space_before_while_left_brace = true
ij_java_space_before_while_parentheses = true
ij_java_space_inside_one_line_enum_braces = false
ij_java_space_within_empty_array_initializer_braces = false
ij_java_space_within_empty_method_call_parentheses = false
ij_java_space_within_empty_method_parentheses = false
ij_java_spaces_around_additive_operators = true
ij_java_spaces_around_assignment_operators = true
ij_java_spaces_around_bitwise_operators = true
ij_java_spaces_around_equality_operators = true
ij_java_spaces_around_lambda_arrow = true
ij_java_spaces_around_logical_operators = true
ij_java_spaces_around_method_ref_dbl_colon = false
ij_java_spaces_around_multiplicative_operators = true
ij_java_spaces_around_relational_operators = true
ij_java_spaces_around_shift_operators = true
ij_java_spaces_around_type_bounds_in_type_parameters = true
ij_java_spaces_around_unary_operator = false
ij_java_spaces_within_angle_brackets = false
ij_java_spaces_within_annotation_parentheses = false
ij_java_spaces_within_array_initializer_braces = false
ij_java_spaces_within_braces = false
ij_java_spaces_within_brackets = false
ij_java_spaces_within_cast_parentheses = false
ij_java_spaces_within_catch_parentheses = false
ij_java_spaces_within_for_parentheses = false
ij_java_spaces_within_if_parentheses = false
ij_java_spaces_within_method_call_parentheses = false
ij_java_spaces_within_method_parentheses = false
ij_java_spaces_within_parentheses = false
ij_java_spaces_within_switch_parentheses = false
ij_java_spaces_within_synchronized_parentheses = false
ij_java_spaces_within_try_parentheses = false
ij_java_spaces_within_while_parentheses = false
ij_java_special_else_if_treatment = true
ij_java_subclass_name_suffix = Impl
ij_java_ternary_operation_signs_on_next_line = false
ij_java_ternary_operation_wrap = off
ij_java_test_name_suffix = Test
ij_java_throws_keyword_wrap = off
ij_java_throws_list_wrap = off
ij_java_use_external_annotations = false
ij_java_use_fq_class_names = false
ij_java_use_relative_indents = false
ij_java_use_single_class_imports = true
ij_java_variable_annotation_wrap = off
ij_java_visibility = public
ij_java_while_brace_force = never
ij_java_while_on_new_line = false
ij_java_wrap_comments = false
ij_java_wrap_first_method_in_call_chain = false
ij_java_wrap_long_lines = false
================================================
FILE: .gitignore
================================================
# Compiled class file
*.class
# Gradle
.gradle/
build/
# Eclipse
.setup/
bin/
.classpath
.project
# IntelliJ
*.iml
.idea/
out/
# VS Code
.settings/
# Radon
radon.log
radon.log.lck
================================================
FILE: .travis.yml
================================================
language: java
install: true
dist: trusty
jdk:
- oraclejdk11
script:
- ./gradlew build
================================================
FILE: CONTRIBUTING.md
================================================
# Radon Contribution Guide
## Table of Contents
* [GitHub](#github)
* [Issue Reports](#issue-reports)
* [Pull Requests](#pull-requests)
* [Styleguides](#styleguides)
* [Git Commit Messages](#git-commit-messages)
* [Java Styleguide](#java-styleguide)
* [Transformer Documentation](#transformer-documentation)
## GitHub
### Issue Reports
Found an issue with Radon? Awesome. Make sure you read the following before reporting it:
#### Before Submitting an Issue Report
* **Check the FAQ in the readme**. Radon has had numerous "bugs/errors/issues" reported which were completely
preventable due to configuration.
* **Check if the issue has already been reported**. Should said issue already exist, add a comment on the issue rather
than starting a new one.
* **Check if you made a YAML error**. You can use an online YAML verifier like
[this one](http://www.yamllint.com/) to catch errors quickly.
* **If possible, please spend a little time debugging before reporting the issue!** This could save a ton of time for
you and anyone who decides to fix the bug. If you are able to locate the precise issue in Radon's codebase, chances are
a fix can be implemented much sooner.
#### Submitting an Issue Report as a Bug
All bugs are tracked as GitHub issues for organizational purposes. For that reason, please do not report bugs in the
Discord and expect a fix as I am prone to forgetfulness.
When opening a bug report, please make sure to follow the below:
* **Use a clear and descriptive title**.
* Example of a **good** title: "Using the FastInvokedynamic transformer on any Spigot plugin results in NPE from
radon"
* Example of a **good** title: "Adding an exclusion hangs the renamer"
* Example of a **bad** title: "Adding an exclusions causes bug"
* Example of a **bad** title: "Radon bug"
* **Be as specific and descriptive as possible when describing the issue**. It really annoys me and other people when
your description is vague. I should be able to understand exactly what the issue is with no questions asked.
* **Be as detailed as you can when describing the expected behavior.** Same reason as above.
* **Provide the git commit hash you build Radon from.** This allows me or anyone investigating the issue to instantly
find the version of Radon you are using. Saying "latest" or similar will result in an instant close of your issue with
no help provided. If you're not going to make an effort to make a proper report, then I'm not going to make an effort to
help.
* **Provide the exact configuration used in code blocks**. This means no blanking out lines and no screenshots. I
apologize in advance if privacy is desired, but issues that could have been solved in 5 seconds have lasted multiple
hours because people hid parts of their configuration while requesting help.
* **Provide the relevant errors and exceptions in code blocks.** Please do not put screenshots here and make sure to put
each error in its own markdown code block. Also, please make sure you specify when the error happens.
* **Be as specific and detailed as possible when doing reproduction steps**. This is where some of the worst
miscommunications have happened which resulted in a ton of wasted time. Please just put in a little effort so that I
know *exactly* what you did.
* **Attach / link what you attempted to obfuscate**. This is a mandatory for all software problems created by the
obfuscation. If you are unable to attach or link the software you obfuscated, attach a proof-of-concept JAR which also
causes the same issue to happen. If possible, please also provide the obfuscated output.
Extra: [this video](https://www.youtube.com/watch?v=53zkBvL4ZB4&vl=en) by
[LiveOverflow](https://github.com/LiveOverflow) and this [webpage](http://www.catb.org/esr/faqs/smart-questions.html)
are good references for properly asking a question.
#### Submitting an Issue Report as an Enhancement / Feature Request
All enhancements and feature requests are tracked as GitHub issues for organizational purposes.
When opening an enhancement / feature request, please make sure to follow the below:
* **Use a clear and descriptive title**. Please also prefix the title with [Enhancement/FR] so there's no room for
confusion.
* Example of a **good** title: "[Enhancement] Use dynamic decryption methods for XXXX instead of YYYY"
* Example of a **good** title: "[Feature Request] Transformer to flatten the CFG"
* Example of a **bad** title: "suggestion"
* Example of a **bad** title: "thing to make radon better"
* **Provide an in-depth description of what the feature should do.** You need to be as descriptive as possible to the
point where people shouldn't have to ask question to understand what the feature/enhancement will do.
#### Pull Requests
Pull requests should fulfill one of the following:
* Spelling / grammatical errors in documentation, Javadocs, or markdown files.
* Fix issues reported on the issue tracker.
* Implement an enhancement / feature request on the issue tracker.
* If a transformer is implemented, it needs to be added as an enum field to
1. `xyz.itzsomebody.radon.transformers.Transformers` and
2. (Optional) Be documented accordingly.
* Update code or documentation to adhere to the specified style guides.
* Replace poorly-written or spaghetti code with properly-written and thought-out code.
The rules for guidelines are pretty simple:
* Follow the style guides.
* Fix your commits should status checks fail.
* If the PR adds features / code, make sure you also appropriately document said additions.
* No need to squash commits -- I will personally do that if I think it's necessary.
## Style guides
#### Git Commit Messages
* Use present tense.
* Use the imperative mood.
#### Java
All Java code should adhere to the provided EditorConfig file. Even though the column limit is set to 120, feel free to
ignore that.
#### Markdown
All markdown files are required to be hard-wrapped at 120 characters. The only exceptions are extremely long URLs and
code snippets.
================================================
FILE: LICENSE
================================================
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
================================================
FILE: README.md
================================================
# [Abandoned] Radon Java Bytecode Obfuscator
## Radon is no longer maintained
It's important to note that Radon is intended for __***experimentation only***__. If your software breaks in production
because you protected it with Radon then that is completely on you.
If you have a quick question about how something works, you can join my [Discord](https://discord.gg/RfuxTea)
server and ask.
This project is **not** likely to be production-safe nor bug free. If you would
like some pointers to production-safe (more or less) and less buggy Java
bytecode obfuscators that are properly maintained, I would suggest one of these:
* [Proguard](https://www.guardsquare.com/en/products/proguard) (mostly only
class/method/field name obfuscation)
* [Skidfuscator](https://github.com/terminalsin/skidfuscator-java-obfuscator) - [Discord](https://discord.gg/QJC9g8fBU9)
* [Zelix KlassMaster](http://www.zelix.com/)
Since we're on the topic of obfuscation, consider taking a look at
[Recaf](https://github.com/Col-E/Recaf) ([Discord](https://discord.gg/Bya5HaA))
if you have not already. Recaf is actively maintained by the contributers to
stay on top of a variety obfuscation techniques found in the wild. I would
highly recommend learning to use Recaf for those who are into Java reverse-engineering.
[Skidfuscator](https://github.com/terminalsin/skidfuscator-java-obfuscator) is probably
one of the most promising Java bytecode obfuscation projects I have seen and has a much
more sanely-managed codebase than most obfuscators do (including Radon). I would recommend
anyone trying to get into Java obfuscation to spend time learning how Skidfuscator works.
Another resource (slightly dated, but still a good amount of information) is
GenericException's [SkidSuite](https://github.com/GenericException/SkidSuite) repo.
Some common cheap obfuscation techniques that have become more common in the last
few years are documented there which anyone who is interested in Java reverse-engineering
should know.
Additionally, here are some other obfuscators/protectors for Java that you could
check out for fun or learning (though not necessarily I would recommend using are):
* [Allatori](http://www.allatori.com/) - Commericial. Somewhat popular choice in industry.
* [avaj](https://github.com/cg-dot/avaj) - FOSS. Has a nice way of generating decryption subroutines on string constants. Also has some CFG flattening which is always nice to see.
* [BisGuard](http://www.bisguard.com/) - Commercial. Relies entirely on class encryption (last time I checked, at least) so protection has quite a bit of room for improvement.
* [Bozar](https://github.com/vimasig/Bozar) - Points for FOSS. Has some cheap tricks that I have seen being used in the Minecraft community.
* [Branchlock](https://branchlock.net/) - Commercial. Shows up a bit in the Minecraft community.
* [Caesium](https://github.com/sim0n/Caesium) - FOSS. Has a transformer that implements a well-known HTML injection into any Java reverse-engineering tool that parses HTML tags.
* [ClassGuard](https://zenofx.com/classguard/) - Commercial. Relies mostly on class encryption with hardcoded AES keys in native libs. Pretty easy IDA/Binary Ninja/Ghidra exercise if you want to flex on your blog on something.
* [DashO](https://www.preemptive.com/products/dasho/overview) - Commercial. Shows up a bit in industry and has some interesting ideas (albeit probably outdated) in flow obfuscation.
* [JBCO](http://www.sable.mcgill.ca/JBCO/) - FOSS. Some interesting flow obfuscation techniques that still work in modern Java. Based on the [Soot](https://github.com/soot-oss/soot) library which is also something worthwhile checking out.
* [JObf](https://github.com/superblaubeere27/obfuscator) - FOSS. Pretty outdated. Some of the transformations done show up in the Minecraft community so it can be worthwhile spending a bit of time takinng a look at this.
* [JObfuscator](https://www.pelock.com/products/jobfuscator) - Commericial. Never seen this used before so I cannot really give any comments.
* [NeonObf](https://github.com/MoofMonkey/NeonObf) - Mostly points for FOSS. Made up of the easier to defeat obfuscation techniques. NeonObf is also the name inspiration for Radon.
* [Obzcure](https://obzcu.re/) [Discord](https://discordapp.com/invite/fUCPxq8) (Dead) - Commericial. Web-based obfuscation service with some inspiration taken from Radon and [SkidSuite2](https://github.com/GenericException/SkidSuite/tree/master/archive/skidsuite-2). Used to go by the name "SpigotProtect" so you might see some Spigot plugins using the obfuscation from this product if you look around hard enough.
* [Paramorphism](https://paramorphism.serenity.enterprises/) - [Discord](https://discordapp.com/invite/k9DPvEy) (Dead) - Commerical. Was one of the most unusual and unique obfuscators at the time it was an active project in that relied a lot more on the JVM's unusual way of loading JAR archives including zip entries with duplicated names and the [fake directory trick](https://github.com/x4e/fakedirectory). Used to be more commonly used before people started ripping ideas from Paramorphism.
* [qProtect](https://mdma.dev/) - Commericial. Implements a lot of the more common obfuscation techiques into a single tool. Shows up a bit in the Minecraft community.
* [Sandmark](http://sandmark.cs.arizona.edu) - FOSS. Really old obfuscator research project led by Christian Collberg at the University of Arizona. Some interesting ideas in watermarking are here and some of the flow obfuscation ideas are good.
* [SkidSuite2](https://github.com/GenericException/SkidSuite/tree/master/archive/skidsuite-2) - FOSS. Some pretty basic obfuscation techniques, nothing too special.
* [Stringer](https://jfxstore.com/stringer/) - Commercial. Pretty infamous for its complicated AES-based encryption/decryption routines and price. Does not really offer a whole lot of protection, but sometimes does show up in industry.
* [yGuard](https://www.yworks.com/products/yguard) - FOSS. Functionally equivalent to ProGuard as far as I can tell.
* [zProtect](https://zprotect.dev/) - [Discord](https://discord.com/invite/dnGKGuwvGH) - Commercial. Newer obfuscator. I have not seen any samples from it so I do not have an opinion on it.
## Build Instructions
Run the following (and hope nothing breaks):
```
./gradlew build
```
Or if you're on Windows:
```
gradlew.bat build
```
Should that somehow not work, use the following instead:
```
./gradlew clean shadowJar
```
P.S. For those wondering why there aren't any prebuilt releases, if you can't figure out how to use Gradle, should you really be using an obfuscator? ;) [end of snarkiness]
## FAQ
* **Q: Is this uncrackable/undeobfuscatable?**
*A: No. Nothing is impossible to deobfuscate or reverse-engineer. Furthermore, Radon is far from being hard to
deobfuscate. On a scale of 1 to 10 on how hard Radon is to deobfuscate, I'd say 2 in the best possible scenario.*
* **Q: Why is this open-sourced?**
*A: I made Radon as a way to experiment with obfuscation and to become familiar with the JVM bytecode instruction set
and as a codebase if anyone wants to mess around. Furthermore, I strongly support the FOSS ideology.*
* **Q: Doesn't Radon being open-sourced make it easier to deobfuscate?**
*A: Probably.*
* **Q: Can Spring apps be obfuscated with this?**
*A: Out of the box, no. Starting from Radon 3, I will never add support for Spring or multiversion JARs.*
* **Q: What does '... "org/somelib/TableFactoryBuilder" not found in classpath' mean?**
*A: Radon internally determines how to construct certain entities in the classfile based on the class hierarchy of the
JAR being obfuscated. For this reason, Radon needs access to library classes used by the project. Make sure you add
the appropriate libraries so this doesn't show up.*
* **Q: Can I use all transformers for maximum protection?**
*A: You could, but you should note that it's very likely that the program will break and/or there will be a large
overhead in file size and/or performance.*
* **Q: Why do certain combinations of transformers break the program?**
*A: Radon is intended to be an experimental project, not a commercial product protector. Not all features are meant to
work together.*
* **Q: What version of Java is required to run Radon 3?**
*A: Java 11+.*
* **Q: What version of Java is my software required to written in to work with Radon?**
*A: Radon can theoretically obfuscate software written in any Java version provided that the `asm` library is compatible
with the classfile version.*
* **Q: Does Radon support Android?**
*A: While the answer is technically yes, I will not provide support for issues pertaining to Android apps.*
* **Q: Does Radon have Gradle, Maven, or Ant integration?**
*A: No. You are more than welcome to make a PR to add such functionality if desired.*
* **Q: Will there be a GUI for Radon 3?**
*A: Yes, however, a GUI is very low on my priority list, so it might be awhile before one is actually made.*
* **Q: Will there be a Radon 4?**
*A: Probably not.*
## License
GNU General Public License v3.0 (The cancer license)
================================================
FILE: build.gradle
================================================
/*
* Radon - An open-source Java obfuscator
* Copyright (C) 2021 ItzSomebody
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>
*/
plugins {
id 'com.github.johnrengelman.shadow' version '5.1.0'
}
defaultTasks 'clean', 'test', 'build'
ext {
// ASM
asmVer = '9.4'
asm = 'org.ow2.asm:asm:' + asmVer
asmAnalysis = 'org.ow2.asm:asm-analysis:' + asmVer
asmCommons = 'org.ow2.asm:asm-commons:' + asmVer
asmTree = 'org.ow2.asm:asm-tree:' + asmVer
asmUtil = 'org.ow2.asm:asm-util:' + asmVer
// junit
junit = 'junit:junit:4.12'
// Annotations
annotations = 'org.jetbrains:annotations:20.1.0'
// Jackson
jackson = 'com.fasterxml.jackson.core:jackson-databind:2.12.2'
// Java version
javaVer = 11
}
allprojects {
// Project group and version
group 'xyz.itzsomebody'
version '3.0.0-SNAPSHOT'
// Compile using UTF-8 encoding
tasks.withType(JavaCompile) {
options.encoding = 'UTF-8'
}
repositories {
mavenCentral()
}
}
================================================
FILE: docs/changelog.md
================================================
# Changelog
## 3.0.0 - Full rewrite
There are multiple turning points with the release of Radon 3.0.0 compared to all previous versions of Radon.
### Differences between Radon 3 and previous versions
* Radon 3 is written in Java 11. Every previous version of Radon was written in Java 8.
* Some of Radon 3's features are not portable to different JVMs whereas every previous version of Radon was intended for
HotSpot.
* Radon 3 removes all "optimizers" from Radon 2. If you need some kind of optimization done, use ProGuard instead.
* Compared to Radon 2, Radon 3 can be significantly more risky in how it performs transformations on bytecode.
* Radon 2 uses the GitHub wiki for documentation of transformers and usage. Radon 3 has no usage guide and uses GitHub
pages for documentation of transformers (however, the wiki will not be removed for ease of reference).
* Radon 3 removes delegation for "shrinking" transformers via the above point.
* Radon 3 adheres to a style guide (sort of) whereas no previous version of Radon has.
* Radon 3 reimplements the exclusion system in a much more efficient matter.
* Radon 3 introduces a high-level code generator to remove some reliance on ASMifier generated code.
================================================
FILE: docs/exclusions.md
================================================
# Exclusions
**Note: You will need a basic understanding of internal class/method/field names to understand how Radon processes
exclusions.**
Exclusions in Radon are regex-based and are matched using the code below:
```java
public boolean matches(String other, ExclusionType type) {
if (type == ExclusionType.GLOBAL || type == exclusionType) {
return true;
}
return invert != matcher.reset(other).matches();
}
```
**The use of `java.util.regex.Matcher#matches()` is intentional and should be considered whilst creating an exclusion.**
* When **classes** are checked for exclusion, the internal name is passed into `other`. e.g.
```java
// Check for java.lang.Object and java.lang.String
Exclusion exclusion = new Exclusion("java/lang/(Object|String)");
System.out.println(exclusion.matches("java/lang/Object")); // true
System.out.println(exclusion.matches("java/lang/String")); // true
System.out.println(exclusion.matches("java/lang/String isEmpty()Z")); // false
System.out.println(exclusion.matches("java/lang/Number")); // false
```
```java
// Check for all classes that start with "java.lang" in their internal name
Exclusion exclusion = new Exclusion("java/lang.*");
System.out.println(exclusion.matches("java/lang/Object")); // true
System.out.println(exclusion.matches("java/lang/String")); // true
System.out.println(exclusion.matches("java/lang/String isEmpty()Z")); // true - be careful when playing with ".*"
System.out.println(exclusion.matches("java/lang/Number")); // true
```
* When **methods** are checked for exclusion, `<internal owner name> <method name><internal method description>` is
passed into `other`. e.g.
```java
// Check for java.lang.String.isEmpty()
Exclusion exclusion = new Exclusion("java/lang/String isEmpty\\(\\)Z");
System.out.println(exclusion.matches("java/lang/String isEmpty()Z")); // true
System.out.println(exclusion.matches("java/lang/String toCharArray()[C")); // false
```
* When **fields** are checked for exclusion, `<internal owner name> <field name> <internal field description>` is
passed into `other`. e.g.
```java
// Check for java.lang.System.out
Exclusion exclusion = new Exclusion("java/lang/System out Ljava/io/PrintStream;");
System.out.println(exclusion.matches("java/lang/System out Ljava/lang/PrintStream;")); // true
System.out.println(exclusion.matches("java/lang/System err Ljava/lang/PrintStream;")); // false
```
================================================
FILE: docs/index.md
================================================
# Radon Java Obfuscator [](https://travis-ci.org/ItzSomebody/Radon)
Welcome to the documentation page for the Radon Java bytecode obfuscator! Here you can find the documentation and
various parts of stuff put into Radon's internals and transformers.
* [Changelog](changelog.md)
* [Exclusions](exclusions.md)
* Transformers
* TODO
================================================
FILE: gradle/wrapper/gradle-wrapper.properties
================================================
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
================================================
FILE: gradlew
================================================
#!/usr/bin/env sh
#
# Copyright 2015 the original author or authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
##############################################################################
##
## Gradle start up script for UN*X
##
##############################################################################
# Attempt to set APP_HOME
# Resolve links: $0 may be a link
PRG="$0"
# Need this for relative symlinks.
while [ -h "$PRG" ] ; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
PRG="$link"
else
PRG=`dirname "$PRG"`"/$link"
fi
done
SAVED="`pwd`"
cd "`dirname \"$PRG\"`/" >/dev/null
APP_HOME="`pwd -P`"
cd "$SAVED" >/dev/null
APP_NAME="Gradle"
APP_BASE_NAME=`basename "$0"`
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"
warn () {
echo "$*"
}
die () {
echo
echo "$*"
echo
exit 1
}
# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
nonstop=false
case "`uname`" in
CYGWIN* )
cygwin=true
;;
Darwin* )
darwin=true
;;
MINGW* )
msys=true
;;
NONSTOP* )
nonstop=true
;;
esac
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
else
JAVACMD="$JAVA_HOME/bin/java"
fi
if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
else
JAVACMD="java"
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
# Increase the maximum file descriptors if we can.
if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
MAX_FD_LIMIT=`ulimit -H -n`
if [ $? -eq 0 ] ; then
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
MAX_FD="$MAX_FD_LIMIT"
fi
ulimit -n $MAX_FD
if [ $? -ne 0 ] ; then
warn "Could not set maximum file descriptor limit: $MAX_FD"
fi
else
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
fi
fi
# For Darwin, add options to specify how the application appears in the dock
if $darwin; then
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
fi
# For Cygwin or MSYS, switch paths to Windows format before running java
if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
JAVACMD=`cygpath --unix "$JAVACMD"`
# We build the pattern for arguments to be converted via cygpath
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
SEP=""
for dir in $ROOTDIRSRAW ; do
ROOTDIRS="$ROOTDIRS$SEP$dir"
SEP="|"
done
OURCYGPATTERN="(^($ROOTDIRS))"
# Add a user-defined pattern to the cygpath arguments
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
fi
# Now convert the arguments - kludge to limit ourselves to /bin/sh
i=0
for arg in "$@" ; do
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
else
eval `echo args$i`="\"$arg\""
fi
i=`expr $i + 1`
done
case $i in
0) set -- ;;
1) set -- "$args0" ;;
2) set -- "$args0" "$args1" ;;
3) set -- "$args0" "$args1" "$args2" ;;
4) set -- "$args0" "$args1" "$args2" "$args3" ;;
5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
esac
fi
# Escape application args
save () {
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
echo " "
}
APP_ARGS=`save "$@"`
# Collect all arguments for the java command, following the shell quoting and substitution rules
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
exec "$JAVACMD" "$@"
================================================
FILE: gradlew.bat
================================================
@rem
@rem Copyright 2015 the original author or authors.
@rem
@rem Licensed under the Apache License, Version 2.0 (the "License");
@rem you may not use this file except in compliance with the License.
@rem You may obtain a copy of the License at
@rem
@rem https://www.apache.org/licenses/LICENSE-2.0
@rem
@rem Unless required by applicable law or agreed to in writing, software
@rem distributed under the License is distributed on an "AS IS" BASIS,
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@rem See the License for the specific language governing permissions and
@rem limitations under the License.
@rem
@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@rem
@rem ##########################################################################
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@rem Resolve any "." and ".." in APP_HOME to make it shorter.
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto init
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto init
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:init
@rem Get command-line arguments, handling Windows variants
if not "%OS%" == "Windows_NT" goto win9xME_args
:win9xME_args
@rem Slurp the command line arguments.
set CMD_LINE_ARGS=
set _SKIP=2
:win9xME_args_slurp
if "x%~1" == "x" goto execute
set CMD_LINE_ARGS=%*
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
exit /b 1
:mainEnd
if "%OS%"=="Windows_NT" endlocal
:omega
================================================
FILE: settings.gradle
================================================
/*
* Radon - An open-source Java obfuscator
* Copyright (C) 2020 ItzSomebody
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>
*/
rootProject.name = 'radon'
include 'xyz.itzsomebody.codegen'
include 'xyz.itzsomebody.radon'
include 'xyz.itzsomebody.commons'
include 'xyz.itzsomebody.radon.template'
================================================
FILE: xyz.itzsomebody.codegen/README.md
================================================
# CodeGen
This module contains radon's bytecode code generation utility. This is intended to reduce some of the heavy reliance
on the asm-tree API and ASMifier, and is based on the airlift bytecode generation library.
================================================
FILE: xyz.itzsomebody.codegen/build.gradle
================================================
/*
* Radon - An open-source Java obfuscator
* Copyright (C) 2021 ItzSomebody
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>
*/
plugins {
id 'java'
}
sourceCompatibility = javaVer
dependencies {
implementation annotations
implementation asm
implementation asmTree
testImplementation junit
}
================================================
FILE: xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/BytecodeBlock.java
================================================
/*
* Radon - An open-source Java obfuscator
* Copyright (C) 2021 ItzSomebody
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>
*/
package xyz.itzsomebody.codegen;
import org.objectweb.asm.tree.InsnList;
import xyz.itzsomebody.codegen.expressions.predefined.IRReturnExpression;
import xyz.itzsomebody.codegen.instructions.CompilableNode;
import xyz.itzsomebody.codegen.instructions.SimpleNode;
import java.util.ArrayList;
import java.util.List;
public class BytecodeBlock {
private final List<CompilableNode> nodes = new ArrayList<>();
public BytecodeBlock append(BytecodeBlock block) {
nodes.addAll(block.nodes);
return this;
}
public BytecodeBlock append(CompilableNode node) {
nodes.add(node);
return this;
}
public InsnList compile() {
var insns = new InsnList();
nodes.forEach(node -> insns.add(node.getNode()));
return insns;
}
public BytecodeBlock voidReturn(){
nodes.add(SimpleNode.RETURN_VOID);
return this;
}
public List<CompilableNode> getNodes() {
return nodes;
}
}
================================================
FILE: xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/GenerationContext.java
================================================
/*
* Radon - An open-source Java obfuscator
* Copyright (C) 2021 ItzSomebody
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>
*/
package xyz.itzsomebody.codegen;
import xyz.itzsomebody.codegen.expressions.IRVariable;
public class GenerationContext {
private int slotOffset = 0;
public void setSlotOffset(int slotOffset) {
this.slotOffset = slotOffset;
}
public IRVariable newVariable(WrappedType type) {
var variable = new IRVariable(type, slotOffset);
slotOffset += type.getType().getSize();
return variable;
}
public IRVariable newVariable(Class<?> clazz) {
return newVariable(WrappedType.from(clazz));
}
}
================================================
FILE: xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/Utils.java
================================================
/*
* Radon - An open-source Java obfuscator
* Copyright (C) 2021 ItzSomebody
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>
*/
package xyz.itzsomebody.codegen;
import org.objectweb.asm.Type;
import org.objectweb.asm.tree.LabelNode;
import org.objectweb.asm.tree.MethodNode;
import xyz.itzsomebody.codegen.instructions.BytecodeLabel;
import xyz.itzsomebody.codegen.instructions.ConstantNode;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
public class Utils {
public static List<WrappedType> wrapMethodNodeParameters(MethodNode methodNode) {
var wrappedTypes = new ArrayList<WrappedType>();
List.of(Type.getArgumentTypes(methodNode.desc)).forEach(type -> wrappedTypes.add(new WrappedType(type)));
return wrappedTypes;
}
public static List<WrappedType> wrapMethodParameters(Method method) {
var wrappedTypes = new ArrayList<WrappedType>();
List.of(method.getParameterTypes()).forEach(clazz -> wrappedTypes.add(WrappedType.from(clazz)));
return wrappedTypes;
}
public static List<WrappedType> wrapConstructorParameters(Constructor<?> constructor) {
var wrappedTypes = new ArrayList<WrappedType>();
List.of(constructor.getParameterTypes()).forEach(clazz -> wrappedTypes.add(WrappedType.from(clazz)));
return wrappedTypes;
}
public static String unwrapMethodDescriptor(List<WrappedType> parameterTypes, WrappedType returnType) {
var sb = new StringBuilder("(");
parameterTypes.forEach(type -> sb.append(type.unwrap()));
sb.append(')').append(returnType.unwrap());
return sb.toString();
}
public static ArrayList<LabelNode> unwrapLabels(List<BytecodeLabel> wrappedLabels) {
var unwrappedLabels = new ArrayList<LabelNode>(wrappedLabels.size());
wrappedLabels.forEach(wrappedLabel -> unwrappedLabels.add(wrappedLabel.getLabel()));
return unwrappedLabels;
}
public static Object[] unpackConstants(List<ConstantNode> constants) {
var unpacked = new Object[constants.size()];
for (var i = 0; i < unpacked.length; i++) {
unpacked[i] = constants.get(i).getValue();
}
return unpacked;
}
public static WrappedType box(WrappedType primitive) {
if (!primitive.isPrimitive()) {
throw new IllegalArgumentException("Attempted to box non-primitive type: " + primitive);
}
switch (primitive.getSort()) {
case Type.BOOLEAN:
return WrappedType.from(Boolean.class);
case Type.CHAR:
return WrappedType.from(Character.class);
case Type.BYTE:
return WrappedType.from(Byte.class);
case Type.SHORT:
return WrappedType.from(Short.class);
case Type.INT:
return WrappedType.from(Integer.class);
case Type.LONG:
return WrappedType.from(Long.class);
case Type.FLOAT:
return WrappedType.from(Float.class);
case Type.DOUBLE:
return WrappedType.from(Double.class);
default:
throw new IllegalArgumentException("Unknown primitive type: " + primitive);
}
}
}
================================================
FILE: xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/WrappedHandle.java
================================================
/*
* Radon - An open-source Java obfuscator
* Copyright (C) 2021 ItzSomebody
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>
*/
package xyz.itzsomebody.codegen;
import org.objectweb.asm.Handle;
import org.objectweb.asm.Opcodes;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Collections;
import java.util.List;
public class WrappedHandle {
private final int tag;
private final WrappedType owner;
private final String name;
private final List<WrappedType> parameterTypes;
private final WrappedType returnType;
public WrappedHandle(int tag, WrappedType owner, String name, List<WrappedType> parameterTypes, WrappedType returnType) {
this.tag = tag;
this.owner = owner;
this.name = name;
this.parameterTypes = parameterTypes;
this.returnType = returnType;
}
public int getTag() {
return tag;
}
public WrappedType getOwner() {
return owner;
}
public String getName() {
return name;
}
public List<WrappedType> getParameterTypes() {
return parameterTypes;
}
public WrappedType getReturnType() {
return returnType;
}
public Handle constructHandle() {
return new Handle(tag, owner.getInternalName(), name, Utils.unwrapMethodDescriptor(parameterTypes, returnType), owner.isInterface());
}
// Fields
public static WrappedHandle getFieldHandle(WrappedType owner, String name, WrappedType type) {
return new WrappedHandle(Opcodes.H_GETFIELD, owner, name, Collections.emptyList(), type);
}
public static WrappedHandle getFieldHandle(Field field) {
return getFieldHandle(WrappedType.from(field.getDeclaringClass()), field.getName(), WrappedType.from(field.getType()));
}
public static WrappedHandle getStaticHandle(WrappedType owner, String name, WrappedType type) {
return new WrappedHandle(Opcodes.H_GETSTATIC, owner, name, Collections.emptyList(), type);
}
public static WrappedHandle getStaticHandle(Field field) {
return getFieldHandle(WrappedType.from(field.getDeclaringClass()), field.getName(), WrappedType.from(field.getType()));
}
public static WrappedHandle putFieldHandle(WrappedType owner, String name, WrappedType type) {
return new WrappedHandle(Opcodes.H_PUTFIELD, owner, name, Collections.emptyList(), type);
}
public static WrappedHandle putFieldHandle(Field field) {
return getFieldHandle(WrappedType.from(field.getDeclaringClass()), field.getName(), WrappedType.from(field.getType()));
}
public static WrappedHandle putStaticHandle(WrappedType owner, String name, WrappedType type) {
return new WrappedHandle(Opcodes.H_PUTSTATIC, owner, name, Collections.emptyList(), type);
}
public static WrappedHandle putStaticHandle(Field field) {
return getFieldHandle(WrappedType.from(field.getDeclaringClass()), field.getName(), WrappedType.from(field.getType()));
}
// Methods
public static WrappedHandle getInvokeVirtualHandle(WrappedType owner, String name, List<WrappedType> parameterTypes, WrappedType returnType) {
return new WrappedHandle(Opcodes.H_INVOKEVIRTUAL, owner, name, parameterTypes, returnType);
}
public static WrappedHandle getInvokeVirtualHandle(Method method) {
return getInvokeVirtualHandle(WrappedType.from(method.getDeclaringClass()), method.getName(), Utils.wrapMethodParameters(method), WrappedType.from(method.getReturnType()));
}
public static WrappedHandle getInvokeStaticHandle(WrappedType owner, String name, List<WrappedType> parameterTypes, WrappedType returnType) {
return new WrappedHandle(Opcodes.H_INVOKESTATIC, owner, name, parameterTypes, returnType);
}
public static WrappedHandle getInvokeStaticHandle(Method method) {
return getInvokeStaticHandle(WrappedType.from(method.getDeclaringClass()), method.getName(), Utils.wrapMethodParameters(method), WrappedType.from(method.getReturnType()));
}
public static WrappedHandle getInvokeSpecialHandle(WrappedType owner, String name, List<WrappedType> parameterTypes, WrappedType returnType) {
return new WrappedHandle(Opcodes.H_INVOKESPECIAL, owner, name, parameterTypes, returnType);
}
public static WrappedHandle getInvokeSpecialHandle(Method method) {
return getInvokeSpecialHandle(WrappedType.from(method.getDeclaringClass()), method.getName(), Utils.wrapMethodParameters(method), WrappedType.from(method.getReturnType()));
}
public static WrappedHandle getNewInvokeSpecialHandle(WrappedType owner, String name, List<WrappedType> parameterTypes, WrappedType returnType) {
return new WrappedHandle(Opcodes.H_NEWINVOKESPECIAL, owner, name, parameterTypes, returnType);
}
public static WrappedHandle getNewInvokeSpecialHandle(Method method) {
return getNewInvokeSpecialHandle(WrappedType.from(method.getDeclaringClass()), method.getName(), Utils.wrapMethodParameters(method), WrappedType.from(method.getReturnType()));
}
public static WrappedHandle getInvokeInterfaceHandle(WrappedType owner, String name, List<WrappedType> parameterTypes, WrappedType returnType) {
return new WrappedHandle(Opcodes.H_INVOKEVIRTUAL, owner, name, parameterTypes, returnType);
}
public static WrappedHandle getInvokeInterfaceHandle(Method method) {
return getInvokeInterfaceHandle(WrappedType.from(method.getDeclaringClass()), method.getName(), Utils.wrapMethodParameters(method), WrappedType.from(method.getReturnType()));
}
}
================================================
FILE: xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/WrappedType.java
================================================
/*
* Radon - An open-source Java obfuscator
* Copyright (C) 2021 ItzSomebody
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>
*/
package xyz.itzsomebody.codegen;
import org.objectweb.asm.Opcodes;
import org.objectweb.asm.Type;
import org.objectweb.asm.tree.ClassNode;
import xyz.itzsomebody.codegen.exceptions.UncompilableNodeException;
import java.util.HashMap;
import java.util.Map;
public class WrappedType {
private static final Map<String, Class<?>> BOXED_TYPES = new HashMap<>() {
{
put(Type.getInternalName(Boolean.class), boolean.class);
put(Type.getInternalName(Character.class), char.class);
put(Type.getInternalName(Byte.class), byte.class);
put(Type.getInternalName(Short.class), short.class);
put(Type.getInternalName(Integer.class), int.class);
put(Type.getInternalName(Float.class), float.class);
put(Type.getInternalName(Long.class), long.class);
put(Type.getInternalName(Double.class), double.class);
}
};
private static AbsentWrappedType absent;
private final Type type;
private final boolean isInterface;
public WrappedType(Type type) {
this.type = type;
this.isInterface = false;
}
public WrappedType(Type type, boolean isInterface) {
this.type = type;
this.isInterface = isInterface;
}
public static AbsentWrappedType getAbsent() {
if (absent == null) {
absent = new AbsentWrappedType();
}
return absent;
}
public Type getType() {
return type;
}
public boolean isInterface() {
return isInterface;
}
public int getSort() {
return type.getSort();
}
/**
* For NEWARRAY instructions
*/
public int getNewArraySort() {
switch (type.getSort()) {
case Type.BOOLEAN:
return Opcodes.T_BOOLEAN;
case Type.CHAR:
return Opcodes.T_CHAR;
case Type.FLOAT:
return Opcodes.T_FLOAT;
case Type.DOUBLE:
return Opcodes.T_DOUBLE;
case Type.BYTE:
return Opcodes.T_BYTE;
case Type.SHORT:
return Opcodes.T_SHORT;
case Type.INT:
return Opcodes.T_INT;
case Type.LONG:
return Opcodes.T_LONG;
default:
throw new UncompilableNodeException("Attempted to get primitive array type of " + this);
}
}
public boolean isPrimitive() {
switch (type.getSort()) {
case Type.BOOLEAN:
case Type.CHAR:
case Type.BYTE:
case Type.SHORT:
case Type.INT:
case Type.FLOAT:
case Type.LONG:
case Type.DOUBLE:
return true;
default:
return false;
}
}
public WrappedType getPrimitiveType() {
var primitiveClass = BOXED_TYPES.get(getInternalName());
if (primitiveClass == null) {
throw new UncompilableNodeException("Attempted to get primitive type of " + this);
}
return WrappedType.from(primitiveClass);
}
public boolean isBoxed() {
return BOXED_TYPES.containsKey(getInternalName());
}
public boolean isArray() {
return type.getSort() == Type.ARRAY;
}
public boolean isIntType() {
var sort = getSort();
return (sort == Type.BOOLEAN)
|| (sort == Type.CHAR)
|| (sort == Type.BYTE)
|| (sort == Type.SHORT)
|| (sort == Type.INT);
}
public String unwrap() {
if (type.getSort() == Type.OBJECT) {
return 'L' + type.getInternalName() + ';';
} else {
return type.getInternalName();
}
}
public String getInternalName() {
return type.getInternalName();
}
public String getClassName() {
return type.getClassName();
}
public static WrappedType fromClassName(String className, boolean isInterface) {
StringBuilder internalName = new StringBuilder();
if (className.endsWith("[]")) {
className = className.substring(0, className.length() - 2);
internalName.append('[');
}
switch (className) {
case "int":
internalName.append("I");
break;
case "long":
internalName.append("J");
break;
case "float":
internalName.append("F");
break;
case "double":
internalName.append("D");
break;
case "boolean":
internalName.append("Z");
break;
case "byte":
internalName.append("B");
break;
case "short":
internalName.append("S");
break;
case "char":
internalName.append("C");
break;
default:
internalName.append('L').append(className.replace('.', '/')).append(';');
}
return new WrappedType(Type.getType(internalName.toString()), isInterface);
}
public static WrappedType fromInternalName(String internalName, boolean isInterface) {
if ("ZBCSIJFDV".contains(internalName) || internalName.startsWith("[")) {
return new WrappedType(Type.getType(internalName), isInterface);
} else {
return new WrappedType(Type.getType("L" + internalName + ";"), isInterface);
}
}
public static WrappedType from(Class<?> clazz) {
return new WrappedType(Type.getType(clazz), clazz.isInterface());
}
public static WrappedType from(ClassNode classNode) {
return new WrappedType(Type.getType("L" + classNode.name + ";"), (classNode.access & Opcodes.ACC_INTERFACE) != 0);
}
@Override
public String toString() {
return "WrappedType{" +
"type=" + type +
", isInterface=" + isInterface +
'}';
}
@Override
public boolean equals(Object other) {
if (!(other instanceof WrappedType)) {
return false;
}
return getType().equals(((WrappedType) other).getType());
}
static class AbsentWrappedType extends WrappedType {
private AbsentWrappedType() {
super(null);
}
@Override
public Type getType() {
throw new UncompilableNodeException("Attempted to get type of AbsentWrappedType");
}
@Override
public boolean isInterface() {
throw new UncompilableNodeException("Attempted to determine interface flag of AbsentWrappedType");
}
@Override
public int getSort() {
throw new UncompilableNodeException("Attempted to get sort of AbsentWrappedType");
}
@Override
public boolean isPrimitive() {
throw new UncompilableNodeException("Attempted to determine primitive flag of AbsentWrappedType");
}
@Override
public boolean isBoxed() {
throw new UncompilableNodeException("Attempted to determine boxed flag of AbsentWrappedType");
}
@Override
public boolean isArray() {
throw new UncompilableNodeException("Attempted to determine array flag of AbsentWrappedType");
}
@Override
public boolean isIntType() {
throw new UncompilableNodeException("Attempted to determine isIntType flag of AbsentWrappedType");
}
@Override
public String unwrap() {
throw new UncompilableNodeException("Attempted to unwrap AbsentWrappedType");
}
@Override
public String getInternalName() {
throw new UncompilableNodeException("Attempted to get internal name of AbsentWrappedType");
}
@Override
public String getClassName() {
throw new UncompilableNodeException("Attempted to get class name of AbsentWrappedType");
}
}
}
================================================
FILE: xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/exceptions/UncompilableNodeException.java
================================================
/*
* Radon - An open-source Java obfuscator
* Copyright (C) 2020 ItzSomebody
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>
*/
package xyz.itzsomebody.codegen.exceptions;
public class UncompilableNodeException extends RuntimeException {
public UncompilableNodeException() {
super();
}
public UncompilableNodeException(String msg) {
super(msg);
}
}
================================================
FILE: xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/expressions/IRExpression.java
================================================
/*
* Radon - An open-source Java obfuscator
* Copyright (C) 2021 ItzSomebody
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>
*/
package xyz.itzsomebody.codegen.expressions;
import org.objectweb.asm.Type;
import org.objectweb.asm.tree.ClassNode;
import org.objectweb.asm.tree.FieldNode;
import org.objectweb.asm.tree.MethodNode;
import xyz.itzsomebody.codegen.BytecodeBlock;
import xyz.itzsomebody.codegen.Utils;
import xyz.itzsomebody.codegen.WrappedType;
import xyz.itzsomebody.codegen.expressions.predefined.*;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.List;
public abstract class IRExpression {
private final WrappedType type;
public IRExpression(WrappedType type) {
this.type = type;
}
public WrappedType getType() {
return type;
}
public abstract BytecodeBlock getInstructions();
public IRExpression arrayLength() {
return new IRArrayLengthExpression(this);
}
public IRExpression getArrayElement(int index) {
return new IRGetArrayElementExpression(this, IRExpressions.intConst(index));
}
public IRExpression getArrayElement(IRExpression index) {
return new IRGetArrayElementExpression(this, index);
}
public IRExpression setArrayElement(int index, IRExpression value) {
return new IRSetArrayElementExpression(this, IRExpressions.intConst(index), value);
}
public IRExpression setArrayElement(IRExpression index, IRExpression value) {
return new IRSetArrayElementExpression(this, index, value);
}
public IRExpression cast(ClassNode target) {
return new IRCastExpression(this, WrappedType.from(target));
}
public IRExpression cast(Class<?> target) {
return new IRCastExpression(this, WrappedType.from(target));
}
public IRExpression cast(String target) {
return new IRCastExpression(this, WrappedType.fromInternalName(target, false));
}
public IRExpression cast(WrappedType type) {
return new IRCastExpression(this, type);
}
public IRExpression instanceOf(ClassNode target) {
return new IRInstanceOfExpression(this, WrappedType.from(target));
}
public IRExpression instanceOf(Class<?> target) {
return new IRInstanceOfExpression(this, WrappedType.from(target));
}
public IRExpression instanceOf(String target) {
return new IRInstanceOfExpression(this, WrappedType.fromInternalName(target, false));
}
public IRExpression instanceOf(WrappedType type) {
return new IRInstanceOfExpression(this, type);
}
public IRExpression getField(String name, Class<?> type) {
return new IRGetFieldExpression(this, getType(), name, WrappedType.from(type));
}
public IRExpression getField(String name, WrappedType type) {
return new IRGetFieldExpression(this, getType(), name, type);
}
public IRExpression getField(FieldNode fieldNode) {
return new IRGetFieldExpression(this, getType(), fieldNode.name, WrappedType.fromInternalName(fieldNode.desc, false));
}
public IRExpression getField(Field field) {
return new IRGetFieldExpression(this, getType(), field.getName(), WrappedType.from(field.getType()));
}
public IRExpression setField(String name, Class<?> type, IRExpression value) {
return new IRSetFieldExpression(this, value, getType(), name, WrappedType.from(type));
}
public IRExpression setField(String name, WrappedType type, IRExpression value) {
return new IRSetFieldExpression(this, value, getType(), name, type);
}
public IRExpression setField(FieldNode fieldNode, IRExpression value) {
return new IRSetFieldExpression(this, value, getType(), fieldNode.name, WrappedType.fromInternalName(fieldNode.desc, false));
}
public IRExpression setField(Field field, IRExpression value) {
return new IRSetFieldExpression(this, value, getType(), field.getName(), WrappedType.from(field.getType()));
}
public IRExpression invoke(MethodNode methodNode, IRExpression... arguments) {
return new IRInvocationExpression(this, getType(), methodNode.name, List.of(arguments), Utils.wrapMethodNodeParameters(methodNode), new WrappedType(Type.getReturnType(methodNode.desc)));
}
public IRExpression invoke(Method method, IRExpression... arguments) {
return new IRInvocationExpression(this, getType(), method.getName(), List.of(arguments), Utils.wrapMethodParameters(method), WrappedType.from(method.getReturnType()));
}
public IRExpression invoke(String name, List<WrappedType> parameterTypes, WrappedType returnType, IRExpression... arguments) {
return new IRInvocationExpression(this, getType(), name, List.of(arguments), parameterTypes, returnType);
}
public IRExpression ret() {
return new IRReturnExpression(this);
}
public IRExpression throwMe() {
return new IRThrowExceptionExpression(this);
}
}
================================================
FILE: xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/expressions/IRExpressions.java
================================================
/*
* Radon - An open-source Java obfuscator
* Copyright (C) 2021 ItzSomebody
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>
*/
package xyz.itzsomebody.codegen.expressions;
import org.objectweb.asm.Type;
import org.objectweb.asm.tree.ClassNode;
import org.objectweb.asm.tree.MethodNode;
import xyz.itzsomebody.codegen.BytecodeBlock;
import xyz.itzsomebody.codegen.Utils;
import xyz.itzsomebody.codegen.WrappedHandle;
import xyz.itzsomebody.codegen.WrappedType;
import xyz.itzsomebody.codegen.expressions.flow.*;
import xyz.itzsomebody.codegen.expressions.predefined.*;
import xyz.itzsomebody.codegen.instructions.ConstantNode;
import xyz.itzsomebody.codegen.instructions.SimpleNode;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
public class IRExpressions {
// ARITHMETIC
public static IRExpression intAdd(IRExpression left, IRExpression right) {
return new IRArithmeticExpression(SimpleNode.INT_ADD, left, right);
}
public static IRExpression intSub(IRExpression left, IRExpression right) {
return new IRArithmeticExpression(SimpleNode.INT_SUB, left, right);
}
public static IRExpression intMul(IRExpression left, IRExpression right) {
return new IRArithmeticExpression(SimpleNode.INT_MUL, left, right);
}
public static IRExpression intDiv(IRExpression left, IRExpression right) {
return new IRArithmeticExpression(SimpleNode.INT_DIV, left, right);
}
public static IRExpression intMod(IRExpression left, IRExpression right) {
return new IRArithmeticExpression(SimpleNode.INT_MOD, left, right);
}
public static IRExpression intShiftLeft(IRExpression left, IRExpression right) {
return new IRArithmeticExpression(SimpleNode.INT_SHIFT_LEFT, left, right);
}
public static IRExpression intShiftRight(IRExpression left, IRExpression right) {
return new IRArithmeticExpression(SimpleNode.INT_SHIFT_RIGHT, left, right);
}
public static IRExpression intUnsignedShiftRight(IRExpression left, IRExpression right) {
return new IRArithmeticExpression(SimpleNode.INT_UNSIGNED_SHIFT_RIGHT, left, right);
}
public static IRExpression intAnd(IRExpression left, IRExpression right) {
return new IRArithmeticExpression(SimpleNode.INT_AND, left, right);
}
public static IRExpression intOr(IRExpression left, IRExpression right) {
return new IRArithmeticExpression(SimpleNode.INT_OR, left, right);
}
public static IRExpression intXor(IRExpression left, IRExpression right) {
return new IRArithmeticExpression(SimpleNode.INT_XOR, left, right);
}
public static IRExpression longAdd(IRExpression left, IRExpression right) {
return new IRArithmeticExpression(SimpleNode.LONG_ADD, left, right);
}
public static IRExpression longSub(IRExpression left, IRExpression right) {
return new IRArithmeticExpression(SimpleNode.LONG_SUB, left, right);
}
public static IRExpression longMul(IRExpression left, IRExpression right) {
return new IRArithmeticExpression(SimpleNode.LONG_MUL, left, right);
}
public static IRExpression longDiv(IRExpression left, IRExpression right) {
return new IRArithmeticExpression(SimpleNode.LONG_DIV, left, right);
}
public static IRExpression longMod(IRExpression left, IRExpression right) {
return new IRArithmeticExpression(SimpleNode.LONG_MOD, left, right);
}
public static IRExpression longShiftLeft(IRExpression left, IRExpression right) {
return new IRArithmeticExpression(SimpleNode.LONG_SHIFT_LEFT, left, right);
}
public static IRExpression longShiftRight(IRExpression left, IRExpression right) {
return new IRArithmeticExpression(SimpleNode.LONG_SHIFT_RIGHT, left, right);
}
public static IRExpression longUnsignedShiftRight(IRExpression left, IRExpression right) {
return new IRArithmeticExpression(SimpleNode.LONG_UNSIGNED_SHIFT_RIGHT, left, right);
}
public static IRExpression longAnd(IRExpression left, IRExpression right) {
return new IRArithmeticExpression(SimpleNode.LONG_AND, left, right);
}
public static IRExpression longOr(IRExpression left, IRExpression right) {
return new IRArithmeticExpression(SimpleNode.LONG_OR, left, right);
}
public static IRExpression longXor(IRExpression left, IRExpression right) {
return new IRArithmeticExpression(SimpleNode.LONG_XOR, left, right);
}
public static IRExpression floatAdd(IRExpression left, IRExpression right) {
return new IRArithmeticExpression(SimpleNode.FLOAT_ADD, left, right);
}
public static IRExpression floatSub(IRExpression left, IRExpression right) {
return new IRArithmeticExpression(SimpleNode.FLOAT_SUB, left, right);
}
public static IRExpression floatMul(IRExpression left, IRExpression right) {
return new IRArithmeticExpression(SimpleNode.FLOAT_MUL, left, right);
}
public static IRExpression floatDiv(IRExpression left, IRExpression right) {
return new IRArithmeticExpression(SimpleNode.FLOAT_DIV, left, right);
}
public static IRExpression floatMod(IRExpression left, IRExpression right) {
return new IRArithmeticExpression(SimpleNode.FLOAT_MOD, left, right);
}
public static IRExpression doubleAdd(IRExpression left, IRExpression right) {
return new IRArithmeticExpression(SimpleNode.DOUBLE_ADD, left, right);
}
public static IRExpression doubleSub(IRExpression left, IRExpression right) {
return new IRArithmeticExpression(SimpleNode.DOUBLE_SUB, left, right);
}
public static IRExpression doubleMul(IRExpression left, IRExpression right) {
return new IRArithmeticExpression(SimpleNode.DOUBLE_MUL, left, right);
}
public static IRExpression doubleDiv(IRExpression left, IRExpression right) {
return new IRArithmeticExpression(SimpleNode.DOUBLE_DIV, left, right);
}
public static IRExpression doubleMod(IRExpression left, IRExpression right) {
return new IRArithmeticExpression(SimpleNode.DOUBLE_MOD, left, right);
}
// ARRAYLENGTH
public static IRExpression arrayLength(IRExpression array) {
return new IRArrayLengthExpression(array);
}
// CAST
public static IRExpression cast(IRExpression source, WrappedType targetType) {
return new IRCastExpression(source, targetType);
}
// CONSTANT DYNAMIC
public static IRExpression dynamicConst(String name, WrappedType type, WrappedHandle bootstrapMethod, List<ConstantNode> bootstrapArgs) {
return new IRConstantExpression(ConstantNode.dynamicConst(name, type, bootstrapMethod, bootstrapArgs), type);
}
public static IRExpression dynamicConst(String name, WrappedType type, Method bootstrap, List<ConstantNode> bootstrapArgs) {
return new IRConstantExpression(ConstantNode.dynamicConst(name, type, bootstrap, bootstrapArgs), type);
}
// CONSTANTS
public static IRExpression nullConst(Class<?> type) {
return new IRConstantExpression(ConstantNode.nullConst(), WrappedType.from(type));
}
public static IRExpression nullConst(ClassNode type) {
return new IRConstantExpression(ConstantNode.nullConst(), WrappedType.from(type));
}
public static IRExpression nullConst(WrappedType type) {
return new IRConstantExpression(ConstantNode.nullConst(), type);
}
public static IRExpression booleanConst(boolean z) {
return new IRConstantExpression(ConstantNode.booleanConst(z), WrappedType.from(boolean.class));
}
public static IRExpression trueConst() {
return booleanConst(true);
}
public static IRExpression falseConst() {
return booleanConst(false);
}
public static IRExpression intConst(int i) {
return new IRConstantExpression(ConstantNode.intConst(i), WrappedType.from(int.class));
}
public static IRExpression longConst(long j) {
return new IRConstantExpression(ConstantNode.longConst(j), WrappedType.from(long.class));
}
public static IRExpression floatConst(float f) {
return new IRConstantExpression(ConstantNode.floatConst(f), WrappedType.from(float.class));
}
public static IRExpression doubleConst(double d) {
return new IRConstantExpression(ConstantNode.doubleConst(d), WrappedType.from(double.class));
}
public static IRExpression stringConst(String str) {
return new IRConstantExpression(ConstantNode.stringConst(str), WrappedType.from(String.class));
}
public static IRExpression classConst(Class<?> clazz) {
return new IRConstantExpression(ConstantNode.classConst(WrappedType.from(clazz)), WrappedType.from(Class.class));
}
public static IRExpression classConst(WrappedType type) {
return new IRConstantExpression(ConstantNode.classConst(type), WrappedType.from(Class.class));
}
// GET ARRAY ELEMENT
public static IRExpression getArrayElement(IRExpression array, int index) {
return new IRGetArrayElementExpression(array, intConst(index));
}
public static IRExpression getArrayElement(IRExpression array, IRExpression index) {
return new IRGetArrayElementExpression(array, index);
}
// GET FIELD
public static IRExpression getField(IRExpression instance, Field field) {
return new IRGetFieldExpression(instance, field);
}
public static IRExpression getField(IRExpression instance, Class<?> owner, String name, Class<?> type) {
return new IRGetFieldExpression(instance, WrappedType.from(owner), name, WrappedType.from(type));
}
public static IRExpression getField(IRExpression instance, WrappedType owner, String name, WrappedType type) {
return new IRGetFieldExpression(instance, owner, name, type);
}
public static IRExpression getStatic(Field field) {
return new IRGetFieldExpression(null, field);
}
public static IRExpression getStatic(Class<?> owner, String name, Class<?> type) {
return new IRGetFieldExpression(null, WrappedType.from(owner), name, WrappedType.from(type));
}
public static IRExpression getStatic(WrappedType owner, String name, WrappedType type) {
return new IRGetFieldExpression(null, owner, name, type);
}
// INSTANCE OF
public static IRExpression instanceOf(IRExpression instance, Class<?> type) {
return new IRInstanceOfExpression(instance, WrappedType.from(type));
}
public static IRExpression instanceOf(IRExpression instance, WrappedType type) {
return new IRInstanceOfExpression(instance, type);
}
// INVOCATIONS
public static IRExpression invokeVirtual(IRExpression instance, Method method, IRExpression... args) {
return new IRInvocationExpression(instance, method, List.of(args));
}
public static IRExpression invokeVirtual(IRExpression instance, MethodNode methodNode, IRExpression... arguments) {
return new IRInvocationExpression(instance, instance.getType(), methodNode.name, List.of(arguments), Utils.wrapMethodNodeParameters(methodNode), new WrappedType(Type.getReturnType(methodNode.desc)));
}
public static IRExpression invokeVirtual(IRExpression instance, String name, List<WrappedType> parameterTypes, WrappedType returnType, IRExpression... arguments) {
return new IRInvocationExpression(instance, instance.getType(), name, List.of(arguments), parameterTypes, returnType);
}
public static IRExpression invokeVirtual(IRExpression instance, WrappedType owner, String name, List<IRExpression> args, List<WrappedType> argTypes, WrappedType returnType) {
return new IRInvocationExpression(instance, owner, name, args, argTypes, returnType);
}
public static IRExpression invokeStatic(Method method, IRExpression... args) {
return new IRInvocationExpression(null, method, List.of(args));
}
public static IRExpression invokeStatic(ClassNode owner, MethodNode methodNode, IRExpression... arguments) {
return new IRInvocationExpression(null, WrappedType.from(owner), methodNode.name, List.of(arguments), Utils.wrapMethodNodeParameters(methodNode), new WrappedType(Type.getReturnType(methodNode.desc)));
}
public static IRExpression invokeStatic(String owner, String name, List<WrappedType> parameterTypes, WrappedType returnType, IRExpression... arguments) {
return new IRInvocationExpression(null, WrappedType.fromInternalName(owner, false), name, List.of(arguments), parameterTypes, returnType);
}
public static IRExpression invokeStatic(WrappedType owner, String name, List<IRExpression> args, List<WrappedType> argTypes, WrappedType returnType) {
return new IRInvocationExpression(null, owner, name, args, argTypes, returnType);
}
// INVOKE DYNAMIC
public static IRExpression invokeDynamic(String name, List<IRExpression> args, List<WrappedType> argTypes, WrappedType returnType, Method bootstrap, List<ConstantNode> bootstrapArgs) {
return new IRInvokeDynamicExpression(name, args, argTypes, returnType, WrappedHandle.getInvokeStaticHandle(bootstrap), bootstrapArgs);
}
public static IRExpression invokeDynamic(String name, List<IRExpression> args, List<WrappedType> argTypes, WrappedType returnType, WrappedHandle bootstrap, List<ConstantNode> bootstrapArgs) {
return new IRInvokeDynamicExpression(name, args, argTypes, returnType, bootstrap, bootstrapArgs);
}
// NEGATIONS
public static IRExpression negate(IRExpression operand) {
return new IRNegateExpression(operand);
}
// NEW ARRAY
public static IRExpression newArray(Class<?> type, IRExpression... elements) {
return new IRNewArrayExpression(intConst(elements.length), WrappedType.from(type), elements);
}
public static IRExpression newArray(WrappedType type, IRExpression... elements) {
return new IRNewArrayExpression(intConst(elements.length), type, elements);
}
public static IRExpression newArray(int length, Class<?> type, IRExpression... elements) {
return new IRNewArrayExpression(intConst(length), WrappedType.from(type), elements);
}
public static IRExpression newArray(int length, WrappedType type, IRExpression... elements) {
return new IRNewArrayExpression(intConst(length), type, elements);
}
public static IRExpression newArray(IRExpression length, Class<?> type, IRExpression... elements) {
return new IRNewArrayExpression(length, WrappedType.from(type), elements);
}
public static IRExpression newArray(IRExpression length, WrappedType type, IRExpression... elements) {
return new IRNewArrayExpression(length, type, elements);
}
// NEW INSTANCE (CONSTRUCTOR INVOCATIONS)
public static IRExpression newInstance(Constructor<?> constructor, IRExpression... args) {
return new IRNewInstanceExpression(WrappedType.from(constructor.getDeclaringClass()), Utils.wrapConstructorParameters(constructor), List.of(args));
}
public static IRExpression newInstance(WrappedType type, List<WrappedType> argumentTypes, List<IRExpression> arguments) {
return new IRNewInstanceExpression(type, argumentTypes, arguments);
}
// RETURNS
public static IRExpression returnMe(IRExpression operand) {
return new IRReturnExpression(operand);
}
// SET ARRAY ELEMENT
public static IRExpression setArrayElement(IRExpression array, int index, IRExpression value) {
return new IRSetArrayElementExpression(array, intConst(index), value);
}
public static IRExpression setArrayElement(IRExpression array, IRExpression index, IRExpression value) {
return new IRSetArrayElementExpression(array, index, value);
}
// SET FIELD
public static IRExpression setField(IRExpression instance, Field field, IRExpression value) {
return new IRSetFieldExpression(instance, value, field);
}
public static IRExpression setField(IRExpression instance, Class<?> owner, String name, Class<?> type, IRExpression value) {
return new IRSetFieldExpression(instance, value, WrappedType.from(owner), name, WrappedType.from(type));
}
public static IRExpression setField(IRExpression instance, WrappedType owner, String name, WrappedType type, IRExpression value) {
return new IRSetFieldExpression(instance, value, owner, name, type);
}
public static IRExpression setStatic(Field field, IRExpression value) {
return new IRSetFieldExpression(null, value, field);
}
public static IRExpression setStatic(Class<?> owner, String name, Class<?> type, IRExpression value) {
return new IRSetFieldExpression(null, value, WrappedType.from(owner), name, WrappedType.from(type));
}
public static IRExpression setStatic(WrappedType owner, String name, WrappedType type, IRExpression value) {
return new IRSetFieldExpression(null, value, owner, name, type);
}
public static IRExpression throwException(IRExpression exception) {
return new IRThrowExceptionExpression(exception);
}
// FLOW STRUCTURES
public static IRFlowStructure forLoop(BytecodeBlock initializer, BytecodeBlock condition, BytecodeBlock updater, BytecodeBlock body) {
return new IRForStructure(initializer, condition, updater, body);
}
public static IRFlowStructure ifBlock(BytecodeBlock condition, BytecodeBlock ifTrue, BytecodeBlock ifFalse) {
return new IRIfStructure(condition, ifTrue, ifFalse);
}
public static IRFlowStructure switchStatement(IRExpression operand, ArrayList<Integer> keys, ArrayList<BytecodeBlock> cases, BytecodeBlock defaultBody) {
return new IRSwitchStructure(operand, keys, cases, defaultBody);
}
public static IRFlowStructure synchronizedBlock(IRExpression instance, BytecodeBlock body) {
return new IRSynchronizedStructure(instance, body);
}
public static IRFlowStructure tryCatch(BytecodeBlock tryBody, BytecodeBlock catchBody, WrappedType exceptionType) {
return new IRTryCatchStructure(tryBody, catchBody, exceptionType);
}
public static IRFlowStructure whileLoop(BytecodeBlock condition, BytecodeBlock body) {
return new IRWhileStructure(condition, body);
}
}
================================================
FILE: xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/expressions/IRVariable.java
================================================
/*
* Radon - An open-source Java obfuscator
* Copyright (C) 2021 ItzSomebody
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>
*/
package xyz.itzsomebody.codegen.expressions;
import xyz.itzsomebody.codegen.BytecodeBlock;
import xyz.itzsomebody.codegen.WrappedType;
import xyz.itzsomebody.codegen.expressions.predefined.IRSetVariableExpression;
import xyz.itzsomebody.codegen.instructions.RegisterNode;
public class IRVariable extends IRExpression {
private final WrappedType wrappedType;
private final int slot;
public IRVariable(WrappedType wrappedType, int slot) {
super(wrappedType);
this.wrappedType = wrappedType;
this.slot = slot;
}
@Override
public BytecodeBlock getInstructions() {
return new BytecodeBlock().append(RegisterNode.loadVar(this));
}
public WrappedType getWrappedType() {
return wrappedType;
}
public int getSlot() {
return slot;
}
public IRExpression set(IRExpression expression) {
return new IRSetVariableExpression(this, expression);
}
}
================================================
FILE: xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/expressions/flow/IRFlowStructure.java
================================================
/*
* Radon - An open-source Java obfuscator
* Copyright (C) 2021 ItzSomebody
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>
*/
package xyz.itzsomebody.codegen.expressions.flow;
import xyz.itzsomebody.codegen.WrappedType;
import xyz.itzsomebody.codegen.expressions.IRExpression;
public abstract class IRFlowStructure extends IRExpression {
public IRFlowStructure() {
super(WrappedType.getAbsent());
}
}
================================================
FILE: xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/expressions/flow/IRForStructure.java
================================================
/*
* Radon - An open-source Java obfuscator
* Copyright (C) 2021 ItzSomebody
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>
*/
package xyz.itzsomebody.codegen.expressions.flow;
import xyz.itzsomebody.codegen.BytecodeBlock;
import xyz.itzsomebody.codegen.instructions.BytecodeLabel;
import xyz.itzsomebody.codegen.instructions.JumpNode;
public class IRForStructure extends IRFlowStructure {
private final BytecodeBlock initializer;
private final BytecodeBlock condition;
private final BytecodeBlock updater;
private final BytecodeBlock body;
private final BytecodeLabel continueLabel = new BytecodeLabel();
private final BytecodeLabel exitLabel = new BytecodeLabel();
public IRForStructure(BytecodeBlock initializer, BytecodeBlock condition, BytecodeBlock updater, BytecodeBlock body) {
this.initializer = initializer;
this.condition = condition;
this.updater = updater;
this.body = body;
}
@Override
public BytecodeBlock getInstructions() {
return new BytecodeBlock()
// Initializer
.append(initializer)
// Condition
.append(continueLabel)
.append(condition)
.append(JumpNode.jumpIfZero(exitLabel)) // Exit if false
// Updater
.append(updater)
// Body
.append(body)
.append(JumpNode.jumpUnconditionally(continueLabel)) // Next iteration
.append(exitLabel);
}
public BytecodeLabel getContinueLabel() {
return continueLabel;
}
public BytecodeLabel getExitLabel() {
return exitLabel;
}
}
================================================
FILE: xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/expressions/flow/IRIfStructure.java
================================================
/*
* Radon - An open-source Java obfuscator
* Copyright (C) 2021 ItzSomebody
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>
*/
package xyz.itzsomebody.codegen.expressions.flow;
import xyz.itzsomebody.codegen.BytecodeBlock;
import xyz.itzsomebody.codegen.instructions.BytecodeLabel;
import xyz.itzsomebody.codegen.instructions.JumpNode;
public class IRIfStructure extends IRFlowStructure {
private final BytecodeBlock condition;
private final BytecodeBlock ifTrue;
private final BytecodeBlock ifFalse;
private final BytecodeLabel trueLabel = new BytecodeLabel();
private final BytecodeLabel exitLabel = new BytecodeLabel();
public IRIfStructure(BytecodeBlock condition, BytecodeBlock ifTrue, BytecodeBlock ifFalse) {
this.condition = condition;
this.ifTrue = ifTrue;
this.ifFalse = ifFalse;
}
@Override
public BytecodeBlock getInstructions() {
return new BytecodeBlock()
// Condition
.append(condition)
.append(JumpNode.jumpIfNotZero(trueLabel))
// Execute this if false
.append(ifFalse)
.append(JumpNode.jumpUnconditionally(exitLabel)) // Don't execute the ifTrue block
// Execute this if true
.append(trueLabel)
.append(ifTrue)
// Exit
.append(exitLabel);
}
public BytecodeLabel getTrueLabel() {
return trueLabel;
}
public BytecodeLabel getExitLabel() {
return exitLabel;
}
}
================================================
FILE: xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/expressions/flow/IRSwitchStructure.java
================================================
/*
* Radon - An open-source Java obfuscator
* Copyright (C) 2021 ItzSomebody
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>
*/
package xyz.itzsomebody.codegen.expressions.flow;
import org.jetbrains.annotations.NotNull;
import xyz.itzsomebody.codegen.BytecodeBlock;
import xyz.itzsomebody.codegen.expressions.IRExpression;
import xyz.itzsomebody.codegen.instructions.BytecodeLabel;
import xyz.itzsomebody.codegen.instructions.JumpNode;
import xyz.itzsomebody.codegen.instructions.SwitchNode;
import java.util.ArrayList;
import java.util.SortedSet;
import java.util.TreeSet;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
public class IRSwitchStructure extends IRFlowStructure {
private final IRExpression operand;
private final SortedSet<IRCaseStructure> cases = new TreeSet<>();
private final BytecodeBlock defaultBody;
private final ArrayList<BytecodeLabel> caseLabels = new ArrayList<>();
private final BytecodeLabel defaultLabel = new BytecodeLabel();
private final BytecodeLabel exitLabel = new BytecodeLabel();
public IRSwitchStructure(IRExpression operand, ArrayList<Integer> keys, ArrayList<BytecodeBlock> caseBodies, BytecodeBlock defaultBody) {
this.operand = operand;
this.defaultBody = defaultBody;
IntStream.range(0, keys.size()).forEach(index -> cases.add(new IRCaseStructure(keys.get(index), caseBodies.get(index))));
}
@Override
public BytecodeBlock getInstructions() {
var block = new BytecodeBlock()
.append(operand.getInstructions())
.append(new SwitchNode(cases.stream().map(IRCaseStructure::getKey).collect(Collectors.toList()), caseLabels, defaultLabel));
// Cases
cases.forEach(caseStructure -> {
var caseLabel = new BytecodeLabel();
block.append(caseLabel)
.append(caseStructure.getBody())
.append(JumpNode.jumpUnconditionally(exitLabel));
caseLabels.add(caseLabel);
});
// Default
block.append(defaultLabel)
.append(defaultBody);
// Exit
block.append(exitLabel);
return block;
}
public ArrayList<BytecodeLabel> getCaseLabels() {
return caseLabels;
}
public BytecodeLabel getDefaultLabel() {
return defaultLabel;
}
public BytecodeLabel getExitLabel() {
return exitLabel;
}
static class IRCaseStructure implements Comparable<IRCaseStructure> {
private final int key;
private final BytecodeBlock body;
IRCaseStructure(int key, BytecodeBlock body) {
this.key = key;
this.body = body;
}
public int getKey() {
return key;
}
public BytecodeBlock getBody() {
return body;
}
@Override
public int compareTo(@NotNull IRSwitchStructure.IRCaseStructure other) {
return Integer.compare(key, other.key);
}
}
}
================================================
FILE: xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/expressions/flow/IRSynchronizedStructure.java
================================================
/*
* Radon - An open-source Java obfuscator
* Copyright (C) 2021 ItzSomebody
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>
*/
package xyz.itzsomebody.codegen.expressions.flow;
import xyz.itzsomebody.codegen.BytecodeBlock;
import xyz.itzsomebody.codegen.expressions.IRExpression;
import xyz.itzsomebody.codegen.instructions.SimpleNode;
public class IRSynchronizedStructure extends IRFlowStructure {
private final IRExpression instance;
private final BytecodeBlock body;
public IRSynchronizedStructure(IRExpression instance, BytecodeBlock body) {
this.instance = instance;
this.body = body;
}
@Override
public BytecodeBlock getInstructions() {
return new BytecodeBlock()
.append(instance.getInstructions())
.append(SimpleNode.ENTER_MONITOR)
.append(body)
.append(instance.getInstructions())
.append(SimpleNode.EXIT_MONITOR);
}
}
================================================
FILE: xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/expressions/flow/IRTryCatchStructure.java
================================================
/*
* Radon - An open-source Java obfuscator
* Copyright (C) 2021 ItzSomebody
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>
*/
package xyz.itzsomebody.codegen.expressions.flow;
import org.objectweb.asm.tree.TryCatchBlockNode;
import xyz.itzsomebody.codegen.BytecodeBlock;
import xyz.itzsomebody.codegen.WrappedType;
import xyz.itzsomebody.codegen.instructions.BytecodeLabel;
import xyz.itzsomebody.codegen.instructions.JumpNode;
public class IRTryCatchStructure extends IRFlowStructure {
private final BytecodeBlock trapRange;
private final BytecodeBlock handler;
private final WrappedType exceptionType;
private final BytecodeLabel trapStartLabel = new BytecodeLabel();
private final BytecodeLabel trapEndLabel = new BytecodeLabel();
private final BytecodeLabel handlerLabel = new BytecodeLabel();
private final BytecodeLabel exitLabel = new BytecodeLabel();
public IRTryCatchStructure(BytecodeBlock trapRange, BytecodeBlock handler, WrappedType exceptionType) {
this.trapRange = trapRange;
this.handler = handler;
this.exceptionType = exceptionType;
}
public TryCatchBlockNode getTryCatchBlocKNode() {
return new TryCatchBlockNode(trapStartLabel.getLabel(), trapEndLabel.getLabel(), handlerLabel.getLabel(), exceptionType.getInternalName());
}
@Override
public BytecodeBlock getInstructions() {
return new BytecodeBlock()
// Try block
.append(trapStartLabel)
.append(trapRange)
.append(trapEndLabel)
.append(JumpNode.jumpUnconditionally(exitLabel)) // No exception has been thrown so skip the handler
// Catch block
.append(handlerLabel)
.append(handler)
// Exit
.append(exitLabel);
}
public BytecodeLabel getTrapStartLabel() {
return trapStartLabel;
}
public BytecodeLabel getTrapEndLabel() {
return trapEndLabel;
}
public BytecodeLabel getHandlerLabel() {
return handlerLabel;
}
public BytecodeLabel getExitLabel() {
return exitLabel;
}
}
================================================
FILE: xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/expressions/flow/IRWhileStructure.java
================================================
/*
* Radon - An open-source Java obfuscator
* Copyright (C) 2021 ItzSomebody
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>
*/
package xyz.itzsomebody.codegen.expressions.flow;
import xyz.itzsomebody.codegen.BytecodeBlock;
import xyz.itzsomebody.codegen.instructions.BytecodeLabel;
import xyz.itzsomebody.codegen.instructions.JumpNode;
public class IRWhileStructure extends IRFlowStructure {
private final BytecodeBlock condition;
private final BytecodeBlock body;
private final BytecodeLabel continueLabel = new BytecodeLabel();
private final BytecodeLabel exitLabel = new BytecodeLabel();
public IRWhileStructure(BytecodeBlock condition, BytecodeBlock body) {
this.condition = condition;
this.body = body;
}
@Override
public BytecodeBlock getInstructions() {
return new BytecodeBlock()
// Condition
.append(continueLabel)
.append(condition)
.append(JumpNode.jumpIfZero(exitLabel)) // Exit if false
// Body
.append(body)
.append(JumpNode.jumpUnconditionally(continueLabel)) // Next iteration
// Exit
.append(exitLabel);
}
public BytecodeLabel getContinueLabel() {
return continueLabel;
}
public BytecodeLabel getExitLabel() {
return exitLabel;
}
}
================================================
FILE: xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/expressions/predefined/IRArithmeticExpression.java
================================================
/*
* Radon - An open-source Java obfuscator
* Copyright (C) 2021 ItzSomebody
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>
*/
package xyz.itzsomebody.codegen.expressions.predefined;
import xyz.itzsomebody.codegen.BytecodeBlock;
import xyz.itzsomebody.codegen.expressions.IRExpression;
import xyz.itzsomebody.codegen.instructions.SimpleNode;
public class IRArithmeticExpression extends IRExpression {
private final SimpleNode operation;
private final IRExpression left;
private final IRExpression right;
public IRArithmeticExpression(SimpleNode operation, IRExpression left, IRExpression right) {
super(left.getType()); // Left expression should ALWAYS be the resultant type (i.e. LSHL/LSHR/LUSHR)
this.operation = operation;
this.left = left;
this.right = right;
}
@Override
public BytecodeBlock getInstructions() {
return new BytecodeBlock()
.append(left.getInstructions())
.append(right.getInstructions())
.append(operation);
}
}
================================================
FILE: xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/expressions/predefined/IRArrayLengthExpression.java
================================================
/*
* Radon - An open-source Java obfuscator
* Copyright (C) 2021 ItzSomebody
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>
*/
package xyz.itzsomebody.codegen.expressions.predefined;
import xyz.itzsomebody.codegen.BytecodeBlock;
import xyz.itzsomebody.codegen.WrappedType;
import xyz.itzsomebody.codegen.expressions.IRExpression;
import xyz.itzsomebody.codegen.instructions.SimpleNode;
public class IRArrayLengthExpression extends IRExpression {
private final IRExpression array;
public IRArrayLengthExpression(IRExpression array) {
super(WrappedType.from(int.class));
this.array = array;
}
@Override
public BytecodeBlock getInstructions() {
return new BytecodeBlock()
.append(array.getInstructions())
.append(SimpleNode.ARRAY_LENGTH);
}
}
================================================
FILE: xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/expressions/predefined/IRCastExpression.java
================================================
/*
* Radon - An open-source Java obfuscator
* Copyright (C) 2021 ItzSomebody
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>
*/
package xyz.itzsomebody.codegen.expressions.predefined;
import org.objectweb.asm.Type;
import xyz.itzsomebody.codegen.BytecodeBlock;
import xyz.itzsomebody.codegen.Utils;
import xyz.itzsomebody.codegen.WrappedType;
import xyz.itzsomebody.codegen.exceptions.UncompilableNodeException;
import xyz.itzsomebody.codegen.expressions.IRExpression;
import xyz.itzsomebody.codegen.instructions.InvokeNode;
import xyz.itzsomebody.codegen.instructions.SimpleNode;
import xyz.itzsomebody.codegen.instructions.TypeNode;
import java.util.Collections;
import java.util.List;
public class IRCastExpression extends IRExpression {
private final IRExpression castMe;
public IRCastExpression(IRExpression castMe, WrappedType castType) {
super(castType);
this.castMe = castMe;
}
@Override
public BytecodeBlock getInstructions() {
var block = new BytecodeBlock().append(castMe.getInstructions());
var currentType = castMe.getType();
var targetType = getType();
if (currentType.equals(targetType)) {
return block;
}
if (currentType.isPrimitive()) {
if (targetType.isPrimitive()) {
castPrimitives(block, currentType, targetType);
} else if (targetType.isBoxed()) {
block.append(InvokeNode.invokeStatic(targetType, "valueOf", List.of(currentType), targetType));
} else {
block.append(InvokeNode.invokeStatic(Utils.box(currentType), "valueOf", List.of(currentType), Utils.box(currentType)))
.append(TypeNode.cast(targetType));
}
} else if (currentType.isBoxed()) {
if (targetType.isPrimitive()) {
var primitiveType = currentType.getPrimitiveType();
block.append(InvokeNode.invokeVirtual(currentType, primitiveType.getClassName() + "Value", Collections.emptyList(), primitiveType));
castPrimitives(block, primitiveType, targetType);
} else {
block.append(TypeNode.cast(targetType));
}
} else {
if (targetType.isPrimitive()) {
var primitiveType = targetType.getPrimitiveType();
block.append(TypeNode.cast(Utils.box(targetType)))
.append(InvokeNode.invokeVirtual(targetType, primitiveType.getClassName() + "Value", Collections.emptyList(), primitiveType));
} else {
block.append(TypeNode.cast(targetType));
}
}
return block;
}
@SuppressWarnings("Duplicates")
private static void castPrimitives(BytecodeBlock block, WrappedType source, WrappedType target) {
var sourceSort = source.getSort();
var targetSort = target.getSort();
if (sourceSort == targetSort) {
return; // Casting primitive to same primitive type = redundant
}
if (sourceSort == Type.BOOLEAN || sourceSort == Type.BYTE) {
if (target.isIntType()) {
return;
}
if (targetSort == Type.FLOAT) {
block.append(SimpleNode.CAST_INT_TO_FLOAT);
return;
} else if (targetSort == Type.LONG) {
block.append(SimpleNode.CAST_INT_TO_LONG);
return;
} else if (targetSort == Type.DOUBLE) {
block.append(SimpleNode.CAST_INT_TO_DOUBLE);
return;
}
} else if (sourceSort == Type.CHAR) {
if (targetSort == Type.BYTE) {
block.append(SimpleNode.CAST_INT_TO_BYTE);
return;
}
if (target.isIntType()) { // Non-byte integer
return;
}
if (targetSort == Type.FLOAT) {
block.append(SimpleNode.CAST_INT_TO_FLOAT);
return;
} else if (targetSort == Type.LONG) {
block.append(SimpleNode.CAST_INT_TO_LONG);
return;
} else if (targetSort == Type.DOUBLE) {
block.append(SimpleNode.CAST_INT_TO_DOUBLE);
return;
}
} else if (sourceSort == Type.SHORT) {
if (targetSort == Type.BYTE) {
block.append(SimpleNode.CAST_INT_TO_BYTE);
return;
}
if (targetSort == Type.CHAR) {
block.append(SimpleNode.CAST_INT_TO_CHAR);
return;
}
if (target.isIntType()) { // Non-byte integer
return;
}
if (targetSort == Type.FLOAT) {
block.append(SimpleNode.CAST_INT_TO_FLOAT);
return;
} else if (targetSort == Type.LONG) {
block.append(SimpleNode.CAST_INT_TO_LONG);
return;
} else if (targetSort == Type.DOUBLE) {
block.append(SimpleNode.CAST_INT_TO_DOUBLE);
return;
}
} else if (sourceSort == Type.INT) {
if (targetSort == Type.BYTE) {
block.append(SimpleNode.CAST_INT_TO_BYTE);
return;
} else if (targetSort == Type.CHAR) {
block.append(SimpleNode.CAST_INT_TO_CHAR);
return;
} else if (targetSort == Type.SHORT) {
block.append(SimpleNode.CAST_INT_TO_SHORT);
return;
} else if (targetSort == Type.FLOAT) {
block.append(SimpleNode.CAST_INT_TO_FLOAT);
return;
} else if (targetSort == Type.LONG) {
block.append(SimpleNode.CAST_INT_TO_LONG);
return;
} else if (targetSort == Type.DOUBLE) {
block.append(SimpleNode.CAST_INT_TO_DOUBLE);
return;
}
} else if (sourceSort == Type.LONG) {
if (target.isIntType()) {
block.append(SimpleNode.CAST_LONG_TO_INT);
if (targetSort == Type.BYTE) {
block.append(SimpleNode.CAST_INT_TO_BYTE);
} else if (targetSort == Type.CHAR) {
block.append(SimpleNode.CAST_INT_TO_CHAR);
} else if (targetSort == Type.SHORT) {
block.append(SimpleNode.CAST_INT_TO_SHORT);
}
return;
} else if (targetSort == Type.FLOAT) {
block.append(SimpleNode.CAST_LONG_TO_FLOAT);
return;
} else if (targetSort == Type.DOUBLE) {
block.append(SimpleNode.CAST_LONG_TO_DOUBLE);
return;
}
} else if (sourceSort == Type.FLOAT) {
if (target.isIntType()) {
block.append(SimpleNode.CAST_FLOAT_TO_INT);
if (targetSort == Type.BYTE) {
block.append(SimpleNode.CAST_INT_TO_BYTE);
} else if (targetSort == Type.CHAR) {
block.append(SimpleNode.CAST_INT_TO_CHAR);
} else if (targetSort == Type.SHORT) {
block.append(SimpleNode.CAST_INT_TO_SHORT);
}
return;
} else if (targetSort == Type.LONG) {
block.append(SimpleNode.CAST_FLOAT_TO_LONG);
return;
} else if (targetSort == Type.DOUBLE) {
block.append(SimpleNode.CAST_FLOAT_TO_DOUBLE);
return;
}
} else if (sourceSort == Type.DOUBLE) {
if (target.isIntType()) {
block.append(SimpleNode.CAST_DOUBLE_TO_INT);
if (targetSort == Type.BYTE) {
block.append(SimpleNode.CAST_INT_TO_BYTE);
} else if (targetSort == Type.CHAR) {
block.append(SimpleNode.CAST_INT_TO_CHAR);
} else if (targetSort == Type.SHORT) {
block.append(SimpleNode.CAST_INT_TO_SHORT);
}
return;
} else if (targetSort == Type.FLOAT) {
block.append(SimpleNode.CAST_DOUBLE_TO_FLOAT);
return;
} else if (targetSort == Type.LONG) {
block.append(SimpleNode.CAST_DOUBLE_TO_LONG);
return;
}
}
throw new UncompilableNodeException("Cannot cast " + source + " to " + target);
}
}
================================================
FILE: xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/expressions/predefined/IRConstantExpression.java
================================================
/*
* Radon - An open-source Java obfuscator
* Copyright (C) 2021 ItzSomebody
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>
*/
package xyz.itzsomebody.codegen.expressions.predefined;
import xyz.itzsomebody.codegen.BytecodeBlock;
import xyz.itzsomebody.codegen.WrappedType;
import xyz.itzsomebody.codegen.expressions.IRExpression;
import xyz.itzsomebody.codegen.instructions.ConstantNode;
public class IRConstantExpression extends IRExpression {
private final ConstantNode cst;
public IRConstantExpression(ConstantNode cst, WrappedType type) {
super(type);
this.cst = cst;
}
@Override
public BytecodeBlock getInstructions() {
return new BytecodeBlock().append(cst);
}
}
================================================
FILE: xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/expressions/predefined/IRGetArrayElementExpression.java
================================================
/*
* Radon - An open-source Java obfuscator
* Copyright (C) 2021 ItzSomebody
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>
*/
package xyz.itzsomebody.codegen.expressions.predefined;
import xyz.itzsomebody.codegen.BytecodeBlock;
import xyz.itzsomebody.codegen.expressions.IRExpression;
import xyz.itzsomebody.codegen.instructions.SimpleNode;
public class IRGetArrayElementExpression extends IRExpression {
private final IRExpression array;
private final IRExpression index;
public IRGetArrayElementExpression(IRExpression array, IRExpression index) {
super(array.getType());
this.array = array;
this.index = index;
}
@Override
public BytecodeBlock getInstructions() {
return new BytecodeBlock()
.append(array.getInstructions())
.append(index.getInstructions())
.append(SimpleNode.getArrayLoadOp(getType()));
}
}
================================================
FILE: xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/expressions/predefined/IRGetFieldExpression.java
================================================
/*
* Radon - An open-source Java obfuscator
* Copyright (C) 2021 ItzSomebody
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>
*/
package xyz.itzsomebody.codegen.expressions.predefined;
import xyz.itzsomebody.codegen.BytecodeBlock;
import xyz.itzsomebody.codegen.WrappedType;
import xyz.itzsomebody.codegen.expressions.IRExpression;
import xyz.itzsomebody.codegen.instructions.FieldAccessNode;
import java.lang.reflect.Field;
public class IRGetFieldExpression extends IRExpression {
private final IRExpression instance;
private final WrappedType owner;
private final String name;
public IRGetFieldExpression(IRExpression instance, WrappedType owner, String name, WrappedType type) {
super(type);
this.instance = instance;
this.owner = owner;
this.name = name;
}
public IRGetFieldExpression(IRExpression instance, Field field) {
this(instance, WrappedType.from(field.getDeclaringClass()), field.getName(), WrappedType.from(field.getType()));
}
@Override
public BytecodeBlock getInstructions() {
if (instance == null) {
return new BytecodeBlock().append(FieldAccessNode.getStatic(owner, name, getType()));
} else {
return new BytecodeBlock()
.append(instance.getInstructions())
.append(FieldAccessNode.getField(owner, name, getType()));
}
}
}
================================================
FILE: xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/expressions/predefined/IRInstanceOfExpression.java
================================================
/*
* Radon - An open-source Java obfuscator
* Copyright (C) 2021 ItzSomebody
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>
*/
package xyz.itzsomebody.codegen.expressions.predefined;
import xyz.itzsomebody.codegen.BytecodeBlock;
import xyz.itzsomebody.codegen.WrappedType;
import xyz.itzsomebody.codegen.expressions.IRExpression;
import xyz.itzsomebody.codegen.instructions.TypeNode;
public class IRInstanceOfExpression extends IRExpression {
private final IRExpression instance;
private final WrappedType type;
public IRInstanceOfExpression(IRExpression instance, WrappedType type) {
super(WrappedType.from(boolean.class));
this.instance = instance;
this.type = type;
}
@Override
public BytecodeBlock getInstructions() {
return new BytecodeBlock()
.append(instance.getInstructions())
.append(TypeNode.instanceOf(type));
}
}
================================================
FILE: xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/expressions/predefined/IRInvocationExpression.java
================================================
/*
* Radon - An open-source Java obfuscator
* Copyright (C) 2021 ItzSomebody
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>
*/
package xyz.itzsomebody.codegen.expressions.predefined;
import xyz.itzsomebody.codegen.BytecodeBlock;
import xyz.itzsomebody.codegen.Utils;
import xyz.itzsomebody.codegen.WrappedType;
import xyz.itzsomebody.codegen.expressions.IRExpression;
import xyz.itzsomebody.codegen.instructions.InvokeNode;
import java.lang.reflect.Method;
import java.util.List;
public class IRInvocationExpression extends IRExpression {
private final IRExpression instance;
private final WrappedType owner;
private final String name;
private final List<IRExpression> args;
private final List<WrappedType> argTypes;
public IRInvocationExpression(IRExpression instance, WrappedType owner, String name, List<IRExpression> args, List<WrappedType> argTypes, WrappedType returnType) {
super(returnType);
this.instance = instance;
this.owner = owner;
this.name = name;
this.args = args;
this.argTypes = argTypes;
}
public IRInvocationExpression(IRExpression instance, Method method, List<IRExpression> args) {
this(instance, WrappedType.from(method.getDeclaringClass()), method.getName(), args, Utils.wrapMethodParameters(method), WrappedType.from(method.getReturnType()));
}
@Override
public BytecodeBlock getInstructions() {
var block = new BytecodeBlock();
if (instance != null) {
block.append(instance.getInstructions());
}
args.forEach(arg -> block.append(arg.getInstructions()));
if (instance == null) {
block.append(InvokeNode.invokeStatic(owner, name, argTypes, getType()));
} else if (owner.isInterface()) {
block.append(InvokeNode.invokeInterface(owner, name, argTypes, getType()));
} else {
block.append(InvokeNode.invokeVirtual(owner, name, argTypes, getType()));
}
return block;
}
}
================================================
FILE: xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/expressions/predefined/IRInvokeDynamicExpression.java
================================================
/*
* Radon - An open-source Java obfuscator
* Copyright (C) 2021 ItzSomebody
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>
*/
package xyz.itzsomebody.codegen.expressions.predefined;
import xyz.itzsomebody.codegen.BytecodeBlock;
import xyz.itzsomebody.codegen.WrappedHandle;
import xyz.itzsomebody.codegen.WrappedType;
import xyz.itzsomebody.codegen.expressions.IRExpression;
import xyz.itzsomebody.codegen.instructions.ConstantNode;
import xyz.itzsomebody.codegen.instructions.InvokeDynamicNode;
import java.util.List;
public class IRInvokeDynamicExpression extends IRExpression {
private final String name;
private final List<IRExpression> args;
private final List<WrappedType> argTypes;
private final WrappedHandle bootstrap;
private final List<ConstantNode> bootstrapArgs;
public IRInvokeDynamicExpression(String name, List<IRExpression> args, List<WrappedType> argTypes, WrappedType returnType, WrappedHandle bootstrap, List<ConstantNode> bootstrapArgs) {
super(returnType);
this.name = name;
this.args = args;
this.argTypes = argTypes;
this.bootstrap = bootstrap;
this.bootstrapArgs = bootstrapArgs;
}
@Override
public BytecodeBlock getInstructions() {
var block = new BytecodeBlock();
args.forEach(arg -> block.append(arg.getInstructions()));
block.append(InvokeDynamicNode.invokeDynamic(name, argTypes, getType(), bootstrap, bootstrapArgs));
return block;
}
}
================================================
FILE: xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/expressions/predefined/IRNegateExpression.java
================================================
/*
* Radon - An open-source Java obfuscator
* Copyright (C) 2021 ItzSomebody
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>
*/
package xyz.itzsomebody.codegen.expressions.predefined;
import xyz.itzsomebody.codegen.BytecodeBlock;
import xyz.itzsomebody.codegen.expressions.IRExpression;
import xyz.itzsomebody.codegen.instructions.SimpleNode;
public class IRNegateExpression extends IRExpression {
private final IRExpression operand;
public IRNegateExpression(IRExpression operand) {
super(operand.getType());
this.operand = operand;
}
@Override
public BytecodeBlock getInstructions() {
return new BytecodeBlock()
.append(operand.getInstructions())
.append(SimpleNode.negateOpcodeFor(operand.getType()));
}
}
================================================
FILE: xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/expressions/predefined/IRNewArrayExpression.java
================================================
/*
* Radon - An open-source Java obfuscator
* Copyright (C) 2021 ItzSomebody
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>
*/
package xyz.itzsomebody.codegen.expressions.predefined;
import xyz.itzsomebody.codegen.BytecodeBlock;
import xyz.itzsomebody.codegen.WrappedType;
import xyz.itzsomebody.codegen.expressions.IRExpression;
import xyz.itzsomebody.codegen.instructions.ConstantNode;
import xyz.itzsomebody.codegen.instructions.NewArrayNode;
import xyz.itzsomebody.codegen.instructions.SimpleNode;
public class IRNewArrayExpression extends IRExpression {
private final IRExpression length;
private final WrappedType type;
private final IRExpression[] elements;
public IRNewArrayExpression(IRExpression length, WrappedType type, IRExpression[] elements) {
super(type);
this.length = length;
this.type = type;
this.elements = elements;
}
@Override
public BytecodeBlock getInstructions() {
BytecodeBlock block = new BytecodeBlock()
.append(length.getInstructions())
.append(new NewArrayNode(type));
for (int i = 0; i < elements.length; i++) {
IRExpression element = elements[i];
block.append(SimpleNode.DUP)
.append(ConstantNode.intConst(i))
.append(element.getInstructions())
.append(SimpleNode.getArrayStoreOp(type));
}
return block;
}
}
================================================
FILE: xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/expressions/predefined/IRNewInstanceExpression.java
================================================
/*
* Radon - An open-source Java obfuscator
* Copyright (C) 2021 ItzSomebody
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>
*/
package xyz.itzsomebody.codegen.expressions.predefined;
import xyz.itzsomebody.codegen.BytecodeBlock;
import xyz.itzsomebody.codegen.WrappedType;
import xyz.itzsomebody.codegen.expressions.IRExpression;
import xyz.itzsomebody.codegen.instructions.InvokeNode;
import xyz.itzsomebody.codegen.instructions.SimpleNode;
import xyz.itzsomebody.codegen.instructions.TypeNode;
import java.util.List;
public class IRNewInstanceExpression extends IRExpression {
private final List<WrappedType> argumentTypes;
private final List<IRExpression> arguments;
public IRNewInstanceExpression(WrappedType type, List<WrappedType> argumentTypes, List<IRExpression> arguments) {
super(type);
this.argumentTypes = argumentTypes;
this.arguments = arguments;
}
@Override
public BytecodeBlock getInstructions() {
var block = new BytecodeBlock()
.append(TypeNode.newInstance(getType()))
.append(SimpleNode.DUP);
for (var expr : arguments) {
block.append(expr.getInstructions());
}
block.append(InvokeNode.invokeConstructor(getType(), argumentTypes));
return block;
}
}
================================================
FILE: xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/expressions/predefined/IRReturnExpression.java
================================================
/*
* Radon - An open-source Java obfuscator
* Copyright (C) 2021 ItzSomebody
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>
*/
package xyz.itzsomebody.codegen.expressions.predefined;
import org.objectweb.asm.Type;
import xyz.itzsomebody.codegen.BytecodeBlock;
import xyz.itzsomebody.codegen.WrappedType;
import xyz.itzsomebody.codegen.expressions.IRExpression;
import xyz.itzsomebody.codegen.instructions.SimpleNode;
public class IRReturnExpression extends IRExpression {
private final IRExpression target;
public IRReturnExpression(IRExpression target) {
super(WrappedType.getAbsent());
this.target = target;
}
@Override
public BytecodeBlock getInstructions() {
if (target == null) {
return new BytecodeBlock().append(SimpleNode.RETURN_VOID);
}
var block = new BytecodeBlock().append(target.getInstructions());
var type = target.getType();
switch (type.getSort()) {
case Type.VOID:
block.append(SimpleNode.RETURN_VOID);
break;
case Type.BOOLEAN:
case Type.CHAR:
case Type.BYTE:
case Type.SHORT:
case Type.INT:
block.append(SimpleNode.RETURN_INT);
break;
case Type.FLOAT:
block.append(SimpleNode.RETURN_FLOAT);
break;
case Type.LONG:
block.append(SimpleNode.RETURN_LONG);
break;
case Type.DOUBLE:
block.append(SimpleNode.RETURN_DOUBLE);
break;
default:
block.append(SimpleNode.RETURN_OBJECT);
}
return block;
}
}
================================================
FILE: xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/expressions/predefined/IRSetArrayElementExpression.java
================================================
/*
* Radon - An open-source Java obfuscator
* Copyright (C) 2021 ItzSomebody
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>
*/
package xyz.itzsomebody.codegen.expressions.predefined;
import xyz.itzsomebody.codegen.BytecodeBlock;
import xyz.itzsomebody.codegen.WrappedType;
import xyz.itzsomebody.codegen.expressions.IRExpression;
import xyz.itzsomebody.codegen.instructions.SimpleNode;
public class IRSetArrayElementExpression extends IRExpression {
private final IRExpression array;
private final IRExpression index;
private final IRExpression value;
public IRSetArrayElementExpression(IRExpression array, IRExpression index, IRExpression value) {
super(WrappedType.getAbsent());
this.array = array;
this.index = index;
this.value = value;
}
@Override
public BytecodeBlock getInstructions() {
return new BytecodeBlock()
.append(array.getInstructions())
.append(index.getInstructions())
.append(value.getInstructions())
.append(SimpleNode.getArrayStoreOp(array.getType()));
}
}
================================================
FILE: xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/expressions/predefined/IRSetFieldExpression.java
================================================
/*
* Radon - An open-source Java obfuscator
* Copyright (C) 2021 ItzSomebody
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>
*/
package xyz.itzsomebody.codegen.expressions.predefined;
import xyz.itzsomebody.codegen.BytecodeBlock;
import xyz.itzsomebody.codegen.WrappedType;
import xyz.itzsomebody.codegen.expressions.IRExpression;
import xyz.itzsomebody.codegen.instructions.FieldAccessNode;
import java.lang.reflect.Field;
public class IRSetFieldExpression extends IRExpression {
private final IRExpression instance;
private final IRExpression value;
private final WrappedType owner;
private final String name;
public IRSetFieldExpression(IRExpression instance, IRExpression value, WrappedType owner, String name, WrappedType type) {
super(type);
this.instance = instance;
this.value = value;
this.owner = owner;
this.name = name;
}
public IRSetFieldExpression(IRExpression instance, IRExpression value, Field field) {
this(instance, value, WrappedType.from(field.getDeclaringClass()), field.getName(), WrappedType.from(field.getType()));
}
@Override
public BytecodeBlock getInstructions() {
if (instance == null) {
return new BytecodeBlock()
.append(value.getInstructions())
.append(FieldAccessNode.putStatic(owner, name, getType()));
} else {
return new BytecodeBlock()
.append(instance.getInstructions())
.append(value.getInstructions())
.append(FieldAccessNode.putField(owner, name, getType()));
}
}
}
================================================
FILE: xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/expressions/predefined/IRSetVariableExpression.java
================================================
/*
* Radon - An open-source Java obfuscator
* Copyright (C) 2021 ItzSomebody
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>
*/
package xyz.itzsomebody.codegen.expressions.predefined;
import xyz.itzsomebody.codegen.BytecodeBlock;
import xyz.itzsomebody.codegen.WrappedType;
import xyz.itzsomebody.codegen.expressions.IRExpression;
import xyz.itzsomebody.codegen.expressions.IRVariable;
import xyz.itzsomebody.codegen.instructions.RegisterNode;
public class IRSetVariableExpression extends IRExpression {
private final IRVariable variable;
private final IRExpression expression;
public IRSetVariableExpression(IRVariable variable, IRExpression expression) {
super(WrappedType.getAbsent());
this.variable = variable;
this.expression = expression;
}
@Override
public BytecodeBlock getInstructions() {
return new BytecodeBlock()
.append(expression.getInstructions())
.append(RegisterNode.storeVar(variable));
}
}
================================================
FILE: xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/expressions/predefined/IRThrowExceptionExpression.java
================================================
/*
* Radon - An open-source Java obfuscator
* Copyright (C) 2021 ItzSomebody
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>
*/
package xyz.itzsomebody.codegen.expressions.predefined;
import xyz.itzsomebody.codegen.BytecodeBlock;
import xyz.itzsomebody.codegen.WrappedType;
import xyz.itzsomebody.codegen.expressions.IRExpression;
import xyz.itzsomebody.codegen.instructions.SimpleNode;
public class IRThrowExceptionExpression extends IRExpression {
private final IRExpression exception;
public IRThrowExceptionExpression(IRExpression exception) {
super(WrappedType.getAbsent());
this.exception = exception;
}
@Override
public BytecodeBlock getInstructions() {
return new BytecodeBlock()
.append(exception.getInstructions())
.append(SimpleNode.THROW_EXCEPTION);
}
}
================================================
FILE: xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/instructions/BytecodeLabel.java
================================================
/*
* Radon - An open-source Java obfuscator
* Copyright (C) 2020 ItzSomebody
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>
*/
package xyz.itzsomebody.codegen.instructions;
import org.objectweb.asm.tree.AbstractInsnNode;
import org.objectweb.asm.tree.LabelNode;
public class BytecodeLabel implements CompilableNode {
private final LabelNode label;
public BytecodeLabel() {
this.label = new LabelNode();
}
public BytecodeLabel(LabelNode label) {
this.label = label;
}
@Override
public AbstractInsnNode getNode() {
return label;
}
public LabelNode getLabel() {
return label;
}
}
================================================
FILE: xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/instructions/CompilableNode.java
================================================
/*
* Radon - An open-source Java obfuscator
* Copyright (C) 2020 ItzSomebody
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>
*/
package xyz.itzsomebody.codegen.instructions;
import org.objectweb.asm.tree.AbstractInsnNode;
public interface CompilableNode {
AbstractInsnNode getNode();
}
================================================
FILE: xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/instructions/ConstantNode.java
================================================
/*
* Radon - An open-source Java obfuscator
* Copyright (C) 2021 ItzSomebody
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>
*/
package xyz.itzsomebody.codegen.instructions;
import org.objectweb.asm.ConstantDynamic;
import org.objectweb.asm.Opcodes;
import org.objectweb.asm.tree.AbstractInsnNode;
import org.objectweb.asm.tree.InsnNode;
import org.objectweb.asm.tree.IntInsnNode;
import org.objectweb.asm.tree.LdcInsnNode;
import xyz.itzsomebody.codegen.Utils;
import xyz.itzsomebody.codegen.WrappedHandle;
import xyz.itzsomebody.codegen.WrappedType;
import xyz.itzsomebody.codegen.exceptions.UncompilableNodeException;
import java.lang.reflect.Method;
import java.util.List;
public abstract class ConstantNode implements CompilableNode { // todo: constants of type Handle
public abstract Object getValue();
public static ConstantNode nullConst() {
return new NullConst();
}
public static ConstantNode booleanConst(boolean z) {
return new BooleanConst(z);
}
public static ConstantNode intConst(int i) {
return new IntConst(i);
}
public static ConstantNode floatConst(float f) {
return new FloatConst(f);
}
public static ConstantNode longConst(long j) {
return new LongConst(j);
}
public static ConstantNode doubleConst(double d) {
return new DoubleConst(d);
}
public static ConstantNode stringConst(String s) {
return new StringConst(s);
}
public static ConstantNode classConst(WrappedType type) {
return new ClassConst(type);
}
public static ConstantNode dynamicConst(String name, WrappedType type, WrappedHandle bootstrapMethod, List<ConstantNode> bootstrapArgs) {
return new DynamicConst(name, type, bootstrapMethod, bootstrapArgs);
}
public static ConstantNode dynamicConst(String name, WrappedType type, Method bootstrap, List<ConstantNode> bootstrapArgs) {
return dynamicConst(name, type, WrappedHandle.getInvokeStaticHandle(bootstrap), bootstrapArgs);
}
public static class NullConst extends ConstantNode {
@Override
public Object getValue() {
return null;
}
@Override
public AbstractInsnNode getNode() {
return new InsnNode(Opcodes.ACONST_NULL);
}
}
public static class BooleanConst extends ConstantNode {
private final boolean value;
public BooleanConst(boolean value) {
this.value = value;
}
@Override
public Boolean getValue() {
return value;
}
@Override
public AbstractInsnNode getNode() {
if (value) {
return new InsnNode(Opcodes.ICONST_1);
} else {
return new InsnNode(Opcodes.ICONST_0);
}
}
}
public static class IntConst extends ConstantNode {
private final int value;
public IntConst(int value) {
this.value = value;
}
@Override
public Integer getValue() {
return value;
}
@Override
public AbstractInsnNode getNode() {
if (value >= -1 && value <= 5) {
return new InsnNode(value + 3);
} else if (value >= Byte.MIN_VALUE && value <= Byte.MAX_VALUE) {
return new IntInsnNode(Opcodes.BIPUSH, value);
} else if (value >= Short.MIN_VALUE && value <= Short.MAX_VALUE) {
return new IntInsnNode(Opcodes.SIPUSH, value);
} else {
return new LdcInsnNode(value);
}
}
}
public static class FloatConst extends ConstantNode {
private final float value;
public FloatConst(float value) {
this.value = value;
}
@Override
public Float getValue() {
return value;
}
@Override
public AbstractInsnNode getNode() {
if (value == 0F || value == 1F || value == 2F) {
return new InsnNode((int) value + 11);
} else {
return new LdcInsnNode(value);
}
}
}
public static class LongConst extends ConstantNode {
private final long value;
public LongConst(long value) {
this.value = value;
}
@Override
public Long getValue() {
return value;
}
@Override
public AbstractInsnNode getNode() {
if (value == 0L || value == 1L) {
return new InsnNode((int) value + 9);
} else {
return new LdcInsnNode(value);
}
}
}
public static class DoubleConst extends ConstantNode {
private final double value;
public DoubleConst(double value) {
this.value = value;
}
@Override
public Double getValue() {
return value;
}
@Override
public AbstractInsnNode getNode() {
if (value == 0D || value == 1D) {
return new InsnNode((int) value + 14);
} else {
return new LdcInsnNode(value);
}
}
}
public static class StringConst extends ConstantNode {
private final String value;
public StringConst(String value) {
this.value = value;
}
@Override
public String getValue() {
return value;
}
@Override
public AbstractInsnNode getNode() {
return new LdcInsnNode(value);
}
}
public static class ClassConst extends ConstantNode {
private final WrappedType type;
public ClassConst(WrappedType type) {
this.type = type;
}
@Override
public Object getValue() {
return type;
}
@Override
public AbstractInsnNode getNode() {
return new LdcInsnNode(type.getType());
}
}
public static class DynamicConst extends ConstantNode {
private final String name;
private final WrappedType type;
private final WrappedHandle bootstrapMethod;
private final List<ConstantNode> bootstrapArgs;
public DynamicConst(String name, WrappedType type, WrappedHandle bootstrapMethod, List<ConstantNode> bootstrapArgs) {
this.name = name;
this.type = type;
this.bootstrapMethod = bootstrapMethod;
this.bootstrapArgs = bootstrapArgs;
}
@Override
public AbstractInsnNode getNode() {
return new LdcInsnNode(new ConstantDynamic(name, type.unwrap(), bootstrapMethod.constructHandle(), Utils.unpackConstants(bootstrapArgs)));
}
@Override
public Object getValue() {
return new UncompilableNodeException("Attempted to get value of dynamic constant");
}
}
}
================================================
FILE: xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/instructions/FieldAccessNode.java
================================================
/*
* Radon - An open-source Java obfuscator
* Copyright (C) 2021 ItzSomebody
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>
*/
package xyz.itzsomebody.codegen.instructions;
import org.objectweb.asm.Opcodes;
import org.objectweb.asm.tree.AbstractInsnNode;
import org.objectweb.asm.tree.FieldInsnNode;
import xyz.itzsomebody.codegen.WrappedType;
public class FieldAccessNode implements CompilableNode {
private final int opcode;
private final WrappedType owner;
private final String name;
private final WrappedType type;
public FieldAccessNode(int opcode, WrappedType owner, String name, WrappedType type) {
this.opcode = opcode;
this.owner = owner;
this.name = name;
this.type = type;
}
@Override
public AbstractInsnNode getNode() {
return new FieldInsnNode(opcode, owner.getInternalName(), name, type.unwrap());
}
public static FieldAccessNode getStatic(WrappedType owner, String name, WrappedType type) {
return new FieldAccess
gitextract__kzzqxxi/
├── .editorconfig
├── .gitignore
├── .travis.yml
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── build.gradle
├── docs/
│ ├── changelog.md
│ ├── exclusions.md
│ └── index.md
├── gradle/
│ └── wrapper/
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── settings.gradle
├── xyz.itzsomebody.codegen/
│ ├── README.md
│ ├── build.gradle
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── xyz/
│ │ └── itzsomebody/
│ │ └── codegen/
│ │ ├── BytecodeBlock.java
│ │ ├── GenerationContext.java
│ │ ├── Utils.java
│ │ ├── WrappedHandle.java
│ │ ├── WrappedType.java
│ │ ├── exceptions/
│ │ │ └── UncompilableNodeException.java
│ │ ├── expressions/
│ │ │ ├── IRExpression.java
│ │ │ ├── IRExpressions.java
│ │ │ ├── IRVariable.java
│ │ │ ├── flow/
│ │ │ │ ├── IRFlowStructure.java
│ │ │ │ ├── IRForStructure.java
│ │ │ │ ├── IRIfStructure.java
│ │ │ │ ├── IRSwitchStructure.java
│ │ │ │ ├── IRSynchronizedStructure.java
│ │ │ │ ├── IRTryCatchStructure.java
│ │ │ │ └── IRWhileStructure.java
│ │ │ └── predefined/
│ │ │ ├── IRArithmeticExpression.java
│ │ │ ├── IRArrayLengthExpression.java
│ │ │ ├── IRCastExpression.java
│ │ │ ├── IRConstantExpression.java
│ │ │ ├── IRGetArrayElementExpression.java
│ │ │ ├── IRGetFieldExpression.java
│ │ │ ├── IRInstanceOfExpression.java
│ │ │ ├── IRInvocationExpression.java
│ │ │ ├── IRInvokeDynamicExpression.java
│ │ │ ├── IRNegateExpression.java
│ │ │ ├── IRNewArrayExpression.java
│ │ │ ├── IRNewInstanceExpression.java
│ │ │ ├── IRReturnExpression.java
│ │ │ ├── IRSetArrayElementExpression.java
│ │ │ ├── IRSetFieldExpression.java
│ │ │ ├── IRSetVariableExpression.java
│ │ │ └── IRThrowExceptionExpression.java
│ │ └── instructions/
│ │ ├── BytecodeLabel.java
│ │ ├── CompilableNode.java
│ │ ├── ConstantNode.java
│ │ ├── FieldAccessNode.java
│ │ ├── InvokeDynamicNode.java
│ │ ├── InvokeNode.java
│ │ ├── JumpNode.java
│ │ ├── NewArrayNode.java
│ │ ├── RegisterNode.java
│ │ ├── SimpleNode.java
│ │ ├── SwitchNode.java
│ │ └── TypeNode.java
│ └── test/
│ └── java/
│ └── xyz/
│ └── itzsomebody/
│ └── codegen/
│ ├── UtilsTester.java
│ ├── WrappedTypeTester.java
│ ├── expressions/
│ │ ├── IRVariableTester.java
│ │ └── predefined/
│ │ ├── IRArithmeticExpressionTester.java
│ │ ├── IRArrayLengthTester.java
│ │ ├── IRCastExpressionTester.java
│ │ ├── IRConstantTester.java
│ │ ├── IRGetArrayElementExpressionTester.java
│ │ ├── IRGetFieldExpressionTester.java
│ │ ├── IRInstanceOfExpressionTester.java
│ │ ├── IRInvocationExpressionTester.java
│ │ ├── IRInvokeDynamicExpressionTester.java
│ │ ├── IRNegateExpressionTester.java
│ │ ├── IRNewArrayExpressionTester.java
│ │ ├── IRNewInstanceExpressionTester.java
│ │ ├── IRReturnExpressionTester.java
│ │ ├── IRSetArrayElementExpressionTester.java
│ │ ├── IRSetFieldExpressionTester.java
│ │ └── IRSetVariableExpressionTester.java
│ └── instructions/
│ ├── BytecodeLabelTester.java
│ ├── ConstantNodeTester.java
│ ├── FieldAccessNodeTester.java
│ ├── InvokeDynamicNodeTester.java
│ ├── InvokeNodeTester.java
│ ├── NewArrayNodeTester.java
│ └── TypeNodeTester.java
├── xyz.itzsomebody.commons/
│ ├── README.md
│ ├── build.gradle
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── xyz/
│ │ └── itzsomebody/
│ │ └── commons/
│ │ ├── InsnListModifier.java
│ │ ├── MaxLocalsUpdater.java
│ │ ├── analysis/
│ │ │ ├── callgraph/
│ │ │ │ └── CallGraphAnalyzer.java
│ │ │ ├── cfg/
│ │ │ │ └── CFGAnalyzer.java
│ │ │ └── frame/
│ │ │ └── FrameAnalyzer.java
│ │ └── matcher/
│ │ ├── InstructionMatcher.java
│ │ ├── InstructionPattern.java
│ │ └── rules/
│ │ ├── AccessFieldRule.java
│ │ ├── DoubleConstRule.java
│ │ ├── FloatConstRule.java
│ │ ├── InstructionRule.java
│ │ ├── IntConstRule.java
│ │ ├── InvocationRule.java
│ │ ├── LongConstRule.java
│ │ ├── OpcodeRule.java
│ │ └── WildcardRule.java
│ └── test/
│ └── java/
│ └── xyz/
│ └── itzsomebody/
│ └── commons/
│ ├── InsnListModifierTester.java
│ ├── MaxLocalsUpdaterTester.java
│ ├── TestingUtils.java
│ └── matcher/
│ ├── InstructionMatcherTester.java
│ └── rules/
│ ├── AccessFieldRuleTester.java
│ ├── DoubleConstRuleTester.java
│ ├── FloatConstRuleTester.java
│ ├── IntConstRuleTester.java
│ ├── InvocationRuleTester.java
│ └── LongConstRuleTester.java
├── xyz.itzsomebody.radon/
│ ├── build.gradle
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── xyz/
│ │ │ └── itzsomebody/
│ │ │ └── radon/
│ │ │ ├── Radon.java
│ │ │ ├── RadonConstants.java
│ │ │ ├── RadonMain.java
│ │ │ ├── cli/
│ │ │ │ ├── CmdArgsParser.java
│ │ │ │ └── CmdSwitch.java
│ │ │ ├── config/
│ │ │ │ ├── ConfigurationParser.java
│ │ │ │ ├── DictionaryDeserializer.java
│ │ │ │ ├── ExclusionsDeserializer.java
│ │ │ │ ├── ObfConfig.java
│ │ │ │ └── TransformerDeserializer.java
│ │ │ ├── dictionaries/
│ │ │ │ ├── Dictionary.java
│ │ │ │ ├── DictionaryFactory.java
│ │ │ │ └── defined/
│ │ │ │ ├── AlphaNumericDictionary.java
│ │ │ │ ├── AlphabeticalDictionary.java
│ │ │ │ ├── CustomCharsetDictionary.java
│ │ │ │ ├── RandomUnicodeDictionary.java
│ │ │ │ ├── SpacesDictionary.java
│ │ │ │ └── UnrecognizedDictionary.java
│ │ │ ├── exceptions/
│ │ │ │ ├── FatalRadonException.java
│ │ │ │ ├── MissingClassException.java
│ │ │ │ ├── MissingResourceException.java
│ │ │ │ └── PreventableRadonException.java
│ │ │ ├── exclusions/
│ │ │ │ ├── Exclusion.java
│ │ │ │ └── ExclusionManager.java
│ │ │ ├── transformers/
│ │ │ │ ├── Transformer.java
│ │ │ │ ├── Transformers.java
│ │ │ │ ├── exploiter/
│ │ │ │ │ └── ExploiterTransformer.java
│ │ │ │ ├── flow/
│ │ │ │ │ └── FlowTransformer.java
│ │ │ │ ├── math/
│ │ │ │ │ └── NumberTransformer.java
│ │ │ │ ├── misc/
│ │ │ │ │ ├── AddBridgeAccess.java
│ │ │ │ │ ├── AddDeprecatedAccess.java
│ │ │ │ │ ├── AddSyntheticAccess.java
│ │ │ │ │ ├── AddTrashClasses.java
│ │ │ │ │ ├── AntiDebugger.java
│ │ │ │ │ ├── ExpirationKillSwitch.java
│ │ │ │ │ ├── Packer.java
│ │ │ │ │ ├── Renamer.java
│ │ │ │ │ ├── ResourceRenamer.java
│ │ │ │ │ ├── ScrambleLineNumbers.java
│ │ │ │ │ ├── ShuffleMembers.java
│ │ │ │ │ └── Watermarker.java
│ │ │ │ ├── references/
│ │ │ │ │ └── ReferenceTransformer.java
│ │ │ │ ├── shrinker/
│ │ │ │ │ ├── RemoveDeprecatedAccess.java
│ │ │ │ │ ├── RemoveInnerClassesAttribute.java
│ │ │ │ │ ├── RemoveInvisibleAnnotations.java
│ │ │ │ │ ├── RemoveInvisibleParameterAnnotations.java
│ │ │ │ │ ├── RemoveInvisibleTypeAnnotations.java
│ │ │ │ │ ├── RemoveLineNumbers.java
│ │ │ │ │ ├── RemoveLocalVariableTable.java
│ │ │ │ │ ├── RemoveOuterMethodAttribute.java
│ │ │ │ │ ├── RemoveSignatureAttribute.java
│ │ │ │ │ ├── RemoveSourceDebugAttribute.java
│ │ │ │ │ ├── RemoveSourceFileAttribute.java
│ │ │ │ │ ├── RemoveSyntheticAccessAttribute.java
│ │ │ │ │ ├── RemoveUnknownAttributes.java
│ │ │ │ │ ├── RemoveVisibleAnnotations.java
│ │ │ │ │ ├── RemoveVisibleParameterAnnotations.java
│ │ │ │ │ ├── RemoveVisibleTypeAnnotations.java
│ │ │ │ │ └── ShrinkerTransformer.java
│ │ │ │ └── strings/
│ │ │ │ ├── AESPCBCEncryptor.java
│ │ │ │ ├── AESPCBCStringEncryption.java
│ │ │ │ ├── StaticFieldStrPool.java
│ │ │ │ ├── Str2Base64Encoding.java
│ │ │ │ └── StringTransformer.java
│ │ │ └── utils/
│ │ │ ├── IOUtils.java
│ │ │ ├── JarLoader.java
│ │ │ ├── JarWriter.java
│ │ │ ├── RandomUtils.java
│ │ │ ├── asm/
│ │ │ │ ├── ASMUtils.java
│ │ │ │ ├── ClassWrapper.java
│ │ │ │ ├── FieldWrapper.java
│ │ │ │ ├── FieldWrappers.java
│ │ │ │ ├── MethodWrapper.java
│ │ │ │ ├── MethodWrappers.java
│ │ │ │ ├── RadonClassWriter.java
│ │ │ │ ├── RadonRemapper.java
│ │ │ │ └── ResourceNameRemapper.java
│ │ │ └── logging/
│ │ │ ├── RadonConsoleHandler.java
│ │ │ └── RadonLogger.java
│ │ └── resources/
│ │ ├── asm-license.txt
│ │ ├── jackson-license.txt
│ │ └── radon-license.txt
│ └── test/
│ └── java/
│ └── me/
│ └── itzsomebody/
│ └── radon/
│ └── transformers/
│ └── TransformersTest.java
└── xyz.itzsomebody.radon.template/
├── build.gradle
└── src/
├── README.md
└── main/
└── java/
└── xyz/
└── itzsomebody/
└── radon/
└── templates/
└── string/
└── AESPCBCDecryptor.java
SYMBOL INDEX (1138 symbols across 178 files)
FILE: xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/BytecodeBlock.java
class BytecodeBlock (line 29) | public class BytecodeBlock {
method append (line 32) | public BytecodeBlock append(BytecodeBlock block) {
method append (line 37) | public BytecodeBlock append(CompilableNode node) {
method compile (line 42) | public InsnList compile() {
method voidReturn (line 48) | public BytecodeBlock voidReturn(){
method getNodes (line 53) | public List<CompilableNode> getNodes() {
FILE: xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/GenerationContext.java
class GenerationContext (line 23) | public class GenerationContext {
method setSlotOffset (line 26) | public void setSlotOffset(int slotOffset) {
method newVariable (line 30) | public IRVariable newVariable(WrappedType type) {
method newVariable (line 36) | public IRVariable newVariable(Class<?> clazz) {
FILE: xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/Utils.java
class Utils (line 32) | public class Utils {
method wrapMethodNodeParameters (line 33) | public static List<WrappedType> wrapMethodNodeParameters(MethodNode me...
method wrapMethodParameters (line 39) | public static List<WrappedType> wrapMethodParameters(Method method) {
method wrapConstructorParameters (line 45) | public static List<WrappedType> wrapConstructorParameters(Constructor<...
method unwrapMethodDescriptor (line 51) | public static String unwrapMethodDescriptor(List<WrappedType> paramete...
method unwrapLabels (line 58) | public static ArrayList<LabelNode> unwrapLabels(List<BytecodeLabel> wr...
method unpackConstants (line 64) | public static Object[] unpackConstants(List<ConstantNode> constants) {
method box (line 72) | public static WrappedType box(WrappedType primitive) {
FILE: xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/WrappedHandle.java
class WrappedHandle (line 29) | public class WrappedHandle {
method WrappedHandle (line 36) | public WrappedHandle(int tag, WrappedType owner, String name, List<Wra...
method getTag (line 44) | public int getTag() {
method getOwner (line 48) | public WrappedType getOwner() {
method getName (line 52) | public String getName() {
method getParameterTypes (line 56) | public List<WrappedType> getParameterTypes() {
method getReturnType (line 60) | public WrappedType getReturnType() {
method constructHandle (line 64) | public Handle constructHandle() {
method getFieldHandle (line 70) | public static WrappedHandle getFieldHandle(WrappedType owner, String n...
method getFieldHandle (line 74) | public static WrappedHandle getFieldHandle(Field field) {
method getStaticHandle (line 78) | public static WrappedHandle getStaticHandle(WrappedType owner, String ...
method getStaticHandle (line 82) | public static WrappedHandle getStaticHandle(Field field) {
method putFieldHandle (line 86) | public static WrappedHandle putFieldHandle(WrappedType owner, String n...
method putFieldHandle (line 90) | public static WrappedHandle putFieldHandle(Field field) {
method putStaticHandle (line 94) | public static WrappedHandle putStaticHandle(WrappedType owner, String ...
method putStaticHandle (line 98) | public static WrappedHandle putStaticHandle(Field field) {
method getInvokeVirtualHandle (line 104) | public static WrappedHandle getInvokeVirtualHandle(WrappedType owner, ...
method getInvokeVirtualHandle (line 108) | public static WrappedHandle getInvokeVirtualHandle(Method method) {
method getInvokeStaticHandle (line 112) | public static WrappedHandle getInvokeStaticHandle(WrappedType owner, S...
method getInvokeStaticHandle (line 116) | public static WrappedHandle getInvokeStaticHandle(Method method) {
method getInvokeSpecialHandle (line 120) | public static WrappedHandle getInvokeSpecialHandle(WrappedType owner, ...
method getInvokeSpecialHandle (line 124) | public static WrappedHandle getInvokeSpecialHandle(Method method) {
method getNewInvokeSpecialHandle (line 128) | public static WrappedHandle getNewInvokeSpecialHandle(WrappedType owne...
method getNewInvokeSpecialHandle (line 132) | public static WrappedHandle getNewInvokeSpecialHandle(Method method) {
method getInvokeInterfaceHandle (line 136) | public static WrappedHandle getInvokeInterfaceHandle(WrappedType owner...
method getInvokeInterfaceHandle (line 140) | public static WrappedHandle getInvokeInterfaceHandle(Method method) {
FILE: xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/WrappedType.java
class WrappedType (line 29) | public class WrappedType {
method WrappedType (line 46) | public WrappedType(Type type) {
method WrappedType (line 51) | public WrappedType(Type type, boolean isInterface) {
method getAbsent (line 56) | public static AbsentWrappedType getAbsent() {
method getType (line 64) | public Type getType() {
method isInterface (line 68) | public boolean isInterface() {
method getSort (line 72) | public int getSort() {
method getNewArraySort (line 79) | public int getNewArraySort() {
method isPrimitive (line 102) | public boolean isPrimitive() {
method getPrimitiveType (line 118) | public WrappedType getPrimitiveType() {
method isBoxed (line 127) | public boolean isBoxed() {
method isArray (line 131) | public boolean isArray() {
method isIntType (line 135) | public boolean isIntType() {
method unwrap (line 144) | public String unwrap() {
method getInternalName (line 152) | public String getInternalName() {
method getClassName (line 156) | public String getClassName() {
method fromClassName (line 160) | public static WrappedType fromClassName(String className, boolean isIn...
method fromInternalName (line 199) | public static WrappedType fromInternalName(String internalName, boolea...
method from (line 207) | public static WrappedType from(Class<?> clazz) {
method from (line 211) | public static WrappedType from(ClassNode classNode) {
method toString (line 215) | @Override
method equals (line 223) | @Override
class AbsentWrappedType (line 232) | static class AbsentWrappedType extends WrappedType {
method AbsentWrappedType (line 233) | private AbsentWrappedType() {
method getType (line 237) | @Override
method isInterface (line 242) | @Override
method getSort (line 247) | @Override
method isPrimitive (line 252) | @Override
method isBoxed (line 257) | @Override
method isArray (line 262) | @Override
method isIntType (line 267) | @Override
method unwrap (line 272) | @Override
method getInternalName (line 277) | @Override
method getClassName (line 282) | @Override
FILE: xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/exceptions/UncompilableNodeException.java
class UncompilableNodeException (line 21) | public class UncompilableNodeException extends RuntimeException {
method UncompilableNodeException (line 22) | public UncompilableNodeException() {
method UncompilableNodeException (line 26) | public UncompilableNodeException(String msg) {
FILE: xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/expressions/IRExpression.java
class IRExpression (line 34) | public abstract class IRExpression {
method IRExpression (line 37) | public IRExpression(WrappedType type) {
method getType (line 41) | public WrappedType getType() {
method getInstructions (line 45) | public abstract BytecodeBlock getInstructions();
method arrayLength (line 47) | public IRExpression arrayLength() {
method getArrayElement (line 51) | public IRExpression getArrayElement(int index) {
method getArrayElement (line 55) | public IRExpression getArrayElement(IRExpression index) {
method setArrayElement (line 59) | public IRExpression setArrayElement(int index, IRExpression value) {
method setArrayElement (line 63) | public IRExpression setArrayElement(IRExpression index, IRExpression v...
method cast (line 67) | public IRExpression cast(ClassNode target) {
method cast (line 71) | public IRExpression cast(Class<?> target) {
method cast (line 75) | public IRExpression cast(String target) {
method cast (line 79) | public IRExpression cast(WrappedType type) {
method instanceOf (line 83) | public IRExpression instanceOf(ClassNode target) {
method instanceOf (line 87) | public IRExpression instanceOf(Class<?> target) {
method instanceOf (line 91) | public IRExpression instanceOf(String target) {
method instanceOf (line 95) | public IRExpression instanceOf(WrappedType type) {
method getField (line 99) | public IRExpression getField(String name, Class<?> type) {
method getField (line 103) | public IRExpression getField(String name, WrappedType type) {
method getField (line 107) | public IRExpression getField(FieldNode fieldNode) {
method getField (line 111) | public IRExpression getField(Field field) {
method setField (line 115) | public IRExpression setField(String name, Class<?> type, IRExpression ...
method setField (line 119) | public IRExpression setField(String name, WrappedType type, IRExpressi...
method setField (line 123) | public IRExpression setField(FieldNode fieldNode, IRExpression value) {
method setField (line 127) | public IRExpression setField(Field field, IRExpression value) {
method invoke (line 131) | public IRExpression invoke(MethodNode methodNode, IRExpression... argu...
method invoke (line 135) | public IRExpression invoke(Method method, IRExpression... arguments) {
method invoke (line 139) | public IRExpression invoke(String name, List<WrappedType> parameterTyp...
method ret (line 143) | public IRExpression ret() {
method throwMe (line 147) | public IRExpression throwMe() {
FILE: xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/expressions/IRExpressions.java
class IRExpressions (line 39) | public class IRExpressions {
method intAdd (line 42) | public static IRExpression intAdd(IRExpression left, IRExpression righ...
method intSub (line 46) | public static IRExpression intSub(IRExpression left, IRExpression righ...
method intMul (line 50) | public static IRExpression intMul(IRExpression left, IRExpression righ...
method intDiv (line 54) | public static IRExpression intDiv(IRExpression left, IRExpression righ...
method intMod (line 58) | public static IRExpression intMod(IRExpression left, IRExpression righ...
method intShiftLeft (line 62) | public static IRExpression intShiftLeft(IRExpression left, IRExpressio...
method intShiftRight (line 66) | public static IRExpression intShiftRight(IRExpression left, IRExpressi...
method intUnsignedShiftRight (line 70) | public static IRExpression intUnsignedShiftRight(IRExpression left, IR...
method intAnd (line 74) | public static IRExpression intAnd(IRExpression left, IRExpression righ...
method intOr (line 78) | public static IRExpression intOr(IRExpression left, IRExpression right) {
method intXor (line 82) | public static IRExpression intXor(IRExpression left, IRExpression righ...
method longAdd (line 86) | public static IRExpression longAdd(IRExpression left, IRExpression rig...
method longSub (line 90) | public static IRExpression longSub(IRExpression left, IRExpression rig...
method longMul (line 94) | public static IRExpression longMul(IRExpression left, IRExpression rig...
method longDiv (line 98) | public static IRExpression longDiv(IRExpression left, IRExpression rig...
method longMod (line 102) | public static IRExpression longMod(IRExpression left, IRExpression rig...
method longShiftLeft (line 106) | public static IRExpression longShiftLeft(IRExpression left, IRExpressi...
method longShiftRight (line 110) | public static IRExpression longShiftRight(IRExpression left, IRExpress...
method longUnsignedShiftRight (line 114) | public static IRExpression longUnsignedShiftRight(IRExpression left, I...
method longAnd (line 118) | public static IRExpression longAnd(IRExpression left, IRExpression rig...
method longOr (line 122) | public static IRExpression longOr(IRExpression left, IRExpression righ...
method longXor (line 126) | public static IRExpression longXor(IRExpression left, IRExpression rig...
method floatAdd (line 130) | public static IRExpression floatAdd(IRExpression left, IRExpression ri...
method floatSub (line 134) | public static IRExpression floatSub(IRExpression left, IRExpression ri...
method floatMul (line 138) | public static IRExpression floatMul(IRExpression left, IRExpression ri...
method floatDiv (line 142) | public static IRExpression floatDiv(IRExpression left, IRExpression ri...
method floatMod (line 146) | public static IRExpression floatMod(IRExpression left, IRExpression ri...
method doubleAdd (line 150) | public static IRExpression doubleAdd(IRExpression left, IRExpression r...
method doubleSub (line 154) | public static IRExpression doubleSub(IRExpression left, IRExpression r...
method doubleMul (line 158) | public static IRExpression doubleMul(IRExpression left, IRExpression r...
method doubleDiv (line 162) | public static IRExpression doubleDiv(IRExpression left, IRExpression r...
method doubleMod (line 166) | public static IRExpression doubleMod(IRExpression left, IRExpression r...
method arrayLength (line 172) | public static IRExpression arrayLength(IRExpression array) {
method cast (line 178) | public static IRExpression cast(IRExpression source, WrappedType targe...
method dynamicConst (line 184) | public static IRExpression dynamicConst(String name, WrappedType type,...
method dynamicConst (line 188) | public static IRExpression dynamicConst(String name, WrappedType type,...
method nullConst (line 194) | public static IRExpression nullConst(Class<?> type) {
method nullConst (line 198) | public static IRExpression nullConst(ClassNode type) {
method nullConst (line 202) | public static IRExpression nullConst(WrappedType type) {
method booleanConst (line 206) | public static IRExpression booleanConst(boolean z) {
method trueConst (line 210) | public static IRExpression trueConst() {
method falseConst (line 214) | public static IRExpression falseConst() {
method intConst (line 218) | public static IRExpression intConst(int i) {
method longConst (line 222) | public static IRExpression longConst(long j) {
method floatConst (line 226) | public static IRExpression floatConst(float f) {
method doubleConst (line 230) | public static IRExpression doubleConst(double d) {
method stringConst (line 234) | public static IRExpression stringConst(String str) {
method classConst (line 238) | public static IRExpression classConst(Class<?> clazz) {
method classConst (line 242) | public static IRExpression classConst(WrappedType type) {
method getArrayElement (line 248) | public static IRExpression getArrayElement(IRExpression array, int ind...
method getArrayElement (line 252) | public static IRExpression getArrayElement(IRExpression array, IRExpre...
method getField (line 258) | public static IRExpression getField(IRExpression instance, Field field) {
method getField (line 262) | public static IRExpression getField(IRExpression instance, Class<?> ow...
method getField (line 266) | public static IRExpression getField(IRExpression instance, WrappedType...
method getStatic (line 270) | public static IRExpression getStatic(Field field) {
method getStatic (line 274) | public static IRExpression getStatic(Class<?> owner, String name, Clas...
method getStatic (line 278) | public static IRExpression getStatic(WrappedType owner, String name, W...
method instanceOf (line 284) | public static IRExpression instanceOf(IRExpression instance, Class<?> ...
method instanceOf (line 288) | public static IRExpression instanceOf(IRExpression instance, WrappedTy...
method invokeVirtual (line 294) | public static IRExpression invokeVirtual(IRExpression instance, Method...
method invokeVirtual (line 298) | public static IRExpression invokeVirtual(IRExpression instance, Method...
method invokeVirtual (line 302) | public static IRExpression invokeVirtual(IRExpression instance, String...
method invokeVirtual (line 306) | public static IRExpression invokeVirtual(IRExpression instance, Wrappe...
method invokeStatic (line 310) | public static IRExpression invokeStatic(Method method, IRExpression......
method invokeStatic (line 314) | public static IRExpression invokeStatic(ClassNode owner, MethodNode me...
method invokeStatic (line 318) | public static IRExpression invokeStatic(String owner, String name, Lis...
method invokeStatic (line 322) | public static IRExpression invokeStatic(WrappedType owner, String name...
method invokeDynamic (line 328) | public static IRExpression invokeDynamic(String name, List<IRExpressio...
method invokeDynamic (line 332) | public static IRExpression invokeDynamic(String name, List<IRExpressio...
method negate (line 338) | public static IRExpression negate(IRExpression operand) {
method newArray (line 344) | public static IRExpression newArray(Class<?> type, IRExpression... ele...
method newArray (line 348) | public static IRExpression newArray(WrappedType type, IRExpression... ...
method newArray (line 352) | public static IRExpression newArray(int length, Class<?> type, IRExpre...
method newArray (line 356) | public static IRExpression newArray(int length, WrappedType type, IREx...
method newArray (line 360) | public static IRExpression newArray(IRExpression length, Class<?> type...
method newArray (line 364) | public static IRExpression newArray(IRExpression length, WrappedType t...
method newInstance (line 370) | public static IRExpression newInstance(Constructor<?> constructor, IRE...
method newInstance (line 374) | public static IRExpression newInstance(WrappedType type, List<WrappedT...
method returnMe (line 380) | public static IRExpression returnMe(IRExpression operand) {
method setArrayElement (line 386) | public static IRExpression setArrayElement(IRExpression array, int ind...
method setArrayElement (line 390) | public static IRExpression setArrayElement(IRExpression array, IRExpre...
method setField (line 396) | public static IRExpression setField(IRExpression instance, Field field...
method setField (line 400) | public static IRExpression setField(IRExpression instance, Class<?> ow...
method setField (line 404) | public static IRExpression setField(IRExpression instance, WrappedType...
method setStatic (line 408) | public static IRExpression setStatic(Field field, IRExpression value) {
method setStatic (line 412) | public static IRExpression setStatic(Class<?> owner, String name, Clas...
method setStatic (line 416) | public static IRExpression setStatic(WrappedType owner, String name, W...
method throwException (line 420) | public static IRExpression throwException(IRExpression exception) {
method forLoop (line 426) | public static IRFlowStructure forLoop(BytecodeBlock initializer, Bytec...
method ifBlock (line 430) | public static IRFlowStructure ifBlock(BytecodeBlock condition, Bytecod...
method switchStatement (line 434) | public static IRFlowStructure switchStatement(IRExpression operand, Ar...
method synchronizedBlock (line 438) | public static IRFlowStructure synchronizedBlock(IRExpression instance,...
method tryCatch (line 442) | public static IRFlowStructure tryCatch(BytecodeBlock tryBody, Bytecode...
method whileLoop (line 446) | public static IRFlowStructure whileLoop(BytecodeBlock condition, Bytec...
FILE: xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/expressions/IRVariable.java
class IRVariable (line 26) | public class IRVariable extends IRExpression {
method IRVariable (line 30) | public IRVariable(WrappedType wrappedType, int slot) {
method getInstructions (line 36) | @Override
method getWrappedType (line 41) | public WrappedType getWrappedType() {
method getSlot (line 45) | public int getSlot() {
method set (line 49) | public IRExpression set(IRExpression expression) {
FILE: xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/expressions/flow/IRFlowStructure.java
class IRFlowStructure (line 24) | public abstract class IRFlowStructure extends IRExpression {
method IRFlowStructure (line 25) | public IRFlowStructure() {
FILE: xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/expressions/flow/IRForStructure.java
class IRForStructure (line 25) | public class IRForStructure extends IRFlowStructure {
method IRForStructure (line 33) | public IRForStructure(BytecodeBlock initializer, BytecodeBlock conditi...
method getInstructions (line 40) | @Override
method getContinueLabel (line 60) | public BytecodeLabel getContinueLabel() {
method getExitLabel (line 64) | public BytecodeLabel getExitLabel() {
FILE: xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/expressions/flow/IRIfStructure.java
class IRIfStructure (line 25) | public class IRIfStructure extends IRFlowStructure {
method IRIfStructure (line 32) | public IRIfStructure(BytecodeBlock condition, BytecodeBlock ifTrue, By...
method getInstructions (line 38) | @Override
method getTrueLabel (line 58) | public BytecodeLabel getTrueLabel() {
method getExitLabel (line 62) | public BytecodeLabel getExitLabel() {
FILE: xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/expressions/flow/IRSwitchStructure.java
class IRSwitchStructure (line 34) | public class IRSwitchStructure extends IRFlowStructure {
method IRSwitchStructure (line 42) | public IRSwitchStructure(IRExpression operand, ArrayList<Integer> keys...
method getInstructions (line 49) | @Override
method getCaseLabels (line 73) | public ArrayList<BytecodeLabel> getCaseLabels() {
method getDefaultLabel (line 77) | public BytecodeLabel getDefaultLabel() {
method getExitLabel (line 81) | public BytecodeLabel getExitLabel() {
class IRCaseStructure (line 85) | static class IRCaseStructure implements Comparable<IRCaseStructure> {
method IRCaseStructure (line 89) | IRCaseStructure(int key, BytecodeBlock body) {
method getKey (line 94) | public int getKey() {
method getBody (line 98) | public BytecodeBlock getBody() {
method compareTo (line 102) | @Override
FILE: xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/expressions/flow/IRSynchronizedStructure.java
class IRSynchronizedStructure (line 25) | public class IRSynchronizedStructure extends IRFlowStructure {
method IRSynchronizedStructure (line 29) | public IRSynchronizedStructure(IRExpression instance, BytecodeBlock bo...
method getInstructions (line 34) | @Override
FILE: xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/expressions/flow/IRTryCatchStructure.java
class IRTryCatchStructure (line 27) | public class IRTryCatchStructure extends IRFlowStructure {
method IRTryCatchStructure (line 36) | public IRTryCatchStructure(BytecodeBlock trapRange, BytecodeBlock hand...
method getTryCatchBlocKNode (line 42) | public TryCatchBlockNode getTryCatchBlocKNode() {
method getInstructions (line 46) | @Override
method getTrapStartLabel (line 63) | public BytecodeLabel getTrapStartLabel() {
method getTrapEndLabel (line 67) | public BytecodeLabel getTrapEndLabel() {
method getHandlerLabel (line 71) | public BytecodeLabel getHandlerLabel() {
method getExitLabel (line 75) | public BytecodeLabel getExitLabel() {
FILE: xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/expressions/flow/IRWhileStructure.java
class IRWhileStructure (line 25) | public class IRWhileStructure extends IRFlowStructure {
method IRWhileStructure (line 31) | public IRWhileStructure(BytecodeBlock condition, BytecodeBlock body) {
method getInstructions (line 36) | @Override
method getContinueLabel (line 52) | public BytecodeLabel getContinueLabel() {
method getExitLabel (line 56) | public BytecodeLabel getExitLabel() {
FILE: xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/expressions/predefined/IRArithmeticExpression.java
class IRArithmeticExpression (line 25) | public class IRArithmeticExpression extends IRExpression {
method IRArithmeticExpression (line 30) | public IRArithmeticExpression(SimpleNode operation, IRExpression left,...
method getInstructions (line 37) | @Override
FILE: xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/expressions/predefined/IRArrayLengthExpression.java
class IRArrayLengthExpression (line 26) | public class IRArrayLengthExpression extends IRExpression {
method IRArrayLengthExpression (line 29) | public IRArrayLengthExpression(IRExpression array) {
method getInstructions (line 34) | @Override
FILE: xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/expressions/predefined/IRCastExpression.java
class IRCastExpression (line 34) | public class IRCastExpression extends IRExpression {
method IRCastExpression (line 37) | public IRCastExpression(IRExpression castMe, WrappedType castType) {
method getInstructions (line 42) | @Override
method castPrimitives (line 82) | @SuppressWarnings("Duplicates")
FILE: xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/expressions/predefined/IRConstantExpression.java
class IRConstantExpression (line 26) | public class IRConstantExpression extends IRExpression {
method IRConstantExpression (line 29) | public IRConstantExpression(ConstantNode cst, WrappedType type) {
method getInstructions (line 34) | @Override
FILE: xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/expressions/predefined/IRGetArrayElementExpression.java
class IRGetArrayElementExpression (line 25) | public class IRGetArrayElementExpression extends IRExpression {
method IRGetArrayElementExpression (line 29) | public IRGetArrayElementExpression(IRExpression array, IRExpression in...
method getInstructions (line 35) | @Override
FILE: xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/expressions/predefined/IRGetFieldExpression.java
class IRGetFieldExpression (line 28) | public class IRGetFieldExpression extends IRExpression {
method IRGetFieldExpression (line 33) | public IRGetFieldExpression(IRExpression instance, WrappedType owner, ...
method IRGetFieldExpression (line 40) | public IRGetFieldExpression(IRExpression instance, Field field) {
method getInstructions (line 44) | @Override
FILE: xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/expressions/predefined/IRInstanceOfExpression.java
class IRInstanceOfExpression (line 26) | public class IRInstanceOfExpression extends IRExpression {
method IRInstanceOfExpression (line 30) | public IRInstanceOfExpression(IRExpression instance, WrappedType type) {
method getInstructions (line 36) | @Override
FILE: xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/expressions/predefined/IRInvocationExpression.java
class IRInvocationExpression (line 30) | public class IRInvocationExpression extends IRExpression {
method IRInvocationExpression (line 37) | public IRInvocationExpression(IRExpression instance, WrappedType owner...
method IRInvocationExpression (line 46) | public IRInvocationExpression(IRExpression instance, Method method, Li...
method getInstructions (line 50) | @Override
FILE: xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/expressions/predefined/IRInvokeDynamicExpression.java
class IRInvokeDynamicExpression (line 30) | public class IRInvokeDynamicExpression extends IRExpression {
method IRInvokeDynamicExpression (line 37) | public IRInvokeDynamicExpression(String name, List<IRExpression> args,...
method getInstructions (line 46) | @Override
FILE: xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/expressions/predefined/IRNegateExpression.java
class IRNegateExpression (line 25) | public class IRNegateExpression extends IRExpression {
method IRNegateExpression (line 28) | public IRNegateExpression(IRExpression operand) {
method getInstructions (line 33) | @Override
FILE: xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/expressions/predefined/IRNewArrayExpression.java
class IRNewArrayExpression (line 28) | public class IRNewArrayExpression extends IRExpression {
method IRNewArrayExpression (line 33) | public IRNewArrayExpression(IRExpression length, WrappedType type, IRE...
method getInstructions (line 40) | @Override
FILE: xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/expressions/predefined/IRNewInstanceExpression.java
class IRNewInstanceExpression (line 30) | public class IRNewInstanceExpression extends IRExpression {
method IRNewInstanceExpression (line 34) | public IRNewInstanceExpression(WrappedType type, List<WrappedType> arg...
method getInstructions (line 40) | @Override
FILE: xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/expressions/predefined/IRReturnExpression.java
class IRReturnExpression (line 27) | public class IRReturnExpression extends IRExpression {
method IRReturnExpression (line 30) | public IRReturnExpression(IRExpression target) {
method getInstructions (line 35) | @Override
FILE: xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/expressions/predefined/IRSetArrayElementExpression.java
class IRSetArrayElementExpression (line 26) | public class IRSetArrayElementExpression extends IRExpression {
method IRSetArrayElementExpression (line 31) | public IRSetArrayElementExpression(IRExpression array, IRExpression in...
method getInstructions (line 38) | @Override
FILE: xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/expressions/predefined/IRSetFieldExpression.java
class IRSetFieldExpression (line 28) | public class IRSetFieldExpression extends IRExpression {
method IRSetFieldExpression (line 34) | public IRSetFieldExpression(IRExpression instance, IRExpression value,...
method IRSetFieldExpression (line 42) | public IRSetFieldExpression(IRExpression instance, IRExpression value,...
method getInstructions (line 46) | @Override
FILE: xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/expressions/predefined/IRSetVariableExpression.java
class IRSetVariableExpression (line 27) | public class IRSetVariableExpression extends IRExpression {
method IRSetVariableExpression (line 31) | public IRSetVariableExpression(IRVariable variable, IRExpression expre...
method getInstructions (line 37) | @Override
FILE: xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/expressions/predefined/IRThrowExceptionExpression.java
class IRThrowExceptionExpression (line 26) | public class IRThrowExceptionExpression extends IRExpression {
method IRThrowExceptionExpression (line 29) | public IRThrowExceptionExpression(IRExpression exception) {
method getInstructions (line 34) | @Override
FILE: xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/instructions/BytecodeLabel.java
class BytecodeLabel (line 24) | public class BytecodeLabel implements CompilableNode {
method BytecodeLabel (line 27) | public BytecodeLabel() {
method BytecodeLabel (line 31) | public BytecodeLabel(LabelNode label) {
method getNode (line 35) | @Override
method getLabel (line 40) | public LabelNode getLabel() {
FILE: xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/instructions/CompilableNode.java
type CompilableNode (line 23) | public interface CompilableNode {
method getNode (line 24) | AbstractInsnNode getNode();
FILE: xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/instructions/ConstantNode.java
class ConstantNode (line 35) | public abstract class ConstantNode implements CompilableNode { // todo: ...
method getValue (line 36) | public abstract Object getValue();
method nullConst (line 38) | public static ConstantNode nullConst() {
method booleanConst (line 42) | public static ConstantNode booleanConst(boolean z) {
method intConst (line 46) | public static ConstantNode intConst(int i) {
method floatConst (line 50) | public static ConstantNode floatConst(float f) {
method longConst (line 54) | public static ConstantNode longConst(long j) {
method doubleConst (line 58) | public static ConstantNode doubleConst(double d) {
method stringConst (line 62) | public static ConstantNode stringConst(String s) {
method classConst (line 66) | public static ConstantNode classConst(WrappedType type) {
method dynamicConst (line 70) | public static ConstantNode dynamicConst(String name, WrappedType type,...
method dynamicConst (line 74) | public static ConstantNode dynamicConst(String name, WrappedType type,...
class NullConst (line 78) | public static class NullConst extends ConstantNode {
method getValue (line 79) | @Override
method getNode (line 84) | @Override
class BooleanConst (line 90) | public static class BooleanConst extends ConstantNode {
method BooleanConst (line 93) | public BooleanConst(boolean value) {
method getValue (line 97) | @Override
method getNode (line 102) | @Override
class IntConst (line 112) | public static class IntConst extends ConstantNode {
method IntConst (line 115) | public IntConst(int value) {
method getValue (line 119) | @Override
method getNode (line 124) | @Override
class FloatConst (line 138) | public static class FloatConst extends ConstantNode {
method FloatConst (line 141) | public FloatConst(float value) {
method getValue (line 145) | @Override
method getNode (line 150) | @Override
class LongConst (line 160) | public static class LongConst extends ConstantNode {
method LongConst (line 163) | public LongConst(long value) {
method getValue (line 167) | @Override
method getNode (line 172) | @Override
class DoubleConst (line 182) | public static class DoubleConst extends ConstantNode {
method DoubleConst (line 185) | public DoubleConst(double value) {
method getValue (line 189) | @Override
method getNode (line 194) | @Override
class StringConst (line 204) | public static class StringConst extends ConstantNode {
method StringConst (line 207) | public StringConst(String value) {
method getValue (line 211) | @Override
method getNode (line 216) | @Override
class ClassConst (line 222) | public static class ClassConst extends ConstantNode {
method ClassConst (line 225) | public ClassConst(WrappedType type) {
method getValue (line 229) | @Override
method getNode (line 234) | @Override
class DynamicConst (line 240) | public static class DynamicConst extends ConstantNode {
method DynamicConst (line 246) | public DynamicConst(String name, WrappedType type, WrappedHandle boo...
method getNode (line 253) | @Override
method getValue (line 258) | @Override
FILE: xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/instructions/FieldAccessNode.java
class FieldAccessNode (line 26) | public class FieldAccessNode implements CompilableNode {
method FieldAccessNode (line 32) | public FieldAccessNode(int opcode, WrappedType owner, String name, Wra...
method getNode (line 39) | @Override
method getStatic (line 44) | public static FieldAccessNode getStatic(WrappedType owner, String name...
method putStatic (line 48) | public static FieldAccessNode putStatic(WrappedType owner, String name...
method getField (line 52) | public static FieldAccessNode getField(WrappedType owner, String name,...
method putField (line 56) | public static FieldAccessNode putField(WrappedType owner, String name,...
FILE: xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/instructions/InvokeDynamicNode.java
class InvokeDynamicNode (line 30) | public class InvokeDynamicNode implements CompilableNode {
method InvokeDynamicNode (line 37) | public InvokeDynamicNode(String name, List<WrappedType> parameterTypes...
method getNode (line 45) | @Override
method invokeDynamic (line 50) | public static InvokeDynamicNode invokeDynamic(String name, List<Wrappe...
method invokeDynamic (line 54) | public static InvokeDynamicNode invokeDynamic(String name, List<Wrappe...
FILE: xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/instructions/InvokeNode.java
class InvokeNode (line 29) | public class InvokeNode implements CompilableNode {
method InvokeNode (line 36) | public InvokeNode(int opcode, WrappedType owner, String name, List<Wra...
method getNode (line 44) | @Override
method invokeStatic (line 49) | public static InvokeNode invokeStatic(WrappedType owner, String name, ...
method invokeVirtual (line 53) | public static InvokeNode invokeVirtual(WrappedType owner, String name,...
method invokeInterface (line 57) | public static InvokeNode invokeInterface(WrappedType owner, String nam...
method invokeSpecial (line 61) | public static InvokeNode invokeSpecial(WrappedType owner, String name,...
method invokeConstructor (line 65) | public static InvokeNode invokeConstructor(WrappedType owner, List<Wra...
FILE: xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/instructions/JumpNode.java
class JumpNode (line 25) | public class JumpNode implements CompilableNode {
method JumpNode (line 29) | public JumpNode(int opcode, BytecodeLabel target) {
method getNode (line 34) | @Override
method jumpIfZero (line 39) | public static JumpNode jumpIfZero(BytecodeLabel target) {
method jumpIfNotZero (line 43) | public static JumpNode jumpIfNotZero(BytecodeLabel target) {
method jumpIfLessThanZero (line 47) | public static JumpNode jumpIfLessThanZero(BytecodeLabel target) {
method jumpIfLessThanOrEqualToZero (line 51) | public static JumpNode jumpIfLessThanOrEqualToZero(BytecodeLabel targe...
method jumpIfGreaterThanZero (line 55) | public static JumpNode jumpIfGreaterThanZero(BytecodeLabel target) {
method jumpIfGreaterThanOrEqualToZero (line 59) | public static JumpNode jumpIfGreaterThanOrEqualToZero(BytecodeLabel ta...
method jumpIfIntEqual (line 63) | public static JumpNode jumpIfIntEqual(BytecodeLabel target) {
method jumpIfIntNotEqual (line 67) | public static JumpNode jumpIfIntNotEqual(BytecodeLabel target) {
method jumpIfIntLessThan (line 71) | public static JumpNode jumpIfIntLessThan(BytecodeLabel target) {
method jumpIfIntLessThanOrEqualToZero (line 75) | public static JumpNode jumpIfIntLessThanOrEqualToZero(BytecodeLabel ta...
method jumpIfIntGreaterThan (line 79) | public static JumpNode jumpIfIntGreaterThan(BytecodeLabel target) {
method jumpIfIntGreaterThanOrEqualToZero (line 83) | public static JumpNode jumpIfIntGreaterThanOrEqualToZero(BytecodeLabel...
method jumpIfObjectEqual (line 87) | public static JumpNode jumpIfObjectEqual(BytecodeLabel target) {
method jumpIfObjectNotEqual (line 91) | public static JumpNode jumpIfObjectNotEqual(BytecodeLabel target) {
method jumpUnconditionally (line 95) | public static JumpNode jumpUnconditionally(BytecodeLabel target) {
method jsr (line 99) | public static JumpNode jsr(BytecodeLabel target) {
method jumpIfNull (line 103) | public static JumpNode jumpIfNull(BytecodeLabel target) {
method jumpIfNotNull (line 107) | public static JumpNode jumpIfNotNull(BytecodeLabel target) {
FILE: xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/instructions/NewArrayNode.java
class NewArrayNode (line 27) | public class NewArrayNode implements CompilableNode {
method NewArrayNode (line 30) | public NewArrayNode(WrappedType wrappedType) {
method getNode (line 34) | @Override
FILE: xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/instructions/RegisterNode.java
class RegisterNode (line 28) | public class RegisterNode implements CompilableNode {
method RegisterNode (line 32) | public RegisterNode(int opcode, int slot) {
method getNode (line 37) | @Override
method loadInt (line 42) | public static RegisterNode loadInt(int slot) {
method loadLong (line 46) | public static RegisterNode loadLong(int slot) {
method loadFloat (line 50) | public static RegisterNode loadFloat(int slot) {
method loadDouble (line 54) | public static RegisterNode loadDouble(int slot) {
method loadObject (line 58) | public static RegisterNode loadObject(int slot) {
method storeInt (line 62) | public static RegisterNode storeInt(int slot) {
method storeLong (line 66) | public static RegisterNode storeLong(int slot) {
method storeFloat (line 70) | public static RegisterNode storeFloat(int slot) {
method storeDouble (line 74) | public static RegisterNode storeDouble(int slot) {
method storeObject (line 78) | public static RegisterNode storeObject(int slot) {
method ret (line 82) | public static RegisterNode ret(int slot) {
method loadVar (line 86) | public static RegisterNode loadVar(IRVariable variable) {
method storeVar (line 108) | public static RegisterNode storeVar(IRVariable variable) {
FILE: xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/instructions/SimpleNode.java
type SimpleNode (line 28) | public enum SimpleNode implements CompilableNode {
method SimpleNode (line 186) | SimpleNode(int opcode) {
method getNode (line 190) | @Override
method getArrayStoreOp (line 195) | public static SimpleNode getArrayStoreOp(WrappedType type) { // fixme ...
method getArrayLoadOp (line 220) | public static SimpleNode getArrayLoadOp(WrappedType type) {
method negateOpcodeFor (line 245) | public static SimpleNode negateOpcodeFor(WrappedType type) {
FILE: xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/instructions/SwitchNode.java
class SwitchNode (line 28) | public class SwitchNode implements CompilableNode {
method SwitchNode (line 33) | public SwitchNode(List<Integer> keys, List<BytecodeLabel> labels, Byte...
method getNode (line 39) | @Override
FILE: xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/instructions/TypeNode.java
class TypeNode (line 26) | public class TypeNode implements CompilableNode {
method TypeNode (line 30) | public TypeNode(int opcode, WrappedType type) {
method getNode (line 35) | @Override
method newInstance (line 40) | public static TypeNode newInstance(WrappedType type) {
method cast (line 44) | public static TypeNode cast(WrappedType type) {
method instanceOf (line 48) | public static TypeNode instanceOf(WrappedType type) {
FILE: xyz.itzsomebody.codegen/src/test/java/xyz/itzsomebody/codegen/UtilsTester.java
class UtilsTester (line 28) | public class UtilsTester {
method testWrapMethodNodeParameters (line 29) | @Test
method testWrapMethodParameters (line 50) | @Test
method testWrapConstructorParameters (line 65) | @Test
method testUnwrapMethodDescriptor (line 78) | @Test
method testUnpackConstants (line 96) | @Test
method testBoxForPrimitives (line 113) | @Test
method testBoxForNonPrimitive (line 125) | @Test(expected = IllegalArgumentException.class)
FILE: xyz.itzsomebody.codegen/src/test/java/xyz/itzsomebody/codegen/WrappedTypeTester.java
class WrappedTypeTester (line 27) | public class WrappedTypeTester {
method testGetAbsent (line 28) | @Test
method testIsInterface (line 33) | @Test
method testIsPrimitive (line 40) | @Test
method testGetPrimitiveTypeForBoxedPrimitive (line 56) | @Test
method testGetPrimitiveTypeForNonBoxedPrimitive (line 68) | @Test(expected = UncompilableNodeException.class)
method testIsBoxed (line 73) | @Test
method testIsArray (line 89) | @Test
method testIsIntType (line 98) | @Test
method testUnwrap (line 114) | @Test
method testFromClassName (line 129) | @Test
method testFromInternalName (line 143) | @Test
method testFromClassNode (line 157) | @Test
type Dummy (line 165) | private interface Dummy {
FILE: xyz.itzsomebody.codegen/src/test/java/xyz/itzsomebody/codegen/expressions/IRVariableTester.java
class IRVariableTester (line 26) | public class IRVariableTester {
method testGetIntTypeVariable (line 27) | @Test
method testGetLongVariable (line 34) | @Test
method testGetFloatVariable (line 41) | @Test
method testGetDoubleVariable (line 48) | @Test
method testGetObjectVariable (line 55) | @Test
FILE: xyz.itzsomebody.codegen/src/test/java/xyz/itzsomebody/codegen/expressions/predefined/IRArithmeticExpressionTester.java
class IRArithmeticExpressionTester (line 27) | public class IRArithmeticExpressionTester {
method testIntMathGeneration (line 28) | @Test
method testLongMathGeneration (line 38) | @Test
method testFloatMathGeneration (line 48) | @Test
method testDoubleMathGeneration (line 58) | @Test
FILE: xyz.itzsomebody.codegen/src/test/java/xyz/itzsomebody/codegen/expressions/predefined/IRArrayLengthTester.java
class IRArrayLengthTester (line 29) | public class IRArrayLengthTester {
method testForPrimitiveArray (line 30) | @Test
method testForStringArray (line 51) | @Test
FILE: xyz.itzsomebody.codegen/src/test/java/xyz/itzsomebody/codegen/expressions/predefined/IRCastExpressionTester.java
class IRCastExpressionTester (line 31) | public class IRCastExpressionTester {
method testCastBooleanToShort (line 32) | @Test
method testCastDoubleToShort (line 40) | @Test
method testCastPrimitiveToEquivalentBoxedPrimitive (line 53) | @Test
method testCastPrimitiveToNonPrimitive (line 67) | @Test
method testCastBoxedPrimitiveToPrimitive (line 85) | @Test
method testCastBoxedPrimitiveToNonPrimitive (line 106) | @Test
method testCastNonPrimitiveToPrimitive (line 124) | @Test
method testCastNonPrimitiveToNonPrimitive (line 144) | @Test
FILE: xyz.itzsomebody.codegen/src/test/java/xyz/itzsomebody/codegen/expressions/predefined/IRConstantTester.java
class IRConstantTester (line 36) | public class IRConstantTester {
method testDynamicConst (line 37) | @Test
method testNullConst (line 54) | @Test
method testIntConst (line 62) | @Test
method testLongConst (line 73) | @Test
method testFloatConst (line 80) | @Test
method testDoubleConst (line 87) | @Test
method testStringConst (line 94) | @Test
method testClassConst (line 100) | @Test
method dynamicTester (line 106) | public static String dynamicTester(MethodHandles.Lookup lookup, String...
FILE: xyz.itzsomebody.codegen/src/test/java/xyz/itzsomebody/codegen/expressions/predefined/IRGetArrayElementExpressionTester.java
class IRGetArrayElementExpressionTester (line 27) | public class IRGetArrayElementExpressionTester {
method testLoadBooleanElement (line 28) | @Test
method testLoadByteElement (line 38) | @Test
method testLoadShortElement (line 48) | @Test
method testLoadCharElement (line 58) | @Test
method testLoadIntElement (line 68) | @Test
method testLoadLongElement (line 78) | @Test
method testLoadFloatElement (line 88) | @Test
method testLoadDoubleElement (line 98) | @Test
method testLoadObjectElement (line 108) | @Test
FILE: xyz.itzsomebody.codegen/src/test/java/xyz/itzsomebody/codegen/expressions/predefined/IRGetFieldExpressionTester.java
class IRGetFieldExpressionTester (line 30) | public class IRGetFieldExpressionTester {
method testGetObjectField (line 31) | @Test
method testGetPrimitiveField (line 40) | @Test
method testGetObjectStatic (line 49) | @Test
method testGetPrimitiveStatic (line 58) | @Test
class TestClass (line 67) | public static class TestClass {
FILE: xyz.itzsomebody.codegen/src/test/java/xyz/itzsomebody/codegen/expressions/predefined/IRInstanceOfExpressionTester.java
class IRInstanceOfExpressionTester (line 29) | public class IRInstanceOfExpressionTester {
method testInstanceOfClass (line 30) | @Test
method testInstanceOfWrappedType (line 36) | @Test
FILE: xyz.itzsomebody.codegen/src/test/java/xyz/itzsomebody/codegen/expressions/predefined/IRInvocationExpressionTester.java
class IRInvocationExpressionTester (line 29) | public class IRInvocationExpressionTester {
method testInvokeStatic (line 30) | @Test
method testInvokeVirtual (line 39) | @Test
method testInvokeInterface (line 48) | @Test
type DummyInterface (line 57) | public interface DummyInterface {
method dummyInterfaceMethod (line 58) | void dummyInterfaceMethod(String tux, boolean tucks);
class DummyClass (line 61) | public static class DummyClass implements DummyInterface {
method dummyMethod (line 62) | public void dummyMethod(String tux, byte tucks) {
method dummyStatic (line 65) | public static void dummyStatic(String tux, int[] tucks) {
method dummyInterfaceMethod (line 68) | @Override
FILE: xyz.itzsomebody.codegen/src/test/java/xyz/itzsomebody/codegen/expressions/predefined/IRInvokeDynamicExpressionTester.java
class IRInvokeDynamicExpressionTester (line 39) | public class IRInvokeDynamicExpressionTester {
method testInvokeDynamicWithMethodBootstrap (line 40) | @Test
method testInvokeDynamicWithWrappedHandleBootstrap (line 66) | @Test
method dummyBootstrap (line 92) | public static CallSite dummyBootstrap(MethodHandles.Lookup lookup, Str...
FILE: xyz.itzsomebody.codegen/src/test/java/xyz/itzsomebody/codegen/expressions/predefined/IRNegateExpressionTester.java
class IRNegateExpressionTester (line 29) | public class IRNegateExpressionTester {
method testNegateBoolean (line 30) | @Test
method testNegateInt (line 36) | @Test
method testNegateLong (line 42) | @Test
method testNegateFloat (line 48) | @Test
method testNegateDouble (line 54) | @Test
method ensureExceptionThrownOnNonNegatableOperand (line 60) | @Test(expected = UncompilableNodeException.class)
FILE: xyz.itzsomebody.codegen/src/test/java/xyz/itzsomebody/codegen/expressions/predefined/IRNewArrayExpressionTester.java
class IRNewArrayExpressionTester (line 30) | public class IRNewArrayExpressionTester {
method testForPrimitiveArray (line 31) | @Test
method testForStringArray (line 52) | @Test
FILE: xyz.itzsomebody.codegen/src/test/java/xyz/itzsomebody/codegen/expressions/predefined/IRNewInstanceExpressionTester.java
class IRNewInstanceExpressionTester (line 32) | public class IRNewInstanceExpressionTester {
method testNewInstanceViaConstructor (line 33) | @Test
method testNewInstanceViaWrappedType (line 45) | @Test
FILE: xyz.itzsomebody.codegen/src/test/java/xyz/itzsomebody/codegen/expressions/predefined/IRReturnExpressionTester.java
class IRReturnExpressionTester (line 27) | public class IRReturnExpressionTester {
method testReturnBoolean (line 28) | @Test
method testReturnInt (line 33) | @Test
method testReturnLong (line 38) | @Test
method testReturnFloat (line 43) | @Test
method testReturnDouble (line 48) | @Test
method testReturnObject (line 53) | @Test
method testReturnNothing (line 58) | @Test
FILE: xyz.itzsomebody.codegen/src/test/java/xyz/itzsomebody/codegen/expressions/predefined/IRSetArrayElementExpressionTester.java
class IRSetArrayElementExpressionTester (line 9) | public class IRSetArrayElementExpressionTester {
method testStoreBooleanElement (line 10) | @Test
method testStoreByteElement (line 21) | @Test
method testStoreShortElement (line 32) | @Test
method testStoreCharElement (line 43) | @Test
method testStoreIntElement (line 54) | @Test
method testStoreLongElement (line 65) | @Test
method testStoreFloatElement (line 76) | @Test
method testStoreDoubleElement (line 87) | @Test
method testStoreObjectElement (line 98) | @Test
FILE: xyz.itzsomebody.codegen/src/test/java/xyz/itzsomebody/codegen/expressions/predefined/IRSetFieldExpressionTester.java
class IRSetFieldExpressionTester (line 30) | public class IRSetFieldExpressionTester {
method testSetObjectField (line 31) | @Test
method testSetPrimitiveField (line 40) | @Test
method testSetObjectStatic (line 49) | @Test
method testSetPrimitiveStatic (line 58) | @Test
class TestClass (line 67) | public static class TestClass {
FILE: xyz.itzsomebody.codegen/src/test/java/xyz/itzsomebody/codegen/expressions/predefined/IRSetVariableExpressionTester.java
class IRSetVariableExpressionTester (line 28) | public class IRSetVariableExpressionTester {
method testSetIntTypeVariable (line 29) | @Test
method testSetLongVariable (line 37) | @Test
method testSetFloatVariable (line 45) | @Test
method testSetDoubleVariable (line 53) | @Test
method testSetObjectVariable (line 61) | @Test
FILE: xyz.itzsomebody.codegen/src/test/java/xyz/itzsomebody/codegen/instructions/BytecodeLabelTester.java
class BytecodeLabelTester (line 24) | public class BytecodeLabelTester {
method ensureCreatedLabelsAreUnique (line 25) | @Test
FILE: xyz.itzsomebody.codegen/src/test/java/xyz/itzsomebody/codegen/instructions/ConstantNodeTester.java
class ConstantNodeTester (line 26) | public class ConstantNodeTester {
method testNullConst (line 27) | @Test
method testBooleanConst (line 33) | @Test
method testIntConst (line 41) | @Test
method testFloatConst (line 50) | @Test
method testDoubleConst (line 57) | @Test
method testStringConst (line 64) | @Test
method testClassConst (line 70) | @Test
FILE: xyz.itzsomebody.codegen/src/test/java/xyz/itzsomebody/codegen/instructions/FieldAccessNodeTester.java
class FieldAccessNodeTester (line 27) | public class FieldAccessNodeTester {
method testGetStatic (line 28) | @Test
method testPutStatic (line 37) | @Test
method testGetField (line 46) | @Test
method testPutField (line 55) | @Test
FILE: xyz.itzsomebody.codegen/src/test/java/xyz/itzsomebody/codegen/instructions/InvokeDynamicNodeTester.java
class InvokeDynamicNodeTester (line 34) | public class InvokeDynamicNodeTester {
method testInvokeDynamicWithMethod (line 35) | @Test
method testInvokeDynamicWithWrappedHandle (line 47) | @Test
method testBootstrap (line 58) | public static CallSite testBootstrap(MethodHandles.Lookup lookup, Stri...
FILE: xyz.itzsomebody.codegen/src/test/java/xyz/itzsomebody/codegen/instructions/InvokeNodeTester.java
class InvokeNodeTester (line 31) | public class InvokeNodeTester {
method testInvokeStatic (line 32) | @Test
method testInvokeVirtual (line 41) | @Test
method testInvokeInterface (line 50) | @Test
method testInvokeSpecials (line 59) | @Test
method testInvokeConstructor (line 68) | @Test
FILE: xyz.itzsomebody.codegen/src/test/java/xyz/itzsomebody/codegen/instructions/NewArrayNodeTester.java
class NewArrayNodeTester (line 29) | public class NewArrayNodeTester {
method testPrimitiveArrayType (line 30) | @Test
method testNonPrimitiveArrayType (line 57) | @Test
FILE: xyz.itzsomebody.codegen/src/test/java/xyz/itzsomebody/codegen/instructions/TypeNodeTester.java
class TypeNodeTester (line 27) | public class TypeNodeTester {
method testNewInstanceForCorrectOpcode (line 28) | @Test
method testNewInstanceForValidType (line 33) | @Test
FILE: xyz.itzsomebody.commons/src/main/java/xyz/itzsomebody/commons/InsnListModifier.java
class InsnListModifier (line 36) | public class InsnListModifier {
method append (line 44) | public InsnListModifier append(InsnList insns) {
method append (line 49) | public InsnListModifier append(@NotNull AbstractInsnNode... insns) {
method prepend (line 56) | public InsnListModifier prepend(InsnList insns) {
method prepend (line 61) | public InsnListModifier prepend(@NotNull AbstractInsnNode... insns) {
method insert (line 68) | public InsnListModifier insert(AbstractInsnNode previous, InsnList ins...
method insert (line 73) | public InsnListModifier insert(AbstractInsnNode previous, @NotNull Abs...
method insertBefore (line 80) | public InsnListModifier insertBefore(AbstractInsnNode next, InsnList i...
method insertBefore (line 85) | public InsnListModifier insertBefore(AbstractInsnNode next, @NotNull A...
method replace (line 92) | public InsnListModifier replace(AbstractInsnNode old, InsnList replace...
method replace (line 97) | public InsnListModifier replace(AbstractInsnNode old, @NotNull Abstrac...
method remove (line 104) | public InsnListModifier remove(AbstractInsnNode insn) {
method remove (line 109) | public InsnListModifier remove(@NotNull AbstractInsnNode... insns) {
method remove (line 114) | public InsnListModifier remove(Iterable<? extends AbstractInsnNode> it...
method apply (line 119) | public void apply(InsnList insns) {
method apply (line 131) | public void apply(MethodNode node) {
FILE: xyz.itzsomebody.commons/src/main/java/xyz/itzsomebody/commons/MaxLocalsUpdater.java
class MaxLocalsUpdater (line 31) | public class MaxLocalsUpdater {
method MaxLocalsUpdater (line 34) | private MaxLocalsUpdater(MethodNode methodNode) {
method computeMaxs (line 38) | private int computeMaxs() {
method update (line 51) | public static void update(MethodNode methodNode) {
class MaxLocalsVisitor (line 55) | class MaxLocalsVisitor extends MethodVisitor {
method MaxLocalsVisitor (line 58) | public MaxLocalsVisitor(int initialSize) {
method visitVarInsn (line 63) | @Override
method visitIincInsn (line 76) | @Override
method getSize (line 83) | public int getSize() {
FILE: xyz.itzsomebody.commons/src/main/java/xyz/itzsomebody/commons/analysis/callgraph/CallGraphAnalyzer.java
class CallGraphAnalyzer (line 3) | public class CallGraphAnalyzer {
FILE: xyz.itzsomebody.commons/src/main/java/xyz/itzsomebody/commons/analysis/cfg/CFGAnalyzer.java
class CFGAnalyzer (line 3) | public class CFGAnalyzer {
FILE: xyz.itzsomebody.commons/src/main/java/xyz/itzsomebody/commons/analysis/frame/FrameAnalyzer.java
class FrameAnalyzer (line 3) | public class FrameAnalyzer {
FILE: xyz.itzsomebody.commons/src/main/java/xyz/itzsomebody/commons/matcher/InstructionMatcher.java
class InstructionMatcher (line 26) | public class InstructionMatcher {
method InstructionMatcher (line 31) | public InstructionMatcher(InstructionPattern pattern, AbstractInsnNode...
method matches (line 36) | public boolean matches() {
method find (line 58) | public boolean find() { // This is a good example of why you shouldn't...
method getCaptured (line 86) | public List<AbstractInsnNode> getCaptured(int which) {
method getAllCaptured (line 90) | public List<List<AbstractInsnNode>> getAllCaptured() {
FILE: xyz.itzsomebody.commons/src/main/java/xyz/itzsomebody/commons/matcher/InstructionPattern.java
class InstructionPattern (line 27) | public class InstructionPattern {
method InstructionPattern (line 30) | public InstructionPattern(@NotNull InstructionRule... rules) {
method getRules (line 34) | public List<InstructionRule> getRules() {
method matcher (line 38) | public InstructionMatcher matcher(AbstractInsnNode start) {
FILE: xyz.itzsomebody.commons/src/main/java/xyz/itzsomebody/commons/matcher/rules/AccessFieldRule.java
class AccessFieldRule (line 28) | public class AccessFieldRule extends OpcodeRule {
method AccessFieldRule (line 34) | public AccessFieldRule(Function<AbstractInsnNode, Boolean> rule, int o...
method AccessFieldRule (line 42) | public AccessFieldRule(int opcode, String owner, String name, String d...
method matches (line 50) | @Override
FILE: xyz.itzsomebody.commons/src/main/java/xyz/itzsomebody/commons/matcher/rules/DoubleConstRule.java
class DoubleConstRule (line 24) | public class DoubleConstRule extends OpcodeRule {
method DoubleConstRule (line 25) | public DoubleConstRule() {
FILE: xyz.itzsomebody.commons/src/main/java/xyz/itzsomebody/commons/matcher/rules/FloatConstRule.java
class FloatConstRule (line 24) | public class FloatConstRule extends OpcodeRule {
method FloatConstRule (line 25) | public FloatConstRule() {
FILE: xyz.itzsomebody.commons/src/main/java/xyz/itzsomebody/commons/matcher/rules/InstructionRule.java
type InstructionRule (line 24) | public interface InstructionRule {
method matches (line 25) | boolean matches(InstructionMatcher matcher, AbstractInsnNode current);
FILE: xyz.itzsomebody.commons/src/main/java/xyz/itzsomebody/commons/matcher/rules/IntConstRule.java
class IntConstRule (line 24) | public class IntConstRule extends OpcodeRule {
method IntConstRule (line 25) | public IntConstRule() {
FILE: xyz.itzsomebody.commons/src/main/java/xyz/itzsomebody/commons/matcher/rules/InvocationRule.java
class InvocationRule (line 28) | public class InvocationRule extends OpcodeRule {
method InvocationRule (line 34) | public InvocationRule(Function<AbstractInsnNode, Boolean> rule, int op...
method InvocationRule (line 42) | public InvocationRule(int opcode, String owner, String name, String de...
method matches (line 50) | @Override
FILE: xyz.itzsomebody.commons/src/main/java/xyz/itzsomebody/commons/matcher/rules/LongConstRule.java
class LongConstRule (line 24) | public class LongConstRule extends OpcodeRule {
method LongConstRule (line 25) | public LongConstRule() {
FILE: xyz.itzsomebody.commons/src/main/java/xyz/itzsomebody/commons/matcher/rules/OpcodeRule.java
class OpcodeRule (line 29) | public class OpcodeRule implements InstructionRule {
method OpcodeRule (line 33) | public OpcodeRule(Function<AbstractInsnNode, Boolean> rule, int... opc...
method OpcodeRule (line 38) | public OpcodeRule(int... opcodes) {
method matches (line 43) | @Override
FILE: xyz.itzsomebody.commons/src/main/java/xyz/itzsomebody/commons/matcher/rules/WildcardRule.java
class WildcardRule (line 24) | public class WildcardRule extends OpcodeRule {
method WildcardRule (line 25) | public WildcardRule(){
method matches (line 29) | @Override
FILE: xyz.itzsomebody.commons/src/test/java/xyz/itzsomebody/commons/InsnListModifierTester.java
class InsnListModifierTester (line 29) | public class InsnListModifierTester {
method testAppending (line 30) | @Test
method testPrepending (line 42) | @Test
method testInsertion (line 56) | @Test
method testInsertionBefore (line 72) | @Test
FILE: xyz.itzsomebody.commons/src/test/java/xyz/itzsomebody/commons/MaxLocalsUpdaterTester.java
class MaxLocalsUpdaterTester (line 28) | public class MaxLocalsUpdaterTester {
method testParameterSizeEvaluation (line 29) | @Test
method testEvaluationByBytecodeStatic1 (line 39) | @Test
method testEvaluationByBytecodeStatic2 (line 51) | @Test
method testEvaluationByBytecodeVirtual1 (line 63) | @Test
method testEvaluationByBytecodeVirtual2 (line 72) | @Test
FILE: xyz.itzsomebody.commons/src/test/java/xyz/itzsomebody/commons/TestingUtils.java
class TestingUtils (line 27) | public class TestingUtils {
method loadInt (line 28) | public static AbstractInsnNode loadInt(int i) {
method loadLong (line 40) | public static AbstractInsnNode loadLong(long j) {
method loadFloat (line 48) | public static AbstractInsnNode loadFloat(float f) {
method loadDouble (line 56) | public static AbstractInsnNode loadDouble(double d) {
FILE: xyz.itzsomebody.commons/src/test/java/xyz/itzsomebody/commons/matcher/InstructionMatcherTester.java
class InstructionMatcherTester (line 34) | public class InstructionMatcherTester {
method testMatchMethodInvocationAndArgs (line 35) | @Test
FILE: xyz.itzsomebody.commons/src/test/java/xyz/itzsomebody/commons/matcher/rules/AccessFieldRuleTester.java
class AccessFieldRuleTester (line 27) | public class AccessFieldRuleTester {
method testMatch (line 28) | @Test
FILE: xyz.itzsomebody.commons/src/test/java/xyz/itzsomebody/commons/matcher/rules/DoubleConstRuleTester.java
class DoubleConstRuleTester (line 28) | public class DoubleConstRuleTester {
method testMatch (line 29) | @Test
FILE: xyz.itzsomebody.commons/src/test/java/xyz/itzsomebody/commons/matcher/rules/FloatConstRuleTester.java
class FloatConstRuleTester (line 28) | public class FloatConstRuleTester {
method testMatch (line 29) | @Test
FILE: xyz.itzsomebody.commons/src/test/java/xyz/itzsomebody/commons/matcher/rules/IntConstRuleTester.java
class IntConstRuleTester (line 28) | public class IntConstRuleTester {
method testMatch (line 29) | @Test
FILE: xyz.itzsomebody.commons/src/test/java/xyz/itzsomebody/commons/matcher/rules/InvocationRuleTester.java
class InvocationRuleTester (line 27) | public class InvocationRuleTester {
method testMatch (line 28) | @Test
FILE: xyz.itzsomebody.commons/src/test/java/xyz/itzsomebody/commons/matcher/rules/LongConstRuleTester.java
class LongConstRuleTester (line 28) | public class LongConstRuleTester {
method testMatch (line 29) | @Test
FILE: xyz.itzsomebody.radon.template/src/main/java/xyz/itzsomebody/radon/templates/string/AESPCBCDecryptor.java
class AESPCBCDecryptor (line 7) | public class AESPCBCDecryptor {
method subWord (line 78) | public static int subWord(int word) {
method keySchedule (line 90) | public static void keySchedule(int[] key) {
method addRoundKey (line 109) | public static void addRoundKey(int[][] state, int round) {
method invShiftRows (line 119) | public static void invShiftRows(int[][] state) {
method invSubBytes (line 130) | public static void invSubBytes(int[][] state) {
method gfMult (line 142) | public static int gfMult(int mult, int b) {
method invMixColumns (line 158) | public static void invMixColumns(int[][] state) {
method invCipher (line 172) | public static void invCipher(int[][] state) {
method decrypt (line 189) | public static String decrypt(String input, long[] ivInts) {
method copyBlock (line 260) | public static int[][] copyBlock(int[][] block) {
method design (line 270) | public static int[] design(byte[] arr) {
method resign (line 278) | public static byte[] resign(int[] arr) {
method create_state (line 286) | public static int[][] create_state(int[] bytes) {
FILE: xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/Radon.java
class Radon (line 35) | public class Radon {
method Radon (line 45) | public Radon(ObfConfig config) {
method run (line 51) | public void run() {
method buildHierarchy (line 82) | private void buildHierarchy(ClassWrapper wrapper, ClassWrapper sub, Se...
method buildHierarchyGraph (line 102) | public void buildHierarchyGraph() {
method getInstance (line 107) | public static Radon getInstance() {
method getClassWrapper (line 111) | public ClassWrapper getClassWrapper(String name) {
method getClasses (line 121) | public Map<String, ClassWrapper> getClasses() {
method setClasses (line 125) | public void setClasses(Map<String, ClassWrapper> classes) {
method getClasspathWrapper (line 129) | public ClassWrapper getClasspathWrapper(String name) {
method getClasspath (line 139) | public Map<String, ClassWrapper> getClasspath() {
method setClasspath (line 143) | public void setClasspath(Map<String, ClassWrapper> classpath) {
method getResource (line 147) | public byte[] getResource(String name) {
method setResources (line 157) | public void setResources(Map<String, byte[]> resources) {
method getResources (line 161) | public Map<String, byte[]> getResources() {
method getExclusionManager (line 165) | public ExclusionManager getExclusionManager() {
FILE: xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/RadonConstants.java
type RadonConstants (line 26) | public interface RadonConstants {
FILE: xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/RadonMain.java
class RadonMain (line 42) | public class RadonMain {
method bootstrap0 (line 48) | @SuppressWarnings("SameParameterValue")
method bootstrap (line 77) | public static void bootstrap(boolean cliMode) {
method cliThing (line 85) | private static int cliThing(String[] args) {
method main (line 202) | public static void main(String[] args) {
FILE: xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/cli/CmdArgsParser.java
class CmdArgsParser (line 29) | public class CmdArgsParser {
method getSwitchIdOrThrow (line 34) | private String getSwitchIdOrThrow(String arg) {
method parse (line 42) | public void parse(String[] args) {
method registerSwitch (line 75) | public static void registerSwitch(String id, int expectedArgs) {
method registerSwitch (line 79) | public static void registerSwitch(CmdSwitch cmdSwitch) {
method containsSwitch (line 83) | public boolean containsSwitch(String id) {
method getArgsFor (line 87) | public String[] getArgsFor(String id) {
FILE: xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/cli/CmdSwitch.java
class CmdSwitch (line 23) | public class CmdSwitch {
method CmdSwitch (line 27) | public CmdSwitch(String id, int expectedArgs) {
method equals (line 32) | @Override
FILE: xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/config/ConfigurationParser.java
class ConfigurationParser (line 34) | public class ConfigurationParser extends ObjectMapper {
method ConfigurationParser (line 37) | public ConfigurationParser(InputStream configStream) {
method parseConfig (line 46) | public ObfConfig parseConfig() throws IOException {
FILE: xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/config/DictionaryDeserializer.java
class DictionaryDeserializer (line 29) | public class DictionaryDeserializer extends JsonDeserializer<Dictionary> {
method deserialize (line 30) | @Override
FILE: xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/config/ExclusionsDeserializer.java
class ExclusionsDeserializer (line 30) | public class ExclusionsDeserializer extends JsonDeserializer<ExclusionMa...
method deserialize (line 31) | @Override
FILE: xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/config/ObfConfig.java
class ObfConfig (line 35) | public class ObfConfig {
FILE: xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/config/TransformerDeserializer.java
class TransformerDeserializer (line 42) | public class TransformerDeserializer extends JsonDeserializer<Transforme...
method transformerFor (line 43) | private static Transformer transformerFor(String name) {
method deserialize (line 59) | @Override
FILE: xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/dictionaries/Dictionary.java
type Dictionary (line 23) | public interface Dictionary {
method next (line 24) | String next();
method randomStr (line 26) | String randomStr(int length);
method configName (line 28) | String configName();
method copy (line 30) | Dictionary copy();
method toBijectiveBase (line 33) | static String toBijectiveBase(char[] charset, int decimal) {
method randomString (line 42) | static String randomString(char[] charset, int length) {
FILE: xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/dictionaries/DictionaryFactory.java
class DictionaryFactory (line 26) | public class DictionaryFactory {
method forName (line 35) | public static Dictionary forName(String name) {
method defaultDictionary (line 45) | public static Dictionary defaultDictionary() {
FILE: xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/dictionaries/defined/AlphaNumericDictionary.java
class AlphaNumericDictionary (line 24) | public class AlphaNumericDictionary implements Dictionary {
method next (line 28) | @Override
method randomStr (line 33) | @Override
method configName (line 38) | @Override
method copy (line 43) | @Override
FILE: xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/dictionaries/defined/AlphabeticalDictionary.java
class AlphabeticalDictionary (line 23) | public class AlphabeticalDictionary implements Dictionary {
method next (line 27) | @Override
method randomStr (line 32) | @Override
method configName (line 37) | @Override
method copy (line 42) | @Override
FILE: xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/dictionaries/defined/CustomCharsetDictionary.java
class CustomCharsetDictionary (line 23) | public class CustomCharsetDictionary implements Dictionary {
method CustomCharsetDictionary (line 27) | public CustomCharsetDictionary(String charsetString) {
method next (line 31) | @Override
method randomStr (line 36) | @Override
method configName (line 41) | @Override
method copy (line 47) | @Override
FILE: xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/dictionaries/defined/RandomUnicodeDictionary.java
class RandomUnicodeDictionary (line 24) | public class RandomUnicodeDictionary implements Dictionary {
method next (line 34) | @Override
method randomStr (line 39) | @Override
method configName (line 44) | @Override
method copy (line 49) | @Override
FILE: xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/dictionaries/defined/SpacesDictionary.java
class SpacesDictionary (line 23) | public class SpacesDictionary implements Dictionary {
method next (line 33) | @Override
method randomStr (line 38) | @Override
method configName (line 43) | @Override
method copy (line 48) | @Override
FILE: xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/dictionaries/defined/UnrecognizedDictionary.java
class UnrecognizedDictionary (line 23) | public class UnrecognizedDictionary implements Dictionary {
method next (line 33) | @Override
method randomStr (line 38) | @Override
method configName (line 43) | @Override
method copy (line 48) | @Override
FILE: xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/exceptions/FatalRadonException.java
class FatalRadonException (line 27) | public class FatalRadonException extends RuntimeException {
method FatalRadonException (line 28) | public FatalRadonException() {
method FatalRadonException (line 32) | public FatalRadonException(String msg) {
method FatalRadonException (line 36) | public FatalRadonException(Throwable t) {
FILE: xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/exceptions/MissingClassException.java
class MissingClassException (line 27) | public class MissingClassException extends PreventableRadonException {
method MissingClassException (line 28) | private MissingClassException(String className, boolean library) {
method forInputClass (line 34) | public static MissingClassException forInputClass(String className) {
method forLibraryClass (line 38) | public static MissingClassException forLibraryClass(String className) {
FILE: xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/exceptions/MissingResourceException.java
class MissingResourceException (line 21) | public class MissingResourceException extends PreventableRadonException {
method MissingResourceException (line 22) | public MissingResourceException(String resourceName) {
FILE: xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/exceptions/PreventableRadonException.java
class PreventableRadonException (line 27) | public class PreventableRadonException extends RuntimeException {
method PreventableRadonException (line 28) | public PreventableRadonException() {
method PreventableRadonException (line 32) | public PreventableRadonException(String msg) {
method PreventableRadonException (line 36) | public PreventableRadonException(Throwable t) {
FILE: xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/exclusions/Exclusion.java
class Exclusion (line 25) | public class Exclusion {
method Exclusion (line 31) | public Exclusion(String pattern) {
method Exclusion (line 35) | public Exclusion(String pattern, boolean invert) {
method Exclusion (line 39) | public Exclusion(String pattern, ExclusionType exclusionType, boolean ...
method matches (line 46) | public boolean matches(String other, ExclusionType type) {
method equals (line 54) | @Override
method hashCode (line 63) | @Override
type ExclusionType (line 68) | public enum ExclusionType {
method forIdentifier (line 92) | public static ExclusionType forIdentifier(String identifier) {
FILE: xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/exclusions/ExclusionManager.java
class ExclusionManager (line 26) | public class ExclusionManager {
method ExclusionManager (line 30) | public ExclusionManager(Map<String, String> patterns) {
method find (line 46) | public boolean find(String other, Exclusion.ExclusionType exclusionTyp...
FILE: xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/transformers/Transformer.java
class Transformer (line 37) | public abstract class Transformer implements Opcodes {
method init (line 40) | public void init(Radon radon) {
method classes (line 44) | protected Collection<ClassWrapper> classes() {
method classStream (line 48) | protected Stream<ClassWrapper> classStream() {
method classMap (line 52) | protected Map<String, ClassWrapper> classMap() {
method classPathMap (line 56) | protected Map<String, ClassWrapper> classPathMap() {
method resourceMap (line 60) | protected Map<String, byte[]> resourceMap() {
method notExcluded (line 64) | protected boolean notExcluded(ClassWrapper wrapper) {
method notExcluded (line 68) | protected boolean notExcluded(MethodWrapper wrapper) {
method notExcluded (line 72) | protected boolean notExcluded(FieldWrapper wrapper) {
method notExcluded (line 76) | protected boolean notExcluded(String checkThis) {
method addClass (line 80) | protected void addClass(ClassWrapper classWrapper) {
method addClass (line 85) | protected void addClass(ClassNode classNode) {
method randomClass (line 90) | protected ClassWrapper randomClass() {
method fakeSubClass (line 95) | protected String fakeSubClass() {
method getName (line 103) | public String getName() {
method transform (line 107) | public abstract void transform();
method getExclusionType (line 109) | public abstract Exclusion.ExclusionType getExclusionType();
method getConfigName (line 111) | public abstract String getConfigName();
FILE: xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/transformers/Transformers.java
type Transformers (line 26) | public enum Transformers {
method Transformers (line 49) | Transformers(Class<? extends Transformer> transformerClass) {
method getTransformerClass (line 53) | public Class<? extends Transformer> getTransformerClass() {
method getConfigName (line 57) | public String getConfigName() {
FILE: xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/transformers/exploiter/ExploiterTransformer.java
class ExploiterTransformer (line 3) | public class ExploiterTransformer {
FILE: xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/transformers/flow/FlowTransformer.java
class FlowTransformer (line 3) | public class FlowTransformer {
FILE: xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/transformers/math/NumberTransformer.java
class NumberTransformer (line 3) | public class NumberTransformer {
FILE: xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/transformers/misc/AddBridgeAccess.java
class AddBridgeAccess (line 30) | public class AddBridgeAccess extends Transformer {
method transform (line 31) | @Override
method getExclusionType (line 46) | @Override
method getConfigName (line 51) | @Override
FILE: xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/transformers/misc/AddDeprecatedAccess.java
class AddDeprecatedAccess (line 31) | public class AddDeprecatedAccess extends Transformer {
method transform (line 41) | @Override
method getExclusionType (line 75) | @Override
method getConfigName (line 80) | @Override
FILE: xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/transformers/misc/AddSyntheticAccess.java
class AddSyntheticAccess (line 30) | public class AddSyntheticAccess extends Transformer {
method transform (line 40) | @Override
method getExclusionType (line 74) | @Override
method getConfigName (line 79) | @Override
FILE: xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/transformers/misc/AddTrashClasses.java
class AddTrashClasses (line 44) | public class AddTrashClasses extends Transformer {
method transform (line 65) | @Override
method generateClass (line 84) | private ClassNode generateClass() {
method createClass (line 94) | private ClassNode createClass(String className) {
method methodGen (line 111) | private MethodNode methodGen() {
method descGen (line 161) | private String descGen() {
method junkInstructions (line 173) | private AbstractInsnNode junkInstructions() {
method getExclusionType (line 219) | @Override
method getConfigName (line 224) | @Override
FILE: xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/transformers/misc/AntiDebugger.java
class AntiDebugger (line 52) | public class AntiDebugger extends Transformer {
method transform (line 58) | @Override
method generateCheck (line 81) | private InsnList generateCheck() {
method isDebugExpression (line 131) | private IRExpression isDebugExpression() {
method getExclusionType (line 168) | @Override
method getConfigName (line 173) | @Override
FILE: xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/transformers/misc/ExpirationKillSwitch.java
class ExpirationKillSwitch (line 51) | public class ExpirationKillSwitch extends Transformer {
method setExpirationTime (line 69) | @JsonProperty("expiration_time")
method transform (line 78) | @Override
method example (line 91) | private static void example() {
method generateExpirationCode (line 99) | private InsnList generateExpirationCode() {
method getExclusionType (line 137) | @Override
method getConfigName (line 142) | @Override
FILE: xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/transformers/misc/Packer.java
class Packer (line 21) | public class Packer {
FILE: xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/transformers/misc/Renamer.java
class Renamer (line 48) | public class Renamer extends Transformer {
method transform (line 68) | @Override
method generateMappings (line 96) | private void generateMappings() {
method cannotRenameMethod (line 145) | private boolean cannotRenameMethod(ClassWrapper classWrapper, MethodWr...
method generateMethodMappings (line 186) | private void generateMethodMappings(ClassWrapper owner, MethodWrapper ...
method cannotRenameField (line 201) | private boolean cannotRenameField(ClassWrapper classWrapper, FieldWrap...
method generateFieldMappings (line 209) | private void generateFieldMappings(ClassWrapper owner, FieldWrapper wr...
method applyMappings (line 224) | private void applyMappings() {
method adaptResources (line 249) | private void adaptResources() {
method dumpMappings (line 272) | private void dumpMappings() {
method getExclusionType (line 299) | @Override
method getConfigName (line 304) | @Override
FILE: xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/transformers/misc/ResourceRenamer.java
class ResourceRenamer (line 36) | public class ResourceRenamer extends Transformer {
method transform (line 42) | @Override
method generateMappings (line 55) | private void generateMappings() {
method applyMappings (line 66) | private void applyMappings() {
method getExclusionType (line 75) | @Override
method getConfigName (line 80) | @Override
FILE: xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/transformers/misc/ScrambleLineNumbers.java
class ScrambleLineNumbers (line 31) | public class ScrambleLineNumbers extends Transformer {
method transform (line 38) | @Override
method getExclusionType (line 54) | @Override
method getConfigName (line 59) | @Override
FILE: xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/transformers/misc/ShuffleMembers.java
class ShuffleMembers (line 30) | public class ShuffleMembers extends Transformer {
method transform (line 37) | @Override
method getExclusionType (line 56) | @Override
method getConfigName (line 61) | @Override
FILE: xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/transformers/misc/Watermarker.java
class Watermarker (line 43) | public class Watermarker extends Transformer {
method transform (line 53) | @Override
method getInjectableMethod (line 71) | private MethodWrapper getInjectableMethod(ArrayList<ClassWrapper> wrap...
method createInstructions (line 87) | private InsnList createInstructions(Deque<Character> ciphered, int off...
method cipheredWatermark (line 107) | private Deque<Character> cipheredWatermark() {
method getExclusionType (line 115) | @Override
method getConfigName (line 120) | @Override
class Extractor (line 125) | public static class Extractor {
method Extractor (line 139) | public Extractor(ZipFile file, String key) {
method enoughInfo (line 144) | private boolean enoughInfo(Map<Integer, Character> charMap) {
method constructString (line 158) | private String constructString(Map<Integer, Character> embedMap) {
method decrypt (line 166) | private String decrypt(String enc, String key) {
method attemptExtract (line 178) | private void attemptExtract(ClassNode classNode, Map<Integer, Charac...
method extractId (line 198) | public String extractId() {
FILE: xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/transformers/references/ReferenceTransformer.java
class ReferenceTransformer (line 3) | public class ReferenceTransformer {
FILE: xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/transformers/shrinker/RemoveDeprecatedAccess.java
class RemoveDeprecatedAccess (line 3) | public class RemoveDeprecatedAccess {
FILE: xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/transformers/shrinker/RemoveInnerClassesAttribute.java
class RemoveInnerClassesAttribute (line 3) | public class RemoveInnerClassesAttribute {
FILE: xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/transformers/shrinker/RemoveInvisibleAnnotations.java
class RemoveInvisibleAnnotations (line 3) | public class RemoveInvisibleAnnotations {
FILE: xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/transformers/shrinker/RemoveInvisibleParameterAnnotations.java
class RemoveInvisibleParameterAnnotations (line 3) | public class RemoveInvisibleParameterAnnotations {
FILE: xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/transformers/shrinker/RemoveInvisibleTypeAnnotations.java
class RemoveInvisibleTypeAnnotations (line 3) | public class RemoveInvisibleTypeAnnotations {
FILE: xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/transformers/shrinker/RemoveLineNumbers.java
class RemoveLineNumbers (line 3) | public class RemoveLineNumbers {
FILE: xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/transformers/shrinker/RemoveLocalVariableTable.java
class RemoveLocalVariableTable (line 3) | public class RemoveLocalVariableTable {
FILE: xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/transformers/shrinker/RemoveOuterMethodAttribute.java
class RemoveOuterMethodAttribute (line 3) | public class RemoveOuterMethodAttribute {
FILE: xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/transformers/shrinker/RemoveSignatureAttribute.java
class RemoveSignatureAttribute (line 3) | public class RemoveSignatureAttribute {
FILE: xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/transformers/shrinker/RemoveSourceDebugAttribute.java
class RemoveSourceDebugAttribute (line 3) | public class RemoveSourceDebugAttribute {
FILE: xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/transformers/shrinker/RemoveSourceFileAttribute.java
class RemoveSourceFileAttribute (line 3) | public class RemoveSourceFileAttribute {
FILE: xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/transformers/shrinker/RemoveSyntheticAccessAttribute.java
class RemoveSyntheticAccessAttribute (line 3) | public class RemoveSyntheticAccessAttribute {
FILE: xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/transformers/shrinker/RemoveUnknownAttributes.java
class RemoveUnknownAttributes (line 3) | public class RemoveUnknownAttributes {
FILE: xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/transformers/shrinker/RemoveVisibleAnnotations.java
class RemoveVisibleAnnotations (line 3) | public class RemoveVisibleAnnotations {
FILE: xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/transformers/shrinker/RemoveVisibleParameterAnnotations.java
class RemoveVisibleParameterAnnotations (line 3) | public class RemoveVisibleParameterAnnotations {
FILE: xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/transformers/shrinker/RemoveVisibleTypeAnnotations.java
class RemoveVisibleTypeAnnotations (line 3) | public class RemoveVisibleTypeAnnotations {
FILE: xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/transformers/shrinker/ShrinkerTransformer.java
class ShrinkerTransformer (line 3) | public class ShrinkerTransformer {
FILE: xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/transformers/strings/AESPCBCEncryptor.java
class AESPCBCEncryptor (line 7) | public class AESPCBCEncryptor {
method initSBox (line 19) | private static void initSBox() {
method gfMult (line 42) | private static int gfMult(int mult, int b) {
method initMultLookups (line 58) | private static void initMultLookups() {
method initRcon (line 75) | private static void initRcon() {
method cipher (line 93) | private static void cipher(int[][] state) {
method pad (line 110) | private static int[] pad(int[] arr) {
method design (line 120) | private static int[] design(byte[] arr) {
method sign (line 128) | private static byte[] sign(int[] arr) {
method encrypt (line 136) | public static String encrypt(String input, int[] key, long[] ivInts) {
method copyBlock (line 205) | public static int[][] copyBlock(int[][] block) {
method create_state (line 215) | public static int[][] create_state(int[] bytes) {
method subBytes (line 223) | public static void subBytes(int[][] state) {
method shiftRows (line 234) | public static void shiftRows(int[][] state) {
method mixColumns (line 245) | public static void mixColumns(int[][] state) {
method subWord (line 259) | public static int subWord(int word) {
method keySchedule (line 271) | public static void keySchedule(int[] key) {
method addRoundKey (line 290) | public static void addRoundKey(int[][] state, int round) {
FILE: xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/transformers/strings/AESPCBCStringEncryption.java
class AESPCBCStringEncryption (line 35) | public class AESPCBCStringEncryption extends StringTransformer {
method transform (line 36) | @Override
method getConfigName (line 68) | @Override
method generateInsnBlock (line 73) | private InsnList generateInsnBlock(String str, ClassWrapper cw, Method...
class DecryptionMemberNames (line 100) | private class DecryptionMemberNames {
method generateDecryptionClass (line 127) | private ClassNode generateDecryptionClass(DecryptionMemberNames member...
FILE: xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/transformers/strings/StaticFieldStrPool.java
class StaticFieldStrPool (line 26) | public class StaticFieldStrPool extends StringTransformer {
method transform (line 27) | @Override
method getConfigName (line 76) | @Override
method createStringPoolInitializer (line 81) | private static MethodNode createStringPoolInitializer(ClassWrapper own...
FILE: xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/transformers/strings/Str2Base64Encoding.java
class Str2Base64Encoding (line 42) | public class Str2Base64Encoding extends StringTransformer {
method transform (line 46) | @Override
method getConfigName (line 94) | @Override
method encodeString (line 99) | public static String encodeString(String s) {
method decodeString (line 107) | public static String decodeString(String s) {
method decryptorNode (line 111) | private MethodNode decryptorNode(String methodName) {
type Base64EncoderKey (line 129) | enum Base64EncoderKey {
method getKey (line 132) | public String getKey() {
FILE: xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/transformers/strings/StringTransformer.java
class StringTransformer (line 29) | public abstract class StringTransformer extends Transformer {
method isExcludedString (line 39) | protected boolean isExcludedString(String s) {
method getExclusionType (line 43) | @Override
FILE: xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/utils/IOUtils.java
class IOUtils (line 33) | public class IOUtils {
method toByteArray (line 39) | public static byte[] toByteArray(final InputStream stream) throws IOEx...
method renameExistingFile (line 56) | public static String renameExistingFile(File existing) {
FILE: xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/utils/JarLoader.java
class JarLoader (line 36) | public class JarLoader {
method loadAsLib (line 41) | public void loadAsLib(String path) {
method loadAsInput (line 91) | public void loadAsInput(String path) {
method getClasses (line 137) | public Map<String, ClassWrapper> getClasses() {
method getClasspath (line 141) | public Map<String, ClassWrapper> getClasspath() {
method getResources (line 145) | public Map<String, byte[]> getResources() {
FILE: xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/utils/JarWriter.java
class JarWriter (line 38) | public class JarWriter {
method write (line 41) | public void write(String path) {
method writeAntiExtractionEntries (line 133) | private void writeAntiExtractionEntries(ZipOutputStream stream, String...
method writeEntry (line 158) | private void writeEntry(ZipOutputStream stream, ZipEntry entry, byte[]...
method disableNameCache (line 168) | private void disableNameCache(ZipOutputStream stream) {
method injectCrcCorrupter (line 186) | private void injectCrcCorrupter(ZipOutputStream stream) {
method populateStoredEntryInfo (line 209) | private void populateStoredEntryInfo(ZipEntry entry, byte[] data) {
FILE: xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/utils/RandomUtils.java
class RandomUtils (line 23) | public class RandomUtils {
method instance (line 24) | private static ThreadLocalRandom instance() {
method randomInt (line 32) | public static int randomInt(int origin, int bound) {
method randomInt (line 36) | public static int randomInt(int bound) {
method randomInt (line 40) | public static int randomInt() {
method randomLong (line 48) | public static long randomLong(long origin, long bound) {
method randomLong (line 52) | public static long randomLong(long bound) {
method randomLong (line 56) | public static long randomLong() {
method randomFloat (line 64) | public static float randomFloat(float origin, float bound) {
method randomFloat (line 80) | public static float randomFloat(float bound) {
method randomFloat (line 89) | public static float randomFloat() {
method randomDouble (line 97) | public static double randomDouble(double origin, double bound) {
method randomDouble (line 101) | public static double randomDouble(double bound) {
method randomDouble (line 105) | public static double randomDouble() {
method randomBoolean (line 113) | public static boolean randomBoolean() {
method randomBytes (line 117) | public static byte[] randomBytes(int length) {
method randomBytes (line 123) | public static byte[] randomBytes() {
FILE: xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/utils/asm/ASMUtils.java
class ASMUtils (line 28) | public class ASMUtils {
method getNumberInsn (line 29) | public static AbstractInsnNode getNumberInsn(int number) {
method getNumberInsn (line 40) | public static AbstractInsnNode getNumberInsn(long number) {
method getNumberInsn (line 47) | public static AbstractInsnNode getNumberInsn(float number) {
method getNumberInsn (line 55) | public static AbstractInsnNode getNumberInsn(double number) {
method getIntegerFromInsn (line 62) | public static int getIntegerFromInsn(AbstractInsnNode insn) {
FILE: xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/utils/asm/ClassWrapper.java
class ClassWrapper (line 42) | public class ClassWrapper implements Opcodes {
method ClassWrapper (line 63) | public ClassWrapper(ClassReader reader, boolean libraryNode) {
method ClassWrapper (line 75) | public ClassWrapper(ClassNode classNode, boolean libraryNode) {
method getClassNode (line 88) | public ClassNode getClassNode() {
method setClassNode (line 92) | public void setClassNode(ClassNode classNode) {
method getName (line 96) | public String getName() {
method getSuperName (line 100) | public String getSuperName() {
method getInterfaceNames (line 104) | public List<String> getInterfaceNames() {
method getOriginalName (line 108) | public String getOriginalName() {
method isLibraryNode (line 112) | public boolean isLibraryNode() {
method getMethods (line 116) | public List<MethodWrapper> getMethods() {
method methodStream (line 120) | public Stream<MethodWrapper> methodStream() {
method getFields (line 124) | public List<FieldWrapper> getFields() {
method fieldStream (line 128) | public Stream<FieldWrapper> fieldStream() {
method getParents (line 132) | public List<ClassWrapper> getParents() {
method getChildren (line 136) | public List<ClassWrapper> getChildren() {
method addAccessFlags (line 144) | public void addAccessFlags(int flags) {
method removeAccessFlags (line 148) | public void removeAccessFlags(int flags) {
method isPublic (line 152) | public boolean isPublic() {
method isPrivate (line 156) | public boolean isPrivate() {
method isProtected (line 160) | public boolean isProtected() {
method isFinal (line 164) | public boolean isFinal() {
method isSuper (line 168) | public boolean isSuper() {
method isInterface (line 172) | public boolean isInterface() {
method isAbstract (line 176) | public boolean isAbstract() {
method isSynthetic (line 180) | public boolean isSynthetic() {
method isAnnotation (line 184) | public boolean isAnnotation() {
method isEnum (line 188) | public boolean isEnum() {
method isModule (line 192) | public boolean isModule() {
method isRecord (line 196) | public boolean isRecord() {
method isDeprecated (line 200) | public boolean isDeprecated() {
method addMethod (line 213) | public void addMethod(MethodNode methodNode) {
method addField (line 223) | public void addField(FieldNode fieldNode) {
method getMethodNode (line 228) | public MethodNode getMethodNode(String name, String desc) {
method getFieldNode (line 232) | public FieldNode getFieldNode(String name, String desc) {
method containsMethodNode (line 236) | public boolean containsMethodNode(String name, String desc) {
method containsFieldNode (line 240) | public boolean containsFieldNode(String name, String desc) {
method generateNextAllowedMethodName (line 244) | public String generateNextAllowedMethodName(Dictionary dictionary, Str...
method generateNextAllowedFieldName (line 252) | public String generateNextAllowedFieldName(Dictionary dictionary, Stri...
method allowsConstDy (line 263) | public boolean allowsConstDy() {
method allowsIndy (line 270) | public boolean allowsIndy() {
method allowsJsr (line 277) | public boolean allowsJsr() {
method hasVisibleAnnotations (line 281) | public boolean hasVisibleAnnotations() {
method computePoolCount (line 292) | public int computePoolCount() {
method addUtf8Const (line 307) | public void addUtf8Const(String s) {
method toByteArray (line 314) | public byte[] toByteArray() {
method from (line 344) | public static ClassWrapper from(ClassReader reader) {
method fromLib (line 348) | public static ClassWrapper fromLib(ClassReader reader) {
FILE: xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/utils/asm/FieldWrapper.java
class FieldWrapper (line 29) | public class FieldWrapper implements Opcodes {
method FieldWrapper (line 35) | public FieldWrapper(FieldNode fieldNode, ClassWrapper owner) {
method getFieldNode (line 46) | public FieldNode getFieldNode() {
method setFieldNode (line 50) | public void setFieldNode(FieldNode fieldNode) {
method getOriginalName (line 54) | public String getOriginalName() {
method getOriginalType (line 58) | public String getOriginalType() {
method getOwner (line 62) | public ClassWrapper getOwner() {
method addAccessFlags (line 70) | public void addAccessFlags(int flags) {
method removeAccessFlags (line 74) | public void removeAccessFlags(int flags) {
method isPublic (line 78) | public boolean isPublic() {
method isPrivate (line 82) | public boolean isPrivate() {
method isProtected (line 86) | public boolean isProtected() {
method isStatic (line 90) | public boolean isStatic() {
method isFinal (line 94) | public boolean isFinal() {
method isVolatile (line 98) | public boolean isVolatile() {
method isTransient (line 102) | public boolean isTransient() {
method isSynthetic (line 106) | public boolean isSynthetic() {
method isDeprecated (line 110) | public boolean isDeprecated() {
method from (line 118) | public static FieldWrapper from(FieldNode FieldNode, ClassWrapper owne...
method hasVisibleAnnotations (line 122) | public boolean hasVisibleAnnotations() {
FILE: xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/utils/asm/FieldWrappers.java
class FieldWrappers (line 24) | public class FieldWrappers {
method from (line 25) | public static List<FieldWrapper> from(ClassWrapper classWrapper) {
FILE: xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/utils/asm/MethodWrapper.java
class MethodWrapper (line 30) | public class MethodWrapper implements Opcodes {
method MethodWrapper (line 44) | public MethodWrapper(MethodNode methodNode, ClassWrapper owner) {
method getMethodNode (line 55) | public MethodNode getMethodNode() {
method setMethodNode (line 59) | public void setMethodNode(MethodNode methodNode) {
method getOriginalName (line 63) | public String getOriginalName() {
method getOriginalDescriptor (line 67) | public String getOriginalDescriptor() {
method getOwner (line 71) | public ClassWrapper getOwner() {
method addAccessFlags (line 79) | public void addAccessFlags(int flags) {
method removeAccessFlags (line 83) | public void removeAccessFlags(int flags) {
method isPublic (line 87) | public boolean isPublic() {
method isPrivate (line 91) | public boolean isPrivate() {
method isProtected (line 95) | public boolean isProtected() {
method isStatic (line 99) | public boolean isStatic() {
method isFinal (line 103) | public boolean isFinal() {
method isSynchronized (line 107) | public boolean isSynchronized() {
method isBridge (line 111) | public boolean isBridge() {
method isVarargs (line 115) | public boolean isVarargs() {
method isNative (line 119) | public boolean isNative() {
method isAbstract (line 123) | public boolean isAbstract() {
method isStrict (line 127) | public boolean isStrict() {
method isSynthetic (line 131) | public boolean isSynthetic() {
method isMandated (line 135) | public boolean isMandated() {
method isDeprecated (line 139) | public boolean isDeprecated() {
method hasInstructions (line 147) | public boolean hasInstructions() {
method hasVisibleAnnotations (line 151) | public boolean hasVisibleAnnotations() {
method getCodeSize (line 155) | public int getCodeSize() {
method getLeewaySize (line 161) | public int getLeewaySize() {
method allocateLocalVar (line 165) | public int allocateLocalVar(boolean twoWords) {
method from (line 170) | public static MethodWrapper from(MethodNode methodNode, ClassWrapper o...
FILE: xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/utils/asm/MethodWrappers.java
class MethodWrappers (line 24) | public class MethodWrappers {
method from (line 25) | public static List<MethodWrapper> from(ClassWrapper classWrapper) {
FILE: xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/utils/asm/RadonClassWriter.java
class RadonClassWriter (line 36) | public class RadonClassWriter extends ClassWriter {
method RadonClassWriter (line 39) | public RadonClassWriter(int flags) {
method getCommonSuperClass (line 43) | @Override
method deriveCommonSuperName (line 60) | private String deriveCommonSuperName(final String type1, final String ...
method isAssignableFrom (line 80) | private boolean isAssignableFrom(String type1, String type2) {
FILE: xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/utils/asm/RadonRemapper.java
class RadonRemapper (line 25) | public class RadonRemapper extends SimpleRemapper {
method RadonRemapper (line 26) | public RadonRemapper(Map<String, String> mappings) {
method mapFieldName (line 30) | @Override
FILE: xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/utils/asm/ResourceNameRemapper.java
class ResourceNameRemapper (line 30) | public class ResourceNameRemapper extends ClassVisitor {
method ResourceNameRemapper (line 34) | public ResourceNameRemapper(ClassVisitor visitor, Map<String, String> ...
method ResourceNameRemapper (line 38) | protected ResourceNameRemapper(int api, ClassVisitor visitor, Map<Stri...
method visitMethod (line 44) | @Override
class ResourceNameMethodRemapper (line 55) | class ResourceNameMethodRemapper extends MethodVisitor {
method ResourceNameMethodRemapper (line 56) | ResourceNameMethodRemapper(MethodVisitor visitor) {
method ResourceNameMethodRemapper (line 60) | ResourceNameMethodRemapper(int api, MethodVisitor visitor) {
method visitLdcInsn (line 64) | @Override
FILE: xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/utils/logging/RadonConsoleHandler.java
class RadonConsoleHandler (line 34) | public class RadonConsoleHandler extends StreamHandler {
method RadonConsoleHandler (line 40) | public RadonConsoleHandler() {
FILE: xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/utils/logging/RadonLogger.java
class RadonLogger (line 32) | public class RadonLogger {
method info (line 64) | public static void info(final String msg) {
method warn (line 73) | public static void warn(final String msg) {
method severe (line 82) | public static void severe(final String msg) {
FILE: xyz.itzsomebody.radon/src/test/java/me/itzsomebody/radon/transformers/TransformersTest.java
class TransformersTest (line 9) | public class TransformersTest {
method ensureTransformerExclusionTypeNonNull (line 10) | @Test
method ensureTransformerConfigNameNonNull (line 22) | @Test
method ensureTransformerExclusionTypeNameIsSameAsConfigName (line 33) | @Test
Condensed preview — 203 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (745K chars).
[
{
"path": ".editorconfig",
"chars": 11178,
"preview": "root = true\n\n[*]\ncharset = utf-8\nend_of_line = lf\nindent_size = 4\nindent_style = space\ninsert_final_newline = false\nmax_"
},
{
"path": ".gitignore",
"chars": 185,
"preview": "# Compiled class file\n*.class\n\n# Gradle\n.gradle/\nbuild/\n\n# Eclipse\n.setup/\nbin/\n.classpath\n.project\n\n# IntelliJ\n*.iml\n.i"
},
{
"path": ".travis.yml",
"chars": 93,
"preview": "language: java\ninstall: true\ndist: trusty\n\njdk:\n - oraclejdk11\n\nscript:\n - ./gradlew build\n"
},
{
"path": "CONTRIBUTING.md",
"chars": 6063,
"preview": "# Radon Contribution Guide\n\n## Table of Contents\n* [GitHub](#github)\n * [Issue Reports](#issue-reports)\n * [Pull R"
},
{
"path": "LICENSE",
"chars": 32472,
"preview": " GNU GENERAL PUBLIC LICENSE\n Version 3, 29 June 2007\n\n Copyright (C) 2007 Free "
},
{
"path": "README.md",
"chars": 9203,
"preview": "# [Abandoned] Radon Java Bytecode Obfuscator\n\n## Radon is no longer maintained\n\nIt's important to note that Radon is int"
},
{
"path": "build.gradle",
"chars": 1627,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "docs/changelog.md",
"chars": 1212,
"preview": "# Changelog\n\n## 3.0.0 - Full rewrite\nThere are multiple turning points with the release of Radon 3.0.0 compared to all p"
},
{
"path": "docs/exclusions.md",
"chars": 2413,
"preview": "# Exclusions\n\n**Note: You will need a basic understanding of internal class/method/field names to understand how Radon p"
},
{
"path": "docs/index.md",
"chars": 410,
"preview": "# Radon Java Obfuscator [](https://travis-ci.o"
},
{
"path": "gradle/wrapper/gradle-wrapper.properties",
"chars": 202,
"preview": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributi"
},
{
"path": "gradlew",
"chars": 5770,
"preview": "#!/usr/bin/env sh\n\n#\n# Copyright 2015 the original author or authors.\n#\n# Licensed under the Apache License, Version 2.0"
},
{
"path": "gradlew.bat",
"chars": 3058,
"preview": "@rem\r\n@rem Copyright 2015 the original author or authors.\r\n@rem\r\n@rem Licensed under the Apache License, Version 2.0 (th"
},
{
"path": "settings.gradle",
"chars": 901,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2020 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.codegen/README.md",
"chars": 219,
"preview": "# CodeGen\n\nThis module contains radon's bytecode code generation utility. This is intended to reduce some of the heavy r"
},
{
"path": "xyz.itzsomebody.codegen/build.gradle",
"chars": 917,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/BytecodeBlock.java",
"chars": 1711,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/GenerationContext.java",
"chars": 1285,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/Utils.java",
"chars": 3932,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/WrappedHandle.java",
"chars": 6220,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/WrappedType.java",
"chars": 8870,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/exceptions/UncompilableNodeException.java",
"chars": 987,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2020 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/expressions/IRExpression.java",
"chars": 5611,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/expressions/IRExpressions.java",
"chars": 19124,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/expressions/IRVariable.java",
"chars": 1679,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/expressions/flow/IRFlowStructure.java",
"chars": 1025,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/expressions/flow/IRForStructure.java",
"chars": 2307,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/expressions/flow/IRIfStructure.java",
"chars": 2172,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/expressions/flow/IRSwitchStructure.java",
"chars": 3633,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/expressions/flow/IRSynchronizedStructure.java",
"chars": 1569,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/expressions/flow/IRTryCatchStructure.java",
"chars": 2779,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/expressions/flow/IRWhileStructure.java",
"chars": 1998,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/expressions/predefined/IRArithmeticExpression.java",
"chars": 1663,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/expressions/predefined/IRArrayLengthExpression.java",
"chars": 1429,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/expressions/predefined/IRCastExpression.java",
"chars": 9164,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/expressions/predefined/IRConstantExpression.java",
"chars": 1326,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/expressions/predefined/IRGetArrayElementExpression.java",
"chars": 1529,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/expressions/predefined/IRGetFieldExpression.java",
"chars": 2017,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/expressions/predefined/IRInstanceOfExpression.java",
"chars": 1526,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/expressions/predefined/IRInvocationExpression.java",
"chars": 2630,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/expressions/predefined/IRInvokeDynamicExpression.java",
"chars": 2098,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/expressions/predefined/IRNegateExpression.java",
"chars": 1397,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/expressions/predefined/IRNewArrayExpression.java",
"chars": 2062,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/expressions/predefined/IRNewInstanceExpression.java",
"chars": 1915,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/expressions/predefined/IRReturnExpression.java",
"chars": 2328,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/expressions/predefined/IRSetArrayElementExpression.java",
"chars": 1723,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/expressions/predefined/IRSetFieldExpression.java",
"chars": 2257,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/expressions/predefined/IRSetVariableExpression.java",
"chars": 1609,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/expressions/predefined/IRThrowExceptionExpression.java",
"chars": 1454,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/instructions/BytecodeLabel.java",
"chars": 1260,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2020 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/instructions/CompilableNode.java",
"chars": 896,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2020 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/instructions/ConstantNode.java",
"chars": 7580,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/instructions/FieldAccessNode.java",
"chars": 2205,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/instructions/InvokeDynamicNode.java",
"chars": 2577,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/instructions/InvokeNode.java",
"chars": 2951,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/instructions/JumpNode.java",
"chars": 3630,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2020 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/instructions/NewArrayNode.java",
"chars": 1491,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/instructions/RegisterNode.java",
"chars": 4360,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2020 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/instructions/SimpleNode.java",
"chars": 7925,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2020 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/instructions/SwitchNode.java",
"chars": 1595,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.codegen/src/main/java/xyz/itzsomebody/codegen/instructions/TypeNode.java",
"chars": 1656,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.codegen/src/test/java/xyz/itzsomebody/codegen/UtilsTester.java",
"chars": 5262,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.codegen/src/test/java/xyz/itzsomebody/codegen/WrappedTypeTester.java",
"chars": 8819,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.codegen/src/test/java/xyz/itzsomebody/codegen/expressions/IRVariableTester.java",
"chars": 2232,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.codegen/src/test/java/xyz/itzsomebody/codegen/expressions/predefined/IRArithmeticExpressionTester.java",
"chars": 2541,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.codegen/src/test/java/xyz/itzsomebody/codegen/expressions/predefined/IRArrayLengthTester.java",
"chars": 2485,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.codegen/src/test/java/xyz/itzsomebody/codegen/expressions/predefined/IRCastExpressionTester.java",
"chars": 6488,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.codegen/src/test/java/xyz/itzsomebody/codegen/expressions/predefined/IRConstantTester.java",
"chars": 5404,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.codegen/src/test/java/xyz/itzsomebody/codegen/expressions/predefined/IRGetArrayElementExpressionTester.java",
"chars": 4660,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.codegen/src/test/java/xyz/itzsomebody/codegen/expressions/predefined/IRGetFieldExpressionTester.java",
"chars": 3272,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.codegen/src/test/java/xyz/itzsomebody/codegen/expressions/predefined/IRInstanceOfExpressionTester.java",
"chars": 1619,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.codegen/src/test/java/xyz/itzsomebody/codegen/expressions/predefined/IRInvocationExpressionTester.java",
"chars": 3059,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.codegen/src/test/java/xyz/itzsomebody/codegen/expressions/predefined/IRInvokeDynamicExpressionTester.java",
"chars": 4492,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.codegen/src/test/java/xyz/itzsomebody/codegen/expressions/predefined/IRNegateExpressionTester.java",
"chars": 2290,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.codegen/src/test/java/xyz/itzsomebody/codegen/expressions/predefined/IRNewArrayExpressionTester.java",
"chars": 2519,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.codegen/src/test/java/xyz/itzsomebody/codegen/expressions/predefined/IRNewInstanceExpressionTester.java",
"chars": 2352,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.codegen/src/test/java/xyz/itzsomebody/codegen/expressions/predefined/IRReturnExpressionTester.java",
"chars": 2188,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.codegen/src/test/java/xyz/itzsomebody/codegen/expressions/predefined/IRSetArrayElementExpressionTester.java",
"chars": 4752,
"preview": "package xyz.itzsomebody.codegen.expressions.predefined;\n\nimport org.junit.Assert;\nimport org.junit.Test;\nimport org.obje"
},
{
"path": "xyz.itzsomebody.codegen/src/test/java/xyz/itzsomebody/codegen/expressions/predefined/IRSetFieldExpressionTester.java",
"chars": 3618,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.codegen/src/test/java/xyz/itzsomebody/codegen/expressions/predefined/IRSetVariableExpressionTester.java",
"chars": 2791,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.codegen/src/test/java/xyz/itzsomebody/codegen/instructions/BytecodeLabelTester.java",
"chars": 1026,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.codegen/src/test/java/xyz/itzsomebody/codegen/instructions/ConstantNodeTester.java",
"chars": 3279,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.codegen/src/test/java/xyz/itzsomebody/codegen/instructions/FieldAccessNodeTester.java",
"chars": 2751,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.codegen/src/test/java/xyz/itzsomebody/codegen/instructions/InvokeDynamicNodeTester.java",
"chars": 3156,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.codegen/src/test/java/xyz/itzsomebody/codegen/instructions/InvokeNodeTester.java",
"chars": 3715,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.codegen/src/test/java/xyz/itzsomebody/codegen/instructions/NewArrayNodeTester.java",
"chars": 3665,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.codegen/src/test/java/xyz/itzsomebody/codegen/instructions/TypeNodeTester.java",
"chars": 1368,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.commons/README.md",
"chars": 60,
"preview": "# Commons\n\nTODO: put analyzers and instruction matcher here\n"
},
{
"path": "xyz.itzsomebody.commons/build.gradle",
"chars": 948,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.commons/src/main/java/xyz/itzsomebody/commons/InsnListModifier.java",
"chars": 4501,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.commons/src/main/java/xyz/itzsomebody/commons/MaxLocalsUpdater.java",
"chars": 2748,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.commons/src/main/java/xyz/itzsomebody/commons/analysis/callgraph/CallGraphAnalyzer.java",
"chars": 100,
"preview": "package xyz.itzsomebody.commons.analysis.callgraph;\n\npublic class CallGraphAnalyzer {\n // TODO\n}\n"
},
{
"path": "xyz.itzsomebody.commons/src/main/java/xyz/itzsomebody/commons/analysis/cfg/CFGAnalyzer.java",
"chars": 88,
"preview": "package xyz.itzsomebody.commons.analysis.cfg;\n\npublic class CFGAnalyzer {\n // TODO\n}\n"
},
{
"path": "xyz.itzsomebody.commons/src/main/java/xyz/itzsomebody/commons/analysis/frame/FrameAnalyzer.java",
"chars": 92,
"preview": "package xyz.itzsomebody.commons.analysis.frame;\n\npublic class FrameAnalyzer {\n // tODO\n}\n"
},
{
"path": "xyz.itzsomebody.commons/src/main/java/xyz/itzsomebody/commons/matcher/InstructionMatcher.java",
"chars": 3013,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.commons/src/main/java/xyz/itzsomebody/commons/matcher/InstructionPattern.java",
"chars": 1343,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.commons/src/main/java/xyz/itzsomebody/commons/matcher/rules/AccessFieldRule.java",
"chars": 2336,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.commons/src/main/java/xyz/itzsomebody/commons/matcher/rules/DoubleConstRule.java",
"chars": 1287,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.commons/src/main/java/xyz/itzsomebody/commons/matcher/rules/FloatConstRule.java",
"chars": 1318,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.commons/src/main/java/xyz/itzsomebody/commons/matcher/rules/InstructionRule.java",
"chars": 1000,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.commons/src/main/java/xyz/itzsomebody/commons/matcher/rules/IntConstRule.java",
"chars": 1517,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.commons/src/main/java/xyz/itzsomebody/commons/matcher/rules/InvocationRule.java",
"chars": 2374,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.commons/src/main/java/xyz/itzsomebody/commons/matcher/rules/LongConstRule.java",
"chars": 1281,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.commons/src/main/java/xyz/itzsomebody/commons/matcher/rules/OpcodeRule.java",
"chars": 1744,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.commons/src/main/java/xyz/itzsomebody/commons/matcher/rules/WildcardRule.java",
"chars": 1116,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.commons/src/test/java/xyz/itzsomebody/commons/InsnListModifierTester.java",
"chars": 3267,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.commons/src/test/java/xyz/itzsomebody/commons/MaxLocalsUpdaterTester.java",
"chars": 2711,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.commons/src/test/java/xyz/itzsomebody/commons/TestingUtils.java",
"chars": 2084,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.commons/src/test/java/xyz/itzsomebody/commons/matcher/InstructionMatcherTester.java",
"chars": 2358,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.commons/src/test/java/xyz/itzsomebody/commons/matcher/rules/AccessFieldRuleTester.java",
"chars": 1348,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.commons/src/test/java/xyz/itzsomebody/commons/matcher/rules/DoubleConstRuleTester.java",
"chars": 1508,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.commons/src/test/java/xyz/itzsomebody/commons/matcher/rules/FloatConstRuleTester.java",
"chars": 1523,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.commons/src/test/java/xyz/itzsomebody/commons/matcher/rules/IntConstRuleTester.java",
"chars": 1787,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.commons/src/test/java/xyz/itzsomebody/commons/matcher/rules/InvocationRuleTester.java",
"chars": 1358,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.commons/src/test/java/xyz/itzsomebody/commons/matcher/rules/LongConstRuleTester.java",
"chars": 1498,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.radon/build.gradle",
"chars": 2320,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/Radon.java",
"chars": 5503,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2020 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/RadonConstants.java",
"chars": 1235,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2020 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/RadonMain.java",
"chars": 8535,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2020 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/cli/CmdArgsParser.java",
"chars": 3327,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2020 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/cli/CmdSwitch.java",
"chars": 1342,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2020 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/config/ConfigurationParser.java",
"chars": 1682,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2020 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/config/DictionaryDeserializer.java",
"chars": 1391,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/config/ExclusionsDeserializer.java",
"chars": 1546,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/config/ObfConfig.java",
"chars": 2192,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2020 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/config/TransformerDeserializer.java",
"chars": 3215,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2020 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/dictionaries/Dictionary.java",
"chars": 1605,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2020 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/dictionaries/DictionaryFactory.java",
"chars": 1766,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/dictionaries/defined/AlphaNumericDictionary.java",
"chars": 1510,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/dictionaries/defined/AlphabeticalDictionary.java",
"chars": 1452,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2020 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/dictionaries/defined/CustomCharsetDictionary.java",
"chars": 1509,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/dictionaries/defined/RandomUnicodeDictionary.java",
"chars": 1604,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/dictionaries/defined/SpacesDictionary.java",
"chars": 1512,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/dictionaries/defined/UnrecognizedDictionary.java",
"chars": 1525,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/exceptions/FatalRadonException.java",
"chars": 1216,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2020 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/exceptions/MissingClassException.java",
"chars": 1769,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2020 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/exceptions/MissingResourceException.java",
"chars": 1146,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2020 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/exceptions/PreventableRadonException.java",
"chars": 1226,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2020 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/exclusions/Exclusion.java",
"chars": 3009,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2020 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/exclusions/ExclusionManager.java",
"chars": 1831,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2020 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/transformers/Transformer.java",
"chars": 3727,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2020 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/transformers/Transformers.java",
"chars": 2212,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2020 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/transformers/exploiter/ExploiterTransformer.java",
"chars": 93,
"preview": "package xyz.itzsomebody.radon.transformers.exploiter;\n\npublic class ExploiterTransformer {\n}\n"
},
{
"path": "xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/transformers/flow/FlowTransformer.java",
"chars": 83,
"preview": "package xyz.itzsomebody.radon.transformers.flow;\n\npublic class FlowTransformer {\n}\n"
},
{
"path": "xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/transformers/math/NumberTransformer.java",
"chars": 85,
"preview": "package xyz.itzsomebody.radon.transformers.math;\n\npublic class NumberTransformer {\n}\n"
},
{
"path": "xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/transformers/misc/AddBridgeAccess.java",
"chars": 2111,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/transformers/misc/AddDeprecatedAccess.java",
"chars": 3196,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/transformers/misc/AddSyntheticAccess.java",
"chars": 3229,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/transformers/misc/AddTrashClasses.java",
"chars": 8591,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/transformers/misc/AntiDebugger.java",
"chars": 7147,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/transformers/misc/ExpirationKillSwitch.java",
"chars": 5585,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/transformers/misc/Packer.java",
"chars": 806,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/transformers/misc/Renamer.java",
"chars": 14299,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/transformers/misc/ResourceRenamer.java",
"chars": 3108,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/transformers/misc/ScrambleLineNumbers.java",
"chars": 2271,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/transformers/misc/ShuffleMembers.java",
"chars": 2331,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/transformers/misc/Watermarker.java",
"chars": 8369,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/transformers/references/ReferenceTransformer.java",
"chars": 94,
"preview": "package xyz.itzsomebody.radon.transformers.references;\n\npublic class ReferenceTransformer {\n}\n"
},
{
"path": "xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/transformers/shrinker/RemoveDeprecatedAccess.java",
"chars": 94,
"preview": "package xyz.itzsomebody.radon.transformers.shrinker;\n\npublic class RemoveDeprecatedAccess {\n}\n"
},
{
"path": "xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/transformers/shrinker/RemoveInnerClassesAttribute.java",
"chars": 99,
"preview": "package xyz.itzsomebody.radon.transformers.shrinker;\n\npublic class RemoveInnerClassesAttribute {\n}\n"
},
{
"path": "xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/transformers/shrinker/RemoveInvisibleAnnotations.java",
"chars": 98,
"preview": "package xyz.itzsomebody.radon.transformers.shrinker;\n\npublic class RemoveInvisibleAnnotations {\n}\n"
},
{
"path": "xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/transformers/shrinker/RemoveInvisibleParameterAnnotations.java",
"chars": 107,
"preview": "package xyz.itzsomebody.radon.transformers.shrinker;\n\npublic class RemoveInvisibleParameterAnnotations {\n}\n"
},
{
"path": "xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/transformers/shrinker/RemoveInvisibleTypeAnnotations.java",
"chars": 102,
"preview": "package xyz.itzsomebody.radon.transformers.shrinker;\n\npublic class RemoveInvisibleTypeAnnotations {\n}\n"
},
{
"path": "xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/transformers/shrinker/RemoveLineNumbers.java",
"chars": 89,
"preview": "package xyz.itzsomebody.radon.transformers.shrinker;\n\npublic class RemoveLineNumbers {\n}\n"
},
{
"path": "xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/transformers/shrinker/RemoveLocalVariableTable.java",
"chars": 96,
"preview": "package xyz.itzsomebody.radon.transformers.shrinker;\n\npublic class RemoveLocalVariableTable {\n}\n"
},
{
"path": "xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/transformers/shrinker/RemoveOuterMethodAttribute.java",
"chars": 98,
"preview": "package xyz.itzsomebody.radon.transformers.shrinker;\n\npublic class RemoveOuterMethodAttribute {\n}\n"
},
{
"path": "xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/transformers/shrinker/RemoveSignatureAttribute.java",
"chars": 96,
"preview": "package xyz.itzsomebody.radon.transformers.shrinker;\n\npublic class RemoveSignatureAttribute {\n}\n"
},
{
"path": "xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/transformers/shrinker/RemoveSourceDebugAttribute.java",
"chars": 98,
"preview": "package xyz.itzsomebody.radon.transformers.shrinker;\n\npublic class RemoveSourceDebugAttribute {\n}\n"
},
{
"path": "xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/transformers/shrinker/RemoveSourceFileAttribute.java",
"chars": 97,
"preview": "package xyz.itzsomebody.radon.transformers.shrinker;\n\npublic class RemoveSourceFileAttribute {\n}\n"
},
{
"path": "xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/transformers/shrinker/RemoveSyntheticAccessAttribute.java",
"chars": 102,
"preview": "package xyz.itzsomebody.radon.transformers.shrinker;\n\npublic class RemoveSyntheticAccessAttribute {\n}\n"
},
{
"path": "xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/transformers/shrinker/RemoveUnknownAttributes.java",
"chars": 95,
"preview": "package xyz.itzsomebody.radon.transformers.shrinker;\n\npublic class RemoveUnknownAttributes {\n}\n"
},
{
"path": "xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/transformers/shrinker/RemoveVisibleAnnotations.java",
"chars": 96,
"preview": "package xyz.itzsomebody.radon.transformers.shrinker;\n\npublic class RemoveVisibleAnnotations {\n}\n"
},
{
"path": "xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/transformers/shrinker/RemoveVisibleParameterAnnotations.java",
"chars": 105,
"preview": "package xyz.itzsomebody.radon.transformers.shrinker;\n\npublic class RemoveVisibleParameterAnnotations {\n}\n"
},
{
"path": "xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/transformers/shrinker/RemoveVisibleTypeAnnotations.java",
"chars": 100,
"preview": "package xyz.itzsomebody.radon.transformers.shrinker;\n\npublic class RemoveVisibleTypeAnnotations {\n}\n"
},
{
"path": "xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/transformers/shrinker/ShrinkerTransformer.java",
"chars": 91,
"preview": "package xyz.itzsomebody.radon.transformers.shrinker;\n\npublic class ShrinkerTransformer {\n}\n"
},
{
"path": "xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/transformers/strings/AESPCBCEncryptor.java",
"chars": 10295,
"preview": "package xyz.itzsomebody.radon.transformers.strings;\n\nimport java.nio.charset.StandardCharsets;\nimport java.util.Arrays;\n"
},
{
"path": "xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/transformers/strings/AESPCBCStringEncryption.java",
"chars": 86299,
"preview": "package xyz.itzsomebody.radon.transformers.strings;\n\nimport org.objectweb.asm.FieldVisitor;\nimport org.objectweb.asm.Lab"
},
{
"path": "xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/transformers/strings/StaticFieldStrPool.java",
"chars": 4564,
"preview": "package xyz.itzsomebody.radon.transformers.strings;\n\nimport org.objectweb.asm.tree.FieldNode;\nimport org.objectweb.asm.t"
},
{
"path": "xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/transformers/strings/Str2Base64Encoding.java",
"chars": 5652,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2020 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/transformers/strings/StringTransformer.java",
"chars": 1644,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2020 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/utils/IOUtils.java",
"chars": 2417,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2020 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/utils/JarLoader.java",
"chars": 6043,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2020 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/utils/JarWriter.java",
"chars": 8292,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2020 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/utils/RandomUtils.java",
"chars": 3366,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2020 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/utils/asm/ASMUtils.java",
"chars": 2847,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/utils/asm/ClassWrapper.java",
"chars": 10752,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2020 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/utils/asm/FieldWrapper.java",
"chars": 3216,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2020 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/utils/asm/FieldWrappers.java",
"chars": 1187,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2020 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/utils/asm/MethodWrapper.java",
"chars": 4664,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2020 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/utils/asm/MethodWrappers.java",
"chars": 1197,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2020 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/utils/asm/RadonClassWriter.java",
"chars": 3769,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2020 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/utils/asm/RadonRemapper.java",
"chars": 1224,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/utils/asm/ResourceNameRemapper.java",
"chars": 3382,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/utils/logging/RadonConsoleHandler.java",
"chars": 1938,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2020 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.radon/src/main/java/xyz/itzsomebody/radon/utils/logging/RadonLogger.java",
"chars": 2739,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2020 ItzSomebody\n *\n * This program is free software: you "
},
{
"path": "xyz.itzsomebody.radon/src/main/resources/asm-license.txt",
"chars": 1597,
"preview": " ASM: a very small and fast Java bytecode manipulation framework\n Copyright (c) 2000-2011 INRIA, France Telecom\n All rig"
},
{
"path": "xyz.itzsomebody.radon/src/main/resources/jackson-license.txt",
"chars": 11358,
"preview": "\n Apache License\n Version 2.0, January 2004\n "
},
{
"path": "xyz.itzsomebody.radon/src/main/resources/radon-license.txt",
"chars": 32472,
"preview": " GNU GENERAL PUBLIC LICENSE\n Version 3, 29 June 2007\n\n Copyright (C) 2007 Free "
},
{
"path": "xyz.itzsomebody.radon/src/test/java/me/itzsomebody/radon/transformers/TransformersTest.java",
"chars": 1994,
"preview": "package me.itzsomebody.radon.transformers;\n\nimport org.junit.Assert;\nimport org.junit.Test;\nimport xyz.itzsomebody.radon"
},
{
"path": "xyz.itzsomebody.radon.template/build.gradle",
"chars": 836,
"preview": "/*\n * Radon - An open-source Java obfuscator\n * Copyright (C) 2021 ItzSomebody\n *\n * This program is free software: you "
}
]
// ... and 3 more files (download for full content)
About this extraction
This page contains the full source code of the ItzSomebody/Radon GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 203 files (684.8 KB), approximately 165.3k tokens, and a symbol index with 1138 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.