<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<html><head><meta name="Generator" content="Microsoft Word 15 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
{font-family:"Cambria Math";
panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
{font-family:Calibri;
panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
{font-family:Aptos;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0in;
font-size:11.0pt;
font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
{mso-style-priority:99;
color:blue;
text-decoration:underline;}
p.xmsonormal, li.xmsonormal, div.xmsonormal
{mso-style-name:x_msonormal;
margin:0in;
font-size:11.0pt;
font-family:"Calibri",sans-serif;}
p.xxmsonormal, li.xxmsonormal, div.xxmsonormal
{mso-style-name:x_xmsonormal;
margin:0in;
font-size:11.0pt;
font-family:"Calibri",sans-serif;}
p.xxxmsonormal, li.xxxmsonormal, div.xxxmsonormal
{mso-style-name:x_xxmsonormal;
margin:0in;
font-size:11.0pt;
font-family:"Calibri",sans-serif;}
span.EmailStyle26
{mso-style-type:personal-reply;
font-family:"Calibri",sans-serif;
color:windowtext;}
.MsoChpDefault
{mso-style-type:export-only;
font-size:10.0pt;}
@page WordSection1
{size:8.5in 11.0in;
margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
{page:WordSection1;}
--></style></head><body lang="EN-US" link="blue" vlink="purple" style="word-wrap:break-word"><div class="WordSection1"><p class="MsoNormal">Right! – I’ve used Optional before and knew that. Sorry for the noise.</p><p class="MsoNormal"> </p><div><div style="border:none;border-top:solid #e1e1e1 1.0pt;padding:3.0pt 0in 0in 0in"><p class="MsoNormal"><b>From:</b> Chen Liang <<a href="mailto:chen.l.liang@oracle.com">chen.l.liang@oracle.com</a>> <br><b>Sent:</b> Monday, November 25, 2024 3:14 PM<br><b>To:</b> Mark Roberts <<a href="mailto:markro@cs.washington.edu">markro@cs.washington.edu</a>>; <a href="mailto:classfile-api-dev@openjdk.org">classfile-api-dev@openjdk.org</a><br><b>Subject:</b> Re: [External] : how does one get value of ConstantValueAttribute?</p></div></div><p class="MsoNormal"> </p><div><p class="MsoNormal"><span style="font-size:12.0pt;font-family:Aptos;color:black">Hi Mark,</span></p></div><div><p class="MsoNormal"><span style="font-size:12.0pt;font-family:Aptos;color:black">You are calling constant() on an Optional. You should call cva.get().constant().constantValue() instead.</span></p></div><div><p class="MsoNormal"><span style="font-size:12.0pt;font-family:Aptos;color:black"> </span></p></div><div><p class="MsoNormal"><span style="font-size:12.0pt;font-family:Aptos;color:black">Chen</span></p></div><div class="MsoNormal" align="center" style="text-align:center"><hr size="2" width="98%" align="center"></div><div id="divRplyFwdMsg"><p class="MsoNormal"><b><span style="color:black">From:</span></b><span style="color:black"> Mark Roberts <<a href="mailto:markro@cs.washington.edu">markro@cs.washington.edu</a>><br><b>Sent:</b> Monday, November 25, 2024 5:06 PM<br><b>To:</b> Chen Liang <<a href="mailto:chen.l.liang@oracle.com">chen.l.liang@oracle.com</a>>; <a href="mailto:classfile-api-dev@openjdk.org">classfile-api-dev@openjdk.org</a> <<a href="mailto:classfile-api-dev@openjdk.org">classfile-api-dev@openjdk.org</a>><br><b>Subject:</b> RE: [External] : how does one get value of ConstantValueAttribute?</span> </p><div><p class="MsoNormal"> </p></div></div><div><div><p class="xmsonormal">Here is snippet from my source:</p><p class="xmsonormal"> </p><p class="xmsonormal">import java.lang.classfile.*;</p><p class="xmsonormal">import java.lang.classfile.attribute.*;</p><p class="xmsonormal">import java.lang.classfile.attribute.ConstantValueAttribute;</p><p class="xmsonormal">import java.lang.classfile.Attributes;</p><p class="xmsonormal">import java.lang.classfile.components.ClassPrinter;</p><p class="xmsonormal">import java.lang.classfile.constantpool.*;</p><p class="xmsonormal">import java.lang.classfile.instruction.*;</p><p class="xmsonormal">import java.lang.constant.*;</p><p class="xmsonormal">import java.lang.invoke.MethodHandles;</p><p class="xmsonormal">import static java.lang.classfile.constantpool.PoolEntry.*;</p><p class="xmsonormal">import static java.lang.constant.ConstantDescs.*;</p><p class="xmsonormal">.</p><p class="xmsonormal">.</p><p class="xmsonormal">.</p><p class="xmsonormal"> // get constant static fields</p><p class="xmsonormal"> List<FieldModel> fields = classModel.fields();</p><p class="xmsonormal"> for (FieldModel fm : fields) {</p><p class="xmsonormal"> Optional<ConstantValueAttribute> cva = fm.findAttribute(Attributes.constantValue());</p><p class="xmsonormal"> if (cva.isPresent()) {</p><p class="xmsonormal"> Utf8Entry utf8 = fm.fieldName();</p><p class="xmsonormal"> String value = formatConstantDesc(cva.constant().constantValue());</p><p class="xmsonormal"> System.out.printf(" Constant field: %s, value: %s%n", utf8.stringValue(), cva);</p><p class="xmsonormal"> }</p><p class="xmsonormal"> }</p><p class="xmsonormal"> </p><p class="xmsonormal">and here is snippet from compilation:</p><p class="xmsonormal"> </p><p class="xmsonormal">./daikon/chicory/Instrument.java:316: error: cannot find symbol</p><p class="xmsonormal"> String value = formatConstantDesc(cva.constant().constantValue());</p><p class="xmsonormal"> ^</p><p class="xmsonormal"> symbol: method constant()</p><p class="xmsonormal"> location: variable cva of type Optional<ConstantValueAttribute></p><p class="xmsonormal"> </p><p class="xmsonormal">Let me know if you need more info. Thanks for the assistance.</p><p class="xmsonormal"> </p><p class="xmsonormal">Mark</p><p class="xmsonormal"> </p><p class="xmsonormal"> </p><div><div style="border:none;border-top:solid #e1e1e1 1.0pt;padding:3.0pt 0in 0in 0in"><p class="xmsonormal"><b>From:</b> Chen Liang <<a href="mailto:chen.l.liang@oracle.com">chen.l.liang@oracle.com</a>> <br><b>Sent:</b> Monday, November 25, 2024 2:49 PM<br><b>To:</b> Mark Roberts <<a href="mailto:markro@cs.washington.edu">markro@cs.washington.edu</a>>; <a href="mailto:classfile-api-dev@openjdk.org">classfile-api-dev@openjdk.org</a><br><b>Subject:</b> Re: [External] : how does one get value of ConstantValueAttribute?</p></div></div><p class="xmsonormal"> </p><div><p class="xmsonormal"><span style="font-size:12.0pt;font-family:Aptos;color:black">This is an interface method, which is implicitly public. You should be able to call it without any problem. If there is a compile error, can you share the snippet of code that you managed to reproduce an error?</span></p></div><div class="MsoNormal" align="center" style="text-align:center"><hr size="2" width="98%" align="center"></div><div id="x_divRplyFwdMsg"><p class="xmsonormal"><b><span style="color:black">From:</span></b><span style="color:black"> Mark Roberts <<a href="mailto:markro@cs.washington.edu">markro@cs.washington.edu</a>><br><b>Sent:</b> Monday, November 25, 2024 4:44 PM<br><b>To:</b> Chen Liang <<a href="mailto:chen.l.liang@oracle.com">chen.l.liang@oracle.com</a>>; <a href="mailto:classfile-api-dev@openjdk.org">classfile-api-dev@openjdk.org</a> <<a href="mailto:classfile-api-dev@openjdk.org">classfile-api-dev@openjdk.org</a>><br><b>Subject:</b> RE: [External] : how does one get value of ConstantValueAttribute?</span> </p><div><p class="xmsonormal"> </p></div></div><div><div><p class="xxmsonormal">Sorry – typo: ‘constant()’</p><p class="xxmsonormal"> </p><div><div style="border:none;border-top:solid #e1e1e1 1.0pt;padding:3.0pt 0in 0in 0in"><p class="xxmsonormal"><b>From:</b> Chen Liang <<a href="mailto:chen.l.liang@oracle.com">chen.l.liang@oracle.com</a>> <br><b>Sent:</b> Monday, November 25, 2024 2:35 PM<br><b>To:</b> Mark Roberts <<a href="mailto:markro@cs.washington.edu">markro@cs.washington.edu</a>>; <a href="mailto:classfile-api-dev@openjdk.org">classfile-api-dev@openjdk.org</a><br><b>Subject:</b> Re: [External] : how does one get value of ConstantValueAttribute?</p></div></div><p class="xxmsonormal"> </p><div><p class="xxmsonormal"><span style="font-size:12.0pt;font-family:Aptos;color:black">Hi Mark,</span></p></div><div><p class="xxmsonormal"><span style="font-size:12.0pt;font-family:Aptos;color:black">I don't understand your question. Nowhere in any document mentions there's a "const" in ConstantValueAttribute. Its Javadoc is available here:</span></p></div><div><p class="xxmsonormal"><span style="font-size:12.0pt;font-family:Aptos;color:black"><a href="https://urldefense.com/v3/__https:/download.java.net/java/early_access/jdk24/docs/api/java.base/java/lang/classfile/attribute/ConstantValueAttribute.html__;!!ACWV5N9M2RV99hQ!LL2vfYLl-_GR0xLXyaydxqZog5OPnJudBuAZUaFkt9ojJHORh2WZryU1DK0bAH9EPsUz1D3nHmNwq16k4EPL2opBEg$">https://download.java.net/java/early_access/jdk24/docs/api/java.base/java/lang/classfile/attribute/ConstantValueAttribute.html</a></span></p></div><div><p class="xxmsonormal"><span style="font-size:12.0pt;font-family:Aptos;color:black">So once you get a ConstantValueAttribute from a field, you can check its constant() accessor, and pattern match to check if it is an IntegerEntry/StringEntry etc.</span></p></div><div><p class="xxmsonormal"><span style="font-size:12.0pt;font-family:Aptos;color:black"> </span></p></div><div><p class="xxmsonormal"><span style="font-size:12.0pt;font-family:Aptos;color:black">Regards,</span></p></div><div><p class="xxmsonormal"><span style="font-size:12.0pt;font-family:Aptos;color:black">Chen Liang</span></p></div><div class="MsoNormal" align="center" style="text-align:center"><hr size="2" width="98%" align="center"></div><div id="x_x_divRplyFwdMsg"><p class="xxmsonormal"><b><span style="color:black">From:</span></b><span style="color:black"> Mark Roberts <<a href="mailto:markro@cs.washington.edu">markro@cs.washington.edu</a>><br><b>Sent:</b> Monday, November 25, 2024 4:17 PM<br><b>To:</b> Chen Liang <<a href="mailto:chen.l.liang@oracle.com">chen.l.liang@oracle.com</a>>; <a href="mailto:classfile-api-dev@openjdk.org">classfile-api-dev@openjdk.org</a> <<a href="mailto:classfile-api-dev@openjdk.org">classfile-api-dev@openjdk.org</a>><br><b>Subject:</b> [External] : how does one get value of ConstantValueAttribute?</span> </p><div><p class="xxmsonormal"> </p></div></div><div><div><p class="xxxmsonormal">ConstantValueAttribute:const() is not public. The documentation implies it is. How do you get the value?</p><p class="xxxmsonormal"> </p><p class="xxxmsonormal">Thanks,</p><p class="xxxmsonormal">Mark</p><p class="xxxmsonormal"> </p></div></div></div></div></div></div></div></body></html>