< prev index next >

src/java.base/share/classes/jdk/internal/classfile/impl/Util.java

Print this page
*** 1,7 ***
  /*
!  * Copyright (c) 2022, 2024, 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
--- 1,7 ---
  /*
!  * Copyright (c) 2022, 2025, 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

*** 26,10 ***
--- 26,12 ---
  
  import java.lang.classfile.*;
  import java.lang.classfile.attribute.CodeAttribute;
  import jdk.internal.classfile.components.ClassPrinter;
  import java.lang.classfile.constantpool.ClassEntry;
+ import java.lang.classfile.constantpool.ConstantPool;
+ import java.lang.classfile.constantpool.ConstantPoolBuilder;
  import java.lang.classfile.constantpool.ModuleEntry;
  import java.lang.classfile.constantpool.PoolEntry;
  import java.lang.classfile.constantpool.Utf8Entry;
  import java.lang.constant.ClassDesc;
  import java.lang.constant.MethodTypeDesc;

*** 45,10 ***
--- 47,11 ---
  import jdk.internal.constant.ClassOrInterfaceDescImpl;
  import jdk.internal.vm.annotation.ForceInline;
  import jdk.internal.vm.annotation.Stable;
  
  import static java.lang.classfile.ClassFile.ACC_STATIC;
+ import static java.lang.constant.ConstantDescs.INIT_NAME;
  import static jdk.internal.constant.PrimitiveClassDescImpl.CD_double;
  import static jdk.internal.constant.PrimitiveClassDescImpl.CD_long;
  import static jdk.internal.constant.PrimitiveClassDescImpl.CD_void;
  
  /**

*** 258,10 ***
--- 261,18 ---
  
      public static boolean isDoubleSlot(ClassDesc desc) {
          return desc == CD_double || desc == CD_long;
      }
  
+     public static boolean checkConstantPoolsCompatible(ConstantPool one, ConstantPool two) {
+         if (one.equals(two))
+             return true;
+         if (one instanceof ConstantPoolBuilder cpb && cpb.canWriteDirect(two))
+             return true;
+         return two instanceof ConstantPoolBuilder cpb && cpb.canWriteDirect(one);
+     }
+ 
      public static void dumpMethod(SplitConstantPool cp,
                                    ClassDesc cls,
                                    String methodName,
                                    MethodTypeDesc methodDesc,
                                    int acc,

*** 301,10 ***
--- 312,21 ---
              }
              dump.accept(" %02x".formatted(bytes[i]));
          }
      }
  
+     public static boolean canSkipMethodInflation(ClassReader cr, MethodInfo method, BufWriterImpl buf) {
+         if (!buf.canWriteDirect(cr)) {
+             return false;
+         }
+         if (method.methodName().equalsString(INIT_NAME) &&
+                 !buf.strictFieldsMatch(((ClassReaderImpl) cr).getContainedClass())) {
+             return false;
+         }
+         return true;
+     }
+ 
      public static void writeListIndices(BufWriter writer, List<? extends PoolEntry> list) {
          writer.writeU2(list.size());
          for (PoolEntry info : list) {
              writer.writeIndex(info);
          }
< prev index next >