< prev index next >

src/java.base/share/classes/jdk/internal/module/ClassFileAttributes.java

Print this page

        

*** 738,743 **** --- 738,821 ---- return attr; } } + + /** + * ModuleResolution_attribute { + * u2 attribute_name_index; // "ModuleResolution" + * u4 attribute_length; // 2 + * u2 resolution_flags; + * + * The value of the resolution_flags item is a mask of flags used to denote + * properties of module resolution. The flags are as follows: + * + * // Optional + * 0x0001 (DO_NOT_RESOLVE_BY_DEFAULT) + * + * // At most one of: + * 0x0002 (WARN_DEPRECATED) + * 0x0004 (WARN_DEPRECATED_FOR_REMOVAL) + * 0x0008 (WARN_INCUBATING) + */ + static class ModuleResolution extends Attribute { + private final boolean doNotResolveByDefault; + private final WarnIfResolvedReason warnIfResolvedReason; + + ModuleResolution(boolean doNotResolveByDefault, + WarnIfResolvedReason warnIfResolvedReason) { + super(MODULE_RESOLUTION); + this.doNotResolveByDefault= doNotResolveByDefault; + this.warnIfResolvedReason = warnIfResolvedReason; + } + + ModuleResolution() { + this(false, WarnIfResolvedReason.NONE); + } + + @Override + protected Attribute read(ClassReader cr, + int off, + int len, + char[] buf, + int codeOff, + Label[] labels) + { + int flags = cr.readUnsignedShort(off); + + boolean doNotResolve = false; + if ((flags & DO_NOT_RESOLVE_BY_DEFAULT) != 0) + doNotResolve = true; + + WarnIfResolvedReason warnReason = WarnIfResolvedReason.NONE; + if ((flags & WARN_DEPRECATED) != 0) + warnReason = WarnIfResolvedReason.DEPRECATED; + else if ((flags & WARN_DEPRECATED_FOR_REMOVAL) != 0) + warnReason = WarnIfResolvedReason.DEPRECATED_FOR_REMOVAL; + else if ((flags & WARN_INCUBATING) != 0) + warnReason = WarnIfResolvedReason.INCUBATING; + + return new ModuleResolution(doNotResolve, warnReason); + } + + @Override + protected ByteVector write(ClassWriter cw, + byte[] code, + int len, + int maxStack, + int maxLocals) + { + int flags = 0; + if (doNotResolveByDefault) + flags |= DO_NOT_RESOLVE_BY_DEFAULT; + + int reason = warnIfResolvedReason.classFileConstant(); + if (reason != 0) + flags |= reason; + + ByteVector attr = new ByteVector(); + attr.putShort(flags); + return attr; + } + } }
< prev index next >