NullPointerException at proguard.optimize.info.SimpleEnumMarker.isSimpleEnum
Trying to shrink an uber-jar but Proguard seems to be generating an NPE.
Company code so unfortunately I can't share the source. In any case the stack trace doesn't seem to tell me anything about the enum causing it.
Building with proguard-maven-plugin:2.2.0 which I believe uses Proguard base 6.1.1. Tried upgrading it to use 6.2.2 (latest in Maven) but same problem. This is operating on a ~50mb jar created by the maven-shade-plugin.
Here are the options I'm adding:
-dontobfuscate
-dontnote
-dontwarn
-keep class com.company.Main { *; }
Here's the complete stack trace:
[proguard] Initializing...
[proguard] Ignoring unused library classes...
[proguard] Original number of library classes: 19440
[proguard] Final number of library classes: 1881
[proguard] Printing kept classes, fields, and methods...
[proguard] Inlining subroutines...
[proguard] Shrinking...
[proguard] Removing unused program classes and class elements...
[proguard] Original number of program classes: 29270
[proguard] Final number of program classes: 3475
[proguard] Optimizing (pass 1/1)...
[proguard] java.lang.NullPointerException
[proguard] at proguard.optimize.info.SimpleEnumMarker.isSimpleEnum(SimpleEnumMarker.java:68)
[proguard] at proguard.optimize.evaluation.SimpleEnumUseSimplifier.isSimpleEnum(SimpleEnumUseSimplifier.java:578)
[proguard] at proguard.optimize.evaluation.SimpleEnumUseSimplifier.isPoppingSimpleEnum(SimpleEnumUseSimplifier.java:540)
[proguard] at proguard.optimize.evaluation.SimpleEnumUseSimplifier.isPoppingSimpleEnum(SimpleEnumUseSimplifier.java:527)
[proguard] at proguard.optimize.evaluation.SimpleEnumUseSimplifier.visitConstantInstruction(SimpleEnumUseSimplifier.java:315)
[proguard] at proguard.classfile.instruction.ConstantInstruction.accept(ConstantInstruction.java:157)
[proguard] at proguard.optimize.evaluation.SimpleEnumUseSimplifier.visitCodeAttribute(SimpleEnumUseSimplifier.java:132)
[proguard] at proguard.classfile.attribute.CodeAttribute.accept(CodeAttribute.java:141)
[proguard] at proguard.classfile.ProgramMethod.attributesAccept(ProgramMethod.java:101)
[proguard] at proguard.classfile.attribute.visitor.AllAttributeVisitor.visitProgramMember(AllAttributeVisitor.java:95)
[proguard] at proguard.classfile.util.SimplifiedVisitor.visitProgramMethod(SimplifiedVisitor.java:93)
[proguard] at proguard.classfile.ProgramMethod.accept(ProgramMethod.java:93)
[proguard] at proguard.classfile.ProgramClass.methodsAccept(ProgramClass.java:588)
[proguard] at proguard.classfile.visitor.AllMethodVisitor.visitProgramClass(AllMethodVisitor.java:47)
[proguard] at proguard.classfile.ProgramClass.accept(ProgramClass.java:430)
[proguard] at proguard.classfile.ClassPool.classesAccept(ClassPool.java:125)
[proguard] at proguard.classfile.visitor.AllClassVisitor.visitClassPool(AllClassVisitor.java:45)
[proguard] at proguard.classfile.ClassPool.accept(ClassPool.java:111)
[proguard] at proguard.optimize.Optimizer$TimedClassPoolVisitor.visitClassPool(Optimizer.java:1702)
[proguard] at proguard.classfile.ClassPool.accept(ClassPool.java:111)
[proguard] at proguard.optimize.Optimizer.execute(Optimizer.java:676)
[proguard] at proguard.ProGuard.optimize(ProGuard.java:444)
[proguard] at proguard.ProGuard.execute(ProGuard.java:165)
[proguard] at proguard.ProGuard.main(ProGuard.java:591)
The options -dontnote and -dontwarn may be hiding problems in the input. If you comment them out, do you see any warnings about inconsistent code, e.g. library classes that depend on program classes?
As a workaround, you can try disabling enum optimization: -optimizations !class/unboxing/enum