<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
  <title></title>
</head>
<body bgcolor="#ffffff" text="#000000">
There is a trigger -- you're just not using it.&nbsp; "An assertion in a
static initializer only
occurs when the class is statically initialized. "<br>
<br>
-- Jon<br>
<br>
<br>
Ulf Zibis wrote:
<blockquote cite="mid:4B918EE0.7010709@gmx.de" type="cite">
  <meta content="text/html; charset=ISO-8859-1"
 http-equiv="Content-Type">
  <title></title>
Neal, Keith, thanks for your answer.<br>
  <br>
... but shouldn't javac claim, that there the code in the static block
will be *never reached*, if there is no trigger to run it?<br>
  <br>
-Ulf<br>
  <br>
  <br>
Am 05.03.2010 22:59, schrieb Neal Gafter:
  <blockquote
 cite="mid:15e8b9d21003051359g69bef477k6160fdc75d6bc20e@mail.gmail.com"
 type="cite">
    <div class="gmail_quote">On Fri, Mar 5, 2010 at 1:47 PM, Ulf Zibis <span
 dir="ltr">&lt;<a moz-do-not-send="true" href="mailto:Ulf.Zibis@gmx.de">Ulf.Zibis@gmx.de</a>&gt;</span>
wrote:<br>
    <blockquote class="gmail_quote"
 style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">No
