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