< 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 >