From 115e563a2b4ede9cd919cd85d4eace24c3c0d5f3 Mon Sep 17 00:00:00 2001 From: pubiqq <82187521+pubiqq@users.noreply.github.com> Date: Thu, 1 Aug 2024 23:45:52 +0300 Subject: [PATCH] fix: improve checking if methods are inline for FixAccessModifiers (PR #2235) --- .../java/jadx/core/dex/visitors/FixAccessModifiers.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/jadx-core/src/main/java/jadx/core/dex/visitors/FixAccessModifiers.java b/jadx-core/src/main/java/jadx/core/dex/visitors/FixAccessModifiers.java index c78a35ad0..2432025d7 100644 --- a/jadx-core/src/main/java/jadx/core/dex/visitors/FixAccessModifiers.java +++ b/jadx-core/src/main/java/jadx/core/dex/visitors/FixAccessModifiers.java @@ -3,6 +3,7 @@ package jadx.core.dex.visitors; import jadx.api.plugins.input.data.AccessFlags; import jadx.core.dex.attributes.AFlag; import jadx.core.dex.attributes.AType; +import jadx.core.dex.attributes.nodes.MethodInlineAttr; import jadx.core.dex.attributes.nodes.MethodOverrideAttr; import jadx.core.dex.attributes.nodes.NotificationAttrNode; import jadx.core.dex.info.AccessInfo; @@ -86,8 +87,12 @@ public class FixAccessModifiers extends AbstractVisitor { if (!accessFlags.isPublic()) { // if class is used in inlinable method => make it public for (MethodNode useMth : cls.getUseInMth()) { - boolean canInline = useMth.contains(AFlag.METHOD_CANDIDATE_FOR_INLINE) || useMth.contains(AType.METHOD_INLINE); - if (canInline && !useMth.getUseIn().isEmpty()) { + MethodInlineAttr inlineAttr = useMth.get(AType.METHOD_INLINE); + boolean isInline = inlineAttr != null && !inlineAttr.notNeeded(); + boolean isCandidateForInline = useMth.contains(AFlag.METHOD_CANDIDATE_FOR_INLINE); + + boolean mostLikelyInline = isInline || isCandidateForInline; + if (mostLikelyInline && !useMth.getUseIn().isEmpty()) { return AccessFlags.PUBLIC; } }