Assertions in static blocks ?

Ulf Zibis Ulf.Zibis at gmx.de
Fri Feb 12 06:06:41 PST 2010


Hi,

in the following example, I have an assert statement in a static block 
of my class.

If accessing the static final constants from another class, the static 
block is not executed.
This causes the assertions to remain un-proofed, even if -ea -esa is set.

Is that correct ?

IMO, assertions should always run, if -ea -esa is set.

-Ulf



package sun.nio.cs.ext;

import static sun.nio.cs.CharsetMapping.*;

/**
  *
  * @author Ulf Zibis, Cologne CoSoCo.de
  */
class EUC_TWMapping3 extends EUC_TWMapping {
     static final short PL0_5_B2C_RANGE = 0x2300; // plane 0, 5 b2c range
     static final short PLANE_B2C_RANGE = 0x1f00; // plane 2..4, 6..15 
b2c range

// TODO: file bug: static block should run, if assertions are enabled.
     static {
         // assert plane offsets and content
         for (int p=0, range, offset=0; p<b2c.length; p++) {
             range = p % 4 == 0 ? PL0_5_B2C_RANGE : PLANE_B2C_RANGE;
             for (int i=range; i<b2c[p].length(); i++)
                 assert b2c[p].charAt(i) == UNMAPPABLE_DECODING;
// static block should run, if assertions are enabled. For test 
uncomment following line
//            System.out.printf("offset: %d, range: %d, b2c[p].length(): 
%d%n", offset, range, b2c[p].length());
             assert (offset += range) <= Character.MAX_VALUE + 1;
         }
     }

// WORKAROUND:
//    static int offset = 0; // assert from calling context to force 
static block to process
//    static {
//        // assert plane offsets and content
//        for (int p=0, range; p<b2c.length; p++) {
//            range = p % 4 == 0 ? PL0_5_B2C_RANGE : PLANE_B2C_RANGE;
//            for (int i=range; i<b2c[p].length(); i++)
//                assert b2c[p].charAt(i) == UNMAPPABLE_DECODING;
//// static block should run, if assertions are enabled. For test 
uncomment following line
////            System.out.printf("offset: %d, range: %d, 
b2c[p].length(): %d%n", offset, range, b2c[p].length());
//            assert (offset += range) <= Character.MAX_VALUE + 1;
//        }
//// static block should run, if assertions are enabled. For test 
uncomment following line
////        assert false;
//    }
}


package sun.nio.cs.ext;

/**
  *
  * @author Ulf Zibis, Cologne CoSoCo.de
  */
public class AssertTest {

     public static void main(String... args) {
// static block in EUC_TWMapping3 should run, if assertions are enabled.
         System.out.println(EUC_TWMapping3.PLANE_B2C_RANGE);
// WORKAROUND: For test uncomment following line
//        assert EUC_TWMapping3.offset > 0; // force assertion, TODO: 
JDK bug ?
     }
}





More information about the compiler-dev mailing list