Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add new constructor BootstrapMethodInfo(enclosingClass, cpArgs)
JVMClassInfo.Initializer#setBootstrapMethod assumes to have a bootstrap method with a structure similar to the following (with 3 bootstrap method arguments) BootstrapMethods: 0: javapathfinder#83 REF_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; Method arguments: javapathfinder#84 (Ljava/lang/Object;)Ljava/lang/Object; javapathfinder#85 REF_invokeInterface java/lang/annotation/Annotation.annotationType:()Ljava/lang/Class; javapathfinder#86 (Ljava/lang/annotation/Annotation;)Ljava/lang/Class; In case JPF encounters an bootstrap method with arbitrary number of arguments such as the StringConcatFactory.makeConcatWithConstants which have only one bootstrap method argument JVMClassInfo.Initializer#setBootstrapMethod throws an ArrayIndexOutOfBoundsException exception: [junit] java.lang.ArrayIndexOutOfBoundsException: 1 [junit] at gov.nasa.jpf.jvm.JVMClassInfo$Initializer.setBootstrapMethod(JVMClassInfo.java:93) [junit] at gov.nasa.jpf.jvm.ClassFile.setBootstrapMethod(ClassFile.java:659) [junit] at gov.nasa.jpf.jvm.ClassFile.parseBootstrapMethodAttr(ClassFile.java:1422) [junit] at gov.nasa.jpf.jvm.JVMClassInfo$Initializer.setClassAttribute(JVMClassInfo.java:80) [junit] at gov.nasa.jpf.jvm.ClassFile.setClassAttribute(ClassFile.java:636) [junit] at gov.nasa.jpf.jvm.ClassFile.parseClassAttributes(ClassFile.java:1306) [junit] at gov.nasa.jpf.jvm.ClassFile.parse(ClassFile.java:875) [junit] at gov.nasa.jpf.jvm.JVMClassInfo$Initializer.<init>(JVMClassInfo.java:48) This prevents the above exception from being thrown, by adding a new constructor BootstrapMethodInfo#BootstrapMethodInfo(enclosingClass, cpArgs) for handling bootstrap methods with arbitrary number of bootstrap method arguments, without evaluating cpArgs within JVMClassInfo.Initializer#setBootstrapMethod.
- Loading branch information