30 import java.io.EOFException; 31 import java.io.IOException; 32 import java.io.InputStream; 33 import java.io.UncheckedIOException; 34 import java.lang.module.InvalidModuleDescriptorException; 35 import java.lang.module.ModuleDescriptor; 36 import java.lang.module.ModuleDescriptor.Builder; 37 import java.lang.module.ModuleDescriptor.Requires; 38 import java.lang.module.ModuleDescriptor.Exports; 39 import java.lang.module.ModuleDescriptor.Opens; 40 import java.nio.ByteBuffer; 41 import java.nio.BufferUnderflowException; 42 import java.util.ArrayList; 43 import java.util.HashMap; 44 import java.util.HashSet; 45 import java.util.List; 46 import java.util.Map; 47 import java.util.Set; 48 import java.util.function.Supplier; 49 50 import jdk.internal.misc.JavaLangModuleAccess; 51 import jdk.internal.misc.SharedSecrets; 52 53 import static jdk.internal.module.ClassFileConstants.*; 54 55 56 /** 57 * Read module information from a {@code module-info} class file. 58 * 59 * @implNote The rationale for the hand-coded reader is startup performance 60 * and fine control over the throwing of InvalidModuleDescriptorException. 61 */ 62 63 public final class ModuleInfo { 64 65 private final int JAVA_MIN_SUPPORTED_VERSION = 53; 66 private final int JAVA_MAX_SUPPORTED_VERSION = 56; 67 68 private static final JavaLangModuleAccess JLMA 69 = SharedSecrets.getJavaLangModuleAccess(); 70 71 // supplies the set of packages when ModulePackages attribute not present | 30 import java.io.EOFException; 31 import java.io.IOException; 32 import java.io.InputStream; 33 import java.io.UncheckedIOException; 34 import java.lang.module.InvalidModuleDescriptorException; 35 import java.lang.module.ModuleDescriptor; 36 import java.lang.module.ModuleDescriptor.Builder; 37 import java.lang.module.ModuleDescriptor.Requires; 38 import java.lang.module.ModuleDescriptor.Exports; 39 import java.lang.module.ModuleDescriptor.Opens; 40 import java.nio.ByteBuffer; 41 import java.nio.BufferUnderflowException; 42 import java.util.ArrayList; 43 import java.util.HashMap; 44 import java.util.HashSet; 45 import java.util.List; 46 import java.util.Map; 47 import java.util.Set; 48 import java.util.function.Supplier; 49 50 import jdk.internal.access.JavaLangModuleAccess; 51 import jdk.internal.access.SharedSecrets; 52 53 import static jdk.internal.module.ClassFileConstants.*; 54 55 56 /** 57 * Read module information from a {@code module-info} class file. 58 * 59 * @implNote The rationale for the hand-coded reader is startup performance 60 * and fine control over the throwing of InvalidModuleDescriptorException. 61 */ 62 63 public final class ModuleInfo { 64 65 private final int JAVA_MIN_SUPPORTED_VERSION = 53; 66 private final int JAVA_MAX_SUPPORTED_VERSION = 56; 67 68 private static final JavaLangModuleAccess JLMA 69 = SharedSecrets.getJavaLangModuleAccess(); 70 71 // supplies the set of packages when ModulePackages attribute not present |