< prev index next >

src/java.base/share/classes/java/lang/invoke/InnerClassLambdaMetafactory.java

Print this page
@@ -1,7 +1,7 @@
  /*
-  * Copyright (c) 2012, 2024, Oracle and/or its affiliates. All rights reserved.
+  * Copyright (c) 2012, 2026, Oracle and/or its affiliates. All rights reserved.
   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   *
   * This code is free software; you can redistribute it and/or modify it
   * under the terms of the GNU General Public License version 2 only, as
   * published by the Free Software Foundation.  Oracle designates this

@@ -24,10 +24,11 @@
   */
  
  package java.lang.invoke;
  
  import jdk.internal.constant.ClassOrInterfaceDescImpl;
+ import jdk.internal.misc.PreviewFeatures;
  import jdk.internal.misc.CDS;
  import jdk.internal.util.ClassFileDumper;
  import sun.invoke.util.VerifyAccess;
  
  import java.io.Serializable;

@@ -37,10 +38,11 @@
  import java.lang.classfile.MethodBuilder;
  import java.lang.classfile.Opcode;
  import java.lang.classfile.TypeKind;
  import java.lang.constant.ClassDesc;
  import java.lang.constant.MethodTypeDesc;
+ import java.lang.reflect.ClassFileFormatVersion;
  import java.lang.reflect.Modifier;
  import java.util.LinkedHashSet;
  import java.util.List;
  import java.util.Set;
  import java.util.function.Consumer;

@@ -308,12 +310,15 @@
          }
          final boolean finalAccidentallySerializable = accidentallySerializable;
          final byte[] classBytes = ClassFile.of().build(lambdaClassEntry, pool, new Consumer<ClassBuilder>() {
              @Override
              public void accept(ClassBuilder clb) {
-                 clb.withFlags(ACC_SUPER | ACC_FINAL | ACC_SYNTHETIC)
+                 clb.withVersion(ClassFileFormatVersion.latest().major(), (PreviewFeatures.isEnabled() ? ClassFile.PREVIEW_MINOR_VERSION : 0))
+                    .withFlags(ACC_SUPER | ACC_FINAL | ACC_SYNTHETIC)
                     .withInterfaceSymbols(interfaces);
+                 // All Classes in the BSM argument method types are loaded; no need for LoadableDescriptors
+ 
                  // Generate final fields to be filled in by constructor
                  for (int i = 0; i < argDescs.length; i++) {
                      clb.withField(argName(i), argDescs[i], ACC_PRIVATE | ACC_FINAL);
                  }
  
< prev index next >