response ?? &nbsp;:-(<br>
    </blockquote>
    <div><br>
Keith's response is correct.&nbsp; An assertion in a method only occurs when
the method is executed.&nbsp; An assertion in a constructor only occurs when
the constructor is called.&nbsp; An assertion in a static initializer only
occurs when the class is statically initialized.&nbsp; Accessing a constant
of the class does not initialize the class.&nbsp; So there is no bug.<br>
    <br>
Cheers,<br>
Neal<br>
    <br>
    </div>
    <blockquote class="gmail_quote"
 style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><br>
I've filed a bug:<br>
      <br>
&nbsp;internal review ID of 1730072<br>
      <br>
      <br>
-Ulf<br>
      <br>
      <br>
      <br>
Am 12.02.2010 15:44, schrieb Ulf Zibis:<br>
      <blockquote class="gmail_quote"
 style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
        <div>
        <div class="h5">Am 12.02.2010 15:06, schrieb Ulf Zibis:<br>
        <blockquote class="gmail_quote"
 style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">Hi,<br>
          <br>
in the following example, I have an assert statement in a static block
of my class.<br>
          <br>
If accessing the static final constants from another class, the static
block is not executed.<br>
This causes the assertions to remain un-proofed, even if -ea -esa is
set.<br>
          <br>
Is that correct ?<br>
        </blockquote>
        <br>
If yes, javac should claim the code as never reached.<br>
        <br>
        <blockquote class="gmail_quote"
 style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
          <br>
IMO, assertions should always run, if -ea -esa is set.<br>
          <br>
-Ulf<br>
          <br>
        </blockquote>
        <br>
-Ulf<br>
        <br>
        <br>
        </div>
        </div>
&gt;From - Fri Feb 12 16:25:03 2010<br>
X-Account-Key: account2<br>
X-UIDL: 5de5c7b81a751aec6aed7ffb66ca9b90<br>
X-Mozilla-Status: 0000<br>
X-Mozilla-Status2: 00000000<br>
X-Mozilla-Keys: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; X-Symantec-TimeoutProtection: 0<br>
X-Symantec-TimeoutProtection: 1<br>
X-Symantec-TimeoutProtection: 2<br>
Return-Path: <a moz-do-not-send="true" class="moz-txt-link-rfc2396E"
 href="mailto:Keith.McGuigan@Sun.COM">&lt;Keith.McGuigan@Sun.COM&gt;</a><br>
X-Flags: 1001<br>
Delivered-To: GMX delivery to <a moz-do-not-send="true"
 href="mailto:ulf.zibis@gmx.de" target="_blank">ulf.zibis@gmx.de</a><br>
Received: (qmail invoked by alias); 12 Feb 2010 15:12:59 -0000<br>
Received: from <a moz-do-not-send="true"
 href="http://brmea-mail-2.Sun.COM" target="_blank">brmea-mail-2.Sun.COM</a>
(EHLO <a moz-do-not-send="true" href="http://brmea-mail-2.sun.com"
 target="_blank">brmea-mail-2.sun.com</a>) [192.18.98.43]<br>
&nbsp;by <a moz-do-not-send="true" href="http://mx0.gmx.net" target="_blank">mx0.gmx.net</a>
(mx002) with SMTP; 12 Feb 2010 16:12:59 +0100<br>
Received: from <a moz-do-not-send="true"
 href="http://fe-amer-09.sun.com" target="_blank">fe-amer-09.sun.com</a>
([192.18.109.79])<br>
&nbsp; &nbsp;by <a moz-do-not-send="true" href="http://brmea-mail-2.sun.com"
 target="_blank">brmea-mail-2.sun.com</a> (8.13.6+Sun/8.12.9) with
ESMTP id o1CFCw62027512<br>
&nbsp; &nbsp;for &lt;<a moz-do-not-send="true" href="mailto:Ulf.Zibis@gmx.de"
 target="_blank">Ulf.Zibis@gmx.de</a>&gt;; Fri, 12 Feb 2010 15:12:58 GMT<br>
MIME-version: 1.0<br>
Content-transfer-encoding: 7BIT<br>
Content-type: text/plain; CHARSET=US-ASCII; format=flowed<br>
Received: from <a moz-do-not-send="true"
 href="http://conversion-daemon.mail-amer.sun.com" target="_blank">conversion-daemon.mail-amer.sun.com</a>
by <a moz-do-not-send="true" href="http://mail-amer.sun.com"
 target="_blank">mail-amer.sun.com</a><br>
(Sun Java(tm) System Messaging Server 7u2-7.04 64bit (built Jul &nbsp;2
2009))<br>
id &lt;<a moz-do-not-send="true"
 href="mailto:0KXQ00800HZH3I00@mail-amer.sun.com" target="_blank">0KXQ00800HZH3I00@mail-amer.sun.com</a>&gt;
for <a moz-do-not-send="true" href="mailto:Ulf.Zibis@gmx.de"
 target="_blank">Ulf.Zibis@gmx.de</a>; Fri,<br>
12 Feb 2010 08:12:58 -0700 (MST)<br>
Received: from [129.150.65.45] ([unknown] [129.150.65.45])<br>
by <a moz-do-not-send="true" href="http://mail-amer.sun.com"
 target="_blank">mail-amer.sun.com</a> (Sun Java(tm) System Messaging
Server 7u2-7.04 64bit<br>
(built Jul &nbsp;2 2009)) with ESMTPSA id &lt;<a moz-do-not-send="true"
 href="mailto:0KXQ00GTLI9L1V60@mail-amer.sun.com" target="_blank">0KXQ00GTLI9L1V60@mail-amer.sun.com</a>&gt;;
Fri,<br>
12 Feb 2010 08:12:58 -0700 (MST)<br>
Date: Fri, 12 Feb 2010 10:12:58 -0500<br>
From: Keith McGuigan <a moz-do-not-send="true"
 class="moz-txt-link-rfc2396E" href="mailto:Keith.McGuigan@Sun.COM">&lt;Keith.McGuigan@Sun.COM&gt;</a><br>
Subject: Re: Assertions in static blocks ?<br>
In-reply-to: &lt;<a moz-do-not-send="true"
 href="mailto:4B756071.4000104@gmx.de" target="_blank">4B756071.4000104@gmx.de</a>&gt;<br>
Sender: <a moz-do-not-send="true" class="moz-txt-link-abbreviated"
 href="mailto:Keith.McGuigan@Sun.COM">Keith.McGuigan@Sun.COM</a><br>
To: Ulf Zibis &lt;<a moz-do-not-send="true"
 href="mailto:Ulf.Zibis@gmx.de" target="_blank">Ulf.Zibis@gmx.de</a>&gt;<br>
Cc: <a moz-do-not-send="true"
 href="mailto:compiler-dev@openjdk.java.net" target="_blank">compiler-dev@openjdk.java.net</a>,
hotspot &lt;<a moz-do-not-send="true"
 href="mailto:hotspot-dev@openjdk.java.net" target="_blank">hotspot-dev@openjdk.java.net</a>&gt;<br>
Message-id: &lt;<a moz-do-not-send="true"
 href="mailto:4B756FFA.9000806@sun.com" target="_blank">4B756FFA.9000806@sun.com</a>&gt;<br>
References: &lt;<a moz-do-not-send="true"
 href="mailto:4B756071.4000104@gmx.de" target="_blank">4B756071.4000104@gmx.de</a>&gt;<br>
User-Agent: Thunderbird 2.0.0.23 (X11/20090817)<br>
X-GMX-Antivirus: 0 (no virus found)<br>
X-GMX-Antispam: 0 (Mail was not recognized as spam);<br>
Detail=5D7Q89H36p77e5KAPs1l6v/Sb97LojnDmtyzoN37OXMt9GpYHsrWRra7o+psEYuNg/dar
        <br>
zWRIb1W0k0rd15IZBf9O4nqjKYX9PrVGG/zPEENchmY89mOrfO0W57R8iRtiMheMiqQP1ym7bl2H
        <br>
PZZzg==V1;<br>
X-GMX-UID: ylpHc/1fPjlsBVAdATU22s0zMTE2Ncn9
        <div class="im"><br>
        <br>
        <br>
Hi Ulf -<br>
        <br>
Accessing a constant static field in a class does not trigger class
initialization, so your initializer is probably just not being run.<br>
        <br>
See <a moz-do-not-send="true"
 href="http://java.sun.com/docs/books/jvms/second_edition/html/Concepts.doc.html#19075"
 target="_blank">http://java.sun.com/docs/books/jvms/second_edition/html/Concepts.doc.html#19075</a>
        <br>
        <br>
-- <br>
- Keith<br>
        <br>
Ulf Zibis wrote:<br>
        </div>
        <blockquote class="gmail_quote"
 style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
          <div class="im">Hi,<br>
          <br>
in the following example, I have an assert statement in a static block
of my class.<br>
          <br>
If accessing the static final constants from another class, the static
block is not executed.<br>
This causes the assertions to remain un-proofed, even if -ea -esa is
set.<br>
          <br>
Is that correct ?<br>
          <br>
          </div>
          <div class="im">IMO, assertions should always run, if -ea
-esa
is set.<br>
          <br>
-Ulf<br>
          <br>
          <br>
          <br>
          </div>
          <div>
          <div class="h5">package sun.nio.cs.ext;<br>
          <br>
import static sun.nio.cs.CharsetMapping.*;<br>
          <br>
/**<br>
&nbsp;*<br>
&nbsp;* @author Ulf Zibis, Cologne CoSoCo.de<br>
&nbsp;*/<br>
class EUC_TWMapping3 extends EUC_TWMapping {<br>
&nbsp; &nbsp;static final short PL0_5_B2C_RANGE = 0x2300; // plane 0, 5 b2c range<br>
&nbsp; &nbsp;static final short PLANE_B2C_RANGE = 0x1f00; // plane 2..4, 6..15
b2c range<br>
          <br>
// TODO: file bug: static block should run, if assertions are enabled.<br>
&nbsp; &nbsp;static {<br>
&nbsp; &nbsp; &nbsp; &nbsp;// assert plane offsets and content<br>
&nbsp; &nbsp; &nbsp; &nbsp;for (int p=0, range, offset=0; p&lt;b2c.length; p++) {<br>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;range = p % 4 == 0 ? PL0_5_B2C_RANGE : PLANE_B2C_RANGE;<br>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;for (int i=range; i&lt;b2c[p].length(); i++)<br>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;assert b2c[p].charAt(i) == UNMAPPABLE_DECODING;<br>
// static block should run, if assertions are enabled. For test
uncomment following line<br>
// &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;System.out.printf("offset: %d, range: %d,
b2c[p].length(): %d%n", offset, range, b2c[p].length());<br>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;assert (offset += range) &lt;= Character.MAX_VALUE + 1;<br>
&nbsp; &nbsp; &nbsp; &nbsp;}<br>
&nbsp; &nbsp;}<br>
          <br>
// WORKAROUND:<br>
// &nbsp; &nbsp;static int offset = 0; // assert from calling context to force
static block to process<br>
// &nbsp; &nbsp;static {<br>
// &nbsp; &nbsp; &nbsp; &nbsp;// assert plane offsets and content<br>
// &nbsp; &nbsp; &nbsp; &nbsp;for (int p=0, range; p&lt;b2c.length; p++) {<br>
// &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;range = p % 4 == 0 ? PL0_5_B2C_RANGE : PLANE_B2C_RANGE;<br>
// &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;for (int i=range; i&lt;b2c[p].length(); i++)<br>
// &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;assert b2c[p].charAt(i) == UNMAPPABLE_DECODING;<br>
//// static block should run, if assertions are enabled. For test
uncomment following line<br>
//// &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;System.out.printf("offset: %d, range: %d,
b2c[p].length(): %d%n", offset, range, b2c[p].length());<br>
// &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;assert (offset += range) &lt;= Character.MAX_VALUE + 1;<br>
// &nbsp; &nbsp; &nbsp; &nbsp;}<br>
//// static block should run, if assertions are enabled. For test
uncomment following line<br>
//// &nbsp; &nbsp; &nbsp; &nbsp;assert false;<br>
// &nbsp; &nbsp;}<br>
}<br>
          <br>
          <br>
package sun.nio.cs.ext;<br>
          <br>
/**<br>
&nbsp;*<br>
&nbsp;* @author Ulf Zibis, Cologne CoSoCo.de<br>
&nbsp;*/<br>
public class AssertTest {<br>
          <br>
&nbsp; &nbsp;public static void main(String... args) {<br>
// static block in EUC_TWMapping3 should run, if assertions are enabled.<br>
&nbsp; &nbsp; &nbsp; &nbsp;System.out.println(EUC_TWMapping3.PLANE_B2C_RANGE);<br>
// WORKAROUND: For test uncomment following line<br>
// &nbsp; &nbsp; &nbsp; &nbsp;assert EUC_TWMapping3.offset &gt; 0; // force assertion,
TODO: JDK bug ?<br>
&nbsp; &nbsp;}<br>
}<br>
          <br>
          <br>
          </div>
          </div>
        </blockquote>
        <br>
        <br>
      </blockquote>
      <br>
    </blockquote>
    </div>
    <br>
  </blockquote>
</blockquote>
<br>
</body>
</html>