diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..64de781 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,289 @@ +[*] +charset = utf-8 +end_of_line = crlf +indent_size = 4 +indent_style = space +insert_final_newline = false +max_line_length = 120 +tab_width = 4 +trim_trailing_whitespace = false +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_visual_guides = none +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_deconstruction_list_components = true +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_align_types_in_multi_catch = true +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_add_space = false +ij_java_block_comment_at_first_column = true +ij_java_builder_methods = none +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_deconstruction_list_wrap = normal +ij_java_do_not_indent_top_level_class_members = false +ij_java_do_not_wrap_after_single_annotation = false +ij_java_do_not_wrap_after_single_annotation_in_parameter = 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_builder_methods_indents = false +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_add_space_on_reformat = 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_multi_catch_types_wrap = normal +ij_java_names_count_to_use_import_on_demand = 3 +ij_java_new_line_after_lparen_in_annotation = false +ij_java_new_line_after_lparen_in_deconstruction_pattern = true +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_annotation = false +ij_java_rparen_on_new_line_in_deconstruction_pattern = true +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_deconstruction_list = 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_annotation_eq = 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_deconstruction_list = 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_record_header = 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 + +[.editorconfig] +ij_editorconfig_align_group_field_declarations = false +ij_editorconfig_space_after_colon = false +ij_editorconfig_space_after_comma = true +ij_editorconfig_space_before_colon = false +ij_editorconfig_space_before_comma = false +ij_editorconfig_spaces_around_assignment_operators = true diff --git a/src/main/java/org/parchmentmc/lodestone/LodestoneExtension.java b/src/main/java/org/parchmentmc/lodestone/LodestoneExtension.java index 7cacc1f..27bb494 100644 --- a/src/main/java/org/parchmentmc/lodestone/LodestoneExtension.java +++ b/src/main/java/org/parchmentmc/lodestone/LodestoneExtension.java @@ -31,6 +31,7 @@ public Property getMcVersion() { } private String resolvedMcVersion; + public Provider getResolvedMcVersion() { return mcVersion.map(mc -> { if (resolvedMcVersion != null) diff --git a/src/main/java/org/parchmentmc/lodestone/LodestonePlugin.java b/src/main/java/org/parchmentmc/lodestone/LodestonePlugin.java index 5517069..ccb9327 100644 --- a/src/main/java/org/parchmentmc/lodestone/LodestonePlugin.java +++ b/src/main/java/org/parchmentmc/lodestone/LodestonePlugin.java @@ -3,8 +3,8 @@ */ package org.parchmentmc.lodestone; -import org.gradle.api.Project; import org.gradle.api.Plugin; +import org.gradle.api.Project; public class LodestonePlugin implements Plugin { public void apply(Project project) { diff --git a/src/main/java/org/parchmentmc/lodestone/asm/CodeCleaner.java b/src/main/java/org/parchmentmc/lodestone/asm/CodeCleaner.java index a9d915a..54abef4 100644 --- a/src/main/java/org/parchmentmc/lodestone/asm/CodeCleaner.java +++ b/src/main/java/org/parchmentmc/lodestone/asm/CodeCleaner.java @@ -1,31 +1,33 @@ package org.parchmentmc.lodestone.asm; -import org.gradle.internal.impldep.org.testng.collections.Maps; import org.objectweb.asm.Opcodes; -import org.parchmentmc.feather.metadata.*; -import java.util.*; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.LinkedHashSet; +import java.util.LinkedList; +import java.util.Map; +import java.util.Queue; +import java.util.Set; +import java.util.TreeSet; import java.util.function.Consumer; -public class CodeCleaner -{ +public class CodeCleaner { - private final CodeTree codeTree; + private final CodeTree codeTree; - public CodeCleaner(final CodeTree codeTree) - { + public CodeCleaner(final CodeTree codeTree) { this.codeTree = codeTree; } - public void cleanClass(final MutableClassInfo classMetadata) - { + public void cleanClass(final MutableClassInfo classMetadata) { doCleanClass( - classMetadata.getName() + classMetadata.getName() ); } - private void doCleanClass(final String className) - { + private void doCleanClass(final String className) { MutableClassInfo info = codeTree.getClassMetadataFor(className); if (info == null || info.isResolved()) return; @@ -63,59 +65,50 @@ private void doCleanClass(final String className) info.setResolved(true); } - private MutableMethodReferenceInfo doWalkBouncers(final MutableMethodInfo methodMetadata, String className) - { + private MutableMethodReferenceInfo doWalkBouncers(final MutableMethodInfo methodMetadata, String className) { final MutableClassInfo classMetadata = codeTree.getClassMetadataFor(className); - if (!classMetadata.getMethods().isEmpty()) - { + if (!classMetadata.getMethods().isEmpty()) { MutableMethodInfo ownerMethodMetadata = classMetadata.getMethods().get(methodMetadata.getMethod().getName() + methodMetadata.getMethod().getDesc()); if (ownerMethodMetadata != null && ( - (!ownerMethodMetadata.isFinal() && !ownerMethodMetadata.isPrivate()) || - //We ignore all final or private methods, they can not be overridden so no bouncer. - classMetadata.getName() - .equals(methodMetadata.getMethod().getOwner()) //We always execute this branch if the current method is owned by the current class (first level recursion). - )) - { - if (ownerMethodMetadata.getBouncer() != null) - { + (!ownerMethodMetadata.isFinal() && !ownerMethodMetadata.isPrivate()) || + //We ignore all final or private methods, they can not be overridden so no bouncer. + classMetadata.getName() + .equals(methodMetadata.getMethod().getOwner()) //We always execute this branch if the current method is owned by the current class (first level recursion). + )) { + if (ownerMethodMetadata.getBouncer() != null) { final Set overrides = findOverrides( - ownerMethodMetadata, - classMetadata.getName() + ownerMethodMetadata, + classMetadata.getName() ); - if (overrides.isEmpty()) - { + if (overrides.isEmpty()) { return new MutableMethodReferenceInfo( - classMetadata.getName(), - ownerMethodMetadata.getMethod().getName(), - ownerMethodMetadata.getMethod().getDesc(), - ownerMethodMetadata.getSignature() + classMetadata.getName(), + ownerMethodMetadata.getMethod().getName(), + ownerMethodMetadata.getMethod().getDesc(), + ownerMethodMetadata.getSignature() ); - } - else - { + } else { return overrides.iterator().next(); //We pick the first regardless of how many there are in there. //Most likely it is the one from the super class, but it is actually not that relevant. } } - for (final MutableMethodInfo ownerMethod : classMetadata.getMethods().values()) - { + for (final MutableMethodInfo ownerMethod : classMetadata.getMethods().values()) { final MutableMethodReferenceInfo target = ownerMethod.getBouncer() != null ? ownerMethod.getBouncer().getTarget() : null; if ( - target != null && - ownerMethodMetadata.getMethod().getName().equals(target.getName()) && - ownerMethodMetadata.getMethod().getDesc().equals(target.getDesc()) + target != null && + ownerMethodMetadata.getMethod().getName().equals(target.getName()) && + ownerMethodMetadata.getMethod().getDesc().equals(target.getDesc()) ) { - if (ownerMethod.getBouncer().getOwner() != null) - { + if (ownerMethod.getBouncer().getOwner() != null) { return ownerMethod.getBouncer().getOwner(); } final MutableMethodReferenceInfo newBouncerOwner = doWalkBouncers( - ownerMethod, - classMetadata.getName() + ownerMethod, + classMetadata.getName() ); if (newBouncerOwner != null && !newBouncerOwner.getOwner().equals(classMetadata.getName())) { @@ -144,68 +137,54 @@ private MutableMethodReferenceInfo doWalkBouncers(final MutableMethodInfo method return null; } - private Set findOverrides(MutableMethodInfo methodMetadata, String ownerName) - { + private Set findOverrides(MutableMethodInfo methodMetadata, String ownerName) { return doFindOverrides(methodMetadata, ownerName, new LinkedHashSet<>()); } - private Set doFindOverrides(MutableMethodInfo methodMetadata, String className, Set overrides) - { - if (methodMetadata.isStatic() || methodMetadata.isPrivate() || methodMetadata.getMethod().getName().startsWith("<")) - { + private Set doFindOverrides(MutableMethodInfo methodMetadata, String className, Set overrides) { + if (methodMetadata.isStatic() || methodMetadata.isPrivate() || methodMetadata.getMethod().getName().startsWith("<")) { return overrides; } final MutableClassInfo classMetadata = codeTree.getClassMetadataFor(className); - if (classMetadata == null) - { + if (classMetadata == null) { return overrides; } - if (classMetadata.getMethods() != null && !classMetadata.getMethods().isEmpty()) - { - for (MutableMethodInfo ownerMethodMetadata : classMetadata.getMethods().values()) - { + if (classMetadata.getMethods() != null && !classMetadata.getMethods().isEmpty()) { + for (MutableMethodInfo ownerMethodMetadata : classMetadata.getMethods().values()) { final MutableMethodReferenceInfo target = ownerMethodMetadata.getBouncer() != null ? ownerMethodMetadata.getBouncer().getTarget() : null; - if ( target != null && - methodMetadata.getMethod().getName().equals(target.getName()) && - methodMetadata.getMethod().getDesc().equals(target.getDesc())) - { + if (target != null && + methodMetadata.getMethod().getName().equals(target.getName()) && + methodMetadata.getMethod().getDesc().equals(target.getDesc())) { doFindOverrides(ownerMethodMetadata, classMetadata.getName(), overrides); } } MutableMethodInfo ownerMethodMetadata = classMetadata.getMethods().get(methodMetadata.getMethod().getName() + methodMetadata.getMethod().getDesc()); if (ownerMethodMetadata != null && ownerMethodMetadata != methodMetadata && ( - !ownerMethodMetadata.isFinal() && !ownerMethodMetadata.isPrivate() - )) - { - if (ownerMethodMetadata.getOverrides().isEmpty()) - { + !ownerMethodMetadata.isFinal() && !ownerMethodMetadata.isPrivate() + )) { + if (ownerMethodMetadata.getOverrides().isEmpty()) { overrides.add( - new MutableMethodReferenceInfo( - classMetadata.getName(), - ownerMethodMetadata.getMethod().getName(), - ownerMethodMetadata.getMethod().getDesc(), - ownerMethodMetadata.getSignature() - )); - } - else - { + new MutableMethodReferenceInfo( + classMetadata.getName(), + ownerMethodMetadata.getMethod().getName(), + ownerMethodMetadata.getMethod().getDesc(), + ownerMethodMetadata.getSignature() + )); + } else { overrides.addAll(ownerMethodMetadata.getOverrides()); } } } - if (classMetadata.getSuperName() != null) - { + if (classMetadata.getSuperName() != null) { doFindOverrides(methodMetadata, classMetadata.getSuperName(), overrides); } - if (classMetadata.getInterfaces() != null && !classMetadata.getInterfaces().isEmpty()) - { - for (final String interfaceName : classMetadata.getInterfaces()) - { + if (classMetadata.getInterfaces() != null && !classMetadata.getInterfaces().isEmpty()) { + for (final String interfaceName : classMetadata.getInterfaces()) { doFindOverrides(methodMetadata, interfaceName, overrides); } } @@ -226,16 +205,16 @@ private MutableMethodReferenceInfo doFindFirstOverride(MutableMethodInfo mtd, St MutableMethodInfo methodInOwner = ownerInfo.getMethods().get(mtd.getMethod().getName() + mtd.getMethod().getDesc()); if (codeTree.isGameClass(ownerInfo.getName()) && methodInOwner != null && methodInOwner != mtd && (methodInOwner.getAccess() & (Opcodes.ACC_FINAL | Opcodes.ACC_PRIVATE)) == 0) return new MutableMethodReferenceInfo( - ownerInfo.getName(), - methodInOwner.getMethod().getName(), - methodInOwner.getMethod().getDesc(), - methodInOwner.getSignature() + ownerInfo.getName(), + methodInOwner.getMethod().getName(), + methodInOwner.getMethod().getDesc(), + methodInOwner.getSignature() ); for (MutableMethodInfo m : ownerInfo.getMethods().values()) { MutableMethodReferenceInfo target = m.getBouncer() == null ? null : m.getBouncer().getTarget(); if (target != null && mtd.getMethod().getName().equals(target.getName()) - && mtd.getMethod().getDesc().equals(target.getDesc())) { + && mtd.getMethod().getDesc().equals(target.getDesc())) { MutableMethodReferenceInfo ret = doFindFirstOverride(m, ownerInfo.getName()); if (ret != null) return ret; @@ -280,9 +259,9 @@ private void resolveAbstract(MutableClassInfo cls) { if (info.getMethods() != null) info.getMethods().values().stream() - .filter(MutableMethodInfo::isAbstract) - .filter(mtd -> mtd.getOverrides() == null || mtd.getOverrides().isEmpty()) //We only want the roots - .forEach(mtd -> abs.put(mtd.getMethod().getName() + mtd.getMethod().getDesc(), info.getName())); + .filter(MutableMethodInfo::isAbstract) + .filter(mtd -> mtd.getOverrides() == null || mtd.getOverrides().isEmpty()) //We only want the roots + .forEach(mtd -> abs.put(mtd.getMethod().getName() + mtd.getMethod().getDesc(), info.getName())); if (info.getSuperName() != null) add.accept(info.getSuperName()); @@ -308,10 +287,10 @@ private void resolveAbstract(MutableClassInfo cls) { if (towner == null) continue; MutableMethodReferenceInfo target = new MutableMethodReferenceInfo( - towner, - mtd.getMethod().getName(), - mtd.getMethod().getDesc(), - mtd.getSignature() + towner, + mtd.getMethod().getName(), + mtd.getMethod().getDesc(), + mtd.getSignature() ); if (mtd.getOverrides() != null) { @@ -338,7 +317,7 @@ private void resolveRecord(MutableClassInfo mutableClassInfo) { MutableFieldInfo mutableFieldInfo = mutableClassInfo.getFields().get(mutableRecordInfo.getName()); if (mutableFieldInfo != null && !mutableFieldInfo.getGetters().isEmpty()) { mutableRecordInfo.getGetters().addAll( - mutableFieldInfo.getGetters() + mutableFieldInfo.getGetters() ); } } diff --git a/src/main/java/org/parchmentmc/lodestone/asm/CodeTree.java b/src/main/java/org/parchmentmc/lodestone/asm/CodeTree.java index 3db371f..402f2ff 100644 --- a/src/main/java/org/parchmentmc/lodestone/asm/CodeTree.java +++ b/src/main/java/org/parchmentmc/lodestone/asm/CodeTree.java @@ -15,21 +15,18 @@ import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; -public class CodeTree -{ - private final Set noneLibraryClasses = new HashSet<>(); - private final Map sources = new HashMap<>(); +public class CodeTree { + private final Set noneLibraryClasses = new HashSet<>(); + private final Map sources = new HashMap<>(); private final Map parsedClasses = new HashMap<>(); - public Set getNoneLibraryClasses() - { + public Set getNoneLibraryClasses() { return noneLibraryClasses; } public final void load(final Path path, final boolean library) throws IOException { - try(ZipInputStream zipInputStream = new ZipInputStream(Files.newInputStream(path))) - { + try (ZipInputStream zipInputStream = new ZipInputStream(Files.newInputStream(path))) { ZipEntry entry; while ((entry = zipInputStream.getNextEntry()) != null) { String name = entry.getName(); @@ -77,7 +74,7 @@ private static byte[] readStreamFully(InputStream is) throws IOException { ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(Math.max(8192, is.available())); byte[] buffer = new byte[8192]; int read; - while((read = is.read(buffer)) >= 0) { + while ((read = is.read(buffer)) >= 0) { byteArrayOutputStream.write(buffer, 0, read); } return byteArrayOutputStream.toByteArray(); diff --git a/src/main/java/org/parchmentmc/lodestone/asm/MutableBouncerInfo.java b/src/main/java/org/parchmentmc/lodestone/asm/MutableBouncerInfo.java index 1d94355..2a726e2 100644 --- a/src/main/java/org/parchmentmc/lodestone/asm/MutableBouncerInfo.java +++ b/src/main/java/org/parchmentmc/lodestone/asm/MutableBouncerInfo.java @@ -1,27 +1,22 @@ package org.parchmentmc.lodestone.asm; -public class MutableBouncerInfo -{ +public class MutableBouncerInfo { private final MutableMethodReferenceInfo target; - private MutableMethodReferenceInfo owner; + private MutableMethodReferenceInfo owner; - public MutableBouncerInfo(MutableMethodReferenceInfo target) - { + public MutableBouncerInfo(MutableMethodReferenceInfo target) { this.target = target; } - public MutableMethodReferenceInfo getTarget() - { + public MutableMethodReferenceInfo getTarget() { return target; } - public MutableMethodReferenceInfo getOwner() - { + public MutableMethodReferenceInfo getOwner() { return owner; } - public void setOwner(final MutableMethodReferenceInfo owner) - { + public void setOwner(final MutableMethodReferenceInfo owner) { this.owner = owner; } } diff --git a/src/main/java/org/parchmentmc/lodestone/asm/MutableClassInfo.java b/src/main/java/org/parchmentmc/lodestone/asm/MutableClassInfo.java index 443f71e..5f822c1 100644 --- a/src/main/java/org/parchmentmc/lodestone/asm/MutableClassInfo.java +++ b/src/main/java/org/parchmentmc/lodestone/asm/MutableClassInfo.java @@ -7,34 +7,38 @@ import org.objectweb.asm.tree.InvokeDynamicInsnNode; import org.objectweb.asm.tree.MethodNode; -import java.util.*; - -public class MutableClassInfo implements MutableSecuredObjectInfo -{ - private static final Handle LAMBDA_METAFACTORY = new Handle(Opcodes.H_INVOKESTATIC, - "java/lang/invoke/LambdaMetafactory", - "metafactory", - "(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;", - false); +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.TreeMap; + +public class MutableClassInfo implements MutableSecuredObjectInfo { + private static final Handle LAMBDA_METAFACTORY = new Handle(Opcodes.H_INVOKESTATIC, + "java/lang/invoke/LambdaMetafactory", + "metafactory", + "(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;", + false); private static final Handle LAMBDA_ALTMETAFACTORY = new Handle(Opcodes.H_INVOKESTATIC, - "java/lang/invoke/LambdaMetafactory", - "altMetafactory", - "(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;[Ljava/lang/Object;)Ljava/lang/invoke/CallSite;", - false); - - private final String name; - private final String superName; - private final List interfaces; - private final Integer access; - private final String signature; - private final Map fields; + "java/lang/invoke/LambdaMetafactory", + "altMetafactory", + "(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;[Ljava/lang/Object;)Ljava/lang/invoke/CallSite;", + false); + + private final String name; + private final String superName; + private final List interfaces; + private final Integer access; + private final String signature; + private final Map fields; private final Map methods; private final Map records; - private final boolean isRecord; - private boolean resolved = false; + private final boolean isRecord; + private boolean resolved = false; - MutableClassInfo(ClassNode node) - { + MutableClassInfo(ClassNode node) { this.name = node.name; this.superName = "java/lang/Object".equals(node.superName) ? null : node.superName; this.isRecord = "java/lang/Record".equals(node.superName); @@ -43,33 +47,23 @@ public class MutableClassInfo implements MutableSecuredObjectInfo this.signature = node.signature; this.records = new TreeMap<>(); - if (node.fields == null || node.fields.isEmpty()) - { + if (node.fields == null || node.fields.isEmpty()) { this.fields = null; - } - else - { + } else { this.fields = new TreeMap<>(); node.fields.forEach(fld -> this.fields.put(fld.name, new MutableFieldInfo(this, fld))); } - if (node.methods == null || node.methods.isEmpty()) - { + if (node.methods == null || node.methods.isEmpty()) { this.methods = null; - } - else - { + } else { //Gather Lambda methods so we can skip them in bouncers? Set lambdas = new HashSet<>(); - for (MethodNode mtd : node.methods) - { - for (AbstractInsnNode asn : (Iterable) () -> mtd.instructions.iterator()) - { - if (asn instanceof InvokeDynamicInsnNode) - { + for (MethodNode mtd : node.methods) { + for (AbstractInsnNode asn : (Iterable) () -> mtd.instructions.iterator()) { + if (asn instanceof InvokeDynamicInsnNode) { Handle target = getLambdaTarget((InvokeDynamicInsnNode) asn); - if (target != null) - { + if (target != null) { lambdas.add(target.getOwner() + '/' + target.getName() + target.getDesc()); } } @@ -77,84 +71,68 @@ public class MutableClassInfo implements MutableSecuredObjectInfo } this.methods = new TreeMap<>(); - for (MethodNode mtd : node.methods) - { + for (MethodNode mtd : node.methods) { String key = mtd.name + mtd.desc; this.methods.put(key, new MutableMethodInfo(this, mtd, lambdas.contains(this.name + '/' + key))); } } } - private Handle getLambdaTarget(InvokeDynamicInsnNode idn) - { - if (LAMBDA_METAFACTORY.equals(idn.bsm) && idn.bsmArgs != null && idn.bsmArgs.length == 3 && idn.bsmArgs[1] instanceof Handle) - { + private Handle getLambdaTarget(InvokeDynamicInsnNode idn) { + if (LAMBDA_METAFACTORY.equals(idn.bsm) && idn.bsmArgs != null && idn.bsmArgs.length == 3 && idn.bsmArgs[1] instanceof Handle) { return ((Handle) idn.bsmArgs[1]); } - if (LAMBDA_ALTMETAFACTORY.equals(idn.bsm) && idn.bsmArgs != null && idn.bsmArgs.length == 5 && idn.bsmArgs[1] instanceof Handle) - { + if (LAMBDA_ALTMETAFACTORY.equals(idn.bsm) && idn.bsmArgs != null && idn.bsmArgs.length == 5 && idn.bsmArgs[1] instanceof Handle) { return ((Handle) idn.bsmArgs[1]); } return null; } - public String getName() - { + public String getName() { return name; } - public String getSuperName() - { + public String getSuperName() { return superName == null ? "" : superName; } - public List getInterfaces() - { + public List getInterfaces() { return interfaces == null ? Collections.emptyList() : interfaces; } - public Integer getAccess() - { + public Integer getAccess() { return access == null ? 0 : access; } - public String getSignature() - { + public String getSignature() { return signature == null ? "" : signature; } - public Map getFields() - { + public Map getFields() { return fields == null ? Collections.emptyMap() : fields; } - public Map getMethods() - { + public Map getMethods() { return methods == null ? Collections.emptyMap() : methods; } - public boolean isRecord() - { + public boolean isRecord() { return isRecord; } - public boolean isResolved() - { + public boolean isResolved() { return resolved; } - public void setResolved(final boolean resolved) - { + public void setResolved(final boolean resolved) { this.resolved = resolved; } - public void addRecord(final String name, final String desc) - { + public void addRecord(final String name, final String desc) { this.records.put(name, new MutableRecordInfo(name, desc)); } - public Map getRecords() - { + public Map getRecords() { return records; } } diff --git a/src/main/java/org/parchmentmc/lodestone/asm/MutableFieldInfo.java b/src/main/java/org/parchmentmc/lodestone/asm/MutableFieldInfo.java index e38d014..0fcce26 100644 --- a/src/main/java/org/parchmentmc/lodestone/asm/MutableFieldInfo.java +++ b/src/main/java/org/parchmentmc/lodestone/asm/MutableFieldInfo.java @@ -5,16 +5,14 @@ import java.util.LinkedHashSet; import java.util.Set; -public class MutableFieldInfo implements MutableSecuredObjectInfo -{ - private final transient String name; - private final transient String desc; - private final Integer access; - private final String signature; +public class MutableFieldInfo implements MutableSecuredObjectInfo { + private final transient String name; + private final transient String desc; + private final Integer access; + private final String signature; private final Set getters = new LinkedHashSet<>(); - MutableFieldInfo(final MutableClassInfo classInfo, final FieldNode node) - { + MutableFieldInfo(final MutableClassInfo classInfo, final FieldNode node) { this.name = node.name; this.desc = node.desc; this.access = node.access == 0 ? null : node.access; @@ -25,28 +23,23 @@ public class MutableFieldInfo implements MutableSecuredObjectInfo } } - public String getName() - { + public String getName() { return name; } - public String getDesc() - { + public String getDesc() { return desc == null ? "" : desc; } - public Integer getAccess() - { + public Integer getAccess() { return access == null ? 0 : access; } - public String getSignature() - { + public String getSignature() { return signature == null ? "" : signature; } - public Set getGetters() - { + public Set getGetters() { return getters; } } diff --git a/src/main/java/org/parchmentmc/lodestone/asm/MutableMethodInfo.java b/src/main/java/org/parchmentmc/lodestone/asm/MutableMethodInfo.java index f94ae09..f672a8e 100644 --- a/src/main/java/org/parchmentmc/lodestone/asm/MutableMethodInfo.java +++ b/src/main/java/org/parchmentmc/lodestone/asm/MutableMethodInfo.java @@ -2,25 +2,29 @@ import org.objectweb.asm.Opcodes; import org.objectweb.asm.Type; -import org.objectweb.asm.tree.*; +import org.objectweb.asm.tree.AbstractInsnNode; +import org.objectweb.asm.tree.FieldInsnNode; +import org.objectweb.asm.tree.JumpInsnNode; +import org.objectweb.asm.tree.LabelNode; +import org.objectweb.asm.tree.LineNumberNode; +import org.objectweb.asm.tree.MethodInsnNode; +import org.objectweb.asm.tree.MethodNode; +import org.objectweb.asm.tree.VarInsnNode; -import java.util.Collections; import java.util.Set; -public class MutableMethodInfo implements MutableSecuredObjectInfo -{ - private final MutableClassInfo mutableClassInfo; - private final boolean isLambda; - private final MutableMethodReferenceInfo method; - private final Integer access; - private final String signature; - private final MutableBouncerInfo bouncer; - private String force; - private Set overrides; - private MutableMethodReferenceInfo parent; - - MutableMethodInfo(final MutableClassInfo mutableClassInfo, MethodNode node, boolean lambda) - { +public class MutableMethodInfo implements MutableSecuredObjectInfo { + private final MutableClassInfo mutableClassInfo; + private final boolean isLambda; + private final MutableMethodReferenceInfo method; + private final Integer access; + private final String signature; + private final MutableBouncerInfo bouncer; + private String force; + private Set overrides; + private MutableMethodReferenceInfo parent; + + MutableMethodInfo(final MutableClassInfo mutableClassInfo, MethodNode node, boolean lambda) { this.mutableClassInfo = mutableClassInfo; this.method = new MutableMethodReferenceInfo(mutableClassInfo.getName(), node.name, node.desc, node.signature); this.access = node.access == 0 ? null : node.access; @@ -28,66 +32,51 @@ public class MutableMethodInfo implements MutableSecuredObjectInfo this.isLambda = lambda; MutableBouncerInfo bounce = null; - if (!lambda && (node.access & (Opcodes.ACC_SYNTHETIC | Opcodes.ACC_BRIDGE)) != 0 && (node.access & Opcodes.ACC_STATIC) == 0) - { + if (!lambda && (node.access & (Opcodes.ACC_SYNTHETIC | Opcodes.ACC_BRIDGE)) != 0 && (node.access & Opcodes.ACC_STATIC) == 0) { AbstractInsnNode start = node.instructions.getFirst(); - if (start instanceof LabelNode && start.getNext() instanceof LineNumberNode) - { + if (start instanceof LabelNode && start.getNext() instanceof LineNumberNode) { start = start.getNext().getNext(); } - if (start instanceof VarInsnNode) - { + if (start instanceof VarInsnNode) { VarInsnNode n = (VarInsnNode) start; - if (n.var == 0 && n.getOpcode() == Opcodes.ALOAD) - { + if (n.var == 0 && n.getOpcode() == Opcodes.ALOAD) { AbstractInsnNode end = node.instructions.getLast(); - if (end instanceof LabelNode) - { + if (end instanceof LabelNode) { end = end.getPrevious(); } - if (end.getOpcode() >= Opcodes.IRETURN && end.getOpcode() <= Opcodes.RETURN) - { + if (end.getOpcode() >= Opcodes.IRETURN && end.getOpcode() <= Opcodes.RETURN) { end = end.getPrevious(); } - if (end instanceof MethodInsnNode) - { + if (end instanceof MethodInsnNode) { Type[] args = Type.getArgumentTypes(node.desc); int var = 1; int index = 0; start = start.getNext(); - while (start != end) - { - if (start instanceof VarInsnNode) - { - if (((VarInsnNode) start).var != var || index + 1 > args.length) - { + while (start != end) { + if (start instanceof VarInsnNode) { + if (((VarInsnNode) start).var != var || index + 1 > args.length) { //Arguments are switched around, so seems like lambda! end = null; break; } var += args[index++].getSize(); - } - else //noinspection StatementWithEmptyBody -> we want to break if we hit something else - if (start.getOpcode() == Opcodes.INSTANCEOF || start.getOpcode() == Opcodes.CHECKCAST) - { - //Valid! - } - else - { - // Anything else is invalid in a bouncer {As far as I know}, so we're most likely a lambda - end = null; - break; - } + } else //noinspection StatementWithEmptyBody -> we want to break if we hit something else + if (start.getOpcode() == Opcodes.INSTANCEOF || start.getOpcode() == Opcodes.CHECKCAST) { + //Valid! + } else { + // Anything else is invalid in a bouncer {As far as I know}, so we're most likely a lambda + end = null; + break; + } start = start.getNext(); } MethodInsnNode mtd = (MethodInsnNode) end; if (end != null && mtd.owner.equals(mutableClassInfo.getName()) - && Type.getArgumentsAndReturnSizes(node.desc) == Type.getArgumentsAndReturnSizes(mtd.desc)) - { + && Type.getArgumentsAndReturnSizes(node.desc) == Type.getArgumentsAndReturnSizes(mtd.desc)) { bounce = new MutableBouncerInfo(new MutableMethodReferenceInfo(mtd.owner, mtd.name, mtd.desc, null)); } } @@ -104,10 +93,10 @@ public class MutableMethodInfo implements MutableSecuredObjectInfo start = start.getNext().getNext(); if (start instanceof VarInsnNode) { - VarInsnNode instructionNode = (VarInsnNode)start; + VarInsnNode instructionNode = (VarInsnNode) start; if (instructionNode.var == 0 && instructionNode.getOpcode() == Opcodes.ALOAD) { if (start.getNext() instanceof FieldInsnNode) { - FieldInsnNode fieldInstruction = (FieldInsnNode)start.getNext(); + FieldInsnNode fieldInstruction = (FieldInsnNode) start.getNext(); if (fieldInstruction.owner.equals(mutableClassInfo.getName()) && fieldInstruction.getNext() != null) { AbstractInsnNode ret = fieldInstruction.getNext(); if (ret instanceof JumpInsnNode || (ret.getOpcode() >= Opcodes.IRETURN && ret.getOpcode() <= Opcodes.RETURN)) { @@ -123,63 +112,51 @@ public class MutableMethodInfo implements MutableSecuredObjectInfo } } - public MutableClassInfo getMutableClassInfo() - { + public MutableClassInfo getMutableClassInfo() { return mutableClassInfo; } - public boolean isLambda() - { + public boolean isLambda() { return isLambda; } - public MutableMethodReferenceInfo getMethod() - { + public MutableMethodReferenceInfo getMethod() { return method; } - public Integer getAccess() - { + public Integer getAccess() { return access == null ? 0 : access; } - public String getSignature() - { + public String getSignature() { return signature == null ? "" : signature; } - public MutableBouncerInfo getBouncer() - { + public MutableBouncerInfo getBouncer() { return bouncer; } - public String getForce() - { + public String getForce() { return force; } - public void setForce(final String force) - { + public void setForce(final String force) { this.force = force; } - public Set getOverrides() - { + public Set getOverrides() { return overrides; } - public void setOverrides(final Set overrides) - { + public void setOverrides(final Set overrides) { this.overrides = overrides; } - public MutableMethodReferenceInfo getParent() - { + public MutableMethodReferenceInfo getParent() { return parent; } - public void setParent(final MutableMethodReferenceInfo parent) - { + public void setParent(final MutableMethodReferenceInfo parent) { this.parent = parent; } } diff --git a/src/main/java/org/parchmentmc/lodestone/asm/MutableMethodReferenceInfo.java b/src/main/java/org/parchmentmc/lodestone/asm/MutableMethodReferenceInfo.java index cc621bb..b5d0636 100644 --- a/src/main/java/org/parchmentmc/lodestone/asm/MutableMethodReferenceInfo.java +++ b/src/main/java/org/parchmentmc/lodestone/asm/MutableMethodReferenceInfo.java @@ -1,66 +1,55 @@ package org.parchmentmc.lodestone.asm; -public class MutableMethodReferenceInfo implements Comparable -{ +public class MutableMethodReferenceInfo implements Comparable { private final String owner; private final String name; private final String desc; private final String signature; - MutableMethodReferenceInfo(String owner, String name, String desc, String signature) - { + MutableMethodReferenceInfo(String owner, String name, String desc, String signature) { this.owner = owner; this.name = name; this.desc = desc; this.signature = signature; } - public String getOwner() - { + public String getOwner() { return owner; } - public String getName() - { + public String getName() { return name; } - public String getDesc() - { + public String getDesc() { return desc == null ? "" : desc; } - public String getSignature() - { + public String getSignature() { return signature == null ? "" : signature; } @Override - public String toString() - { + public String toString() { return this.owner + '/' + this.name + this.desc; } @Override - public int hashCode() - { + public int hashCode() { return this.toString().hashCode(); } @Override - public boolean equals(Object o) - { + public boolean equals(Object o) { return o instanceof MutableMethodReferenceInfo && o.toString().equals(toString()); } - private int compare(int a, int b) - { + private int compare(int a, int b) { return a != 0 ? a : b; } @Override - public int compareTo(MutableMethodReferenceInfo o) - { + public int compareTo(MutableMethodReferenceInfo o) { return compare(owner.compareTo(o.owner), compare(name.compareTo(o.name), desc.compareTo(o.desc))); } } diff --git a/src/main/java/org/parchmentmc/lodestone/asm/MutableRecordInfo.java b/src/main/java/org/parchmentmc/lodestone/asm/MutableRecordInfo.java index f6db72a..497a51a 100644 --- a/src/main/java/org/parchmentmc/lodestone/asm/MutableRecordInfo.java +++ b/src/main/java/org/parchmentmc/lodestone/asm/MutableRecordInfo.java @@ -3,10 +3,9 @@ import java.util.HashSet; import java.util.Set; -public class MutableRecordInfo -{ - private final String name; - private final String desc; +public class MutableRecordInfo { + private final String name; + private final String desc; private final Set getters = new HashSet<>(); public MutableRecordInfo(final String name, final String desc) { @@ -14,18 +13,15 @@ public MutableRecordInfo(final String name, final String desc) { this.desc = desc; } - public String getName() - { + public String getName() { return name; } - public String getDesc() - { + public String getDesc() { return desc; } - public Set getGetters() - { + public Set getGetters() { return getters; } } diff --git a/src/main/java/org/parchmentmc/lodestone/converter/BouncingTargetConverter.java b/src/main/java/org/parchmentmc/lodestone/converter/BouncingTargetConverter.java index 6bbf6ed..dcb8485 100644 --- a/src/main/java/org/parchmentmc/lodestone/converter/BouncingTargetConverter.java +++ b/src/main/java/org/parchmentmc/lodestone/converter/BouncingTargetConverter.java @@ -4,8 +4,7 @@ import org.parchmentmc.feather.metadata.BouncingTargetMetadataBuilder; import org.parchmentmc.lodestone.asm.MutableBouncerInfo; -public class BouncingTargetConverter -{ +public class BouncingTargetConverter { public BouncingTargetMetadata convert(final MutableBouncerInfo bouncerInfo) { final ReferenceConverter methodReferenceConverter = new ReferenceConverter(); @@ -13,8 +12,8 @@ public BouncingTargetMetadata convert(final MutableBouncerInfo bouncerInfo) { return null; return BouncingTargetMetadataBuilder.create() - .withTarget(methodReferenceConverter.convert(bouncerInfo.getTarget())) - .withOwner(methodReferenceConverter.convert(bouncerInfo.getOwner())) - .build(); + .withTarget(methodReferenceConverter.convert(bouncerInfo.getTarget())) + .withOwner(methodReferenceConverter.convert(bouncerInfo.getOwner())) + .build(); } } diff --git a/src/main/java/org/parchmentmc/lodestone/converter/ClassConverter.java b/src/main/java/org/parchmentmc/lodestone/converter/ClassConverter.java index 43582a0..1f2354f 100644 --- a/src/main/java/org/parchmentmc/lodestone/converter/ClassConverter.java +++ b/src/main/java/org/parchmentmc/lodestone/converter/ClassConverter.java @@ -7,28 +7,26 @@ import java.util.stream.Collectors; -public class ClassConverter -{ +public class ClassConverter { - public ClassMetadata convert(final MutableClassInfo classInfo) - { + public ClassMetadata convert(final MutableClassInfo classInfo) { final MethodConverter methodConverter = new MethodConverter(); final FieldConverter fieldConverter = new FieldConverter(); final RecordConverter recordConverter = new RecordConverter(); final ClassMetadataBuilder classMetadataBuilder = ClassMetadataBuilder.create() - .withName(NamedBuilder.create().withObfuscated(classInfo.getName()).build()) - .withSuperName(NamedBuilder.create().withObfuscated(classInfo.getSuperName()).build()) - .withSecuritySpecifications(classInfo.getAccess()) - .withSignature(NamedBuilder.create().withObfuscated(classInfo.getSignature()).build()) - .withInterfaces(classInfo.getInterfaces().stream().map(interfaceName -> NamedBuilder.create().withObfuscated(interfaceName).build()).collect(Collectors.toSet())) - .withFields(classInfo.getFields().values().stream().map(fieldInfo -> fieldConverter.convert(classInfo, fieldInfo)).collect(Collectors.toSet())) - .withMethods(classInfo.getMethods().values().stream().map(methodInfo -> methodConverter.convert(classInfo, methodInfo)).collect(Collectors.toSet())) - .withRecords( - classInfo.getRecords().values().stream().map(recordInfo -> recordConverter.convert(classInfo, recordInfo)).collect( - Collectors.toSet()) - ) - .withIsRecord(classInfo.isRecord()); + .withName(NamedBuilder.create().withObfuscated(classInfo.getName()).build()) + .withSuperName(NamedBuilder.create().withObfuscated(classInfo.getSuperName()).build()) + .withSecuritySpecifications(classInfo.getAccess()) + .withSignature(NamedBuilder.create().withObfuscated(classInfo.getSignature()).build()) + .withInterfaces(classInfo.getInterfaces().stream().map(interfaceName -> NamedBuilder.create().withObfuscated(interfaceName).build()).collect(Collectors.toSet())) + .withFields(classInfo.getFields().values().stream().map(fieldInfo -> fieldConverter.convert(classInfo, fieldInfo)).collect(Collectors.toSet())) + .withMethods(classInfo.getMethods().values().stream().map(methodInfo -> methodConverter.convert(classInfo, methodInfo)).collect(Collectors.toSet())) + .withRecords( + classInfo.getRecords().values().stream().map(recordInfo -> recordConverter.convert(classInfo, recordInfo)).collect( + Collectors.toSet()) + ) + .withIsRecord(classInfo.isRecord()); if (classInfo.getName().contains("$")) { final String outerName = classInfo.getName().substring(0, classInfo.getName().lastIndexOf("$")); diff --git a/src/main/java/org/parchmentmc/lodestone/converter/FieldConverter.java b/src/main/java/org/parchmentmc/lodestone/converter/FieldConverter.java index 1c9f80b..3812058 100644 --- a/src/main/java/org/parchmentmc/lodestone/converter/FieldConverter.java +++ b/src/main/java/org/parchmentmc/lodestone/converter/FieldConverter.java @@ -6,16 +6,14 @@ import org.parchmentmc.lodestone.asm.MutableClassInfo; import org.parchmentmc.lodestone.asm.MutableFieldInfo; -public class FieldConverter -{ - public FieldMetadata convert(final MutableClassInfo classInfo, final MutableFieldInfo fieldInfo) - { +public class FieldConverter { + public FieldMetadata convert(final MutableClassInfo classInfo, final MutableFieldInfo fieldInfo) { return FieldMetadataBuilder.create() - .withName(NamedBuilder.create().withObfuscated(fieldInfo.getName()).build()) - .withDescriptor(NamedBuilder.create().withObfuscated(fieldInfo.getDesc()).build()) - .withSignature(NamedBuilder.create().withObfuscated(fieldInfo.getSignature()).build()) - .withSecuritySpecification(fieldInfo.getAccess()) - .withOwner(NamedBuilder.create().withObfuscated(classInfo.getName()).build()) - .build(); + .withName(NamedBuilder.create().withObfuscated(fieldInfo.getName()).build()) + .withDescriptor(NamedBuilder.create().withObfuscated(fieldInfo.getDesc()).build()) + .withSignature(NamedBuilder.create().withObfuscated(fieldInfo.getSignature()).build()) + .withSecuritySpecification(fieldInfo.getAccess()) + .withOwner(NamedBuilder.create().withObfuscated(classInfo.getName()).build()) + .build(); } } diff --git a/src/main/java/org/parchmentmc/lodestone/converter/MethodConverter.java b/src/main/java/org/parchmentmc/lodestone/converter/MethodConverter.java index b220076..784277a 100644 --- a/src/main/java/org/parchmentmc/lodestone/converter/MethodConverter.java +++ b/src/main/java/org/parchmentmc/lodestone/converter/MethodConverter.java @@ -9,23 +9,21 @@ import java.util.LinkedHashSet; import java.util.stream.Collectors; -public class MethodConverter -{ - public MethodMetadata convert(final MutableClassInfo classInfo, final MutableMethodInfo mutableMethodInfo) - { +public class MethodConverter { + public MethodMetadata convert(final MutableClassInfo classInfo, final MutableMethodInfo mutableMethodInfo) { final ReferenceConverter methodReferenceConverter = new ReferenceConverter(); final BouncingTargetConverter bouncingTargetConverter = new BouncingTargetConverter(); return MethodMetadataBuilder.create() - .withName(NamedBuilder.create().withObfuscated(mutableMethodInfo.getMethod().getName()).build()) - .withOwner(NamedBuilder.create().withObfuscated(classInfo.getName()).build()) - .withDescriptor(NamedBuilder.create().withObfuscated(mutableMethodInfo.getMethod().getDesc()).build()) - .withSignature(NamedBuilder.create().withObfuscated(mutableMethodInfo.getSignature()).build()) - .withSecuritySpecification(mutableMethodInfo.getAccess()) - .withLambda(mutableMethodInfo.isLambda()) - .withOverrides(mutableMethodInfo.getOverrides().stream().map(methodReferenceConverter::convert).collect(Collectors.toCollection(LinkedHashSet::new))) - .withParent(methodReferenceConverter.convert(mutableMethodInfo.getParent())) - .withBouncingTarget(bouncingTargetConverter.convert(mutableMethodInfo.getBouncer())) - .build(); + .withName(NamedBuilder.create().withObfuscated(mutableMethodInfo.getMethod().getName()).build()) + .withOwner(NamedBuilder.create().withObfuscated(classInfo.getName()).build()) + .withDescriptor(NamedBuilder.create().withObfuscated(mutableMethodInfo.getMethod().getDesc()).build()) + .withSignature(NamedBuilder.create().withObfuscated(mutableMethodInfo.getSignature()).build()) + .withSecuritySpecification(mutableMethodInfo.getAccess()) + .withLambda(mutableMethodInfo.isLambda()) + .withOverrides(mutableMethodInfo.getOverrides().stream().map(methodReferenceConverter::convert).collect(Collectors.toCollection(LinkedHashSet::new))) + .withParent(methodReferenceConverter.convert(mutableMethodInfo.getParent())) + .withBouncingTarget(bouncingTargetConverter.convert(mutableMethodInfo.getBouncer())) + .build(); } } diff --git a/src/main/java/org/parchmentmc/lodestone/converter/RecordConverter.java b/src/main/java/org/parchmentmc/lodestone/converter/RecordConverter.java index 09cd6cb..a5da5b2 100644 --- a/src/main/java/org/parchmentmc/lodestone/converter/RecordConverter.java +++ b/src/main/java/org/parchmentmc/lodestone/converter/RecordConverter.java @@ -1,6 +1,5 @@ package org.parchmentmc.lodestone.converter; -import kotlin.jvm.internal.MutableLocalVariableReference; import org.parchmentmc.feather.metadata.RecordMetadata; import org.parchmentmc.feather.metadata.RecordMetadataBuilder; import org.parchmentmc.feather.metadata.ReferenceBuilder; @@ -13,10 +12,8 @@ import java.util.Iterator; -public class RecordConverter -{ - public RecordMetadata convert(final MutableClassInfo classInfo, final MutableRecordInfo recordInfo) - { +public class RecordConverter { + public RecordMetadata convert(final MutableClassInfo classInfo, final MutableRecordInfo recordInfo) { final ReferenceConverter referenceConverter = new ReferenceConverter(); final MutableFieldInfo mutableFieldInfo = classInfo.getFields().get(recordInfo.getName()); @@ -24,24 +21,24 @@ public RecordMetadata convert(final MutableClassInfo classInfo, final MutableRec final Named owner = NamedBuilder.create().withObfuscated(classInfo.getName()).build(); return RecordMetadataBuilder.create() - .withOwner(owner) - .withField( - ReferenceBuilder.create() - .withOwner(owner) - .withName(NamedBuilder.create().withObfuscated(recordInfo.getName()).build()) - .withDescriptor(NamedBuilder.create().withObfuscated(recordInfo.getDesc()).build()) - .build() - ) - .withGetter( - referenceConverter.convert(mutableMethodReferenceInfo) - ) - .build(); + .withOwner(owner) + .withField( + ReferenceBuilder.create() + .withOwner(owner) + .withName(NamedBuilder.create().withObfuscated(recordInfo.getName()).build()) + .withDescriptor(NamedBuilder.create().withObfuscated(recordInfo.getDesc()).build()) + .build() + ) + .withGetter( + referenceConverter.convert(mutableMethodReferenceInfo) + ) + .build(); } private static MutableMethodReferenceInfo getGetter(MutableFieldInfo fieldInfo) { final Iterator iterator = fieldInfo.getGetters().iterator(); MutableMethodReferenceInfo result = null; - while(iterator.hasNext()) { + while (iterator.hasNext()) { result = iterator.next(); } return result; diff --git a/src/main/java/org/parchmentmc/lodestone/converter/ReferenceConverter.java b/src/main/java/org/parchmentmc/lodestone/converter/ReferenceConverter.java index 469bd33..190c7f0 100644 --- a/src/main/java/org/parchmentmc/lodestone/converter/ReferenceConverter.java +++ b/src/main/java/org/parchmentmc/lodestone/converter/ReferenceConverter.java @@ -5,18 +5,16 @@ import org.parchmentmc.feather.named.NamedBuilder; import org.parchmentmc.lodestone.asm.MutableMethodReferenceInfo; -public class ReferenceConverter -{ - public Reference convert(final MutableMethodReferenceInfo refInfo) - { +public class ReferenceConverter { + public Reference convert(final MutableMethodReferenceInfo refInfo) { if (refInfo == null) return null; return ReferenceBuilder.create() - .withOwner(NamedBuilder.create().withObfuscated(refInfo.getOwner()).build()) - .withName(NamedBuilder.create().withObfuscated(refInfo.getName()).build()) - .withDescriptor(NamedBuilder.create().withObfuscated(refInfo.getDesc()).build()) - .withSignature(NamedBuilder.create().withObfuscated(refInfo.getSignature()).build()) - .build(); + .withOwner(NamedBuilder.create().withObfuscated(refInfo.getOwner()).build()) + .withName(NamedBuilder.create().withObfuscated(refInfo.getName()).build()) + .withDescriptor(NamedBuilder.create().withObfuscated(refInfo.getDesc()).build()) + .withSignature(NamedBuilder.create().withObfuscated(refInfo.getSignature()).build()) + .build(); } } diff --git a/src/main/java/org/parchmentmc/lodestone/tasks/DownloadLauncherMetadata.java b/src/main/java/org/parchmentmc/lodestone/tasks/DownloadLauncherMetadata.java index e0d1c39..8a667ce 100644 --- a/src/main/java/org/parchmentmc/lodestone/tasks/DownloadLauncherMetadata.java +++ b/src/main/java/org/parchmentmc/lodestone/tasks/DownloadLauncherMetadata.java @@ -12,20 +12,19 @@ import java.io.File; import java.io.IOException; -import java.net.MalformedURLException; import java.net.URL; import java.nio.channels.Channels; import java.nio.channels.FileChannel; import java.nio.channels.ReadableByteChannel; import java.time.OffsetDateTime; -import static java.nio.file.StandardOpenOption.*; +import static java.nio.file.StandardOpenOption.CREATE; +import static java.nio.file.StandardOpenOption.TRUNCATE_EXISTING; +import static java.nio.file.StandardOpenOption.WRITE; @SuppressWarnings("UnstableApiUsage") -public abstract class DownloadLauncherMetadata extends DefaultTask -{ - public DownloadLauncherMetadata() - { +public abstract class DownloadLauncherMetadata extends DefaultTask { + public DownloadLauncherMetadata() { this.getOutput().convention(getProject().getLayout().getBuildDirectory().dir(getName()).map(d -> d.file("launcher.json"))); } @@ -42,8 +41,7 @@ void download() throws IOException { target.getParentFile().mkdirs(); try (final ReadableByteChannel input = Channels.newChannel(launcherUrl.openStream()); - final FileChannel output = FileChannel.open(target.toPath(), WRITE, CREATE, TRUNCATE_EXISTING)) - { + final FileChannel output = FileChannel.open(target.toPath(), WRITE, CREATE, TRUNCATE_EXISTING)) { output.transferFrom(input, 0, Long.MAX_VALUE); } } diff --git a/src/main/java/org/parchmentmc/lodestone/tasks/DownloadVersion.java b/src/main/java/org/parchmentmc/lodestone/tasks/DownloadVersion.java index 62eb37f..277ee3b 100644 --- a/src/main/java/org/parchmentmc/lodestone/tasks/DownloadVersion.java +++ b/src/main/java/org/parchmentmc/lodestone/tasks/DownloadVersion.java @@ -22,25 +22,21 @@ import static java.nio.file.StandardOpenOption.*; -public abstract class DownloadVersion extends MinecraftVersionTask -{ - public DownloadVersion() - { +public abstract class DownloadVersion extends MinecraftVersionTask { + public DownloadVersion() { this.getInput().convention(getProject().getLayout().getBuildDirectory().dir(getName()).flatMap(d -> d.file(this.getMcVersion().map(s -> s + ".json")))); this.getOutput().convention(getProject().getLayout().getBuildDirectory().dir(getName()).flatMap(s -> s.dir(this.getMcVersion()))); } @SuppressWarnings("ResultOfMethodCallIgnored") @TaskAction - void download() throws IOException - { + void download() throws IOException { OfflineChecker.checkOffline(getProject()); final Gson gson = DownloadLauncherMetadata.getLauncherManifestGson(); final VersionManifest versionManifest; - try (FileReader reader = new FileReader(this.getInput().getAsFile().get())) - { + try (FileReader reader = new FileReader(this.getInput().getAsFile().get())) { versionManifest = gson.fromJson(reader, VersionManifest.class); } @@ -50,8 +46,7 @@ void download() throws IOException outputDirectory.delete(); outputDirectory.mkdirs(); - for (Map.Entry entry : versionManifest.getDownloads().entrySet()) - { + for (Map.Entry entry : versionManifest.getDownloads().entrySet()) { VersionManifest.DownloadInfo fileInfo = entry.getValue(); final URL downloadUrl = new URL(fileInfo.getUrl()); @@ -60,24 +55,21 @@ void download() throws IOException target.getParentFile().mkdirs(); try (final ReadableByteChannel input = Channels.newChannel(downloadUrl.openStream()); - final FileChannel output = FileChannel.open(target.toPath(), WRITE, CREATE, TRUNCATE_EXISTING)) - { + final FileChannel output = FileChannel.open(target.toPath(), WRITE, CREATE, TRUNCATE_EXISTING)) { output.transferFrom(input, 0, Long.MAX_VALUE); } } final File librariesDirectory = new File(outputDirectory, "libraries"); librariesDirectory.mkdirs(); - for (final Library library : versionManifest.getLibraries()) - { + for (final Library library : versionManifest.getLibraries()) { final File targetFile = new File(librariesDirectory, Objects.requireNonNull(library.getDownloads().getArtifact(), "No artifact was available.").getPath()); targetFile.getParentFile().mkdirs(); final URL targetUrl = new URL(library.getDownloads().getArtifact().getUrl()); targetFile.getParentFile().mkdirs(); try (final ReadableByteChannel input = Channels.newChannel(targetUrl.openStream()); - final FileChannel output = FileChannel.open(targetFile.toPath(), WRITE, CREATE, TRUNCATE_EXISTING)) - { + final FileChannel output = FileChannel.open(targetFile.toPath(), WRITE, CREATE, TRUNCATE_EXISTING)) { output.transferFrom(input, 0, Long.MAX_VALUE); } } diff --git a/src/main/java/org/parchmentmc/lodestone/tasks/DownloadVersionMetadata.java b/src/main/java/org/parchmentmc/lodestone/tasks/DownloadVersionMetadata.java index f4b0eac..956b3a2 100644 --- a/src/main/java/org/parchmentmc/lodestone/tasks/DownloadVersionMetadata.java +++ b/src/main/java/org/parchmentmc/lodestone/tasks/DownloadVersionMetadata.java @@ -2,11 +2,15 @@ import com.google.gson.Gson; import org.gradle.api.file.RegularFileProperty; -import org.gradle.api.tasks.*; +import org.gradle.api.tasks.InputFile; +import org.gradle.api.tasks.OutputFile; +import org.gradle.api.tasks.TaskAction; import org.parchmentmc.feather.manifests.LauncherManifest; import org.parchmentmc.lodestone.util.OfflineChecker; -import java.io.*; +import java.io.File; +import java.io.FileReader; +import java.io.IOException; import java.net.URL; import java.nio.channels.Channels; import java.nio.channels.FileChannel; @@ -14,10 +18,8 @@ import static java.nio.file.StandardOpenOption.*; -public abstract class DownloadVersionMetadata extends MinecraftVersionTask -{ - public DownloadVersionMetadata() - { +public abstract class DownloadVersionMetadata extends MinecraftVersionTask { + public DownloadVersionMetadata() { this.getInput().convention(getProject().getLayout().getBuildDirectory().dir(getName()).map(d -> d.file("launcher.json"))); this.getOutput().convention(getProject().getLayout().getBuildDirectory().dir(getName()).flatMap(d -> d.file(this.getMcVersion().map(s -> s + ".json")))); } @@ -36,29 +38,26 @@ void download() throws IOException { final File source = this.getInput().getAsFile().get(); final LauncherManifest launcherManifest; - try (FileReader reader = new FileReader(source)) - { + try (FileReader reader = new FileReader(source)) { launcherManifest = gson.fromJson(reader, LauncherManifest.class); } final String selectedVersion = resolveMinecraftVersion(getMcVersion().get(), launcherManifest); final LauncherManifest.VersionData versionData = launcherManifest.getVersions().stream().filter(v -> v.getId().equals(selectedVersion)).findFirst() - .orElseThrow(() -> new IllegalStateException("Missing minecraft version: " + selectedVersion)); + .orElseThrow(() -> new IllegalStateException("Missing minecraft version: " + selectedVersion)); final String versionUrl = versionData.getUrl(); final URL url = new URL(versionUrl); target.getParentFile().mkdirs(); try (final ReadableByteChannel input = Channels.newChannel(url.openStream()); - final FileChannel output = FileChannel.open(target.toPath(), WRITE, CREATE, TRUNCATE_EXISTING)) - { + final FileChannel output = FileChannel.open(target.toPath(), WRITE, CREATE, TRUNCATE_EXISTING)) { output.transferFrom(input, 0, Long.MAX_VALUE); } } public static String resolveMinecraftVersion(String mcVersion, LauncherManifest launcherManifest) { - switch (mcVersion) - { + switch (mcVersion) { case "latest_snapshot": return launcherManifest.getLatest().getSnapshot(); case "latest_release": @@ -68,17 +67,14 @@ public static String resolveMinecraftVersion(String mcVersion, LauncherManifest final String latestRelease = launcherManifest.getLatest().getRelease(); final LauncherManifest.VersionData latestSnapshotData = launcherManifest.getVersions().stream().filter(v -> v.getId().equals(latestSnapshot)).findFirst() - .orElseThrow(() -> new IllegalStateException("Missing minecraft version: " + latestSnapshot)); + .orElseThrow(() -> new IllegalStateException("Missing minecraft version: " + latestSnapshot)); final LauncherManifest.VersionData latestReleaseData = launcherManifest.getVersions().stream().filter(v -> v.getId().equals(latestRelease)).findFirst() - .orElseThrow(() -> new IllegalStateException("Missing minecraft version: " + latestRelease)); + .orElseThrow(() -> new IllegalStateException("Missing minecraft version: " + latestRelease)); - if (latestSnapshotData.getReleaseTime().isBefore(latestReleaseData.getReleaseTime())) - { + if (latestSnapshotData.getReleaseTime().isBefore(latestReleaseData.getReleaseTime())) { return latestRelease; - } - else - { + } else { return latestSnapshot; } } diff --git a/src/main/java/org/parchmentmc/lodestone/tasks/ExtractMetadataFromJarFiles.java b/src/main/java/org/parchmentmc/lodestone/tasks/ExtractMetadataFromJarFiles.java index 691fb2e..5dbbe55 100644 --- a/src/main/java/org/parchmentmc/lodestone/tasks/ExtractMetadataFromJarFiles.java +++ b/src/main/java/org/parchmentmc/lodestone/tasks/ExtractMetadataFromJarFiles.java @@ -23,10 +23,8 @@ import java.util.stream.Collectors; import java.util.stream.Stream; -public abstract class ExtractMetadataFromJarFiles extends ExtractMetadataTask -{ - public ExtractMetadataFromJarFiles() - { +public abstract class ExtractMetadataFromJarFiles extends ExtractMetadataTask { + public ExtractMetadataFromJarFiles() { this.getOutput().convention(getProject().getLayout().getBuildDirectory().dir(getName()).map(d -> d.file("metadata.json"))); } @@ -38,10 +36,8 @@ protected SourceMetadata extractMetadata(File clientJarFile) throws IOException codeTree.load(clientJarFile.toPath(), false); PathMatcher matcher = FileSystems.getDefault().getPathMatcher("regex:.+\\.jar"); - try (Stream libraries = Files.find(librariesDirectory.toPath(), 999, (path, basicFileAttributes) -> basicFileAttributes.isRegularFile() && matcher.matches(path))) - { - for (Path libraryFile : libraries.collect(Collectors.toSet())) - { + try (Stream libraries = Files.find(librariesDirectory.toPath(), 999, (path, basicFileAttributes) -> basicFileAttributes.isRegularFile() && matcher.matches(path))) { + for (Path libraryFile : libraries.collect(Collectors.toSet())) { codeTree.load(libraryFile, true); } } @@ -78,11 +74,11 @@ private static SourceMetadata adaptClassTypes(final SourceMetadata sourceMetadat private static SourceMetadata adaptInnerOuterClassList(final SourceMetadata sourceMetadata) { final Map namedClassMetadataMap = sourceMetadata.getClasses() - .stream() - .collect(Collectors.toMap( - WithName::getName, - ClassMetadataBuilder::create - )); + .stream() + .collect(Collectors.toMap( + WithName::getName, + ClassMetadataBuilder::create + )); namedClassMetadataMap.values().forEach(classMetadata -> { final Named outerName = classMetadata.getOwner(); @@ -93,15 +89,15 @@ private static SourceMetadata adaptInnerOuterClassList(final SourceMetadata sour }); return SourceMetadataBuilder.create() - .withSpecVersion(sourceMetadata.getSpecificationVersion()) - .withMinecraftVersion(sourceMetadata.getMinecraftVersion()) - .withClasses(namedClassMetadataMap.values() - .stream() - .filter(classMetadataBuilder -> classMetadataBuilder.getOwner().isEmpty()) - .map(ClassMetadataBuilder::build) - .collect(Collectors.toCollection(LinkedHashSet::new)) - ) - .build(); + .withSpecVersion(sourceMetadata.getSpecificationVersion()) + .withMinecraftVersion(sourceMetadata.getMinecraftVersion()) + .withClasses(namedClassMetadataMap.values() + .stream() + .filter(classMetadataBuilder -> classMetadataBuilder.getOwner().isEmpty()) + .map(ClassMetadataBuilder::build) + .collect(Collectors.toCollection(LinkedHashSet::new)) + ) + .build(); } @InputDirectory diff --git a/src/main/java/org/parchmentmc/lodestone/tasks/MergeMetadata.java b/src/main/java/org/parchmentmc/lodestone/tasks/MergeMetadata.java index 2b7af57..aa0a994 100644 --- a/src/main/java/org/parchmentmc/lodestone/tasks/MergeMetadata.java +++ b/src/main/java/org/parchmentmc/lodestone/tasks/MergeMetadata.java @@ -20,19 +20,16 @@ import java.util.Map; import java.util.stream.Collectors; -public abstract class MergeMetadata extends MinecraftVersionTask -{ +public abstract class MergeMetadata extends MinecraftVersionTask { - public MergeMetadata() - { + public MergeMetadata() { this.getOutput().convention(getProject().getLayout().getBuildDirectory().dir(getName()).map(d -> d.file("merged.json"))); } @OutputFile public abstract RegularFileProperty getOutput(); - private static SourceMetadata adaptTypes(final SourceMetadata sourceMetadata) - { + private static SourceMetadata adaptTypes(final SourceMetadata sourceMetadata) { final Map obfToMojClassNameMap = new HashMap<>(); final Map obfKeyToMojMethodNameMap = new HashMap<>(); final Map obfKeyToMojFieldNameMap = new HashMap<>(); @@ -45,16 +42,15 @@ private static SourceMetadata adaptTypes(final SourceMetadata sourceMetadata) final SourceMetadataBuilder sourceMetadataBuilder = SourceMetadataBuilder.create(); sourceMetadataBuilder.withSpecVersion(sourceMetadata.getSpecificationVersion()) - .withMinecraftVersion(sourceMetadata.getMinecraftVersion()); + .withMinecraftVersion(sourceMetadata.getMinecraftVersion()); - for (final ClassMetadata aClass : sourceMetadata.getClasses()) - { + for (final ClassMetadata aClass : sourceMetadata.getClasses()) { sourceMetadataBuilder.addClass( - adaptSignatures( - aClass, - obfToMojClassNameMap, - obfKeyToMojMethodNameMap - ) + adaptSignatures( + aClass, + obfToMojClassNameMap, + obfKeyToMojMethodNameMap + ) ); } @@ -71,17 +67,16 @@ private static SourceMetadata adaptTypes(final SourceMetadata sourceMetadata) final SourceMetadataBuilder bouncerRemappedDataBuilder = SourceMetadataBuilder.create(); bouncerRemappedDataBuilder.withSpecVersion(sourceMetadata.getSpecificationVersion()) - .withMinecraftVersion(sourceMetadata.getMinecraftVersion()); + .withMinecraftVersion(sourceMetadata.getMinecraftVersion()); - for (final ClassMetadata aClass : signatureRemappedData.getClasses()) - { + for (final ClassMetadata aClass : signatureRemappedData.getClasses()) { bouncerRemappedDataBuilder.addClass( - adaptReferences( - aClass, - obfToMojClassNameMap, - obfKeyToMojMethodNameMap, - obfKeyToMojFieldNameMap - ) + adaptReferences( + aClass, + obfToMojClassNameMap, + obfKeyToMojMethodNameMap, + obfKeyToMojFieldNameMap + ) ); } @@ -89,182 +84,169 @@ private static SourceMetadata adaptTypes(final SourceMetadata sourceMetadata) } private static ClassMetadata adaptSignatures( - final ClassMetadata classMetadata, - final Map obfToMojNameMap, - final Map obfKeyToMojMethodNameMap - ) - { + final ClassMetadata classMetadata, + final Map obfToMojNameMap, + final Map obfKeyToMojMethodNameMap + ) { final Map obfToMojMethodNameMap = obfKeyToMojMethodNameMap.entrySet().stream().collect(Collectors.toMap( - Map.Entry::getKey, - e -> e.getValue().getName().getMojangName().orElseThrow(() -> new IllegalStateException("Missing mojang name")) + Map.Entry::getKey, + e -> e.getValue().getName().getMojangName().orElseThrow(() -> new IllegalStateException("Missing mojang name")) )); final ASMRemapper remapper = new ASMRemapper( - obfToMojNameMap, - obfToMojMethodNameMap + obfToMojNameMap, + obfToMojMethodNameMap ); final ClassMetadataBuilder classMetadataBuilder = ClassMetadataBuilder.create(classMetadata) - .withInnerClasses(classMetadata.getInnerClasses().stream() - .map(inner -> adaptSignatures(inner, obfToMojNameMap, obfKeyToMojMethodNameMap)) - .collect(Collectors.toSet())) - .withMethods(classMetadata.getMethods().stream() - .map(method -> { - final MethodMetadataBuilder builder = MethodMetadataBuilder.create(method); - - if (!method.getOwner().hasMojangName() && method.getOwner().hasObfuscatedName()) - { - builder.withOwner( - NamedBuilder.create(method.getOwner()) - .withMojang( - obfToMojNameMap.getOrDefault( - method.getOwner() - .getObfuscatedName() - .orElseThrow(() -> new IllegalStateException("Missing obfuscated method owner name")), - method.getOwner() - .getObfuscatedName() - .orElseThrow(() -> new IllegalStateException("Missing obfuscated method owner name")) - ) - ) - .build() - ); - } - - if (!method.getDescriptor().hasMojangName() && method.getDescriptor().hasObfuscatedName()) - { - builder.withDescriptor( - NamedBuilder.create(method.getDescriptor()) - .withMojang( - remapper.mapMethodDesc( - method.getDescriptor() - .getObfuscatedName() - .orElseThrow(() -> new IllegalStateException("Missing obfuscated method descriptor.")) - ) - ) - .build() - ); - } - - if (!method.getSignature().hasMojangName() && method.getSignature().hasObfuscatedName()) - { - builder.withSignature( - NamedBuilder.create(method.getSignature()) - .withMojang( - remapper.mapSignature( - method.getSignature() - .getObfuscatedName() - .orElseThrow(() -> new IllegalStateException("Missing obfuscated method signature.")), - false - ) - ) - .build() - ); - } - return builder.build(); - }) - .collect(Collectors.toSet())) - .withFields(classMetadata.getFields().stream() - .map(field -> { - final FieldMetadataBuilder fieldMetadataBuilder = FieldMetadataBuilder.create(field); - - if (!field.getDescriptor().hasMojangName() && field.getDescriptor().hasObfuscatedName()) - { - fieldMetadataBuilder.withDescriptor( - NamedBuilder.create(field.getDescriptor()) - .withMojang( - remapper.mapMethodDesc( - field.getDescriptor() - .getObfuscatedName() - .orElseThrow(() -> new IllegalStateException("Missing obfuscated field descriptor.")) - ) - ) - .build() - ); - } - - if (field.getSignature().hasObfuscatedName() && !field.getSignature().hasMojangName()) - { - fieldMetadataBuilder.withSignature( - NamedBuilder.create(field.getSignature()) - .withMojang( - remapper.mapSignature( - field.getSignature().getObfuscatedName().orElseThrow(() -> new IllegalStateException("Missing obfuscated field signature")), - true - ) - ) - .build() - ); - } - - return fieldMetadataBuilder.build(); - }) - .collect(Collectors.toSet())) - .withRecords(classMetadata.getRecords().stream() - .map(record -> { - final RecordMetadataBuilder builder = RecordMetadataBuilder.create(record); - - if (!record.getOwner().hasMojangName() && record.getOwner().hasObfuscatedName()) - { - builder.withOwner( - NamedBuilder.create(record.getOwner()) - .withMojang( - obfToMojNameMap.getOrDefault( - record.getOwner() - .getObfuscatedName() - .orElseThrow(() -> new IllegalStateException("Missing obfuscated record owner name")), - record.getOwner() - .getObfuscatedName() - .orElseThrow(() -> new IllegalStateException("Missing obfuscated record owner name")) - ) - ) - .build() - ); - } - - return builder.build(); - }) - .collect(Collectors.toSet())); - - - if (!classMetadata.getSuperName().hasMojangName() && classMetadata.getSuperName().hasObfuscatedName()) - { + .withInnerClasses(classMetadata.getInnerClasses().stream() + .map(inner -> adaptSignatures(inner, obfToMojNameMap, obfKeyToMojMethodNameMap)) + .collect(Collectors.toSet())) + .withMethods(classMetadata.getMethods().stream() + .map(method -> { + final MethodMetadataBuilder builder = MethodMetadataBuilder.create(method); + + if (!method.getOwner().hasMojangName() && method.getOwner().hasObfuscatedName()) { + builder.withOwner( + NamedBuilder.create(method.getOwner()) + .withMojang( + obfToMojNameMap.getOrDefault( + method.getOwner() + .getObfuscatedName() + .orElseThrow(() -> new IllegalStateException("Missing obfuscated method owner name")), + method.getOwner() + .getObfuscatedName() + .orElseThrow(() -> new IllegalStateException("Missing obfuscated method owner name")) + ) + ) + .build() + ); + } + + if (!method.getDescriptor().hasMojangName() && method.getDescriptor().hasObfuscatedName()) { + builder.withDescriptor( + NamedBuilder.create(method.getDescriptor()) + .withMojang( + remapper.mapMethodDesc( + method.getDescriptor() + .getObfuscatedName() + .orElseThrow(() -> new IllegalStateException("Missing obfuscated method descriptor.")) + ) + ) + .build() + ); + } + + if (!method.getSignature().hasMojangName() && method.getSignature().hasObfuscatedName()) { + builder.withSignature( + NamedBuilder.create(method.getSignature()) + .withMojang( + remapper.mapSignature( + method.getSignature() + .getObfuscatedName() + .orElseThrow(() -> new IllegalStateException("Missing obfuscated method signature.")), + false + ) + ) + .build() + ); + } + return builder.build(); + }) + .collect(Collectors.toSet())) + .withFields(classMetadata.getFields().stream() + .map(field -> { + final FieldMetadataBuilder fieldMetadataBuilder = FieldMetadataBuilder.create(field); + + if (!field.getDescriptor().hasMojangName() && field.getDescriptor().hasObfuscatedName()) { + fieldMetadataBuilder.withDescriptor( + NamedBuilder.create(field.getDescriptor()) + .withMojang( + remapper.mapMethodDesc( + field.getDescriptor() + .getObfuscatedName() + .orElseThrow(() -> new IllegalStateException("Missing obfuscated field descriptor.")) + ) + ) + .build() + ); + } + + if (field.getSignature().hasObfuscatedName() && !field.getSignature().hasMojangName()) { + fieldMetadataBuilder.withSignature( + NamedBuilder.create(field.getSignature()) + .withMojang( + remapper.mapSignature( + field.getSignature().getObfuscatedName().orElseThrow(() -> new IllegalStateException("Missing obfuscated field signature")), + true + ) + ) + .build() + ); + } + + return fieldMetadataBuilder.build(); + }) + .collect(Collectors.toSet())) + .withRecords(classMetadata.getRecords().stream() + .map(record -> { + final RecordMetadataBuilder builder = RecordMetadataBuilder.create(record); + + if (!record.getOwner().hasMojangName() && record.getOwner().hasObfuscatedName()) { + builder.withOwner( + NamedBuilder.create(record.getOwner()) + .withMojang( + obfToMojNameMap.getOrDefault( + record.getOwner() + .getObfuscatedName() + .orElseThrow(() -> new IllegalStateException("Missing obfuscated record owner name")), + record.getOwner() + .getObfuscatedName() + .orElseThrow(() -> new IllegalStateException("Missing obfuscated record owner name")) + ) + ) + .build() + ); + } + + return builder.build(); + }) + .collect(Collectors.toSet())); + + + if (!classMetadata.getSuperName().hasMojangName() && classMetadata.getSuperName().hasObfuscatedName()) { final String obfuscatedSuperName = - classMetadata.getSuperName().getObfuscatedName().orElseThrow(() -> new IllegalStateException("Missing obfuscated name on super class.")); + classMetadata.getSuperName().getObfuscatedName().orElseThrow(() -> new IllegalStateException("Missing obfuscated name on super class.")); final NamedBuilder namedBuilder = NamedBuilder.create(classMetadataBuilder.getSuperName()); namedBuilder.withMojang( - obfToMojNameMap.getOrDefault(obfuscatedSuperName, obfuscatedSuperName) + obfToMojNameMap.getOrDefault(obfuscatedSuperName, obfuscatedSuperName) ); classMetadataBuilder.withSuperName(namedBuilder.build()); } - if (!classMetadata.getSignature().hasMojangName() && classMetadata.getSignature().hasObfuscatedName()) - { + if (!classMetadata.getSignature().hasMojangName() && classMetadata.getSignature().hasObfuscatedName()) { final String obfuscatedSignature = - classMetadata.getSignature().getObfuscatedName().orElseThrow(() -> new IllegalStateException("Missing obfuscated signature on class.")); + classMetadata.getSignature().getObfuscatedName().orElseThrow(() -> new IllegalStateException("Missing obfuscated signature on class.")); final NamedBuilder namedBuilder = NamedBuilder.create(classMetadataBuilder.getSignature()); namedBuilder.withMojang( - remapper.mapSignature(obfuscatedSignature, false) + remapper.mapSignature(obfuscatedSignature, false) ); classMetadataBuilder.withSuperName(namedBuilder.build()); } - if (!classMetadata.getInterfaces().isEmpty()) - { + if (!classMetadata.getInterfaces().isEmpty()) { final LinkedHashSet interfaces = new LinkedHashSet<>(); classMetadata.getInterfaces().forEach(interfaceName -> { - if (interfaceName.hasObfuscatedName() && interfaceName.hasMojangName()) - { + if (interfaceName.hasObfuscatedName() && interfaceName.hasMojangName()) { interfaces.add(interfaceName); - } - else if (interfaceName.hasObfuscatedName() && !interfaceName.hasMojangName()) - { + } else if (interfaceName.hasObfuscatedName() && !interfaceName.hasMojangName()) { interfaces.add(NamedBuilder.create(interfaceName) - .withMojang(remapper.mapType( - interfaceName.getObfuscatedName().orElseThrow(() -> new IllegalStateException("Missing obfuscated interface name")) - )) - .build() + .withMojang(remapper.mapType( + interfaceName.getObfuscatedName().orElseThrow(() -> new IllegalStateException("Missing obfuscated interface name")) + )) + .build() ); } classMetadataBuilder.withInterfaces(interfaces); @@ -275,259 +257,230 @@ else if (interfaceName.hasObfuscatedName() && !interfaceName.hasMojangName()) } private static ClassMetadata adaptReferences( - final ClassMetadata classMetadata, - final Map obfToMojNameMap, - final Map obfKeyToMojMethodNameMap, - final Map obfKeyToMojFieldNameMap - ) - { + final ClassMetadata classMetadata, + final Map obfToMojNameMap, + final Map obfKeyToMojMethodNameMap, + final Map obfKeyToMojFieldNameMap + ) { final Map obfToMojMethodNameMap = obfKeyToMojMethodNameMap.entrySet().stream().collect(Collectors.toMap( - Map.Entry::getKey, - e -> e.getValue() - .getName() - .getMojangName() - .orElseGet(() -> e.getValue().getName().getObfuscatedName().orElseThrow(() -> new IllegalStateException("Missing mojang name"))) + Map.Entry::getKey, + e -> e.getValue() + .getName() + .getMojangName() + .orElseGet(() -> e.getValue().getName().getObfuscatedName().orElseThrow(() -> new IllegalStateException("Missing mojang name"))) )); final ASMRemapper remapper = new ASMRemapper( - obfToMojNameMap, - obfToMojMethodNameMap + obfToMojNameMap, + obfToMojMethodNameMap ); final ClassMetadataBuilder classMetadataBuilder = ClassMetadataBuilder.create(classMetadata) - .withInnerClasses(classMetadata.getInnerClasses().stream() - .map(inner -> adaptReferences(inner, obfToMojNameMap, obfKeyToMojMethodNameMap, obfKeyToMojFieldNameMap)) - .collect(Collectors.toSet())) - .withMethods(classMetadata.getMethods().stream() - .map(method -> { - final MethodMetadataBuilder builder = MethodMetadataBuilder.create(method); - - if (method.getBouncingTarget().isPresent()) - { - final BouncingTargetMetadataBuilder bouncingBuilder = BouncingTargetMetadataBuilder.create(); - - if (method.getBouncingTarget().get().getTarget().isPresent()) - { - final String obfuscatedKey = buildMethodKey( - method.getBouncingTarget().get().getTarget().get() - ); - final MethodMetadata methodMetadata = obfKeyToMojMethodNameMap.get(obfuscatedKey); - if (methodMetadata != null) - { - final ReferenceBuilder targetBuilder = createRemappedReference(remapper, methodMetadata); - bouncingBuilder.withTarget(targetBuilder.build()); - } - else - { - bouncingBuilder.withTarget( - method.getBouncingTarget().get().getTarget().get() + .withInnerClasses(classMetadata.getInnerClasses().stream() + .map(inner -> adaptReferences(inner, obfToMojNameMap, obfKeyToMojMethodNameMap, obfKeyToMojFieldNameMap)) + .collect(Collectors.toSet())) + .withMethods(classMetadata.getMethods().stream() + .map(method -> { + final MethodMetadataBuilder builder = MethodMetadataBuilder.create(method); + + if (method.getBouncingTarget().isPresent()) { + final BouncingTargetMetadataBuilder bouncingBuilder = BouncingTargetMetadataBuilder.create(); + + if (method.getBouncingTarget().get().getTarget().isPresent()) { + final String obfuscatedKey = buildMethodKey( + method.getBouncingTarget().get().getTarget().get() + ); + final MethodMetadata methodMetadata = obfKeyToMojMethodNameMap.get(obfuscatedKey); + if (methodMetadata != null) { + final ReferenceBuilder targetBuilder = createRemappedReference(remapper, methodMetadata); + bouncingBuilder.withTarget(targetBuilder.build()); + } else { + bouncingBuilder.withTarget( + method.getBouncingTarget().get().getTarget().get() + ); + } + } + + if (method.getBouncingTarget().get().getOwner().isPresent()) { + final String obfuscatedKey = buildMethodKey( + method.getBouncingTarget().get().getOwner().get() + ); + final MethodMetadata methodMetadata = obfKeyToMojMethodNameMap.get(obfuscatedKey); + if (methodMetadata != null) { + final ReferenceBuilder ownerBuilder = createRemappedReference(remapper, methodMetadata); + bouncingBuilder.withOwner(ownerBuilder.build()); + } else { + bouncingBuilder.withOwner( + method.getBouncingTarget().get().getTarget().get() + ); + } + } + + builder.withBouncingTarget(bouncingBuilder.build()); + } + + if (method.getParent().isPresent()) { + final String obfuscatedKey = buildMethodKey( + method.getParent().get() + ); + final MethodMetadata methodMetadata = obfKeyToMojMethodNameMap.get(obfuscatedKey); + + if (methodMetadata != null) { + final ReferenceBuilder parentBuilder = createRemappedReference(remapper, methodMetadata); + builder.withParent(parentBuilder.build()); + } + } + + if (!method.getOverrides().isEmpty()) { + final LinkedHashSet overrides = new LinkedHashSet<>(); + for (final Reference override : method.getOverrides()) { + final String obfuscatedKey = buildMethodKey( + override + ); + final MethodMetadata methodMetadata = obfKeyToMojMethodNameMap.get(obfuscatedKey); + + if (methodMetadata != null) { + final ReferenceBuilder overrideBuilder = createRemappedReference(remapper, methodMetadata); + overrides.add(overrideBuilder.build()); + } + } + + builder.withOverrides(overrides); + } + + return builder.build(); + }) + .collect(Collectors.toSet())) + .withRecords(classMetadata.getRecords().stream() + .map(record -> { + final RecordMetadataBuilder builder = RecordMetadataBuilder.create(record); + + final String obfuscatedMethodKey = buildMethodKey( + record.getGetter() ); - } - } - - if (method.getBouncingTarget().get().getOwner().isPresent()) - { - final String obfuscatedKey = buildMethodKey( - method.getBouncingTarget().get().getOwner().get() - ); - final MethodMetadata methodMetadata = obfKeyToMojMethodNameMap.get(obfuscatedKey); - if (methodMetadata != null) - { - final ReferenceBuilder ownerBuilder = createRemappedReference(remapper, methodMetadata); - bouncingBuilder.withOwner(ownerBuilder.build()); - } - else - { - bouncingBuilder.withOwner( - method.getBouncingTarget().get().getTarget().get() - ); - } - } + final MethodMetadata methodMetadata = obfKeyToMojMethodNameMap.get(obfuscatedMethodKey); + if (methodMetadata != null) { + final ReferenceBuilder getterBuilder = createRemappedReference(remapper, methodMetadata); + builder.withGetter(getterBuilder.build()); + } - builder.withBouncingTarget(bouncingBuilder.build()); - } - - if (method.getParent().isPresent()) - { - final String obfuscatedKey = buildMethodKey( - method.getParent().get() - ); - final MethodMetadata methodMetadata = obfKeyToMojMethodNameMap.get(obfuscatedKey); - - if (methodMetadata != null) - { - final ReferenceBuilder parentBuilder = createRemappedReference(remapper, methodMetadata); - builder.withParent(parentBuilder.build()); - } - } - if (!method.getOverrides().isEmpty()) - { - final LinkedHashSet overrides = new LinkedHashSet<>(); - for (final Reference override : method.getOverrides()) - { - final String obfuscatedKey = buildMethodKey( - override - ); - final MethodMetadata methodMetadata = obfKeyToMojMethodNameMap.get(obfuscatedKey); - - if (methodMetadata != null) - { - final ReferenceBuilder overrideBuilder = createRemappedReference(remapper, methodMetadata); - overrides.add(overrideBuilder.build()); - } - } - - builder.withOverrides(overrides); - } - - return builder.build(); - }) - .collect(Collectors.toSet())) - .withRecords(classMetadata.getRecords().stream() - .map(record -> { - final RecordMetadataBuilder builder = RecordMetadataBuilder.create(record); - - final String obfuscatedMethodKey = buildMethodKey( - record.getGetter() - ); - final MethodMetadata methodMetadata = obfKeyToMojMethodNameMap.get(obfuscatedMethodKey); - if (methodMetadata != null) - { - final ReferenceBuilder getterBuilder = createRemappedReference(remapper, methodMetadata); - builder.withGetter(getterBuilder.build()); - } - - - final String obfuscatedFieldKey = buildFieldKey( - record.getField() - ); - final FieldMetadata fieldMetadata = obfKeyToMojFieldNameMap.get(obfuscatedFieldKey); - if (fieldMetadata != null) - { - final ReferenceBuilder fieldBuilder = createRemappedReference(remapper, fieldMetadata); - builder.withField(fieldBuilder.build()); - } - - return builder.build(); - }) - .collect(Collectors.toSet())); + final String obfuscatedFieldKey = buildFieldKey( + record.getField() + ); + final FieldMetadata fieldMetadata = obfKeyToMojFieldNameMap.get(obfuscatedFieldKey); + if (fieldMetadata != null) { + final ReferenceBuilder fieldBuilder = createRemappedReference(remapper, fieldMetadata); + builder.withField(fieldBuilder.build()); + } + + return builder.build(); + }) + .collect(Collectors.toSet())); return classMetadataBuilder.build(); } - private static ReferenceBuilder createRemappedReference(final ASMRemapper remapper, final BaseReference methodMetadata) - { + private static ReferenceBuilder createRemappedReference(final ASMRemapper remapper, final BaseReference methodMetadata) { final ReferenceBuilder targetBuilder = ReferenceBuilder.create() - .withOwner(methodMetadata.getOwner()) - .withName(methodMetadata.getName()) - .withDescriptor(methodMetadata.getDescriptor()) - .withSignature(methodMetadata.getSignature()); + .withOwner(methodMetadata.getOwner()) + .withName(methodMetadata.getName()) + .withDescriptor(methodMetadata.getDescriptor()) + .withSignature(methodMetadata.getSignature()); - if (!methodMetadata.getSignature().hasMojangName() && methodMetadata.getSignature().hasObfuscatedName()) - { + if (!methodMetadata.getSignature().hasMojangName() && methodMetadata.getSignature().hasObfuscatedName()) { targetBuilder.withSignature( - NamedBuilder.create(methodMetadata.getSignature()) - .withMojang( - remapper.mapSignature( - methodMetadata.getSignature() - .getObfuscatedName() - .orElseThrow(() -> new IllegalStateException("Missing obfuscated method signature.")), - false - ) - ) - .build() + NamedBuilder.create(methodMetadata.getSignature()) + .withMojang( + remapper.mapSignature( + methodMetadata.getSignature() + .getObfuscatedName() + .orElseThrow(() -> new IllegalStateException("Missing obfuscated method signature.")), + false + ) + ) + .build() ); } return targetBuilder; } - private static void collectClassNames(final ClassMetadata classMetadata, final Map obfToMojMap) - { + private static void collectClassNames(final ClassMetadata classMetadata, final Map obfToMojMap) { obfToMojMap.put( - classMetadata.getName().getObfuscatedName().orElseThrow(() -> new IllegalStateException("Missing obfuscated name.")), - classMetadata.getName().getMojangName().orElseThrow(() -> new IllegalStateException("Missing mojang name.")) + classMetadata.getName().getObfuscatedName().orElseThrow(() -> new IllegalStateException("Missing obfuscated name.")), + classMetadata.getName().getMojangName().orElseThrow(() -> new IllegalStateException("Missing mojang name.")) ); classMetadata.getInnerClasses().forEach(innerClassMetadata -> collectClassNames(innerClassMetadata, obfToMojMap)); } - private static void collectMethodNames(final ClassMetadata classMetadata, final Map objKeyToMojNameMap) - { + private static void collectMethodNames(final ClassMetadata classMetadata, final Map objKeyToMojNameMap) { classMetadata.getMethods().forEach(methodMetadata -> objKeyToMojNameMap.put( - buildMethodKey(methodMetadata), - methodMetadata + buildMethodKey(methodMetadata), + methodMetadata )); classMetadata.getInnerClasses().forEach(innerClassMetadata -> collectMethodNames(innerClassMetadata, objKeyToMojNameMap)); } - private static void collectFieldNames(final ClassMetadata classMetadata, final Map objKeyToMojNameMap) - { + private static void collectFieldNames(final ClassMetadata classMetadata, final Map objKeyToMojNameMap) { classMetadata.getFields().forEach(fieldMetadata -> objKeyToMojNameMap.put( - buildFieldKey(fieldMetadata), - fieldMetadata + buildFieldKey(fieldMetadata), + fieldMetadata )); classMetadata.getInnerClasses().forEach(innerClassMetadata -> collectFieldNames(innerClassMetadata, objKeyToMojNameMap)); } - private static String buildMethodKey(final MethodMetadata methodMetadata) - { + private static String buildMethodKey(final MethodMetadata methodMetadata) { return buildMethodKey( - methodMetadata.getOwner().getObfuscatedName().orElseThrow(() -> new IllegalStateException("Missing obfuscated owner name.")), - methodMetadata.getName().getObfuscatedName().orElseThrow(() -> new IllegalStateException("Missing obfuscated method name.")), - methodMetadata.getDescriptor().getObfuscatedName().orElseThrow(() -> new IllegalStateException("Missing obfuscated descriptor.")) + methodMetadata.getOwner().getObfuscatedName().orElseThrow(() -> new IllegalStateException("Missing obfuscated owner name.")), + methodMetadata.getName().getObfuscatedName().orElseThrow(() -> new IllegalStateException("Missing obfuscated method name.")), + methodMetadata.getDescriptor().getObfuscatedName().orElseThrow(() -> new IllegalStateException("Missing obfuscated descriptor.")) ); } - private static String buildMethodKey(final Reference Reference) - { + private static String buildMethodKey(final Reference Reference) { return buildMethodKey( - Reference.getOwner().getObfuscatedName().orElseThrow(() -> new IllegalStateException("Missing obfuscated owner name.")), - Reference.getName().getObfuscatedName().orElseThrow(() -> new IllegalStateException("Missing obfuscated method name.")), - Reference.getDescriptor().getObfuscatedName().orElseThrow(() -> new IllegalStateException("Missing obfuscated descriptor.")) + Reference.getOwner().getObfuscatedName().orElseThrow(() -> new IllegalStateException("Missing obfuscated owner name.")), + Reference.getName().getObfuscatedName().orElseThrow(() -> new IllegalStateException("Missing obfuscated method name.")), + Reference.getDescriptor().getObfuscatedName().orElseThrow(() -> new IllegalStateException("Missing obfuscated descriptor.")) ); } - private static String buildMethodKey(final String className, final String methodName, final String methodDesc) - { + private static String buildMethodKey(final String className, final String methodName, final String methodDesc) { return String.format("%s/%s%s", - className, - methodName, - methodDesc); + className, + methodName, + methodDesc); } - private static String buildFieldKey(final FieldMetadata fieldMetadata) - { + private static String buildFieldKey(final FieldMetadata fieldMetadata) { return buildFieldKey( - fieldMetadata.getOwner().getObfuscatedName().orElseThrow(() -> new IllegalStateException("Missing obfuscated owner name.")), - fieldMetadata.getName().getObfuscatedName().orElseThrow(() -> new IllegalStateException("Missing obfuscated field name.")), - fieldMetadata.getDescriptor().getObfuscatedName().orElseThrow(() -> new IllegalStateException("Missing obfuscated descriptor.")) + fieldMetadata.getOwner().getObfuscatedName().orElseThrow(() -> new IllegalStateException("Missing obfuscated owner name.")), + fieldMetadata.getName().getObfuscatedName().orElseThrow(() -> new IllegalStateException("Missing obfuscated field name.")), + fieldMetadata.getDescriptor().getObfuscatedName().orElseThrow(() -> new IllegalStateException("Missing obfuscated descriptor.")) ); } - private static String buildFieldKey(final Reference fieldMetadata) - { + private static String buildFieldKey(final Reference fieldMetadata) { return buildFieldKey( - fieldMetadata.getOwner().getObfuscatedName().orElseThrow(() -> new IllegalStateException("Missing obfuscated owner name.")), - fieldMetadata.getName().getObfuscatedName().orElseThrow(() -> new IllegalStateException("Missing obfuscated field name.")), - fieldMetadata.getDescriptor().getObfuscatedName().orElseThrow(() -> new IllegalStateException("Missing obfuscated descriptor.")) + fieldMetadata.getOwner().getObfuscatedName().orElseThrow(() -> new IllegalStateException("Missing obfuscated owner name.")), + fieldMetadata.getName().getObfuscatedName().orElseThrow(() -> new IllegalStateException("Missing obfuscated field name.")), + fieldMetadata.getDescriptor().getObfuscatedName().orElseThrow(() -> new IllegalStateException("Missing obfuscated descriptor.")) ); } - private static String buildFieldKey(final String className, final String fieldName, final String fieldDesc) - { + private static String buildFieldKey(final String className, final String fieldName, final String fieldDesc) { return String.format("%s/%s%s", - className, - fieldName, - fieldDesc); + className, + fieldName, + fieldDesc); } @SuppressWarnings("ResultOfMethodCallIgnored") @TaskAction - void execute() throws IOException - { + void execute() throws IOException { final File target = this.getOutput().getAsFile().get(); final File parentDirectory = target.getParentFile(); parentDirectory.mkdirs(); diff --git a/src/main/java/org/parchmentmc/lodestone/util/ASMRemapper.java b/src/main/java/org/parchmentmc/lodestone/util/ASMRemapper.java index 7721dd6..df1b2e1 100644 --- a/src/main/java/org/parchmentmc/lodestone/util/ASMRemapper.java +++ b/src/main/java/org/parchmentmc/lodestone/util/ASMRemapper.java @@ -4,8 +4,7 @@ import java.util.Map; -public class ASMRemapper extends Remapper -{ +public class ASMRemapper extends Remapper { private final Map classRenames; private final Map methodRenames; @@ -18,9 +17,9 @@ public ASMRemapper(final Map classRenames, final Map