Skip to content

LambdaMetafactory related issues #470

Closed
@DarkDimius

Description

@DarkDimius
object O {
  val x: String => String = a => a
  def main(args: Array[String]): Unit = {
  }
}

Current status: on 802a93b, after fixing invocation type I get

Exception in thread "main" java.lang.BootstrapMethodError: call site initialization exception
    at java.lang.invoke.CallSite.makeSite(CallSite.java:328)
    at java.lang.invoke.MethodHandleNatives.linkCallSite(MethodHandleNatives.java:296)
    at O$.<init>(A.scala:1)
    at O$.<clinit>(A.scala)
    at O.main(A.scala)
Caused by: java.lang.invoke.LambdaConversionException: Incorrect number of parameters for instance method invokeSpecial O$.$anonfun$$init$$1:(String)String; 0 captured parameters, 1 functional interface method parameters, 1 implementation parameters
    at java.lang.invoke.AbstractValidatingLambdaMetafactory.validateMetafactoryArgs(AbstractValidatingLambdaMetafactory.java:193)
    at java.lang.invoke.LambdaMetafactory.metafactory(LambdaMetafactory.java:303)
    at java.lang.invoke.CallSite.makeSite(CallSite.java:289)
    ... 4 more
dark@reco /tmp/t $ javap -p -s -l -verbose O$
Classfile /private/tmp/t/O$.class
  Last modified Apr 10, 2015; size 1188 bytes
  MD5 checksum bb135abd9c605d63ae7638fd35278f89
  Compiled from "A.scala"
public final class O$
  minor version: 0
  major version: 52
  flags: ACC_PUBLIC, ACC_FINAL, ACC_SUPER
Constant pool:
   #1 = Utf8               O$
   #2 = Class              #1             // O$
   #3 = Utf8               java/lang/Object
   #4 = Class              #3             // java/lang/Object
   #5 = Utf8               A.scala
   #6 = Utf8               MODULE$
   #7 = Utf8               LO$;
   #8 = Utf8               x$$local
   #9 = Utf8               Lscala/Function1;
  #10 = Utf8               <clinit>
  #11 = Utf8               ()V
  #12 = Utf8               <init>
  #13 = NameAndType        #12:#11        // "<init>":()V
  #14 = Methodref          #2.#13         // O$."<init>":()V
  #15 = Methodref          #4.#13         // java/lang/Object."<init>":()V
  #16 = NameAndType        #6:#7          // MODULE$:LO$;
  #17 = Fieldref           #2.#16         // O$.MODULE$:LO$;
  #18 = Utf8               java/lang/invoke/LambdaMetafactory
  #19 = Class              #18            // java/lang/invoke/LambdaMetafactory
  #20 = Utf8               metafactory
  #21 = Utf8               (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;
  #22 = NameAndType        #20:#21        // 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;
  #23 = Methodref          #19.#22        // 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;
  #24 = MethodHandle       #6:#23         // 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;
  #25 = Utf8               (Ljava/lang/Object;)Ljava/lang/Object;
  #26 = MethodType         #25            //  (Ljava/lang/Object;)Ljava/lang/Object;
  #27 = Utf8               $anonfun$$init$$1
  #28 = Utf8               (Ljava/lang/String;)Ljava/lang/String;
  #29 = NameAndType        #27:#28        // $anonfun$$init$$1:(Ljava/lang/String;)Ljava/lang/String;
  #30 = Methodref          #2.#29         // O$.$anonfun$$init$$1:(Ljava/lang/String;)Ljava/lang/String;
  #31 = MethodHandle       #7:#30         // invokespecial O$.$anonfun$$init$$1:(Ljava/lang/String;)Ljava/lang/String;
  #32 = MethodType         #28            //  (Ljava/lang/String;)Ljava/lang/String;
  #33 = Utf8               apply
  #34 = Utf8               ()Lscala/compat/java8/JFunction1;
  #35 = NameAndType        #33:#34        // apply:()Lscala/compat/java8/JFunction1;
  #36 = InvokeDynamic      #0:#35         // #0:apply:()Lscala/compat/java8/JFunction1;
  #37 = Utf8               this
  #38 = Utf8               x
  #39 = Utf8               ()Lscala/Function1;
  #40 = NameAndType        #8:#9          // x$$local:Lscala/Function1;
  #41 = Fieldref           #2.#40         // O$.x$$local:Lscala/Function1;
  #42 = Utf8               main
  #43 = Utf8               ([Ljava/lang/String;)V
  #44 = Utf8               args
  #45 = Utf8               [Ljava/lang/String;
  #46 = Utf8               a
  #47 = Utf8               Ljava/lang/String;
  #48 = Utf8               Code
  #49 = Utf8               LocalVariableTable
  #50 = Utf8               LineNumberTable
  #51 = Utf8               BootstrapMethods
  #52 = Utf8               SourceFile
  #53 = Utf8               ScalaSig
{
  public static final O$ MODULE$;
    descriptor: LO$;
    flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL

  private final scala.Function1 x$$local;
    descriptor: Lscala/Function1;
    flags: ACC_PRIVATE, ACC_FINAL

  public static {};
    descriptor: ()V
    flags: ACC_PUBLIC, ACC_STATIC
    Code:
      stack=1, locals=0, args_size=0
         0: new           #2                  // class O$
         3: invokespecial #14                 // Method "<init>":()V
         6: return

  public O$();
    descriptor: ()V
    flags: ACC_PUBLIC
    Code:
      stack=1, locals=2, args_size=1
         0: aload_0
         1: invokespecial #15                 // Method java/lang/Object."<init>":()V
         4: aload_0
         5: putstatic     #17                 // Field MODULE$:LO$;
         8: invokedynamic #36,  0             // InvokeDynamic #0:apply:()Lscala/compat/java8/JFunction1;
        13: astore_1
        14: return
      LocalVariableTable:
        Start  Length  Slot  Name   Signature
            0      15     0  this   LO$;
      LineNumberTable:
        line 0: 0
        line 1: 8
        line 0: 14

  public scala.Function1 x();
    descriptor: ()Lscala/Function1;
    flags: ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
         0: aload_0
         1: getfield      #41                 // Field x$$local:Lscala/Function1;
         4: areturn
      LocalVariableTable:
        Start  Length  Slot  Name   Signature
            0       5     0  this   LO$;
      LineNumberTable:
        line 1: 0

  public void main(java.lang.String[]);
    descriptor: ([Ljava/lang/String;)V
    flags: ACC_PUBLIC
    Code:
      stack=0, locals=2, args_size=2
         0: return
      LocalVariableTable:
        Start  Length  Slot  Name   Signature
            0       1     0  this   LO$;
            0       1     1  args   [Ljava/lang/String;
      LineNumberTable:
        line 2: 0

  private java.lang.String $anonfun$$init$$1(java.lang.String);
    descriptor: (Ljava/lang/String;)Ljava/lang/String;
    flags: ACC_PRIVATE
    Code:
      stack=1, locals=2, args_size=2
         0: aload_1
         1: areturn
      LocalVariableTable:
        Start  Length  Slot  Name   Signature
            0       2     0  this   LO$;
            0       2     1     a   Ljava/lang/String;
      LineNumberTable:
        line 1: 0
}
BootstrapMethods:
  0: #24 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:
      #26 (Ljava/lang/Object;)Ljava/lang/Object;
      #31 invokespecial O$.$anonfun$$init$$1:(Ljava/lang/String;)Ljava/lang/String;
      #32 (Ljava/lang/String;)Ljava/lang/String;
SourceFile: "A.scala"
Error: unknown attribute
  ScalaSig: length = 0x0

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions