fix: in anonymous class checks ignore instance fields not used outside
This commit is contained in:
@@ -43,9 +43,7 @@ public class ProcessAnonymous extends AbstractVisitor {
|
||||
if (!inlineAnonymousClasses) {
|
||||
return;
|
||||
}
|
||||
for (ClassNode cls : root.getClasses()) {
|
||||
markAnonymousClass(cls);
|
||||
}
|
||||
root.getClasses().forEach(ProcessAnonymous::processClass);
|
||||
mergeAnonymousDeps(root);
|
||||
}
|
||||
|
||||
@@ -59,10 +57,18 @@ public class ProcessAnonymous extends AbstractVisitor {
|
||||
}
|
||||
|
||||
private void visitClassAndInners(ClassNode cls) {
|
||||
markAnonymousClass(cls);
|
||||
processClass(cls);
|
||||
cls.getInnerClasses().forEach(this::visitClassAndInners);
|
||||
}
|
||||
|
||||
private static void processClass(ClassNode cls) {
|
||||
try {
|
||||
markAnonymousClass(cls);
|
||||
} catch (Throwable e) {
|
||||
cls.addError("Anonymous visitor error", e);
|
||||
}
|
||||
}
|
||||
|
||||
private static void markAnonymousClass(ClassNode cls) {
|
||||
if (!canBeAnonymous(cls)) {
|
||||
return;
|
||||
@@ -273,6 +279,10 @@ public class ProcessAnonymous extends AbstractVisitor {
|
||||
if (!ctrUseMth.getMethodInfo().isClassInit()) {
|
||||
return false;
|
||||
}
|
||||
if (cls.getUseInMth().isEmpty()) {
|
||||
// no outside usage, inline not needed
|
||||
return false;
|
||||
}
|
||||
FieldNode instFld = ListUtils.filterOnlyOne(cls.getFields(),
|
||||
f -> f.getAccessFlags().containsFlags(AccessFlags.PUBLIC, AccessFlags.STATIC, AccessFlags.FINAL)
|
||||
&& f.getFieldInfo().getType().equals(cls.getClassInfo().getType()));
|
||||
|
||||
Reference in New Issue
Block a user