<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Windows-1252">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Hi Mark,</div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
You are calling constant() on an Optional. You should call cva.get().constant().constantValue() instead.</div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Chen</div>
<div id="appendonsend"></div>
<hr style="display:inline-block;width:98%" tabindex="-1">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" style="font-size:11pt" color="#000000"><b>From:</b> Mark Roberts <markro@cs.washington.edu><br>
<b>Sent:</b> Monday, November 25, 2024 5:06 PM<br>
<b>To:</b> Chen Liang <chen.l.liang@oracle.com>; classfile-api-dev@openjdk.org <classfile-api-dev@openjdk.org><br>
<b>Subject:</b> RE: [External] : how does one get value of ConstantValueAttribute?</font>
<div> </div>
</div>
<style>
<!--
@font-face
        {font-family:"Cambria Math"}
@font-face
        {font-family:Calibri}
@font-face
        {font-family:Aptos}
p.x_MsoNormal, li.x_MsoNormal, div.x_MsoNormal
        {margin:0in;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif}
a:link, span.x_MsoHyperlink
        {color:blue;
        text-decoration:underline}
p.x_xmsonormal, li.x_xmsonormal, div.x_xmsonormal
        {margin:0in;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif}
p.x_xxmsonormal, li.x_xxmsonormal, div.x_xxmsonormal
        {margin:0in;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif}
span.x_EmailStyle25
        {font-family:"Calibri",sans-serif;
        color:windowtext}
.x_MsoChpDefault
        {font-size:10.0pt}
@page WordSection1
        {margin:1.0in 1.0in 1.0in 1.0in}
div.x_WordSection1
        {}
-->
</style>
<div lang="EN-US" link="blue" vlink="purple" style="word-wrap:break-word">
<div class="x_WordSection1">
<p class="x_MsoNormal">Here is snippet from my source:</p>
<p class="x_MsoNormal"> </p>
<p class="x_MsoNormal">import java.lang.classfile.*;</p>
<p class="x_MsoNormal">import java.lang.classfile.attribute.*;</p>
<p class="x_MsoNormal">import java.lang.classfile.attribute.ConstantValueAttribute;</p>
<p class="x_MsoNormal">import java.lang.classfile.Attributes;</p>
<p class="x_MsoNormal">import java.lang.classfile.components.ClassPrinter;</p>
<p class="x_MsoNormal">import java.lang.classfile.constantpool.*;</p>
<p class="x_MsoNormal">import java.lang.classfile.instruction.*;</p>
<p class="x_MsoNormal">import java.lang.constant.*;</p>
<p class="x_MsoNormal">import java.lang.invoke.MethodHandles;</p>
<p class="x_MsoNormal">import static java.lang.classfile.constantpool.PoolEntry.*;</p>
<p class="x_MsoNormal">import static java.lang.constant.ConstantDescs.*;</p>
<p class="x_MsoNormal">.</p>
<p class="x_MsoNormal">.</p>
<p class="x_MsoNormal">.</p>
<p class="x_MsoNormal">      // get constant static fields</p>
<p class="x_MsoNormal">      List<FieldModel> fields = classModel.fields();</p>
<p class="x_MsoNormal">      for (FieldModel fm : fields) {</p>
<p class="x_MsoNormal">        Optional<ConstantValueAttribute> cva = fm.findAttribute(Attributes.constantValue());</p>
<p class="x_MsoNormal">        if (cva.isPresent()) {</p>
<p class="x_MsoNormal">          Utf8Entry utf8 = fm.fieldName();</p>
<p class="x_MsoNormal">          String value = formatConstantDesc(cva.constant().constantValue());</p>
<p class="x_MsoNormal">          System.out.printf("  Constant field: %s, value: %s%n", utf8.stringValue(), cva);</p>
<p class="x_MsoNormal">        }</p>
<p class="x_MsoNormal">      }</p>
<p class="x_MsoNormal"> </p>
<p class="x_MsoNormal">and here is snippet from compilation:</p>
<p class="x_MsoNormal"> </p>
<p class="x_MsoNormal">./daikon/chicory/Instrument.java:316: error: cannot find symbol</p>
<p class="x_MsoNormal">          String value = formatConstantDesc(cva.constant().constantValue());</p>
<p class="x_MsoNormal">                                                                               ^</p>
<p class="x_MsoNormal">  symbol:   method constant()</p>
<p class="x_MsoNormal">  location: variable cva of type Optional<ConstantValueAttribute></p>
<p class="x_MsoNormal"> </p>
<p class="x_MsoNormal">Let me know if you need more info.  Thanks for the assistance.</p>
<p class="x_MsoNormal"> </p>
<p class="x_MsoNormal">Mark</p>
<p class="x_MsoNormal"> </p>
<p class="x_MsoNormal"> </p>
<div>
<div style="border:none; border-top:solid #e1e1e1 1.0pt; padding:3.0pt 0in 0in 0in">
<p class="x_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 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="x_MsoNormal"> </p>
<div>
<p class="x_MsoNormal"><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="x_MsoNormal" align="center" style="text-align:center">
<hr size="2" width="98%" align="center">
</div>
<div id="x_divRplyFwdMsg">
<p class="x_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 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="x_MsoNormal"> </p>
</div>
</div>
<div>
<div>
<p class="x_xmsonormal">Sorry – typo:  ‘constant()’</p>
<p class="x_xmsonormal"> </p>
<div>
<div style="border:none; border-top:solid #e1e1e1 1.0pt; padding:3.0pt 0in 0in 0in">
<p class="x_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: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="x_xmsonormal"> </p>
<div>
<p class="x_xmsonormal"><span style="font-size:12.0pt; font-family:Aptos; color:black">Hi Mark,</span></p>
</div>
<div>
<p class="x_xmsonormal"><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="x_xmsonormal"><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="x_xmsonormal"><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="x_xmsonormal"><span style="font-size:12.0pt; font-family:Aptos; color:black"> </span></p>
</div>
<div>
<p class="x_xmsonormal"><span style="font-size:12.0pt; font-family:Aptos; color:black">Regards,</span></p>
</div>
<div>
<p class="x_xmsonormal"><span style="font-size:12.0pt; font-family:Aptos; color:black">Chen Liang</span></p>
</div>
<div class="x_MsoNormal" align="center" style="text-align:center">
<hr size="2" width="98%" align="center">
</div>
<div id="x_x_divRplyFwdMsg">
<p class="x_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: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="x_xmsonormal"> </p>
</div>
</div>
<div>
<div>
<p class="x_xxmsonormal">ConstantValueAttribute:const() is not public.  The documentation implies it is.  How do you get the value?</p>
<p class="x_xxmsonormal"> </p>
<p class="x_xxmsonormal">Thanks,</p>
<p class="x_xxmsonormal">Mark</p>
<p class="x_xxmsonormal"> </p>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>