Hello,
proguard 6.1.0 crashes for me when processing inner class with generic in constructor parameter
I dont know if the fact that it is an inner class is relevant or not.
our code:
public class PlanningHistory { ... public class History { ... public History(int trafficLightId, Date date, int noOfUnplannedOrders, double kms, double costs, String info, List<PlanningRoute> routes) { ...
Removing the generic from the constructor parameters prevents the crash, i.e.:
public History(int trafficLightId, Date date, int noOfUnplannedOrders, double kms, double costs, String info, List routes) {
Shrinking...
java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3
at proguard.shrink.ClassShrinker$MySignatureCleaner.visitSignatureAttribute(ClassShrinker.java:345)
at proguard.classfile.util.SimplifiedVisitor.visitSignatureAttribute(SimplifiedVisitor.java:504)
at proguard.classfile.util.SimplifiedVisitor.visitSignatureAttribute(SimplifiedVisitor.java:516)
at proguard.classfile.attribute.SignatureAttribute.accept(SignatureAttribute.java:109)
at proguard.classfile.ProgramMethod.attributesAccept(ProgramMethod.java:101)
at proguard.classfile.attribute.visitor.AllAttributeVisitor.visitProgramMember(AllAttributeVisitor.java:95)
at proguard.classfile.util.SimplifiedVisitor.visitProgramMethod(SimplifiedVisitor.java:93)
at proguard.classfile.ProgramMethod.accept(ProgramMethod.java:93)
at proguard.classfile.ProgramClass.methodsAccept(ProgramClass.java:588)
at proguard.shrink.ClassShrinker.visitProgramClass(ClassShrinker.java:133)
at proguard.classfile.visitor.MultiClassVisitor.visitProgramClass(MultiClassVisitor.java:67)
at proguard.shrink.UsedClassFilter.visitProgramClass(UsedClassFilter.java:62)
at proguard.classfile.ProgramClass.accept(ProgramClass.java:430)
at proguard.classfile.ClassPool.classesAccept(ClassPool.java:125)
at proguard.shrink.Shrinker.execute(Shrinker.java:158)
at proguard.ProGuard.shrink(ProGuard.java:392)
at proguard.ProGuard.execute(ProGuard.java:178)
at proguard.ProGuard.main(ProGuard.java:591)
[ERROR] Command execution failed.
using openjdk version "11.0.1" 2018-10-16
Thanks for your report. I can't reproduce the issue yet. It seems to be related to ProGuard optimizing the code and removing unused parameters in the constructor. Could you provide (post or mail) a small project that allows us to reproduce and then fix the issue?
Or you possibly using gson and the related classes PlanningHistory and History are used when serializing / deserializing with gson?
Could you try if disabling gson optimization makes a difference:
-optimizations !library/gson
Possible similar bug: https://github.com/square/okhttp/issues/5167
We managed now to reproduce this case and it looks like its related to the optimization method/removal/parameter .
We will fix it asap.
Problem has been identified and fixed in source code. It was related to an incomplete fix for PGD-735. We will try to make a release 6.1.2 asap.
This problem should be fixed in release 6.2.0.